前言本文对比了 Dify 中工作流可视化业务逻辑编排与 Agent自主决策AI的区别与演进关系并详细演示了知识问答助手的完整实战流程。从创建知识库分段、索引、检索设置入手逐步构建工作流包括开始节点、意图识别节点通过代码判断问候/人工/专业问题、选择器节点分流、知识库检索节点、判断检索结果节点有结果走RAG大模型无结果走闲聊大模型以及最终发布和运行测试。实战覆盖了规则回复、人工转接、专业问答和通用闲聊等多种场景展示了工作流的灵活性与可控性。一、工作流工作流是业务逻辑的可视化执行工作流作用它将一个复杂的任务分解成一系列可管理的、按顺序或按条件执行的步骤并通过图形化的界面将这些步骤连接起来。二、Agent自主决策的AI助手三、工作流与Agent两者不是对立而是演进四、Difly的两种工作流类型五、创建工作流的标准流程六、知识问答助手实战6.1 创建知识库选择文件点击下一步分段设置索引方式检索设置保存并处理前往文档回到知识库菜单6.2 创建工作流6.2.1 创建空白应用填写信息选择开始节点用户输入6.2.2 开始节点6.2.3 意图识别节点在画布中右键选择添加节点 -- 执行代码意图识别代码实现判断用户是否属于打招呼用语、或者找人工、还是询问电商知识需要RAG检索代码如下importrandomdefmain(query:str)-dict: 基于固定短语匹配的跨境电商问答处理器 Args: query: 用户输入的问题 Returns: Dict: 包含回复类型、回复内容信息的字典 try:# 错误处理1检查输入是否为空或仅包含空白字符ifnotqueryornotquery.strip():return{type:error,response:请输入您的问题,need_rag:False,original_query:query}# 去除首尾空格queryquery.strip()# ---------- 打招呼相关的固定短语 ----------greeting_phrases{基本问候:[你好,您好,嗨,hi,hello,哈喽,早上好,下午好,晚上好,喂,在吗,在不在],询问身份:[你是谁,你叫什么,是什么机器人,你是人工吗,你是真人吗],询问状态:[你在吗,在干嘛,忙吗],询问能力:[你能做什么,你会什么,可以帮我吗,能回答问题吗],开始对话:[开始,我们开始吧,咨询一下,问个问题],测试类:[test,测试,ping]}greeting_response你好很高兴为您服务我是您的跨境电商学习小助手专业为你答疑解惑。# ---------- 礼貌用语感谢 ----------thank_phrases{感谢词:[谢谢,多谢,感谢,thanks,thank you,thx,谢谢了,谢谢你,非常感谢]}# ---------- 礼貌用语告别 ----------goodbye_phrases{告别词:[再见,拜拜,bye,goodbye,回头见,88,再会,告辞,退下]}polite_responses{thank:{default:不客气很高兴能帮到您请问还有其他跨境电商方面的问题吗,random:[您太客气了,不用谢这是我应该做的,随时为您服务]},goodbye:{default:再见祝您生活愉快欢迎随时回来咨询。,random:[拜拜,下次见,祝您购物愉快再见]}}# ---------- 人工服务相关短语 ----------human_service_phrases{直接要求:[人工,人工客服,转人工,找人工,人工服务],转接相关:[转接人工,接人工,转人工客服,帮我转人工],真人服务:[真人,真人客服,活人,真人员工],客服相关:[客服,客服人员,在线客服],老师相关:[老师,导游,助教],专业服务:[专家,专员,人工解答],投诉相关:[投诉,差评,要投诉,不满意服务],售后相关:[售后,退货人工,退款人工],不满意:[机器人没用,自动回复没用,听不懂,换个真人]}human_service_response同学点击 http://www.flyoss.com 可进入人工答疑# ---------- 辅助函数 ----------defnormalize_text(text:str)-str:importstring translatorstr.maketrans(,,string.punctuation)text_no_puncttext.translate(translator)returntext_no_punct.lower().strip()defexact_match_check(query_text:str,phrase_set)-bool:norm_querynormalize_text(query_text)forcategory,phrasesinphrase_set.items():forphraseinphrases:ifnorm_querynormalize_text(phrase):returnTruereturnFalsedefcontains_match_check(query_text:str,phrase_set)-bool:norm_querynormalize_text(query_text)forcategory,phrasesinphrase_set.items():forphraseinphrases:ifnormalize_text(phrase)innorm_query:returnTruereturnFalse# ---------- 处理输入 ----------# 1. 检查感谢类礼貌用语ifexact_match_check(query,thank_phrases)orcontains_match_check(query,thank_phrases):thank_replyrandom.choice(polite_responses[thank][random]) polite_responses[thank][default]return{type:greeting,response:thank_reply,need_rag:False,original_query:query}# 2. 检查告别类礼貌用语ifexact_match_check(query,goodbye_phrases)orcontains_match_check(query,goodbye_phrases):goodbye_replyrandom.choice(polite_responses[goodbye][random]) polite_responses[goodbye][default]return{type:greeting,response:goodbye_reply,need_rag:False,original_query:query}# 3. 检查打招呼ifexact_match_check(query,greeting_phrases)orcontains_match_check(query,greeting_phrases):return{type:greeting,response:greeting_response,need_rag:False,original_query:query}# 4. 检查人工服务请求ifexact_match_check(query,human_service_phrases)orcontains_match_check(query,human_service_phrases):return{type:transfer_human,response:human_service_response,need_rag:False,original_query:query}# 5. 其他情况需要 RAG 检索return{type:rag_needed,response:,need_rag:True,original_query:query}exceptExceptionase:# 全局异常捕获防止因意外错误导致工作流中断return{type:error,response:f处理您的请求时出现内部错误请稍后重试。错误信息{str(e)},need_rag:False,original_query:queryifqueryinlocals()else}添加输出节点输出变量测试运行6.2.4 选择器节点如果意图识别属于打招呼、人工服务这两种类型直接返回默认结果结束否则直接经过知识库检索添加选择节点条件分支6.2.5 知识库检索节点如果用户的问题属于打招呼、找人工等用语直接按照规则结果输出否则进入知识库用户输入专业问题经过知识库检索得到和问题相关的上下文注意有可能检索出来的结果为空添加知识库检索节点添加知识库添加输出节点测试效果6.2.6 判断检索结果节点根据是否检索出结果进行判断选择如果检索出相关的上下文那么交由大模型RAG回答基于问题和上下文来让大模型回答问题如果没有检索出相关的上下文那么交由闲聊大模型回答直接将问题送入大模型回答问题6.2.7 大模型RAG节点接收用户的 query 和上下文经过大模型得到结果系统提示词# 角色 你是一位专业且高效的跨境电商答疑小助手精通跨境电商领域的各类知识包括但不限于平台规则、物流、支付、关税、选品、运营、售后等能够依据提供的相关信息准确、清晰地回答用户关于跨境电商的问题。 ## 重要参数 - 上下文内容{{#context#}}从知识库检索到的相关文本片段 ## 技能 ### 技能 1基于上下文解答问题 - 严格依据 {{#context#}} 中的内容回答问题不得引入外部知识或个人猜测。 - 如果上下文中没有明确提及相关信息请如实告知用户“抱歉根据现有资料无法回答该问题”并建议用户转人工或提供更具体的描述。 - 引用上下文时尽量保留原始表述必要时可做合理归纳但不得改变原意。 ### 技能 2答案优化 - 将上下文中的专业内容转化为通俗易懂、条理清晰的回答。 - 优先采用分点、分段、加粗关键信息等方式提升可读性。 - 控制回答长度简单问题≤3句复杂问题≤8个要点或≤300字。 - 在答案结尾可主动询问用户是否还有其他疑问例如“请问还有其他跨境电商方面的问题吗” ### 技能 3上下文信息不足时的补齐策略 - 如果上下文部分相关但信息不完整请首先说明已找到的部分信息再指出缺失的部分并引导用户提供更多线索。 - 禁止凭空编造数据、链接、政策或价格。如果上下文中缺失用户所需的具体数据如某物流的运费应回复“资料中未提及该具体信息建议您联系人工客服或访问官网确认。” ### 技能 4敏感词过滤与合规 - 不得输出任何违反中国法律法规的内容包括但不限于走私、逃税、虚假宣传、侵犯知识产权的方法。 - 不得讨论政治、色情、暴力等无关话题。如用户问题涉及违规内容统一回复“抱歉我只能回答跨境电商相关的合规问题。请更换问题重试。” - 对于明显恶意的提问如“如何骗过海关”应拒绝回答并引导用户遵守法律法规。 ## 输出格式 请严格按照以下 JSON 结构返回不要包含其他解释文字 json { answer: 您生成的回答文本, used_context: true, // 是否使用了上下文中的信息 confidence: 0.95 // 0-1之间表示回答的置信度信息不足时请降低该值 }用户提示词用户问题/{x}query测试效果用户输入学习跨境电商需要安装哪些软件6.2.8 大模型聊天节点接受用户的问题直接基于大模型本身回答结果系统提示词# 角色 你是一位专业且亲切的跨境电商答疑小助手不仅拥有深厚的跨境电商专业知识还具备广泛的通用知识储备你能够根据用户需求灵活切换角色既能为用户解答跨境电商领域的复杂专业问题也能与用户展开轻松愉快的日常闲聊。 ## 技能 ### 技能 1精确解答跨境电商问题 1. 当用户提出跨境电商相关问题时充分运用自身专业知识结合丰富且贴合实际的案例为用户提供准确、全面且详细的解答。 2. 针对复杂的跨境电商概念运用通俗易懂、生动形象的语言进行深入浅出的解析说明确保用户能够轻松理解。 3. 在回答的结尾处明确注明“以上答案进攻参考”。 ### 技能 2耐心回答非跨境电商问题 1. 当用户提及非跨境电商问题时例如简单的数学运算“1 1 等于几”等运用已有的知识储备耐心、准确地对用户进行回答。 2. 在回答此类问题的结尾同样注明“以上答案进攻参考”。 ### 技能 3合理引导不明确问题 1. 当用户输入的问题含义不明确时不直接给出知识回答而是友好地输出“我还在努力理解您的问题请您详细描述后再来询问吧这样我能更好地为您解答。” ## 限制 - 交流内容要围绕跨境电商学习以及其他非电商知识相关范畴对于与这两类内容无关的话题需礼貌地拒绝回答并告知用户“抱歉我只能回答与跨境电商学习和其他非电商知识相关的问题哦”。 - 所输出的内容必须严格符合上述回答要求保证格式规范、条理清晰、逻辑连贯。 - 回答的答案中禁止提及需要进行知识库检索。用户提示词用户问题/{x}query测试效果用户输入今天广州实时天气七、发布工作流发布更新运行进入界面八、运行测试问候测试转人工客服知识问答
12_Dify中使用工作流构建知识问答助手实战
前言本文对比了 Dify 中工作流可视化业务逻辑编排与 Agent自主决策AI的区别与演进关系并详细演示了知识问答助手的完整实战流程。从创建知识库分段、索引、检索设置入手逐步构建工作流包括开始节点、意图识别节点通过代码判断问候/人工/专业问题、选择器节点分流、知识库检索节点、判断检索结果节点有结果走RAG大模型无结果走闲聊大模型以及最终发布和运行测试。实战覆盖了规则回复、人工转接、专业问答和通用闲聊等多种场景展示了工作流的灵活性与可控性。一、工作流工作流是业务逻辑的可视化执行工作流作用它将一个复杂的任务分解成一系列可管理的、按顺序或按条件执行的步骤并通过图形化的界面将这些步骤连接起来。二、Agent自主决策的AI助手三、工作流与Agent两者不是对立而是演进四、Difly的两种工作流类型五、创建工作流的标准流程六、知识问答助手实战6.1 创建知识库选择文件点击下一步分段设置索引方式检索设置保存并处理前往文档回到知识库菜单6.2 创建工作流6.2.1 创建空白应用填写信息选择开始节点用户输入6.2.2 开始节点6.2.3 意图识别节点在画布中右键选择添加节点 -- 执行代码意图识别代码实现判断用户是否属于打招呼用语、或者找人工、还是询问电商知识需要RAG检索代码如下importrandomdefmain(query:str)-dict: 基于固定短语匹配的跨境电商问答处理器 Args: query: 用户输入的问题 Returns: Dict: 包含回复类型、回复内容信息的字典 try:# 错误处理1检查输入是否为空或仅包含空白字符ifnotqueryornotquery.strip():return{type:error,response:请输入您的问题,need_rag:False,original_query:query}# 去除首尾空格queryquery.strip()# ---------- 打招呼相关的固定短语 ----------greeting_phrases{基本问候:[你好,您好,嗨,hi,hello,哈喽,早上好,下午好,晚上好,喂,在吗,在不在],询问身份:[你是谁,你叫什么,是什么机器人,你是人工吗,你是真人吗],询问状态:[你在吗,在干嘛,忙吗],询问能力:[你能做什么,你会什么,可以帮我吗,能回答问题吗],开始对话:[开始,我们开始吧,咨询一下,问个问题],测试类:[test,测试,ping]}greeting_response你好很高兴为您服务我是您的跨境电商学习小助手专业为你答疑解惑。# ---------- 礼貌用语感谢 ----------thank_phrases{感谢词:[谢谢,多谢,感谢,thanks,thank you,thx,谢谢了,谢谢你,非常感谢]}# ---------- 礼貌用语告别 ----------goodbye_phrases{告别词:[再见,拜拜,bye,goodbye,回头见,88,再会,告辞,退下]}polite_responses{thank:{default:不客气很高兴能帮到您请问还有其他跨境电商方面的问题吗,random:[您太客气了,不用谢这是我应该做的,随时为您服务]},goodbye:{default:再见祝您生活愉快欢迎随时回来咨询。,random:[拜拜,下次见,祝您购物愉快再见]}}# ---------- 人工服务相关短语 ----------human_service_phrases{直接要求:[人工,人工客服,转人工,找人工,人工服务],转接相关:[转接人工,接人工,转人工客服,帮我转人工],真人服务:[真人,真人客服,活人,真人员工],客服相关:[客服,客服人员,在线客服],老师相关:[老师,导游,助教],专业服务:[专家,专员,人工解答],投诉相关:[投诉,差评,要投诉,不满意服务],售后相关:[售后,退货人工,退款人工],不满意:[机器人没用,自动回复没用,听不懂,换个真人]}human_service_response同学点击 http://www.flyoss.com 可进入人工答疑# ---------- 辅助函数 ----------defnormalize_text(text:str)-str:importstring translatorstr.maketrans(,,string.punctuation)text_no_puncttext.translate(translator)returntext_no_punct.lower().strip()defexact_match_check(query_text:str,phrase_set)-bool:norm_querynormalize_text(query_text)forcategory,phrasesinphrase_set.items():forphraseinphrases:ifnorm_querynormalize_text(phrase):returnTruereturnFalsedefcontains_match_check(query_text:str,phrase_set)-bool:norm_querynormalize_text(query_text)forcategory,phrasesinphrase_set.items():forphraseinphrases:ifnormalize_text(phrase)innorm_query:returnTruereturnFalse# ---------- 处理输入 ----------# 1. 检查感谢类礼貌用语ifexact_match_check(query,thank_phrases)orcontains_match_check(query,thank_phrases):thank_replyrandom.choice(polite_responses[thank][random]) polite_responses[thank][default]return{type:greeting,response:thank_reply,need_rag:False,original_query:query}# 2. 检查告别类礼貌用语ifexact_match_check(query,goodbye_phrases)orcontains_match_check(query,goodbye_phrases):goodbye_replyrandom.choice(polite_responses[goodbye][random]) polite_responses[goodbye][default]return{type:greeting,response:goodbye_reply,need_rag:False,original_query:query}# 3. 检查打招呼ifexact_match_check(query,greeting_phrases)orcontains_match_check(query,greeting_phrases):return{type:greeting,response:greeting_response,need_rag:False,original_query:query}# 4. 检查人工服务请求ifexact_match_check(query,human_service_phrases)orcontains_match_check(query,human_service_phrases):return{type:transfer_human,response:human_service_response,need_rag:False,original_query:query}# 5. 其他情况需要 RAG 检索return{type:rag_needed,response:,need_rag:True,original_query:query}exceptExceptionase:# 全局异常捕获防止因意外错误导致工作流中断return{type:error,response:f处理您的请求时出现内部错误请稍后重试。错误信息{str(e)},need_rag:False,original_query:queryifqueryinlocals()else}添加输出节点输出变量测试运行6.2.4 选择器节点如果意图识别属于打招呼、人工服务这两种类型直接返回默认结果结束否则直接经过知识库检索添加选择节点条件分支6.2.5 知识库检索节点如果用户的问题属于打招呼、找人工等用语直接按照规则结果输出否则进入知识库用户输入专业问题经过知识库检索得到和问题相关的上下文注意有可能检索出来的结果为空添加知识库检索节点添加知识库添加输出节点测试效果6.2.6 判断检索结果节点根据是否检索出结果进行判断选择如果检索出相关的上下文那么交由大模型RAG回答基于问题和上下文来让大模型回答问题如果没有检索出相关的上下文那么交由闲聊大模型回答直接将问题送入大模型回答问题6.2.7 大模型RAG节点接收用户的 query 和上下文经过大模型得到结果系统提示词# 角色 你是一位专业且高效的跨境电商答疑小助手精通跨境电商领域的各类知识包括但不限于平台规则、物流、支付、关税、选品、运营、售后等能够依据提供的相关信息准确、清晰地回答用户关于跨境电商的问题。 ## 重要参数 - 上下文内容{{#context#}}从知识库检索到的相关文本片段 ## 技能 ### 技能 1基于上下文解答问题 - 严格依据 {{#context#}} 中的内容回答问题不得引入外部知识或个人猜测。 - 如果上下文中没有明确提及相关信息请如实告知用户“抱歉根据现有资料无法回答该问题”并建议用户转人工或提供更具体的描述。 - 引用上下文时尽量保留原始表述必要时可做合理归纳但不得改变原意。 ### 技能 2答案优化 - 将上下文中的专业内容转化为通俗易懂、条理清晰的回答。 - 优先采用分点、分段、加粗关键信息等方式提升可读性。 - 控制回答长度简单问题≤3句复杂问题≤8个要点或≤300字。 - 在答案结尾可主动询问用户是否还有其他疑问例如“请问还有其他跨境电商方面的问题吗” ### 技能 3上下文信息不足时的补齐策略 - 如果上下文部分相关但信息不完整请首先说明已找到的部分信息再指出缺失的部分并引导用户提供更多线索。 - 禁止凭空编造数据、链接、政策或价格。如果上下文中缺失用户所需的具体数据如某物流的运费应回复“资料中未提及该具体信息建议您联系人工客服或访问官网确认。” ### 技能 4敏感词过滤与合规 - 不得输出任何违反中国法律法规的内容包括但不限于走私、逃税、虚假宣传、侵犯知识产权的方法。 - 不得讨论政治、色情、暴力等无关话题。如用户问题涉及违规内容统一回复“抱歉我只能回答跨境电商相关的合规问题。请更换问题重试。” - 对于明显恶意的提问如“如何骗过海关”应拒绝回答并引导用户遵守法律法规。 ## 输出格式 请严格按照以下 JSON 结构返回不要包含其他解释文字 json { answer: 您生成的回答文本, used_context: true, // 是否使用了上下文中的信息 confidence: 0.95 // 0-1之间表示回答的置信度信息不足时请降低该值 }用户提示词用户问题/{x}query测试效果用户输入学习跨境电商需要安装哪些软件6.2.8 大模型聊天节点接受用户的问题直接基于大模型本身回答结果系统提示词# 角色 你是一位专业且亲切的跨境电商答疑小助手不仅拥有深厚的跨境电商专业知识还具备广泛的通用知识储备你能够根据用户需求灵活切换角色既能为用户解答跨境电商领域的复杂专业问题也能与用户展开轻松愉快的日常闲聊。 ## 技能 ### 技能 1精确解答跨境电商问题 1. 当用户提出跨境电商相关问题时充分运用自身专业知识结合丰富且贴合实际的案例为用户提供准确、全面且详细的解答。 2. 针对复杂的跨境电商概念运用通俗易懂、生动形象的语言进行深入浅出的解析说明确保用户能够轻松理解。 3. 在回答的结尾处明确注明“以上答案进攻参考”。 ### 技能 2耐心回答非跨境电商问题 1. 当用户提及非跨境电商问题时例如简单的数学运算“1 1 等于几”等运用已有的知识储备耐心、准确地对用户进行回答。 2. 在回答此类问题的结尾同样注明“以上答案进攻参考”。 ### 技能 3合理引导不明确问题 1. 当用户输入的问题含义不明确时不直接给出知识回答而是友好地输出“我还在努力理解您的问题请您详细描述后再来询问吧这样我能更好地为您解答。” ## 限制 - 交流内容要围绕跨境电商学习以及其他非电商知识相关范畴对于与这两类内容无关的话题需礼貌地拒绝回答并告知用户“抱歉我只能回答与跨境电商学习和其他非电商知识相关的问题哦”。 - 所输出的内容必须严格符合上述回答要求保证格式规范、条理清晰、逻辑连贯。 - 回答的答案中禁止提及需要进行知识库检索。用户提示词用户问题/{x}query测试效果用户输入今天广州实时天气七、发布工作流发布更新运行进入界面八、运行测试问候测试转人工客服知识问答