究竟是花时间费力气去训练模型,还是基于最新最强的模型,再通过上下文学习能力构建一个智能体?相信这个是所有 AIAgent 开发者都会面临的问题。
在朋友的鞭策下,我研究了7月19日 Manus 联合创始人兼首席科学家季逸超(Yichao 'Peak' Ji)的《Context Engineering for AI Agents: Lessons from Building Manus》文章。
在这篇文章中,季逸超慷慨的把 Manus迭代多次的策略手动架构搜索、提示调整和经验猜测的过程总结了出来。那么,他们以"SGD"命名,是如何达到局部最优解?今天,我把Manus的优化策略,用小白都能听得懂的方法讲给你听。
首先,直接一句话总结:
“别去训练模型,去训练上下文。”
与其花几周去微调模型,不如花几小时去设计上下文(prompt、工具、缓存、文件系统),让大模型在现有能力下表现得像个专业 Agent。
接下来,把每个优化策略,逐个说清楚,讲明白。
策略一: KV-Cache 命中率,为什么它比你想的更重要?
想象你在玩一个文字冒险游戏,每次你输入一个动作,游戏都要重新加载前面的剧情。如果前面的剧情每次都要重新加载,游戏就会卡到爆炸。
- KV-Cache 是大模型用来“记住”前面说过的内容的缓存。
- 如果你每次对话的开头都变一点点(比如加了个时间戳),缓存就失效了,模型得重新算一遍前面所有内容。
- 结果就会导致 延迟变高,成本暴增。(以Claude -sonnet 4 的 api 价格为例:缓存命中 0.3 美元/百万 token,不命中 3 美元,差 10 倍)。
那么,该怎么做?
- ✅ 固定前缀:系统提示(system prompt)别动。
- ✅ 追加式更新:别改历史记录,只追加新内容。
- ✅ 显式缓存断点:告诉系统“这里可以缓存”。
策略二:Mask,不要 Remove:工具太多怎么办?
- 工具(函数调用)太多,模型容易选错,而且流行的MCP只会火上浇油。
- 直接动态加载/卸载工具会破坏缓存(KV-Cache),还会让模型困惑(历史动作引用了已删掉的工具)。
好比你开了一家餐厅,菜单上有 500 道菜。顾客点菜时眼花缭乱,厨师也容易做错。
你可能会想:“那把菜单藏起来一部分?”——但这样顾客会点不到菜,厨师也会晕。
怎么做?
- ✅ 不删工具,只“遮”工具:用“logit masking”技术,告诉模型“现在你只能选这几个工具”,而不是真的从上下文里删掉。
- ✅ 工具命名规范:比如所有浏览器工具都叫 browser_*,方便按前缀统一遮罩。
策略三:用文件系统当“无限记忆”
你的大脑只能记住最近 10 分钟的事,但你有一个无限大的笔记本,可以随时翻找。
你会怎么做?——把重要信息写进笔记本,忘记时先翻一下重要的信息。
同样的,虽然现在的大模型上下文窗口越来越大,但是也架不住你疯狂的加码。
- 大模型的上下文窗口再大(比如 128K),也可能不够装整个网页或 PDF。
- 压缩或截断会丢失信息,而且不可恢复。
怎么做?
- ✅ 把文件系统当外脑:让 Agent 自己读写文件(如 .md, .json)。
- ✅ 可逆压缩:比如网页内容可以暂时从上下文里删掉,但保留 URL,需要时再爬。
- ✅ 未来展望:如果 State Space Model(SSM)也能学会用文件系统,可能比 Transformer 更快更省。
策略四:用“复述”来操控注意力
你正在做一个复杂的项目,怕忘记目标,于是每做完一步就把目标写在便利贴上,贴在屏幕边。
每次走神时,看一眼就拉回来。
- 在长任务中,模型容易“跑偏”或“忘记初心”。
- 通过反复把目标写在上下文末尾(比如 todo.md),让模型每次决策时都“看到”目标。
怎么做?
- ✅ 动态更新 todo 文件:每完成一步,就更新并重新读入上下文。
- ✅ 自然语言操控注意力:不需要改模型架构,只需要让目标总在“最近记忆”里。
策略五:别把错误藏起来,让模型从失败中学习
你学骑自行车,摔了一跤。如果把这段记忆删掉,下次你还会在同一个地方摔。但如果你记得“上次这里有个坑”,你就会绕开。
- 很多系统会自动“清理”失败的工具调用或报错,让上下文看起来更“干净”。
- 但这会让模型重复犯错。
怎么做?
- ✅ 保留错误信息:把报错、空结果、失败动作都留在上下文里。
- ✅ 让模型自己调整:看到“上次 git push 失败了”,下次它可能会先检查权限。
策略六: 别让模型“死记硬背”:避免 Few-Shot 陷阱
你教小孩做题,每次都给他看一模一样的例题。结果他只会套模板,题目一变就不会了。
- 如果上下文里全是类似的“动作-结果”对,模型会机械模仿。
- 这会导致“漂移”或“幻觉”。
怎么做?
- ✅ 增加多样性:同样的动作用不同格式写,偶尔打乱顺序,加点噪音。
- ✅ 打破模式:让模型每次都“重新思考”,而不是复制粘贴。