Skip to content

以“客服工单办理”为例,从纯对话变为“可观测的任务流”。

🎯 文章目标

  • 展示从聊天到任务流的演进路径
  • 提供最小可运行样例(计划/工具/状态/回放)
  • 输出上线所需的观测与评估要点

📚 背景/前置

  • 初期:仅对话生成答案,无法闭环(无工具,无状态)
  • 目标:具备“计划→工具→回放”的闭环能力

🔧 核心内容

1) 设计演进

  • V0:对话问答(不可执行/无观测)
  • V1:加入工具调用(可执行)
  • V2:引入计划与回放(可解释/可调试)
  • V3:状态机 + 队列(可恢复/可扩展)

2) 最小落地骨架

mermaid
graph TD
  A[用户输入] --> B[规划]
  B --> C{工具选择}
  C -->|search| D[搜索工单]
  C -->|close| E[关闭工单]
  D --> F[回放/记录]
  E --> F

3) 关键实现片段

  • 规划:JSON 结构 steps/goals/constraints
  • 工具:JSON Schema + 幂等键
  • 回放:保存入参/出参/错误,支持“替换单步”重跑
  • 状态:队列/检查点/告警

💡 实战示例:对话到任务流(Node.js)

javascript
const plan = [{ step:1, action:'search', input:{ q:'退款' } }, { step:2, action:'close', input:{ id:'\{\{id\}\}' } ]
const msg = [{ role:'system', content:`计划:\${JSON.stringify(plan)}` }, { role:'user', content:'帮我关闭退款工单' }]

const r = await client.chat.completions.create({ model: process.env.CHAT_MODEL, messages: msg, tools })
// ... 解析 tool_calls 并执行

📊 对比/取舍(速查)

  • 对话型:上手快,但不可执行、不可观测
  • 任务流:成本更高,但可维护、可扩展

🧪 踩坑与经验

  • 没有计划与回放,问题难以复现
  • 不做幂等与检查点,长任务易失控

📎 参考与延伸

  • ReAct、Plan-and-Execute
  • 工作流引擎与任务队列

💭 总结

  • 用“计划 + 工具 + 状态 + 回放 + 观测”把对话变为任务流,提升可控性