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

相关推荐
AI_Tool几秒前
纳米AI搜索官网 - 新一代智能答案引擎
人工智能·搜索引擎
Damon小智几秒前
合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
图像处理·人工智能·深度学习·机器学习·ai·自动化·docflow
小虚竹1 分钟前
用AI辅导侄女大学物理的质点运动学问题
人工智能·chatgpt
猿类崛起@2 分钟前
百度千帆大模型实战:AI大模型开发的调用指南
人工智能·学习·百度·大模型·产品经理·大模型学习·大模型教程
sdaxue.com2 分钟前
人工智能就业方向及前景以及薪资水平
人工智能
寻道码路3 分钟前
探秘 Docling:多格式文档解析转换大揭秘,赋能 AI 应用新生态
人工智能·aigc·ai编程
健忘的派大星4 分钟前
【AI大模型】根据官方案例使用milvus向量数据库打造问答RAG系统
人工智能·ai·语言模型·llm·milvus·agi·rag
黑客-雨5 分钟前
从零开始:如何用Python训练一个AI模型(超详细教程)非常详细收藏我这一篇就够了!
开发语言·人工智能·python·大模型·ai产品经理·大模型学习·大模型入门
是Dream呀5 分钟前
引领AI发展潮流:打造大模型时代的安全与可信——CCF-CV企业交流会走进合合信息会议回顾
人工智能·安全·生成式ai
日出等日落6 分钟前
小白也能轻松上手的GPT-SoVITS AI语音克隆神器一键部署教程
人工智能·gpt