用Dify工作流搭建工单审批流:LLM判断 + 代码执行 + 分支处理

0 阅读7分钟

文章简介:本文手把手教你在Dify中用工作流搭建一个智能工单审批系统,实现LLM自动判断紧急程度、代码执行节点统一处理结果、HTTP请求集成钉钉/数据库等功能。附完整配置和演示,适合想深入学习Dify工作流的开发者。 标签:Dify、工作流、工单审批、代码执行、LLM


前言

在上一篇文章中,我介绍了如何用Dify搭建一个多分支AI客服系统,实现了意图识别和基础的条件分支处理。

这次我们更进一步,来搭建一个工单审批流,解决更复杂的业务场景:

  • 用LLM自动判断工单的紧急程度
  • 代码执行节点统一处理不同分支的结果
  • 用HTTP请求集成钉钉Webhook、模拟数据库操作

这篇文章能解决什么问题?

很多企业的工单系统都是这样工作的:

  • 用户提交工单 → 客服手动判断紧急程度 → 分配给不同部门
  • 问题:效率低、容易遗漏、无法自动化

通过本文,你将学会:

  • 如何用LLM自动分析工单内容,判断紧急程度
  • 如何用代码执行节点作为分支结果的"汇总器"
  • 如何用HTTP请求节点集成外部系统

读完这篇你能得到什么?

  • 一个完整可运行的工单审批流Demo
  • 理解代码执行节点的使用场景和技巧
  • 掌握Dify工作流与外部系统集成的方法

前置知识:需要了解Dify的基本使用,有Dify工作流搭建经验更佳。


一、项目需求

工单审批的痛点

传统工单处理方式存在的问题:

  • 人工判断慢:客服需要阅读工单内容,主观判断紧急程度
  • 处理标准不一:不同客服对"紧急"的定义不同
  • 无法自动化:判断后还需要手动分配、通知

需要实现的功能

本文要搭建一个智能工单审批流,实现以下功能:

  1. LLM自动判断:用大模型分析工单标题和描述,自动判断紧急程度
  2. 三级分类:紧急(P0) → 普通(P1) → 低优先级(P2)
  3. 自动化处理
    • 紧急:发送钉钉Webhook通知,标记高优先级
    • 普通:存入数据库,自动回复用户
    • 低优先级:记录到周报,排期处理
  4. 统一结果输出:用代码执行节点汇总各分支结果

预期效果

用户提交工单 → LLM判断紧急程度 →
├── 紧急(P0) → 发送钉钉Webhook → 代码执行汇总 → 输出结果
├── 普通(P1) → 存入数据库 → 代码执行汇总 → 输出结果
└── 低优先级(P2) → 记录周报 → 代码执行汇总 → 输出结果

二、核心概念:代码执行节点

什么是代码执行节点?

代码执行节点是Dify工作流中的一个强大的功能节点,它允许你编写Python代码来处理数据。

什么场景下需要代码执行节点?

  1. 数据转换:将一种格式转换为另一种格式
  2. 条件逻辑:比条件分支节点更复杂的判断逻辑
  3. 计算处理:对数值进行计算、统计
  4. 结果汇总:将多个分支的结果统一处理(本文案例)

本文的代码执行节点设计

我们用代码执行节点作为"结果汇总器":

def main(arg1: int, arg2: int, arg3: int):
    if arg1 == 200:
        return {
            "result": '钉钉通知成功',
        }
    elif arg2 == 200:
        return {
            "result": '存入数据库成功',
        }
    else:
        return {
            "result": '记录到周报成功',
        }

设计思路

  • 三个输入参数 arg1arg2arg3 分别接收三个分支HTTP请求的状态码
  • 只有被执行的分支,其HTTP请求状态码才是200
  • 根据哪个状态码为200,判断走的是哪个分支
  • 返回对应的处理结果

三、环境准备

  • Dify版本:1.11.x
  • Linux环境:CentOS Stream 9
  • Docker版本:29.2.1
  • LLM模型: DeepSeek

四、开始搭建

4.1 创建工作流

打开Dify → 创建应用 → 选择「工作流」→ 命名「工单审批流」

image-8.png

4.2 添加用户输入节点

配置以下输入变量:

变量名类型说明
title文本工单标题
description文本工单描述

image-9.png

4.3 添加LLM节点(紧急程度判断)

