发布时间:2026-09-23
标签:AI Agent|工程实践|模型实验|Model Evaluation
上一篇我说,版本七维里最容易翻车的是 Model。
有人不服:换个更强的模型,怎么可能变差?
于是我做了个实验——把同一个 Agent、同一套工具、同一个数据集,分别跑在三个模型上。
结果出乎所有人意料:最贵的那个模型,不是最好的那个;而"更强"的模型,在"选工具"这件事上,反而更差。
这一篇,我把这个实验完整做给你看。
系列导航
- 上一篇:AI Agent 工程实践(45):Agent 的版本控制到底控制什么
- 下一篇:AI Agent 工程实践(47):什么时候应该从 Agent 改回 Workflow
问题背景
这是第五阶段的第十一篇。上一篇建立了七维版本模型,这一篇单独拎出其中最玄的一维——Model——做一次受控实验。
动机很朴素:我们在第 45 篇说过,同一模型名的 API 背后,厂商会静默更新快照,导致 Agent"突然变笨"。但"模型影响"到底有多大?它影响的是哪方面?"更强"的模型就一定更好吗?
这些问题,光靠感觉答不了,只能靠实验。
错误尝试:迷信"更强 = 更好"
我最开始的假设很天真:换更强的模型,Agent 一定会变强。
于是我把 Repo Doctor 从 deepseek-chat 换到一个更大的模型,心想这下能力该涨了吧。结果跑完数据集一看,Success Rate 不升反降。
我第一反应是"数据集错了""代码有 bug"。排查了一圈,代码没动、数据没动,唯一变的就是模型。
这时我才被迫面对一个事实:Agent 的能力不等于模型的能力。模型只是七维里的一维,而"模型强"和"Agent 强"之间,隔着一整套工具、Prompt、Context 的配合。一个在裸聊天里更强的模型,放到 Agent 场景里,未必更会选工具、更守规矩。
关键观察:模型是乘数,不是全部
我把三个模型(代号 A、B、C,一个便宜、一个中档、一个大模型)跑同一份 eval 数据集,得到这张对比表:
| 指标 | 模型 A(便宜) | 模型 B(中档) | 模型 C(大模型) |
|---|---|---|---|
| Success Rate | 68% | 78% | 71% |
| Tool Accuracy | 82% | 79% | 70% |
| Answer Accuracy | 65% | 75% | 72% |
| Latency (avg) | 5.1s | 7.8s | 12.4s |
| Cost (avg tokens) | 1800 | 3200 | 6100 |
看这张表,有三个反直觉的发现:
- 最贵的 C,Success Rate 不是最高的。中档的 B 才是。
- 最大的 C,Tool Accuracy 反而最低(70%)。它更爱"自由发挥",常常不按工具描述来,甚至自己编一个工具。
- 模型 A 虽便宜,但 Tool Accuracy 最高(82%)。它"听话",但推理深度不够,Answer Accuracy 拉胯。
核心洞察:
Agent 能力 = Model + Prompt + Context + Tools + Rules + Memory + Runtime 的合力,模型只是其中一个乘数。
这个"合力公式",正是这个系列前四阶段所有组件的一次总回收——它们不是孤立的零件,而是共同决定 Agent 上限的乘数。
最终方案:把模型纳入实验,而非信仰
实验的产出,不是"哪个模型最好",而是一套把模型当变量、可量化比较的方法:
选型结论:对 Repo Doctor 来说,模型 B(中档)是当前最优解——综合成功率最高,成本适中。而"上最大的模型"这个直觉,被数据证伪了。
代码或配置示例
模型实验的核心,是"同一套代码,只换模型"的受控对比。关键是隔离变量:
# repo_doctor/experiments/model_ab.py —— 只换模型,其余七维全部锁定 def run_model_experiment(models, eval_dataset): results = {} for model in models: # 关键:Prompt / Rules / Tools / Knowledge / Dataset 全部用同一份 agent = build_agent( model=model, # 唯一变量 prompt=PROMPT_V12, # 锁定 rules=RULES_V7, # 锁定 tools=TOOLS_V4, # 锁定 knowledge=KNOWLEDGE_V2, ) metrics = run_eval(agent, eval_dataset) # 同一把尺子 results[model.name] = metrics print(f"{model.name}: {metrics}") return results # 三个模型跑同一数据集 run_model_experiment( models=[Model("A", "deepseek-chat"), Model("B", "mid-tier-model"), Model("C", "large-model")], eval_dataset=load_eval("eval/"), )这个实验脚本的精髓就一句:除了 model,其他六个维度全部锁死。否则你根本分不清,分数变化是模型带来的,还是 Prompt 或工具漂移带来的。这也正是第 45 篇 agent.lock 的用武之地。
设计权衡
| 候选方案 | 优点 | 缺点 | 为什么不选 |
|---|---|---|---|
| 迷信"更强 = 更好",直接换大模型 | 省事 | 成本高、可能更差 | 被数据证伪 |
| 哪个火用哪个 | 跟风 | 和你的任务脱节 | 别人的结论不适用于你 |
| 受控模型实验 | 可量化、贴合任务 | 需先有 eval 数据集 | 用数据选型,而非信仰 |
一个重要的边界提醒:模型实验的结论有时效性。模型 A/B/C 的表现,会因为厂商更新快照而改变。所以这不是"一锤定音",而是一个要定期重跑的流程。这也是为什么第 45 篇强调"模型要钉快照"——不钉,你的实验结论就是空中楼阁。
总结
✅ "换更强模型"的直觉,被受控实验证伪了。
✅ 三个模型跑同一数据集:最贵的不是最好的,最大的 Tool Accuracy 反而最低。
✅ Agent 能力 = Model + Prompt + Context + Tools + Rules + Memory + Runtime 的合力。
✅ 模型实验的精髓:只换模型,其余六维全部锁死。
✅ 铁律:换模型不是升级,是重新做一次验收——因为 Agent 的能力从来不属于某一个模型。
参考资料
- Anthropic《Building Effective Agents》中"模型选型"的讨论 → 为什么引用:印证了"Agent 能力是合力,模型只是乘数"。
- LMSys / 各类模型排行榜的方法论 → 为什么引用:理解"受控对比"的实验设计,是模型实验的基础。
系列导航
- 上一篇:AI Agent 工程实践(45):Agent 的版本控制到底控制什么
- 下一篇:AI Agent 工程实践(47):什么时候应该从 Agent 改回 Workflow
本文是 [AI Agent 工程实践] 系列的第 46 篇。