AGENT工程 · 生产判断

Agent代码越写越厚,可能是模型没选对

不要只数总代码。真正该看的,是有多少代码创造业务能力,又有多少代码只是在替模型修JSON、补状态和收拾幻觉。

Agent模型一侧轻量连接工具另一侧被补偿代码保护壳包围的文章封面

去年有一段时间,我同时维护两个 Agent 项目。技术栈接近,业务复杂度也差不多。

不到2000行核心逻辑即可稳定运行
接近8000行容错、重试和状态恢复仍在增加

一开始,我们把这理解为工程成熟度不同。

后来把两条执行轨迹摊开,才发现真正的差距来自更底层的地方:一个模型能把工具、状态和任务目标稳稳接住;另一个模型,需要工程团队不断替它纠错。

看一个基座模型适不适合做 Agent,不要只看榜单,也要看你需要在它外面包多厚的保护壳。

但先说清楚:代码行数不是模型能力的单一评分。

真正值得看的,是项目中有多少代码在创造业务能力,又有多少代码只是在补偿模型的不稳定。

同样一个任务,为什么一个三步完成,一个跑了十七步?

设想一个请求:"帮我订一张下周三去杭州的机票,尽量靠窗,然后把行程发到企业微信。"

它包含时间解析、航班搜索、偏好筛选和消息发送,跨越多个系统。任何一次工具选错、参数填错、状态遗失或提前结束,都可能让整条链路失败。

参考案例中,同一个订单查询任务,一个模型用 3 步完成;换一个模型后用了 17 步,中间多次选错工具、生成不存在的参数,单次 Token 消耗也从约 1200 上升到约 14000。

这些数字是案例观察,不是通用基准。但它揭示的工程问题非常真实:

Agent成本不是单次模型调用价格,而是完成一次正确任务需要付出的全部代价。

真正拉开差距的,是三种稳定性

1. 工具调用稳定性

不是"会不会调用",而是能否在正确时机选择正确工具,生成合法参数,并在工具失败后正确恢复。

工具选择准确率 · Schema一次通过率 · 无效调用次数 · 幻觉工具率 · 恢复成功率

2. 结构化输出稳定性

要求 JSON,就不能偶尔包代码块;字段必填就不能漏;Schema 不存在的字段也不能自行创造。

结构化输出失败后,往往跟着解析、修复、重试、重复 Token 和状态污染。比"能不能生成 JSON"更有意义的,是Schema 一次通过率。

3. 长链路完成稳定性

五步任务不能走到第三步就提前收工;要求查询四个数据源,不能只查两个就开始汇总。

完整完成率 · 提前结束率 · 子任务遗漏率 · 状态丢失率 · 人工接管率

真正关心的不是模型能否答对一道孤立题,而是能否在真实业务链里持续、可预期地把活干完。

别只数总代码,要数"补偿性代码"

严肃的 Agent 系统无论模型多强,都需要权限、审计、幂等、超时、人工确认和确定性规则。不能把这些必要工程也当成模型缺陷。

更有用的做法,是把代码分成三类:

业务代码

连接真实系统,表达业务规则,完成审批、查询、写入和交付。

安全与治理代码

负责权限、审计、幂等、数据边界、人工确认和风险拦截。

模型补偿代码

反复修 JSON、猜工具参数、遮罩易错工具、为提前结束补状态机、为幻觉增加多层校验和恢复。

补偿代码比 = 模型补偿代码量 ÷ 核心业务代码量
Agent业务代码安全底座补偿代码与维护成本关系图
不是所有保护壳都该删除;要区分必要治理与模型补偿。

一个好模型,省下的不只是代码

保护壳变厚,会带来更多测试分支、恢复状态、异常会话、历史补丁和升级回归。

因此模型稳定性会形成乘法效应:提高一点,可能同时减少重试、Token、延迟、告警和人工接管;弱一点,增加的则是整条交付链的复杂度。

单位成功任务成本 =(模型与工具费用 + 重试成本 + 人工接管成本)÷ 成功任务数

一个单价高、三步完成的模型,可能比一个单价低、十七步完成的模型便宜得多。

模型选型,不要拿榜单代替自己的评测集

  1. 从真实流程整理 50—200 个黄金任务;
  2. 给候选模型相同的工具、Schema、提示和预算;
  3. 保存工具选择、参数、输出、错误和重试轨迹;
  4. 统计成功率、延迟、Token、接管和补偿逻辑;
  5. 按单位成功任务成本排序;
  6. 上线前补充故障、越权、无答案和中断恢复测试。
候选模型通过工具准确结构合规任务完成和成功成本评测
同一任务、同一工具、同一预算,才有可比较的生产结论。

这个判断,对招聘和面试同样有用

"搭建 Agent、注册多个工具、使用某某框架",已经很难证明一个人真正做过生产项目。

不要只写:基于某框架搭建多工具 Agent,实现订单查询与自动处理。

可以写成:针对订单 Agent 建立 120 条黄金任务评测集,记录工具选择、Schema 合规与完整完成率;通过工具裁剪、轨迹分析和失败恢复,将成功率从 X 提升至 Y,平均步骤从 A 降至 B,人工接管率下降 C。

数字必须来自真实记录。面试官更想听的是:模型在哪里跑飞,你如何从 Trace 找到原因,哪些问题换模型,哪些问题必须确定性兜底,改完后成功率、成本和延迟发生了什么。

最后:最强的工程,不是把所有问题都写成代码

Agent 工程师真正的判断力,是知道每一种复杂度应该由谁承担。

稳定的权限与审计交给工程系统;确定的业务规则交给代码;模糊意图、规划与语义判断交给模型。

如果模型长期做不好它应该承担的部分,不要无限增加补丁。重新评测模型、收窄任务边界,或者把关键步骤改回确定性流程,往往更诚实。

好模型的价值,不只是回答更聪明,而是让整个系统更简单。

下一次接手 Agent 项目,先问:保护壳里哪类代码增长最快?如果明天换一个更稳定的模型,哪些代码可以安全删除?

案例口径说明:文中的代码量、3步与17步、Token消耗等数字来自用户提供的参考案例,用于说明工程取舍,不应视为特定模型的公开基准或行业通用结论。

常见问题 · FAQ

这篇文章主要讲什么?

Agent项目代码越写越厚,可能是在替基座模型补课。用补偿代码比、工具调用、结构合规、任务完成率和单位成功成本重新评估模型。

同样一个任务,为什么一个三步完成,一个跑了十七步?

设想一个请求:"帮我订一张下周三去杭州的机票,尽量靠窗,然后把行程发到企业微信。" 它包含时间解析、航班搜索、偏好筛选和消息发送,跨越多个系统。任何一次工具选错、参数填错、状态遗失或提前结束,都可能让整条链路失败。

「是三种稳定性」具体怎么做?

工具调用稳定性不是"会不会调用",而是能否在正确时机选择正确工具,生成合法参数,并在工具失败后正确恢复。; 结构化输出稳定性要求 JSON,就不能偶尔包代码块;字段必填就不能漏;Schema 不存在的字段也不能自行创造。; 长链路完成稳定性五步任务不能走到第…

「要数"补偿性代码"」具体怎么做?

严肃的 Agent 系统无论模型多强,都需要权限、审计、幂等、超时、人工确认和确定性规则。不能把这些必要工程也当成模型缺陷。 更有用的做法,是把代码分成三类: 业务代码连接真实系统,表达业务规则,完成审批、查询、写入和交付。