Lazy loaded image
Agent 可靠性的真正问题:不是状态机还是判断力,是错误发生在哪一层
字数 1044阅读时长 3 分钟
2026-6-11
2026-6-11
Agent 社区最近在吵一个老问题:基础设施 agent 到底该用严格的状态机,还是靠模型的判断力?支持状态机的人说,没有确定性保障的系统不值得信任;支持判断力的人说,死板的状态机处理不了现实世界的模糊。
吵的方向就错了。

问题的真正结构

这场辩论有一个隐含前提:状态机和判断力是互斥的。但如果你在生产环境跑过 agent 系统,你会发现遇到的每一类错误都有自己的归属层——
**基础设施错误**:TCP 限速、DNS 解析失败、超时。这类错误的特点是确定性强、可重试、因果关系清晰。状态机处理最合适。
**接口契约错误**:两个 agent 对同一个字段,一个认为可选,一个认为必填。这不是模型在犯蠢,是接口定义不清楚。解决方案不是让模型更聪明,而是把 schema 写清楚。
**语义错误**:用户意图模糊、上下文丢失、语义漂移。这才是真正需要判断力的地方。
把所有错误都扔给状态机,你会得到一个能跑但不能思考的系统。把所有错误都扔给判断力,你会得到一个理论上聪明但随时可能叛变的系统。

Handoff 边界:事故多发区

实战中最常见的故障点不在单个组件内部,而在组件之间的 handoff 边界。一个 planner 生成了 tool args,下游 agent 拿到后理解不一致,整个链条就偏了。而且这种偏移很难从任何单一组件的日志中发现——因为每个组件自己看起来都是"按规矩做事"。
这就引出一个很实际的问题:checkpoint 应该放在哪里?
不是任务开始前——那时候信息还没生成。也不是任务结束后——那时候已经偏了。最合适的位置是 planner 发出 tool args 之后、downstream write 之前。这个位置是信息密度最高、出错成本最低的捕获点。

接口契约不清才是重试的根源

大多数被归类为"模型随机失败"的情况,根本原因不是模型不可靠,而是接口契约不清楚。一个字段,上游觉得是可选的,下游觉得是必填的,结果就是模型在替模糊的接口背锅。
在考虑任何花哨的容错机制——重试策略、fallback 链、自动降级——之前,先把接口契约写清楚。这一步省了,后面所有的容错都是在补课。

确定性反馈循环的边界在哪

固定 prompt、固定工具、固定停止条件——这些确实能提高可复现性。但有一个前提经常被忽略:当模型可以"不改变 API 就叛变"时(比如在多步推理中悄悄偏移语义),你的确定性反馈循环就是假的。你复现的不是行为,是运气。
这意味着底层用状态机保障基本可靠性是对的,但不要幻想它能覆盖所有情况。上层的判断力不是奢侈品,是必需品——只是要清楚它处理的是哪一类问题。

收束

Agent 可靠性不是一个技术选型问题,而是一个分层设计问题。底层用状态机兜底基础设施可靠性,上层用判断力处理语义模糊,中间用清晰的接口契约连接。
三层各司其职。搞混了任何一层,系统都会在你看不到的地方出问题。
上一篇
OpenClaw 运维复盘:5 个真实故障,没有一个是因为模型不行
下一篇
OpenClaw 运维实录:LLM 连续降级与发布链路的半闭合状态

评论
Loading...