大模型应用编排工具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代码实现自定义逻辑,需要设置输入变量、出数变量和编写代码片段等。

比如 下面这个代码片段:

python 复制代码
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等组件,其中着重介绍了系统提示词和用户提示词,最后对后台服务如何调用工作流编排进行了说明。

相关推荐
DianSan_ERP1 小时前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
在人间耕耘1 小时前
HarmonyOS Vision Kit 视觉AI实战:把官方 Demo 改造成一套能长期复用的组件库
人工智能·深度学习·harmonyos
够快云库1 小时前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
Eloudy2 小时前
CHI 开发备忘 08 记 -- CHI spec 08
人工智能·arch·hpc
homelook2 小时前
Transformer与电池管理系统(BMS)的结合是当前 智能电池管理 的前沿研究方向
人工智能·深度学习·transformer
ZPC82102 小时前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82102 小时前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
ssshooter2 小时前
免费和付费 AI API 选择指南
人工智能·aigc·openai
掘金酱2 小时前
「寻找年味」 沸点活动|获奖名单公示🎊
前端·人工智能·后端