第 12 章 实操四 · 工单智能分级路由工作流(场景 C)¶
本章定位: 实操单元 · 角色 = Delta · Prototype 阶段 · 模式 = AI 施工(opencode + gstack + LangGraph)· 场景 C——Delta 侧第三个、也是坡度最高的施工实操。坡度:分类器(一次调用)→ RAG(检索 + 生成)→ 路由工作流(预编排 + 分支动作);真正的动态受控 Agent 在无编号实操四B(Lab4B)。
前置: 场景 C 方案框架;工作流 / Agentic Workflow、Router 模式与自动化边界;实操三成果。
延伸阅读: 工作流 / Agentic Workflow 区分、Routing 三路分流、自动化边界;完整动态受控 Agent 见无编号实操四B(Lab4B);见文末 FDE-101 链接。
实验手册: 工单样本、部门职责库、启动提示词参考答案、gstack 安装速查、灵魂追问与讲师要点见《实验手册》
labs/lab4-routing-workflow.md;实操四B 手册见labs/lab4b-cooperative-agent.md——本实操正文只保留"方法与验收"。
本章学习目标:
- 用 LangGraph 的 State / Node / Conditional Edge 构建一个固定路由工作流(路径可枚举);
- 分清"分类器 vs 路由工作流 vs 受控 Agent"——分类之后还要做事;路由工作流的"下一步"预先写定,真正"观察结果后重新规划"交给实操四B(Lab4B);
- 把"敏感件零漏判"(给定验证集召回率 100%,生产目标零漏判)落地为验收硬指标;
- 设计一个高质量工具(
check_department),验证"工具描述决定路由工作流准确率"; - 说清"为什么这里不需要动态 Agent"(从最简单开始),并知道实操四B 何时补齐动态选工具、追问、人工暂停与有限循环。
学习目标追踪(目标 → 活动 → 证据 → 验收):
| 学习目标 | 对应活动 | 主要证据 | 对应 DoD |
|---|---|---|---|
| 用 LangGraph 构建固定路由工作流 | 环节 1 写启动提示词 + 环节 2 注入并跟进八环节 | State / Node / CE 代码 | 路由工作流可运行 |
| 分清分类器 vs 路由工作流 vs 受控 Agent | 知识背景 + 演练流程全程 | SPEC 选型理由 | 三路都走通 |
| 敏感件零漏判落地为硬指标 | 环节 3 验收与收尾 | qa-report.md | 2 份敏感件全转人工 |
| 高质量工具设计(check_department) | 环节 2 注入并跟进八环节 | 工具定义、departments.csv | 工具描述决定准确率 |
| 说清"为什么不需要动态 Agent" | 知识背景 + 演练流程全程 | 汇报话术 | 无"做成分类器"反模式 |
12.1 知识背景¶
这一轮的方法定位(只取工作流 / 编排这些稳定不变的层面): - Routing Workflow 与自动化边界:本实操档位固定、分支预先枚举——判档只是开始,还要自动答复 / 查部门库 / 转人工;它不是动态自主 Agent,而是 Agentic Workflow(受控 Agent 见实操四B)。 - 工作流 vs 智能体:三档各自处理逻辑固定,属于"工作流类"(Routing 模式),不需要动态编排复杂智能体。 - 编排工具:此处用代码级框架 LangGraph(State / Node / Conditional Edge),而非低代码平台(Dify / Coze),因为要精细控制状态与兜底逻辑。 - Router 三路分流:咨询→quick 自动答 / 跨部门→deep 深度 / 敏感→escalate 转人工——正是本实操的三档路由。 - 人机回环:敏感件"必须转人工"就是暂停等人工确认,是智能体安全的基石。
12.2 任务书¶
打开解决方案框架的场景 C:"工单智能分级路由——简单诉求本可当场答复,却和复杂诉求(跨部门、投诉举报)混着走同一套流程,效率低。"
技术方案(已在实操一定): 路由工作流(Agentic Workflow)——不是分类器、不是 RAG,也不需要动态自主 Agent:档位与分支动作预先枚举,LangGraph 只承载 State → 判档 → 条件边 → 分支动作;真正"观察结果后重新规划"的受控 Agent 在 实操四B(Lab4B)。技术栈:opencode + gstack + LangGraph + DeepSeek + Streamlit。
目标: 收到一份市民工单,判断它是哪一档(咨询 / 跨部门 / 敏感),然后路由到对应处理分支:
- 咨询类 → 自动答复
- 跨部门类 → 深度处理(调用部门职责库工具)
- 敏感类 → 转人工升级
验收时三路都要走通,且敏感件零漏判。
把上面的三档路由用 LangGraph 的机制落成一张图:
flowchart TB
start["工单进入<br/>(State 初始化)"]
judge["判档 Node<br/>LLM 判断:咨询 / 跨部门 / 敏感"]
ce["Conditional Edge 分流"]
quick["咨询<br/>→ 自动答复 Node"]
deep["跨部门<br/>→ 深度处理 Node<br/>(调 check_department 工具)"]
esc["敏感 / 拿不准<br/>→ 转人工 Node<br/>(暂停等人工确认)"]
start --> judge --> ce
ce --> quick
ce --> deep
ce --> esc
style judge fill:#3949ab,color:#fff,stroke:#1a237e
style ce fill:#f5ece0,stroke:#a8895f
style esc fill:#fdecea,stroke:#a34a3a
图 12-1:本实操分级路由流程——State 启动 → 判档 Node → Conditional Edge 三路分流 → 各分支动作
12.3 课前准备¶
- opencode、gstack 已装(前几实操复用)
- LangGraph 已装(见环境准备)
- DeepSeek API key 已配置
- 已通读解决方案框架的场景 C 部分
- 已查看实操三的《AGENTS.md》和《retro.md》
- 创建本实操目录
实操四-工单分级/
环境准备(LangGraph): 路由工作流比前两轮多了编排框架 LangGraph(本章只用固定路径,不引入自主循环)。一次装齐:langgraph + openai + python-dotenv + pandas + streamlit(LangGraph 只依赖 langchain-core,不带 openai/pandas/streamlit——只装它会报 ModuleNotFoundError: openai)。langgraph 没有 __version__ 属性,用 importlib.metadata.version('langgraph') 验证。装完必须实测 import。
12.4 演练流程¶
12.4.1 环节 1 · 写启动提示词¶
这不是让 AI 干的活,是你(Delta)的活。 流程同前两轮,这次你经验最足。对照方案框架场景 C 填 7 项信息(工单样本、部门职责库与启动提示词参考答案见《实验手册》
labs/lab4-routing-workflow.md附录 D),并把"三档定义、工单样本、部门职责库"写进启动提示词。
三档判定标准(本轮核心),核心是"动作"而非字面信号:
- 咨询(简单问答 → 自动答复):模式固定、直接问怎么办、答完即可;
- 跨部门(需查职责库 → 深度处理):只要"需要查询部门职责归属才能处理"就算,即使只涉及一个部门。典型"该找哪个部门""怎么维权"这类找归属/找路径的诉求;
- 敏感(对具体对象举报/投诉/安全隐患 → 转人工):对具体机构/个人/场所的举报要求查处、或涉民生重大安全。注意:"维权/投诉"字眼本身不决定档位——问"怎么处理"是跨部门,对具体对象"实名举报XX要求查处"才是敏感。
本轮核心教学点 · 档位例子反向核对: 写好分级判定标准后,用验证集样本逐条反向核对提示词里的档位例子——例子的档位必须与验证集标注一致。实测翻车根因: 首版把"拖欠工资维权"写进敏感档,但验证集标注跨部门,模型忠实执行错误定义导致首轮 66.7%。档位/类别例子与验证集标注不一致,路由工作流必然跑偏。
12.4.2 环节 2 · 注入并跟进八环节¶
注入:启动提示词灌进 /office-hours + 驱动指令(同前,完整写法见《实验手册》labs/lab4-routing-workflow.md)。
跟进八环节,你的把关点:
| 环节 | 路由工作流会做什么(Agent 执行) | 你的 checkpoint |
|---|---|---|
| office-hours | 追问分级标准、工具 | 回答分级/工具问题;确认"值得做" |
| spec | 死磕 No-Go、数据模型、验收口径 | "敏感件必须转人工"写进 SPEC了吗 |
| autoplan | 暴露两可决策等你拍板 | 真的拍板:分级判定标准、工具设计、兜底策略 |
| build | 按 SPEC 实现(State→Node→Conditional Edge→工具) | 工单样本来自启动提示词、非 Agent 编 |
| review | 两遍检查,P0–P3 | 修 P0/P1;API key;工具描述质量 |
| qa | 真实跑核心 + 边界 | 三路各测;敏感件零漏判;工具调用成功 |
| ship | 版本+CHANGELOG+README+commit | .env 未入库 |
| retro | 复盘四点 | 摩擦写具体;有行动项 |
关键决策点(路由工作流特有):
- 分级判定标准:按"动作而非字面信号"的三档定义拍板;
- 工具设计:
check_department——传入工单全文,内部关键词匹配(不要只传单个 keyword)。职责库关键词要考虑市民口语变体(职责库"物业管理",市民说"物业不处理",前 2 字子串兜底能命中)。找不到返回空列表而非报错。 - 敏感件兜底:拿不准怎么办?宁可转人工,不可漏过(假阴性=0 是政务底线)。拿不准可用 confidence 阈值量化(参考值 0.6)——置信度 <0.6 一律兜底转人工。
- LLM 返回异常:分级结果不是三档之一时,兜底到"转人工"(uncertain → escalate),而不是默认自动处理。解析失败/非法 label 同样兜底转人工。
自查追问: 路由工作流在 autoplan 问"敏感件拿不准时怎么办"——你不能说"你看着办"。为什么?因为 政务场景,敏感诉求漏了转人工就是事故(投诉没升级、安全隐患没上报)。你必须拍板"宁可多升级,不可漏"。这个决策 AI 不知道严重性,只有你知道。
12.4.3 环节 3 · 验收与收尾¶
Step 1 核对交付物:
实操四-工单分级/
├── 01-office-hours.md
├── SPEC.md # 含失败模式 + No-Go + 数据模型 + 验收口径
├── SPEC-决策记录.md # autoplan 拍板记录
├── data/departments.csv # 部门职责库(路由工作流工具的数据源)
├── src/ # State/Node/Conditional Edge/工具 模块
├── streamlit_app.py # 工单分级界面
├── tests/workorders.csv # 6 份工单样本
├── review.md / qa-report.md
├── VERSION / CHANGELOG.md / README.md
└── retro.md
Step 2 验收口径(更强调安全底线):
| 指标 | 要求 | 判定机制 |
|---|---|---|
| 路由工作流正确率 | ≥90% | 判档正确 + 分支动作执行才算路由正确:咨询件需产出答复、跨部门件需 departments 非空(工具真实调用)、敏感件需 action=转人工。只判对档但没做事 = 错误 |
| 敏感件零漏判 | 100% | 6 份中 2 份敏感工单必须全部转人工(假阴性=0)。漏判 1 条即不通过 |
为什么敏感件要"零漏判"硬指标? 政务场景,敏感诉求漏了转人工等于没人处理——假阴性的代价远高于假阳性。宁可多查不可漏过(Human-in-the-Loop)。
为什么路由正确要"判档 + 动作"双重验证? 这正是本轮的灵魂——路由工作流与分类器的区别是"分类之后还要做事"。判对了档但没执行动作,跟分类器没区别。
统计提示: 6 条样本上"路由正确≥90%"实际必须 6/6 全对(5/6≈83% 就挂了);敏感件 2 条必须全转人工。对"全对才过线"要有预期。
Step 3 模拟向小王演示:
- 用她听得懂的话讲(别说"Router 模式""状态机");
- 演示"敏感件自动转人工"——"这条举报诉求,AI 拿不准就自动留给你判断,不会自己乱处理";
- 演示"跨部门件真查了部门库"——展示工具调用链("🔧 查询部门职责 → 命中住建局:物业管理"),证明"AI 不是瞎猜,是真查了库";
- 呼应角色定位——"AI 处理常规、复杂和敏感留给人,你从'处理工单'变成'把关人'"。
自查追问: 向小王演示时,为什么"敏感件转人工"是最好的切入点?——因为她最怕"AI 取代我"。"AI 处理常规、敏感件留给人"恰恰证明 AI 不是取代,是把人解放到更重要的判断上。 这是路由工作流场景里 Human-in-the-Loop 的业务价值。
Step 4 写"演示级验收声明"(DoD):
"本项目使用 6 份工单样本,属演示级验收——结论仅证明路由逻辑在给定样本上可行,不宣称覆盖全部工单类型或达到生产可用。"
自查追问: 为什么必须写这句?政务场景夸大更危险——说"敏感件零漏判"而实际只测了 2 份,市里真出漏判事故,责任谁扛?
12.4.4 环节 4 · 复盘沉淀¶
- 看路由工作流的 retro;追加:更新 AGENTS.md(分级判定标准、工具定义、验证命令、工具坑)+ 改进交接(实操五汇报前先看这条经验)。
桥接实操四B: 本章做的是"预编排固定分支"路由工作流;想体验真正按目标反复决策的受控 Agent(动态选工具、观察后追问、人工暂停、有限循环),进入无编号实操四B(Lab4B)——它从头构建独立项目、不复制本章代码,但复用本章的 LangGraph / 工具 / HITL 概念(手册见《实验手册》
labs/lab4b-cooperative-agent.md)。实操五收口: 这一轮的产出(路由工作流 + 敏感件零漏判的验收数据)是 ROI 汇报的亮点——"简单诉求自动化率"是个好数字。
12.5 产出物清单与验收标准(DoD)¶
交付物: 见环节 3 Step 1 文件树。
验收标准(DoD):
- LangGraph 装好、验证可用
- 启动提示词含 7 项信息 + 三档定义 + 工单样本 + 部门职责库 + 双指标验收
- 路由工作流按 gstack 八环节跑完,每环节有产出文件(由 Agent 执行)
- 决策点都拍了板(分级标准、工具设计、敏感件兜底)
- 验收口径写进 SPEC:路由正确 ≥90% + 敏感件零漏判
- 分级路由工作流可运行,三路都走通,2 份敏感件全部转人工
- 6 份工单样本来自启动提示词(非 Agent 编);档位例子与验证集标注一致
- .env 未入库,P0/P1 已修复
- 向小王演示"敏感件转人工 = 人做把关人"
- 写了"演示级验收声明";retro 更新了 AGENTS.md 与交接行动项
(gstack 安装速查见
labs/lab4-routing-workflow.md附录 A;工单样本、部门职责库与启动提示词参考答案见附录 D;灵魂追问与讲师要点见附录 B/C。)
12.6 Echo Prototype 检查单¶
本章不是 Delta 单线活动:Prototype 结束时,Echo 至少完成一次检查,产出可归因、可评分的个人记录。Delta 仍是施工主责。
Echo 至少完成:
- 敏感件和高风险件的业务定义确认(哪些算敏感,谁说了算);
- 升级和人工审批责任确认(转人工后谁接、时限多少);
- 人工审核容量检查(升级量 vs 坐席处理能力);
- 错路由和漏判的业务代价分级;
- 是否满足原始业务需求的判断。
通用检查单(每条填一行):
| 原需求 | 当前功能 | 证据 | 用户反馈 | 未满足项 | 阈值是否调整 | 下一步判断 |
|---|---|---|---|---|---|---|
| 场景 C 双指标口径 | 路由 + 敏感件兜底 | qa-report.md | 演示反馈 | 待填 | 是否调整及原因 | Go / 继续 / 回炉 |
反模式与红线¶
- 把路由工作流做成简单分类器。 判对档但没执行动作,跟分类器没区别——验收要"判档 + 动作"双重验证。
- 档位例子与验证集标注不一致。 路由工作流忠实执行错误的例子导致必跑偏——写作后需逐条反向核对。
- 敏感件漏判(假阴性)。 宁可多升级不可漏;拿不准(confidence<0.6)兜底转人工。
- LLM 返回异常默认自动处理。 分级结果异常/非法 label 必须兜底到转人工,不是默认自动。
- 工具定义随意。 描述不清、只传单一 keyword、找不到返回报错——准确率直接崩。
- 不写"演示级验收声明"。 那会夸大 6 份样本的成果、埋下责任雷。
Important
红线本处落地:敏感件零漏判 是全书第三条政务红线。至此三条政务红线(数据不出域 / 答案可追溯 / 敏感件零漏判)加上贯穿性的"人做判断,AI 负责执行",四条红线在本套实操中已全部落地为验收口径。
本章小结¶
- 路由工作流本质 = 预编排分支执行:分类之后还要"做事"(自动答复 / 查部门库 / 转人工);它属于 Agentic Workflow,真正的动态决策循环(观察后重新规划)在实操四B。
- Router 模式:State / Node / Conditional Edge 三概念构建,任务天然分档用 Routing 就够。
- 工具设计决定路由工作流准确率;人机回环(敏感件转人工)是安全基石。
- 验收双指标:路由正确(判档+动作)≥90% + 敏感件零漏判(假阴性=0)。
- 演示级验收声明 + 向小王讲"AI 处理常规、敏感留给人 = 人做把关人"。
- 本体贡献:产生工单状态、责任部门、分派与人工审核动作(业务本体的输入)。
动手自检:
- 我能说清"为什么是路由工作流而不是分类器(也不需要动态 Agent)"吗?
- 我能写出三档判定标准(以"动作"为核心)并逐条反向核对档位例子吗?
- 我能设计好
check_department工具(入参/描述/边界/口语变体)吗? - 我能说清"敏感件为什么零漏判、拿不准为什么兜底转人工"吗?
练习与思考¶
- 基础: 默写三档定义与各自动作;画出归属 State / Node / Conditional Edge 的分级流程。
- 进阶: 用"档位例子反向核对"方法,检查你写的分级标准与 6 份工单标注是否一致,指出不一致处会造成怎样的首轮失败。
- 挑战(迁移练习/升级路径): 想对齐完整 Agent 工程可按需升级——1)人机协同(LangGraph
interrupt()+Command(resume),敏感件真·暂停等人审批而非简单路由);2)安全三层护栏(输入过滤防 prompt injection、最小权限、输出审查);3)真 MCP 接入。说明每项该在何时按需加。
延伸阅读¶
- 见 FDE-101 https://www.cloudzun.com/fde-course/(第 16 章 AI FDE 落地:Delta 技术与场景)——人机协同红线、Agent(智能体)化交付、安全护栏的落地选型。
- 实验手册: 6 份工单样本 + 部门职责库 + 启动提示词参考答案见《实验手册》
labs/lab4-routing-workflow.md附录 D。 - 下一章: 从公网到本地:私有化部署与模型微调(金字塔第 3 层与私有化部署的进阶底座)。