Agent 的能力上限往往不是框架决定的,而是底层模型决定的

模型能力是 Agent 的天花板

前面 19 篇讨论了各种 Agent 设计模式、工具、框架。但有一个事实绕不开:Agent 的表现上限主要由底层模型决定

同样的 Agent 框架、同样的 prompt、同样的工具集,换一个能力更强的模型,效果往往有明显提升;换一个能力更弱的模型,再精巧的框架也救不回来。这一篇梳理影响 Agent 表现的几个关键模型能力维度。


维度一:指令遵循(Instruction Following)

Agent 的工作很多时候是按 prompt 指示做事。指令遵循能力直接决定 Agent 行为的可控性。

什么是指令遵循

  • 严格按照输出格式(JSON、特定字段顺序、特定标记)
  • 不偏离 prompt 设定的任务边界
  • 多步指令时不漏步骤
  • 否定指令的遵守("不要做 X")

对 Agent 的影响

指令遵循差的模型,常见症状:

  • 要求输出 JSON,模型在 JSON 外加上额外说明
  • 要求只用提供的工具,模型自己编造工具名
  • 多 Agent 系统里,扮演特定角色的 Agent 偶尔"出戏"
  • 设定了禁止操作,模型在某些条件下仍然执行

主流模型的大致表现

(注:这是基于公开评测和实际使用的概括,具体数字随版本变化)

模型指令遵循
Claude Sonnet 4 / Opus较强,对复杂格式遵守稳定
GPT-4 / GPT-4o较强
GPT-3.5一般,复杂指令容易漏
Gemini Pro中等
开源模型(Llama 3、Qwen 等)视具体型号和版本差异较大

实践经验:如果 Agent 表现不稳定,第一个怀疑对象就是指令遵循能力。


维度二:工具使用(Tool Use)

Agent 需要根据情况选择并调用工具,这个能力的稳定性影响很大。

工具使用涉及的子能力

  • 在多个工具里选对一个
  • 正确填写工具的参数
  • 处理工具返回的结果
  • 知道什么时候不该调用工具(避免不必要的成本)
  • 工具失败时合理处理

实际差异

能力强模型表现弱模型表现
工具选择看任务自然选对倾向用熟悉的工具,错选
参数填写类型正确,必填项不漏类型错、字段名拼错
结果处理看懂错误信息后调整不看结果,重复同样调用
工具数量几十个工具仍能用对超过 10 个就开始混乱

提升工具使用稳定性的方法

不只是换模型,prompt 设计也有影响:

  • 工具描述要具体:"搜索学术论文" 比 "搜索" 好用
  • 参数示例:给每个工具几个调用示例
  • 失败处理指引:明确告诉 Agent 失败时该怎么办
  • 工具分组:把工具按场景分组,让 Agent 先选场景再选工具

弱模型 + 好 prompt 通常优于强模型 + 草率 prompt。但有上限。


维度三:长上下文(Long Context)

Agent 任务往往涉及大量历史信息:之前的工具调用结果、错误信息、代码片段。模型的长上下文处理能力影响 Agent 在长任务上的表现。

长上下文不只是窗口大小

声称支持 1M token 的模型,不等于在 1M token 里都能保持稳定的理解能力。常见现象:

  • 位置敏感:放在中间位置的信息被忽略(lost in the middle)
  • 召回准确率下降:上下文越长,准确召回特定细节的能力越差
  • 推理能力下降:长上下文下做复杂推理的稳定性低于短上下文

不同模型的实际表现

模型窗口长上下文实际表现
Claude Sonnet 4 / Opus200K长上下文性能下降较小
GPT-4o128K中段位置召回有下降
Gemini 1.5 Pro / 2.01M-2M窗口大,但全长一致性是另一回事
开源模型视具体型号名义窗口和实际可用差距大

对 Agent 设计的指导

  • 长任务里主动总结,不要堆所有历史
  • 关键信息(任务目标、约束)放在 prompt 开头或结尾
  • 中间历史定期压缩
  • 不依赖模型从长上下文里精确召回某个具体事实,重要的事实应该显式放在最新的 message 里

维度四:推理能力(Reasoning)

复杂任务需要多步推理。模型的推理能力决定了 Agent 能处理的任务复杂度上限。

推理体现在哪些地方

  • 任务规划:把复杂任务拆解成子任务
  • 失败诊断:从错误信息里推断真正原因
  • 反事实思考:假设某条路走不通,预判替代方案
  • 跨步骤的因果关联:步骤 5 失败可能是因为步骤 2 的某个决策

