Dify 企业级实验01多应用编排——如何让多个 Dify 应用协同完成一条业务链Dify 实验系列 · 企业级 01/12 | 实验编号DIFY-104-011. 实验目的掌握系统级应用编排把多个独立的 Dify 应用客服分流、订单质检、工单、周报通过Workflow as Tool组合成一个完整的订单业务系统。这是中级实验 08「子工作流」思想的企业级放大——从「一个工作流调用子工作流」升级为「多个独立应用互调」。适合已有多个独立 Dify 应用可能是不同团队维护需要把它们组装成端到端业务流程的场景。核心能力是职责边界划分编排应用只做调度、不做业务。2. 场景设计电商订单全流程用户咨询 → 自动分流 → 订单质检 → 异常工单 → 周报汇总。传统做法是 4 个独立应用 人工衔接本实验用 1 个编排应用主 workflow调用 4 个能力应用端到端自动化。输入customer_message用户消息、order_id订单号可选。输出分类结果 质检结论命中「投诉/售后」或「高风险」时追加工单号。周报应用独立定时触发汇总本周订单质量。3. 节点拓扑编排应用dify104_01_05_订单编排 开始customer_message / order_id → 客服分流引擎tool调 dify104_01_01 → 订单质检引擎tool调 dify104_01_02 → 是否需要工单if-else分类投诉/售后 或 风险high ├─ 是 → 工单创建引擎tool调 dify104_01_03 └─ 否 → 直接组装结果 → 组装结果code→ 结束 能力应用各自独立发布为工具后被编排应用调用 客服分流01_01开始 → 问题分类question-classifier4 类→ 结束 订单质检01_02开始 → 订单信息提取PE→ 风险校验code→ 结束 工单创建01_03开始 → 生成工单code→ 结束 周报汇总01_04开始 → 模拟数据采集 → 解析数据 → 周报模板 → 结束定时触发4. 关键配置4.1 能力应用发布为工具每个能力应用先「发布为工具」拿到provider_id后在编排应用 DSL 中引用。注意重新发布后 provider_id 会变运行前需按 app_id 动态查询最新值102-08 实测教训的延续。4.2 编排应用的 tool 节点tool5a 客服分流引擎tool 节点参数必须双写tool_parameters与tool_configurations同值UI 显示与运行兼容-id:tool5adata:type:tooltitle:客服分流引擎provider_type:workflowprovider_id:2af54f30-b1e6-4cd6-bc7b-bebaf5818353tool_name:dify104_fenliutool_parameters:customer_message:type:mixedvalue:{{#start.customer_message#}}tool_configurations:# 与 tool_parameters 同值缺了 UI 面板显示空customer_message:type:mixedvalue:{{#start.customer_message#}}4.3 是否创建工单if5三个条件用or组合——分类是投诉、分类是售后、质检风险为 high任一命中即建单-id:if5data:type:if-elsetitle:是否需要工单cases:-case_id:need_ticketlogical_operator:orconditions:-comparison_operator:isvalue:投诉variable_selector:[tool5a,category]-comparison_operator:isvalue:售后variable_selector:[tool5a,category]-comparison_operator:isvalue:highvariable_selector:[tool5b,risk_level]4.4 组装结果cd5dtool 返回的是 JSON 字符串必须用 code 节点解析后再拼装不能直接给下游defmain(category:str,quality_report:str,ticket_no:str,ticket_summary:str)-dict:parts[f分类{category},f质检{quality_report}]ifticket_no:parts.append(f工单{ticket_no})return{final_result:\n.join(parts)}4.5 质检风险校验01_02 的 cd2能力应用内命中负面关键词即标记高风险negative_keywords [坏, 损坏, 破损, 退款, 退货, 投诉, 太差, 失望, 无法使用, 质量]并输出quality_report与risk_reasons订单号缺失只提示不阻断。4.6 周报模板01_04 的 tt4template-transform 用 Jinja2 取数组最后两条做环比sales|length判空兜底{% set sales sales if sales else [] %} {% set cur sales[-1] if sales|length 0 else {} %} {% set prev sales[-2] if sales|length 1 else {} %} - 订单量{{ cur.get(orders, 0) }}上周 {{ prev.get(orders, 0) }}5. 运行验证输入预期结果含异常关键词的订单咨询如「东西坏了我要退款」分流投诉 → 质检风险high → 建单输出「分类投诉 / 质检…风险等级 high / 工单WO-…」通过实测编排调 3 工具普通咨询如「订单多久能到」分流咨询、风险low不建单只输出分类 质检通过定时触发周报report_week本周输出订单周报订单量/营收/投诉数含上周环比通过6. 采坑点坑现象修复重新发布工具后 provider_id 变化编排应用调用报工具引用失效运行前按 app_id 动态查询最新 provider_id 并同步 DSL实测102-08 教训延续tool 参数只写 tool_parametersUI 面板显示空、手动调试报「不能为空」tool_parameters与tool_configurations双写同值实测102-08tool 返回 JSON 字符串直接拼给下游下游 LLM 拿到字符串乱用、字段取不到先用 code 节点解析再拼装实测102-08code 节点沙箱禁写文件报PermissionError: /tmp存储统一走 http 外部 KV 服务实测本批编排应用里写业务逻辑系统难维护能力应用失去复用性编排只做调度业务逻辑留在能力应用实验文档设计约束7. 实验文档及源码获取实验文档完整操作步骤DIFY-104-01多应用编排系统——订单全流程协同.md源码可直接导入一个应用一个 DSL源码一客服分流dify104_01_01_客服分流.yml源码二订单质检dify104_01_02_订单质检.yml源码三工单创建dify104_01_03_工单创建.yml源码四周报汇总dify104_01_04_周报汇总.yml源码五订单编排主流程dify104_01_05_订单编排.yml全部源码目录dify-104/dsl文章聚焦核心配置与采坑点实验的完整分步操作节点搭建/参数表/调试指引见实验文档原文。下一篇Dify 企业级实验02跨应用状态传递——多轮对话的状态如何跨应用不丢 你在这个实验的场景里踩过什么坑欢迎评论区分享你的实战经验。