大模型应用编排工具Dify之常用编排组件

1.前言

dify的核心能力有:支持接入常见的 LLM、工作流编排、知识库和聊天助手等,架构图如下:

在这里插入图片描述

本文将结合实际项目落地经验,针对工作流编排中的常用编排组件进行介绍,以及如何在后端调用工作流编排。

2.落地案例

某 DevOps智能助手,可以通过自然语言对话回答常见运维问题和自动查询模型关联的跑数任务状态,工作流编排如下:

在这里插入图片描述

上图中,省略了开始组件,直接从意图识别开始。

在意图识别这里需要借助 LLM的能力识别用户想问什么,在这里最主要的是问模型管理的跑数任务状态,其次询问运维问题和通用业务问题。其中运维问题和业务问题都需要项目地提供对应的知识库作为支撑,否则大模型只会回答通用的内容,作用不大。

重点说一下问跑数任务分支:首先,从用户问题提取模型名称、日期批次和平台类型作为参数;其次,需要对模型名称进行校验,通过后继续;然后,根据平台类型调用需要的接口;最后,把查询结果作为提示词的一部分给 LLM,拿到答复后进行格式化输出。

3.编排组件

这里对工作流编排中常用的:LLM、问题分类器、知识检索和代码执行等组件进行介绍。

3.1 LLM

调用大语言模型回答问题或者对自然语言进行处理,需要设置模型、选择上下文、系统提示词和用户提示词等。

系统提示词(System Prompt):

  • 样例

    你是一个经验丰富的数据建模工程师,任务是根据需求标题、需求描述分析数据模型结构,生成数据模型的DDL语句。

  • 定义

    作为输入对话框的一种初始指令,通常用于引导模型以某种方式或风格来运行。它有助于设定模型整体行为的框架或指导。一般由服务提供者或开发人员指定,而不是终端用户指定。

  • 作用

    为对话提供高层指导。

    定义模型的整体行为约束、告诉模型它的角色和责任、控制全局语气、写作风格(正式、非正式)、以及模型的细节化程度。

用户提示词(User Prompt):

  • 样例

    以下是你的思维链和工作流程:

    1、需求内容分析

    • 根据需求标题和需求描述,推断数据表包含的字段;

    • 根据业务逻辑确定合适的主键字段。

    2、DDL语句生成

    • 按照Markdown语法规则,输出完整的DDL语句;

    • DDL语句中包括数据表的英文名、中文名、字段英文名(全大写)、字段中文名(放在comment中)、字段类型、长度、精度、是否允许空;

    3、字段长度设置

    • 字符型字段长度按照下面标准进行设置,体现在DDL语句中;

    • 中文字段名中包含用户名、姓名、编码、号码、业务类型、名称等相关文字,字段长度在50个字符以上;

  • 定义

    由终端用户输入的实际请求或问题内容,代表了用户的意图和需求,通常是直接与模型交互时的动态输入。

  • 作用

    提供上下文,明确单次交互的目标,提出问题或任务,模型基于用户需求给出对应的回答。

3.2 问题分类器

定义用户问题的分类条件,LLM能够根据分类描述定义对话的进展方式,需要设置模型、输入变量和分类依据等。

比如 下面几个分类:

  • 检查SQL语法逻辑是否有误

  • 语义找表,找一张表,找表,数据表,包含哪些字段

  • 根据模型名查找关联的任务名

3.3 代码执行

执行一段 python或 nodejs代码实现自定义逻辑,需要设置输入变量、出数变量和编写代码片段等。

比如 下面这个代码片段:

def main() -> dict:
    return {
        "result": datetime.now().strftime('%Y%m%d')
    }

上面的代码根据一定规则生成当前时间,后续可以用于参数向后传递。

3.4 参数提取器

利用 LLM从自然语言内推理提取出结构化参数,用于后置的工具调用或 http请求,需要填写输入变量、选择模型、创建参数和编写指令等。

比如 下面的这个提取参数的指令:

这是一段城市缩写、城市名称、城市编号的文本,格式如下:
    城市缩写&城市名称&城市编号
实际数据如下:
    ZG&自贡&10
    CD&成都&20
    MY&绵阳&30
    LS&乐山&40
    GH&广汉&50
    BZ&巴中&60
    ...
    DY&德阳&200

