基于 Dify 平台构建大模型应用

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

--- 《Dify 中文手册》

功能介绍

应用

在 Dify 中,一个应用是指基于 GPT 等大语言模型构建的实际场景应用。通过创建应用,你可以将 AI 技术应用于特定的需求。

Dify 中提供了四种应用类型:

  1. 聊天助手:基于 LLM 构建对话式交互的助手
  2. 文本生成:构建面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等
  3. Agent:能够分解任务、推理思考、调用工具的对话式智能助手
  4. 工作流:基于流程编排的方式定义更加灵活的 LLM 工作流

工作流

工作流通过逻辑清晰的多步步骤(节点)完成复杂的任务,在降低系统复杂度的同时,也减少了对提示词工程和模型推理能力的依赖,提高了 LLM 应用面向复杂任务的性能,提升了系统的可解释性、稳定性和容错性。

Dify 支持 chatflowworkflow 两种工作流。chatflow 运用在聊天助手应用,workflow 运用在工作流应用。两种工作流主要区别如下:

  1. 支持节点的差异:“直接回复”节点仅在 chatflow 中可用,“结束”节点仅在 workflow 中可用
  2. 支持变量的差异:内置的系统变量不完全相同。另外,会话变量仅在 chatflow 中可用
  3. 是否支持记忆:chatflow 内置聊天记忆,用于存储和传递多轮对话的历史消息,可在 LLM 、问题分类器等节点内开启,workflow 不支持记忆。

工作流节点

节点是工作流中的关键构成,通过连接不同功能的节点,执行工作流的一系列操作。

开始

开始节点设置初始参数,用于存储用户输入,并传递到后续节点。支持的数据类型包括:短文本、长文本、下拉选型、数字、单文件和文件列表。

开始

条件分支

条件分支节点使用 if/else 条件语句,将工作流拆分成多个分支,从而执行不同的流程。

条件分支

问题分类器

借助 LLM 的推理能力,通过定义分类描述,问题分类器节点能够根据用户输入选择与之相匹配的分类。

问题分类器

LLM

LLM 节点调用大语言模型回答问题或者对自然语言进行处理。

LLM

模板转换

模板转换节点借助 Jinja2 的 Python 模板语言灵活地对输入变量进行数据转换、文本处理等操作,然后在下一个节点使用该输出变量。

模板转换

变量聚合器

变量聚合器节点是工作流程中的一个关键节点,它负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变量,避免下游节点重复定义。

变量聚合器

结束

结束节点定义一个 workflow 流程结束的最终输出内容。

结束

除了以上节点,还有一些节点也非常好用,如:代码执行节点,代码执行节点为处理变量实现特定逻辑提供了一种更加灵活的方式,支持 Python3 和 JavaScript 两种代码。

代码执行

更多节点见:工作流节点

基于 workflow 的应用示例

违规内容识别器

参考资料

  1. Dify 中文手册(https://docs.dify.ai/zh-hans)