一句话结论
Agent 的瓶颈不是模型能力,是上下文管理。
写 Agent 前我以为难点是 tool calling 的编排,做完才意识到:模型每一步看到的"世界"由你决定,你给得太多它会迷失,给得太少它会臆造。
三个被反复验证的原则
- 每个步骤只见它需要见的:搜索结果不要原样喂回,先提取要点。
- 历史可压缩:上一轮的工具结果如果已经被用过,下一轮就总结成一句话。
- 失败信号要明确:模型重复犯错通常是因为它根本没意识到上一次失败了——把 error 显式写进上下文。
// 反例:把工具原始 JSON 全部塞回
messages.push({ role: 'tool', content: JSON.stringify(rawResult) })
// 正例:先压缩成 Agent 真正需要的信息
messages.push({
role: 'tool',
content: summarize(rawResult, { keep: ['id', 'title', 'status'] })
})
一个反直觉的发现
给 Agent 看自己的 reasoning,效果远不如给它看 reasoning 的结果。
让模型每步输出思考过程是流行做法,但把这些思考链全部留在上下文里,会让后续步骤被前面的"自我说服"绑架。我的做法是:thinking 用完即丢,只保留最终决策。
Agent 写得好,本质上是上下文设计师做得好。