你是一名大数据领域的运维专家,需要提取
{{#context#}}
这段话中的平台 platform,表名 tableName,batchNo,城市,并把城市转成缩写存到变量 city里面。
tableName可能会有多个,用 ","进行连接。

如果参数提取异常,你可以给参数设置如下默认值:
  platform=datacenter,city=CD

上面这段指令不仅给出了如何提取参数,还指定了参数的映射规则,以及默认值。

3.5 HTTP请求

允许通过 http协议发送 get、post和put等请求,需要填写URL、选择请求方式和填写请求体等。

3.6 直接回复

定义一个聊天对话框的回复内容,可以引用前面步骤的结果和参数,对话类的都要用这个组件输出内容给用户。

3.7 知识检索

从知识库中查询与用户问题相关的内容,与知识库搭配使用,可以显著增强大模型的业务知识。

3.8 条件分支

根据 if/else 条件将 workflow 拆分成两个分支,对于开发人员来说再熟悉不过了,落地案例中用于参数校验、接口调用结果检查和按平台走不同的业务流程等。

4.后台调用编排流程

在流程编排界面点击左侧的 访问API 可以看到后端服务如何调用该编排流程。首次打开该界面,需要点击右上角的 API密钥 创建访问密钥,后面需要配置到调用方。如下:

在这里插入图片描述

上图中右侧有一个 curl请求样例,可以用于测试编排流程。

5.总结

本文主要通过一个实际落地案例,介绍工作流编排中常用的 问题分类器、参数提取器、知识库和 LLM等组件,其中着重介绍了系统提示词和用户提示词,最后对后台服务如何调用工作流编排进行了说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu16.04 安装OpenCV4.5.4 避坑

Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包,选择source版本。…

pytest执行报错:found no collectors

今天在尝试使用pytest运行用例的时候出现报错:found no collectors;从两个方向进行排查,一是看文件名和函数名是不是符合规范,命名要是"test_*"格式;二是是否存在修改文件名的情况,如果修改过文件…

嵌入式知识点总结 C/C++ 专题提升(七)-位操作

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值,不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…

两台局域网电脑通过飞秋传输大文件失败的解决方案

问题描述: 局域网两台电脑之间传输大文件(超过20G),不想太复杂,就各装个飞秋。但是通过直接发送文件发现总是失败,一会就中断了。 解决方法: 主界面上有一个文件共享的按钮,通过文…

Picsart美易照片编辑器和视频编辑器

使用Picsart美易照片编辑器和视频编辑器,将您的创意变为现实。制作专业水准的拼贴画、设计并添加贴纸、快速移除和更换背景,体验流行编辑,比如 黄金时刻、镜中自拍、复古噪点滤镜或千禧滤镜。Picsart美易是一款一体式编辑器,拥有众…

AR智慧点巡检系统探究和技术方案设计

一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…

游戏设备升级怎么选?RTX4070独显,ToDesk云电脑更具性价比

过新年、添喜气!正逢节期来临不知道各位是否都跟小编一样在考虑购置生活中的各样所需呐? 25年可谓是3A游戏大作之年,例如《GTA6》《文明7》《死亡搁浅2》《刺客信条:影》下半年落地的《塞尔达传说:新篇章》《生化危机9…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

怎么使用python 调用高德地图api查询位置和导航?

环境: python 3.10 问题描述: 怎么使用python 调用高德地图api查询位置和导航? 解决方案: 要使用Python调用高德地图API查询位置和导航,需要先注册高德开发者账号并获取API Key。以下是基本步骤: 1. 注册高德开…

【阿里云】使用docker安装nginx后可以直接访问

一、创建目录 mkdir -p config/{cert,conf.d} html logs二、上传nginx.conf的配置文件 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/ngin…

Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例)

Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例) 一、部署智能合约 1、编写智能合约 此处用最简单的HelloWorld合约作为例子 包含两个方法和一个构造函数 构造函数:当合约部署的时候 执行构造函数 将…

DearMom婴儿车:书籍点亮希望,为乡村留守儿童架起知识桥梁

近日,DearMom婴儿车携手中国社会福利基金会来到河南上蔡赵庄小学,成功举办了一场意义非凡的公益助学活动,这是他们第二次以实际行动诠释企业社会责任。此次活动,品牌方致力于以书籍为媒介,为乡村留守儿童开拓视野、丰富…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

阿里云-银行核心系统转型之业务建模与技术建模

业务领域建模包括业务建模和技术建模,整体建模流程图如下: 业务建模包括业务流程建模和业务对象建模 业务流程建模:通过对业务流程现状分析,结合目标核心系统建设能力要求,参考行业建 模成果,形成结构化的…

吴恩达深度学习——如何实现神经网络

来自吴恩达深度学习,仅为本人学习所用。 文章目录 神经网络的表示计算神经网络的输出激活函数tanh选择激活函数为什么需要非激活函数双层神经网络的梯度下降法 随机初始化 神经网络的表示 对于简单的Logistic回归,使用如下的计算图。 如果是多个神经元…

【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 创建并设置crates.io账号 在发布任何 crate 之前,你需要在 crates.io并…

13 网络编程

1 网络基础 1.1 什么是网络 把分布在不同地理区域的计算机、外部硬件设备用通信线路互连成一个规模大、功能强的网络系统,使系统的各个终端可以方便地互相传递信息,共享硬件、软件、数据信息等资源。 按照覆盖范围大小,网络可以分为&#x…

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中&#xff0c…

第18个项目:微信开发入门:获取access_token的Python源码

源码下载地址:https://download.csdn.net/download/mosquito_lover1/90301829 功能特点: 输入AppID和AppSecret,点击按钮后异步获取access_token 1、自动保存功能: 当用户输入或修改 AppID 和 AppSecret 时自动保存 获取到新的 access_token 时自动保存 所有数据都保存在…

ESP8266 MQTT服务器+阿里云

MQTT私有平台搭建(EMQX 阿里云) 阿里云服务器 EMQX 搭建私有MQTT平台 1、搜索EMQX开源版本 2、查看各版本EMQX支持的UBUNTU版本 3、查看服务器Ubuntu版本 4、使用APT安装模式 5、按照官网指示安装并启动 6、下载安装MQTTX测试工具 7、设置云服务…