第38回 单智能体现代实例——状态机工作流与可验证执行
做事先立规矩,规矩写成路标图。
遇到岔路不慌张,回滚重试皆有书。
第36回讲规划与自省,第37回讲长期记忆。
现在要把两者落地成“能跑的系统”:
工作流(workflow)。
工作流不是花哨名词,而是工程化的“收口”:
- 计划写成结构(节点与边)
- 每一步都有输入输出格式
- 失败有回滚与重试
- 关键节点有验证与审计
近年的综述把“Agent Workflow”视为智能体走向规模化与可控化的中心设施。1
而 FlowBench 等基准也指出:工作流知识缺失会导致规划幻觉与失败。2
这一回我们把“状态机”讲清:
它是把工作流做稳的最朴素、也最可靠的骨架。
一、为什么是状态机:因为自然语言不够“可执行”
一段口头计划通常像这样:
- 先查资料
- 再总结
- 最后输出
看着合理,但执行时会冒出一堆问题:
- 查资料失败怎么办?重试几次?换源吗?
- 总结结果如何验证?
- 输出格式不合格怎么办?
状态机的价值是把这些“暗规则”显式化:
- 状态(State):当前在哪一步
- 转移(Transition):满足什么条件就跳到哪一步
- 终止(Terminal):什么时候算完成或失败
它像一张流程图,但比流程图更“硬”:
每个状态都可以挂上检查与日志。
二、可验证执行:别让错误在流程里滚雪球
智能体工作流最怕“错误传播”:
- 第一步错一点,第二步基于错的结果继续,越走越远
因此近年的系统工作开始强调“选择性验证”:
不是每一步都重验(太贵),而是找出高风险节点重点验,并尽量不拖慢总延迟。
例如 Sherlock 提出对工作流节点做错误倾向分析,并在必要节点挂上验证器,运行时还可做推测执行以降低延迟影响。3
对看官而言,你先记住工程直觉就够:
- 验证像抽检,不必处处验,但关键点必须验
- 审计像账本,每一步要能追溯输入、输出与依据
三、极简可跑代码:一个小状态机(重试 + 回滚 + 验证)
下面代码演示一个最小“工作流状态机”:
- 状态:RETRIEVE → DRAFT → VERIFY → DONE / FAIL
- 重试:检索失败最多重试 2 次
- 验证:要求草稿里必须包含“引用:”字样(玩具规则)
class Workflow:
def __init__(self):
self.state = "RETRIEVE"
self.retries = 0
self.max_retries = 2
self.ctx = {}
self.log = []
def record(self, event):
self.log.append((self.state, event))
def retrieve(self):
self.record("retrieve()")
if self.retries < 1:
self.retries += 1
return None
return "证据A;证据B"
def draft(self, evidence):
self.record("draft()")
return f"答案:……\n引用: {evidence}"
def verify(self, draft):
self.record("verify()")
return "引用:" in draft
def run(self):
while True:
if self.state == "RETRIEVE":
ev = self.retrieve()
if ev is None:
if self.retries > self.max_retries:
self.state = "FAIL"
else:
self.state = "RETRIEVE"
else:
self.ctx["evidence"] = ev
self.state = "DRAFT"
elif self.state == "DRAFT":
draft = self.draft(self.ctx["evidence"])
self.ctx["draft"] = draft
self.state = "VERIFY"
elif self.state == "VERIFY":
ok = self.verify(self.ctx["draft"])
if ok:
self.state = "DONE"
else:
self.record("rollback_to_draft")
self.state = "DRAFT"
elif self.state == "DONE":
self.record("done")
return True, self.ctx, self.log
elif self.state == "FAIL":
self.record("fail")
return False, self.ctx, self.log
if __name__ == "__main__":
wf = Workflow()
ok, ctx, log = wf.run()
print("ok=", ok)
print("draft=\n", ctx.get("draft"))
print("log=", log)
这段玩具代码展示了三个生产级关键点:
- 结构化控制流:状态明确,分支明确
- 可恢复性:失败能重试,验证失败能回滚
- 可审计:log 记录了每一步做了什么
真实系统当然会把“retrieve/draft/verify”替换成模型调用与工具调用,
把“引用:”这种玩具验证替换成更严的约束与评测。
但骨架就是这个骨架。
四、小结:状态机让智能体从“会说”走向“会办”
状态机不是束缚,而是护栏。
它把“规划、自省、记忆、验证”统一到一个可控框架里。
下一回(第39回)我们把“单人办案”升级为“多人办案”:
多智能体协作——分工、辩论、协调算法与通信拓扑。
欲知后事如何,且听下回分解。
幻觉核查
- Agent Workflow 作为核心设施的论述:可核对综述对工作流定义、价值与挑战的归纳。1
- FlowBench 对“工作流引导规划”的评测与结论:可核对论文摘要与实验章节。2
- Sherlock 的“选择性验证 + 推测执行”思路:可核对论文摘要与方法概述。3
- 本回代码仅为状态机骨架演示,不代表安全的生产实现(缺少权限、超时、隔离、机密治理等)。
逻辑审计
- 与第37回衔接:长期记忆提供“该记住的规则”,状态机把规则固定为流程;记忆与流程合体才能稳定复用。
- 与导读一致:导读强调“可验证执行”,本回把验证变成工作流节点,且记录审计日志。
- 为第39回铺路:单智能体已能按流程走,多智能体则需要通信协议与协调机制,才能不互相拖累。
引用与溯源
Footnotes
-
Yu, C. A Survey on Agent Workflow — Status and Future arXiv:2508.01186 (2025-08) https://arxiv.org/abs/2508.01186 ↩ ↩2
-
Xiao, R., et al. FlowBench: Revisiting and Benchmarking Workflow-Guided Planning for LLM-based Agents arXiv:2406.14884 (2024-06-21) https://arxiv.org/abs/2406.14884 ↩ ↩2
-
Ro, Y., et al. Sherlock: Reliable and Efficient Agentic Workflow Execution arXiv:2511.00330 (2025-11-01) https://arxiv.org/abs/2511.00330 ↩ ↩2