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

### Dify 编排使用指南 #### 设计工作流 Dify 提供了一个可视化的编排环境——Dify Orchestration Studio,在这里用户能够设计和测试生成式AI应用的工作流[^4]。通过拖拽组件的方式,用户可以轻松创建复杂的应用逻辑。 #### 组件介绍 在Dify Orchestration Studio中,有多种预定义的组件可供选择,这些组件涵盖了数据处理、模型调用以及结果展示等功能模块。每种类型的组件都具有特定的功能属性设置界面,允许开发者根据实际需求调整参数配置。 #### 测试与调试 为了确保所构建的工作流正常运行,平台内置了强大的测试机制。用户可以直接在编辑器内执行整个流程或者单独环节来进行即时验证,并查看详细的日志记录以便于排查可能出现的问题。 #### 发布上线 当完成本地开发并经过充分测试之后,可以通过简单几步操作将项目部署至云端服务器上实现在线服务化。这不仅简化了运维过程还提高了系统的可扩展性和稳定性。 ```json { "version": "1.0", "name": "Sample Workflow", "description": "A sample workflow created using Dify.", "steps": [ { "type": "data_input", "config": {} }, { "type": "model_inference", "config": { "model_id": "your_model_identifier" } }, { "type": "result_output", "config": {} } ] } ``` 此JSON片段展示了如何定义一个基本的工作流结构,包括输入数据、调用指定ID的大规模语言模型进行推理计算最后输出结果三个主要阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值