思考型模型的引入

2024 年开始,OpenAI o1、o3,DeepSeek R1,Claude 4 等模型引入了显式的思考机制——在输出最终答案前,模型先输出一段(不直接展示给用户的)推理过程。

这类模型在复杂推理任务上有明显优势:

模型类型HumanEvalSWE-bench Verified
常规模型(GPT-4o)~90%~30%
思考型模型(o3)~95%~70%

但代价是延迟和费用——思考过程本身要消耗 token,且这部分 token 通常按更高单价计费。

何时用思考型模型

适合用:

  • 复杂的算法实现
  • 多步推理才能解决的 bug
  • 需要规划的开发任务

不适合用:

  • 简单的代码补全
  • 信息检索任务
  • 对响应延迟敏感的交互场景

实际中混用是常见做法:路由层根据任务难度分发,简单任务给常规模型,复杂任务给思考型模型。


维度五:代码相关的专项能力

代码 Agent 特有的几个维度:

多语言支持

主流模型对 Python 支持都不错。其他语言差异大:

  • Rust、Go:主流模型较好,但偶有过时 API
  • TypeScript / JavaScript:较好,前端框架版本敏感
  • Java / C#:可用,但企业级框架的最佳实践掌握有限
  • 冷门语言(OCaml、Erlang 等):质量明显下降

库 / 框架的版本敏感性

模型训练数据有 cutoff,新版本 API 可能模型不知道。常见症状:

  • 使用了已废弃的 API
  • 用旧版本的语法或参数
  • 不知道某些新引入的库

应对:

  • prompt 里显式说明用的版本
  • 提供 import 示例
  • 失败时给文档链接让 Agent 重读

项目惯例的适配

模型默认按"常见做法"写代码,可能和项目现有风格不一致:

  • 命名风格(snake_case vs camelCase)
  • 错误处理方式(异常 vs 返回值)
  • 日志库选择

应对:

  • prompt 里说明项目惯例
  • 提供项目里的代码片段作为示例
  • 用 lint 工具校验生成的代码

模型选择的几个实际考虑

1. 不是越贵越好

复杂推理任务:用强模型(Claude Opus、GPT-4、o3) 简单任务:用便宜模型(Claude Haiku、GPT-4o-mini) 混用:路由层分发

2. 评测要在自己的场景做

公开 benchmark 反映的是平均能力。你的具体场景可能正好踩在某个模型的弱项上。建议从自己的真实任务里采样 20-30 个,每个候选模型都跑一遍。

3. 关注稳定性,不只是平均分

90% 通过率 + 偶尔静默错误 vs 80% 通过率 + 失败时显式承认,后者在生产里通常更可控。

4. 模型版本会变

主流模型在持续迭代,今天的最佳选择半年后可能不是。设计 Agent 系统时把"切换模型"的代价控制低一些,不要把某个特定模型的特性深度耦合进系统。


框架 vs 模型的权衡

回到开头的问题:Agent 的表现里,框架和模型谁更重要?

经验性的判断:

  • 模型差距 1 个档次(比如 GPT-3.5 vs GPT-4):模型差距主导,无论框架怎么设计
  • 模型差距小(比如 Claude Sonnet 4 vs GPT-4o):框架设计能拉开 10-20% 的差距
  • 同一模型下:好的 prompt 和工具设计可以让弱模型接近强模型的水平

实际选型的合理顺序:

  1. 先选合适的模型(功能足够、成本可接受)
  2. 再设计合适的 Agent 框架(控制流、工具集)
  3. 最后调 prompt 和工具描述(细节优化)

倒过来做(先选框架再考虑模型)是常见的弯路。


系列暂告段落

20 篇下来,从代码作为推理工具(PoT、CoC)到代码作为动作空间(CodeAct、Voyager),到工程化的系统设计(SWE-agent、OpenHands),再到评测、安全、上下文管理、模型选择,把代码 Agent 这个方向较重要的内容覆盖了一遍。

后续如果有新的有意思的论文或工程实践,会作为单篇补充。这个系列暂时告一段落,欢迎反馈和讨论。

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:20. 模型自身能力对 Agent 表现的影响

本文链接:https://www.sshipanoo.com/blog/ai/code-agent-harness/20-模型能力对Agent的影响/

本文最后一次更新为 天前,文章中的某些内容可能已过时!