基于dify工作流编排总结和对比langchain
开始节点
工作流的入口
设置初始参数:后续节点可以访问该参数
疑问点:
后续节点不能对初始参数赋值,然后全局可以访问
LLM节点
工作流的核心节点
意图识别,在客服对话情景中,对用户问题进行意图识别和分类,导向下游不同的流程。
文本生成,在文章生成情景中,作为内容生成的节点,根据主题、关键词生成符合的文本内容。
内容分类,在邮件批处理情景中,对邮件的类型进行自动化分类,如咨询/投诉/垃圾邮件。
等等
dify节点输出结构
只支持字符串类型,如果想返回结构化数据(JSON),需要在prompt中说明返回格式及参数,
LLM节点
后面添加代码执行器
解析这个字符串,输出变量,后续才更方便使用判断节点
疑问点:
不能直接生成结构化数据
输出的变量只能后续节点使用
知识检索节点
可以添加多个知识库
可以配置N选1路召回,或者多路召回
疑问点:
未对问题进行优化,在N选1路召回的时候,可能查询到错误的知识库
优化方式:多个维度生成相似问题;复杂问题分多个子问题
问题分类
常见的使用情景包括客服对话意图分类、产品评价分类、邮件批量分类等
- 分类 1 :与售后相关的问题
- 分类 2:与产品操作使用相关的问题
- 分类 3 :其他问题
每个分类配置其他节点
疑问点:
根据每次用户输入或者在加上聊天历史进行问题分类,可能出现打断核心流程
例如,当前聊天在信息收集的流程里面,客户一句话导致问题分类偏离了信息收集的流程
优化的方向:
添加一个变量用来记录上次问题分类的流程,当前用户问题经过问题分类的结果和上一次问题分类进行逻辑判断
条件分支
条件节点前可以放LLM节点、参数提取节点
根据上面节点传递的结果参数进行判断
代码执行
代码执行节点前可以是
LLM节点:可以对输出参数解析结构化输出、数学计算、可以过滤数据等等
参数提取节点
模板转换
将上一个输出(多参数),汇总成一个特定格式。
- 适用多输出信息拼接成完成文本
- 知识检索节点获取元数据信息拼接格式
变量聚合
将多路分支的变量聚合未一个变量,实现下游节点统一配置。
使用场景:
- 问题分类节点
- 分支节点
迭代节点
接收一个数组参数,迭代节点循环处理数组的每个元素,然后输出最终结果
参数提取
目的是获取结构化数据,用户后续的工具调用或者HTTP请求参数
上述是dify核心的节点功能,通过节点协作实现完整的功能。
总结
配置一套符合整个业务需求的工作流
- 将整个业务流程进行分解
- 将流程进行串联(分类、判断等等)
- 熟悉dify每个节点的功能和应用场景
- 评估配置的流程是否符合预期
使用dify流程节点几乎能够实现大部分工作流的功能,但是当功能组件化的时候,一些特殊业务场景问题解决就比较麻烦。
拓展
dify目前缺少
- 隐私和安全
- 评估
隐私和安全
- 审核链(敏感信息检测可能包含仇恨、暴力等内容文本),通过专属的小模型
- 提示词注入识别,通过专属的小模型
- 信息脱敏,通过Presidio开源的SDK
评估
langsmith和langfuse都有评估的功能。
评估目的
大模型开发过程中,我们经常想知道怎么写提示词或者使用那个LLM,实现最好的稳定性、准确性的交互效果和低延迟、低成本的体验。
设计评估的流程
- 定义目标任务。
- 创建数据集,您的评估标准可能需要也可能不需要数据集中的预期输出。
- 创建评估器,配置评估器来对您的 LLM 应用程序的输出进行评分,有时根据预期输出进行评分。
- 运行评估并查看结果。