模型选择:DeepSeek 或 qwen-max

系统提示词

你是一个工单审批助手。请分析工单内容,判断其紧急程度:

- 紧急(P0):系统宕机、数据丢失、安全漏洞、大量用户受影响
- 普通(P1):功能故障但有workaround、部分用户受影响
- 低优先级(P2):功能建议、体验优化、个别用户问题

只输出一个词:紧急、普通、或低优先级,不要输出其他内容。

用户提示词

工单标题:{{ title }}
工单描述:{{ description }}

请判断这个工单的紧急程度。

image-10.png

4.4 添加条件分支节点

配置3个分支条件:

分支名称条件表达式
紧急分支{{ output }} == "紧急"
普通分支{{ output }} == "普通"
低优先级分支{{ output }} == "低优先级"

image-11.png

4.5 各分支处理

紧急分支(P0):发送钉钉Webhook

HTTP请求配置

  • URL:https://httpbin.org/post
  • 方法:POST
  • 请求体:
{
  "level": "P0-紧急",
  "title": "{{ title }}",
  "description": "{{ description }}",
  "action": "立即处理"
}

image-13.png

普通分支(P1):存入数据库

HTTP请求配置

  • URL:https://httpbin.org/post
  • 方法:POST
  • 请求体:
{
  "level": "P1-普通",
  "title": "{{ title }}",
  "description": "{{ description }}",
  "status": "pending"
}

image-14.png

低优先级分支(P2):记录周报

HTTP请求配置

  • URL:https://httpbin.org/post
  • 方法:POST
  • 请求体:
{
  "level": "P2-低优先级",
  "title": "{{ title }}",
  "description": "{{ description }}",
  "suggestion": "排期处理"
}

image-15.png

4.6 添加代码执行节点(核心!)

这是本文的重点!将三个分支的结果汇总。

输入变量配置

变量名类型说明
arg1数字紧急分支HTTP请求状态码
arg2数字普通分支HTTP请求状态码
arg3数字低优先级分支HTTP请求状态码

代码

def main(arg1: int, arg2: int, arg3: int):
    if arg1 == 200:
        return {
            "result": '钉钉通知成功',
        }
    elif arg2 == 200:
        return {
            "result": '存入数据库成功',
        }
    else:
        return {
            "result": '记录到周报成功',
        }

image-16.png

关键点

  • 将三个分支的「HTTP请求」节点的输出(状态码),都连接到这个代码执行节点
  • Dify会自动只传递被执行的分支的状态码,未执行的分支变量为空

4.7 添加输出节点

将「代码执行」节点的输出连接到「输出」节点,统一返回处理结果。

image-17.png


五、完整工作流

整体工作流结构:

开始 → 用户输入 → LLM(判断紧急程度) → 条件分支 →
    ├── 紧急分支 → HTTP请求(钉钉) ─┐
    ├── 普通分支 → HTTP请求(数据库)─┼→ 代码执行 → 输出节点
    └── 低优先级分支 → HTTP请求(周报)─┘

image-3.png


六、测试验证

测试用例

紧急程度测试工单示例预期结果
紧急「系统无法登录,所有用户都受影响」钉钉通知成功
普通「某个功能点击没反应,但其他功能正常」存入数据库成功
低优先级「希望增加一个主题切换功能」记录到周报成功

测试结果

image-18.png

image-19.png

image-20.png


七、与Demo1的区别

项目Demo1Demo2
核心功能意图识别 + 分支处理紧急程度判断 + 分支处理
分支数量3个(咨询/售后/投诉)3个(紧急/普通/低优先级)
应用场景智能客服工单审批
外部集成知识库 + HTTP请求HTTP请求(模拟数据库和钉钉)
新特性-代码执行节点汇总结果

八、总结

通过本文你学到了什么?

  • LLM紧急程度判断:用大模型自动分析工单内容,分类为紧急/普通/低优先级
  • 代码执行节点:作为分支结果的"汇总器",实现复杂的数据处理逻辑
  • HTTP请求集成:调用外部API实现钉钉通知、数据库操作、周报记录

代码执行节点的使用技巧

  1. 接收多分支变量:一个代码执行节点可以接收多个分支的数据
  2. 条件判断:用 if/elif/else 判断哪个分支被执行
  3. 统一输出:将不同分支的处理结果统一为相同的输出格式

参考资料