dify工作流学习总结

6,339 阅读4分钟

基于dify工作流编排总结和对比langchain

开始节点

工作流的入口

设置初始参数:后续节点可以访问该参数

疑问点:

后续节点不能对初始参数赋值,然后全局可以访问

LLM节点

工作流的核心节点

意图识别,在客服对话情景中,对用户问题进行意图识别和分类,导向下游不同的流程。

文本生成,在文章生成情景中,作为内容生成的节点,根据主题、关键词生成符合的文本内容。

内容分类,在邮件批处理情景中,对邮件的类型进行自动化分类,如咨询/投诉/垃圾邮件。

等等

dify节点输出结构

只支持字符串类型,如果想返回结构化数据(JSON),需要在prompt中说明返回格式及参数, LLM节点后面添加代码执行器 解析这个字符串,输出变量,后续才更方便使用判断节点

image-20240614184158773.png

疑问点:

不能直接生成结构化数据

输出的变量只能后续节点使用

知识检索节点

可以添加多个知识库

可以配置N选1路召回,或者多路召回

疑问点:

未对问题进行优化,在N选1路召回的时候,可能查询到错误的知识库

优化方式:多个维度生成相似问题;复杂问题分多个子问题

问题分类

常见的使用情景包括客服对话意图分类、产品评价分类、邮件批量分类

  • 分类 1 :与售后相关的问题
  • 分类 2:与产品操作使用相关的问题
  • 分类 3 :其他问题

每个分类配置其他节点

疑问点:

根据每次用户输入或者在加上聊天历史进行问题分类,可能出现打断核心流程

例如,当前聊天在信息收集的流程里面,客户一句话导致问题分类偏离了信息收集的流程

优化的方向:

添加一个变量用来记录上次问题分类的流程,当前用户问题经过问题分类的结果和上一次问题分类进行逻辑判断

条件分支

条件节点前可以放LLM节点、参数提取节点

根据上面节点传递的结果参数进行判断

代码执行

代码执行节点前可以是

LLM节点:可以对输出参数解析结构化输出、数学计算、可以过滤数据等等

参数提取节点

模板转换

将上一个输出(多参数),汇总成一个特定格式。

image.png

  • 适用多输出信息拼接成完成文本
  • 知识检索节点获取元数据信息拼接格式

变量聚合

将多路分支的变量聚合未一个变量,实现下游节点统一配置。

image.png

使用场景:

  • 问题分类节点
  • 分支节点

迭代节点

接收一个数组参数,迭代节点循环处理数组的每个元素,然后输出最终结果

image.png

参数提取

目的是获取结构化数据,用户后续的工具调用或者HTTP请求参数

image.png

上述是dify核心的节点功能,通过节点协作实现完整的功能。

总结

配置一套符合整个业务需求的工作流

  • 将整个业务流程进行分解
  • 将流程进行串联(分类、判断等等)
  • 熟悉dify每个节点的功能和应用场景
  • 评估配置的流程是否符合预期

使用dify流程节点几乎能够实现大部分工作流的功能,但是当功能组件化的时候,一些特殊业务场景问题解决就比较麻烦。

拓展

dify目前缺少

  • 隐私和安全
  • 评估

隐私和安全

  • 审核链(敏感信息检测可能包含仇恨、暴力等内容文本),通过专属的小模型
  • 提示词注入识别,通过专属的小模型
  • 信息脱敏,通过Presidio开源的SDK

评估

langsmith和langfuse都有评估的功能。

评估目的

大模型开发过程中,我们经常想知道怎么写提示词或者使用那个LLM,实现最好的稳定性、准确性的交互效果和低延迟、低成本的体验。

设计评估的流程
  • 定义目标任务。
  • 创建数据集,您的评估标准可能需要也可能不需要数据集中的预期输出。
  • 创建评估器,配置评估器来对您的 LLM 应用程序的输出进行评分,有时根据预期输出进行评分。
  • 运行评估并查看结果。

image.png