做 AI Agent / 自动化系统一段时间之后,我慢慢意识到一个有点反直觉的问题:
最难的地方,往往不是模型够不够聪明,也不是规划能不能拆对步骤,而是——这个任务什么时候才算“完成”。
Demo 很容易,系统很难
如果只是做 demo,其实一切都很清晰:
- 用户输入一个任务
- Agent 拆解步骤
- 调用工具
- 最后一步跑完 → done
happy path 非常顺。
但只要系统开始“认真工作”,问题就马上变得模糊起来。
现实世界里的「不完成」
在真实的 Agent / 自动化系统中,我遇到过大量这种情况:
- 中间步骤部分成功、部分失败
- 某个工具超时了,但其实已经产生了副作用
- 重试是安全的,还是会重复执行?
- 文件生成成功了,但后续校验失败,这算成功还是失败?
- Agent 表面上“跑完了”,但其实留下了一个半成品状态
这时候你会发现,一个看似简单的问题开始变得很难回答:
这个任务,现在到底算不算完成?
Planner 说 done,Executor 扔在重试、回滚、执行
很多 Agent 架构里,规划层(Planner)和执行层(Executor)是分开的。
一个很常见的现象是:
- Planner 认为目标已经达成
- Executor 却在处理重试、补偿、清理、回滚
从“语义目标”上看,任务完成了;
从“系统状态”上看,事情远没结束。
如果这两者没有一个明确、可验证的“完成定义”,系统就会逐渐变得不可预测。
「完成」不是一个布尔值
后来逐渐意识到:
在长时间运行的 Agent 系统里,完成(done)几乎从来不是一个 true / false。
它更像是以下这些因素的组合:
- 状态机是否进入了一个可接受的终态
- 核心不变量(invariants)是否被满足
- 是否超过了时间或重试预算
- 是否需要外部信号(人、系统、监控)来确认
- 当前状态是否“足够安全”以停止进一步行动
很多时候,“完成”其实是一个运营决策,而不只是程序判断。
这也是为什么很多 Agent 系统看起来很聪明,但用起来很累
模型能力在进步,工具调用在进步,但系统层面的这些问题如果没有被认真对待,结果往往是:
- 行为不可预测
- 失败很难解释
- 系统不敢自动跑,只能人工盯着
最后大家会得出一个错误结论:
“是不是模型还不够好?”
但很多失败,根本不是模型问题,而是系统从一开始就没想清楚什么叫完成。
一点开放式的思考
最近我也把这个问题拿出来和其他工程师交流,发现做调度器、分布式系统、长期自动化的人,踩过几乎一模一样的坑。 例如:给每个任务绑定可观测的终态校验规则、把补偿逻辑纳入任务状态机。
可能也没有一个放之四海而皆准的答案,但至少有一件事是确定的:
如果一个 Agent 系统没办法清晰定义“done”,那它迟早会在规模化运行时出问题。
这不是总结,也不是教程,只是一次工程层面的困惑记录。
如果你也在做类似系统,可能会对这个问题有自己的答案。
至少对我来说,这个问题比“用什么模型”要重要得多。