Dify 高级实验(07):智能审批——如何让机器自动完成流程审批?

📅 发布时间:2026/8/12 17:52:54
Dify 高级实验(07):智能审批——如何让机器自动完成流程审批? Dify 高级实验07智能审批——如何让机器自动完成流程审批Dify 实验系列 · 高级 07/10 | 实验编号DIFY-103-071. 实验目的掌握企业流程自动化的规则路由范式参数提取器PE从自然语言中提取结构化字段 → 代码规则引擎判定 → IF/ELSE 三路分支 → 各分支独立收尾。核心能力参数提取器把一段报销申请文本转成金额/类型/部门/事由/员工编号五个字段规则引擎代码化金额四档无效/小额/中额/大额 特殊费用类型规则全部确定性判断三路互斥分支自动通过 / 需审批 / 转人工每个分支独立 End 节点收尾。适合报销/请假/采购审批、工单分级、风控拦截等「规则可描述」的流程场景。前置要求中级实验 01 参数提取器、16 条件分支。2. 场景设计员工提交报销申请一段自然语言传统流程「提交 → 领导审批 → 财务审核」慢且标准不统一。本实验让机器秒级判定金额 1000 元 →自动通过1000-10000 元 →需部门经理审批≥ 10000 元 →转财务总监人工特殊规则招待费超 500 元即使小额也需审批。输入expense_request报销申请文本如「报销 5000 元差旅费市场部王五 E1001」。输出三条分支各自的收尾结果通过通知 / 审批通知 / 审批单 推送状态。3. 节点拓扑开始expense_request → 参数提取器amount / expense_type / department / reason / employee_id → Code 审批规则引擎action: auto_approve / need_approval / human_review / reject → IF/ELSE 三路分支 ├─ 自动通过 → LLM 生成通过通知 → 结束result_auto ├─ 需审批 → Code 模拟通知审批人 → 结束result_need └─ 转人工/驳回 → Code 生成审批单 → Code HTTP 通知模拟→ 结束result_human4. 关键配置4.1 参数提取器pe_extract注意 PE 的查询字段名是query与知识库/分类器的query_variable_selector相反reasoning_mode: function_call五个参数声明-data:instruction:|从以下报销申请内容中提取字段信息。注意 - amount 是报销金额数字单位元 - expense_type 是费用类型差旅/办公/招待/设备如无法归类填其他 - department 是所属部门 - reason 是报销事由简要概括 - employee_id 是员工编号如 E1001 - 如果某个字段没有明确信息填 null 而不是编造parameters:-description:报销金额元name:amountrequired:truetype:number-description:费用类型差旅/办公/招待/设备name:expense_typerequired:truetype:string# department / reason / employee_id 同理……query:[start,expense_request]reasoning_mode:function_calltitle:参数提取type:parameter-extractor4.2 审批规则引擎cd_rules入参先float()防御转换PE 提取的 number 到代码节点可能是字符串输出action供分支路由defmain(amount,expense_type,department):amountfloat(amount)ifamountelse0result{amount:amount,action:,approver:,reason:}ifamount0:result[action]reject;result[reason]金额无效elifamount1000:result[action]auto_approve;result[reason]小额自动通过elifamount10000:result[action]need_approval;result[approver]部门经理;result[reason]需部门经理审批else:result[action]human_review;result[approver]财务总监;result[reason]大额需财务总监审批# 特殊规则招待费即使小额也需审批ifexpense_type招待andamount500:result[action]need_approval;result[approver]部门经理returnresult4.3 三路分支cond_route字符串比较用is不是/case_human是 OR 条件同时覆盖human_review与reject所有被边引用的 case_id 必须在 cases 中定义-data:cases:-case_id:case_autoconditions:-comparison_operator:isvalue:auto_approvevariable_selector:[cd_rules,action]logical_operator:and-case_id:case_needconditions:-comparison_operator:isvalue:need_approvalvariable_selector:[cd_rules,action]logical_operator:and-case_id:case_humanconditions:-comparison_operator:isvalue:human_reviewvariable_selector:[cd_rules,action]-comparison_operator:isvalue:rejectvariable_selector:[cd_rules,action]logical_operator:ortitle:审批路由分支type:if-else4.4 三个独立结束节点多 End 的variable必须唯一result_auto/result_need/result_human各取本分支输出-data:outputs:-type:stringvalue_selector:[lm_approve,text]variable:result_autotitle:结束自动通过type:end5. 运行验证输入expense_request期望行为实测报销 500 元交通费市场部张三 E1001actionauto_approveLLM 生成「已自动通过」通知与预期一致报销 5000 元差旅费销售部李四 E1002actionneed_approval通知部门经理审批与预期一致报销 50000 元设备采购技术部王五 E1003actionhuman_review生成审批单并模拟推送审批人财务总监与预期一致报销 800 元招待客户市场部赵六 E1004特殊规则生效actionneed_approval而非自动通过与预期一致6. 采坑点坑现象修复多个 End 节点variable重名三个结束节点全叫result时校验脚本查不出双脚本全绿运行结果互相覆盖每个 End 用唯一 variableresult_auto/result_need/result_humanvalidate_dsl.py 已加跨节点检查dify103_07 实测教训IF/ELSE 字符串比较用/Pydantic 校验报错字符串只支持is/contains等旧 DSL 迁移后运行才炸字符串一律iscases 必须定义所有被边引用的 case_id否则该分支 UI 无连线dify02_02 迁移实测下游引用 PE 输出用错字段引用pe_extract.text取不到值——校验器对 PE 只认parameters里声明的 namePE 的text输出也不能作为 end/selector 来源只引用parameters里声明的 nameamount/expense_type/employee_id要全量 JSON 用代码节点json.dumps打包dify08_01 实证代码节点入参类型不符PE 提取的 number 传进代码是字符串12000 10000报TypeError: not supported between instances of str and int代码内float(amount) if amount else 0防御转换同时 main() 参数名必须与 variables 的 variable 名一致按名传参7. 实验文档及源码获取实验文档完整操作步骤DIFY-103-07智能审批工作流.md源码可直接导入dify103_07_智能审批工作流.yml文章聚焦核心配置与采坑点实验的完整分步操作节点搭建/参数表/调试指引见实验文档原文。下一篇Dify 高级实验08智能告警——如何用 AI 替代固定阈值监控 你在这个实验的场景里踩过什么坑欢迎评论区分享你的实战经验。