Skip to content

企业 Agent 运行时状态机

企业 Agent 不能只靠“当前对话文本”判断任务走到哪一步。

一旦涉及澄清、确认、工具调用和流程提交,就必须有显式状态机。

最小状态集合

状态含义
received已接收用户输入
intent_detected已完成意图识别和风险判断
need_clarification缺少关键字段,等待用户补充
planned已生成可执行计划
waiting_confirmation高风险动作等待用户确认
executing_tool正在调用工具或业务系统
completed已完成回答或业务动作
failed执行失败,需要停止、重试或人工接管
cancelled用户取消或确认票据过期

状态名不重要,重要的是每个状态都能回答:下一步能做什么,不能做什么。

状态流转

澄清不是失败,确认不是闲聊。它们都是运行时状态。

状态数据

每个任务实例至少保存这些字段:

字段用途
task_id任务实例标识
session_id关联多轮对话
trace_id关联一次执行链路
current_state当前状态
intent_result最近一次意图识别结果
plan_steps当前计划步骤
pending_inputs等待用户补充的字段
confirmation_ticket_id等待确认的票据
last_error最近失败原因

状态数据要能持久化。服务重启后,至少能知道任务停在哪一步。

可恢复与不可恢复

状态是否可恢复处理方式
need_clarification用户补充字段后重新进入意图判断
waiting_confirmation确认票据未过期时继续执行
executing_tool视工具而定用幂等键查询或重试
failed视原因而定可重试错误回到 planned,不可恢复错误停止
cancelled不再继续原任务
completed只允许查询结果或发起新任务

不要把所有失败都重试。写操作失败时,先查业务系统真实状态,再决定是否补偿或人工接管。

失败分类

失败类型示例默认处理
missing_input缺日期、金额、对象进入澄清
permission_denied用户无权查或执行停止并记录审计
risk_blocked风险策略拦截停止或进入确认
tool_timeoutOA 或数据库超时查询状态后有限重试
tool_failed业务系统返回错误记录错误,必要时人工接管
citation_failed引用不存在或不在候选集不输出带来源结论

错误要明确,不要把所有异常都包装成“系统繁忙”。

状态机边界

状态机负责执行生命周期,不负责业务权限本身。

能力应放位置
判断用户能不能查policy
判断是否需要确认risk policy / planner
保存当前任务状态planning state
执行工具调用tools / infrastructure
写入审计事件audit service

状态机应该调用这些能力,而不是把所有逻辑都塞进去。

上线底线

  1. 每个任务都有 task_idsession_idtrace_id
  2. 等待澄清和等待确认必须可恢复;
  3. 高风险工具必须从 waiting_confirmation 进入执行;
  4. 写操作必须有幂等键;
  5. 失败状态必须记录原因和下一步建议;
  6. 已取消和已完成任务不能继续执行旧计划。

没有状态机,企业 Agent 很快会在多轮对话、重试和流程提交里失控。