🧠 构建聪明Agent的秘密:Manus团队的上下文工程实践全揭秘
最近看了一篇Manus AI团队的实战总结,讲的是他们在构建AI代理(Agent)系统时,为什么不从零训练模型,而是专注做"上下文工程"。作为产品/AI开发者,读完收获特别大,所以在这篇文章里,我用通俗的方式总结出来,分享给同样对Agent感兴趣的你。
🧭 为什么不训练模型,而要做"上下文工程"?
过去做NLP,要把模型拉下来、精调、部署,非常慢,一次改动可能就是几周时间。但现在的大模型(像GPT、Claude等)已经"强得离谱",只要组织好上下文,它就能自动完成推理和决策。
所以Manus做了一个关键决策:
我们不训练模型,而是训练上下文。
这带来两个好处:
- ⚡ 迭代快:几小时就能上线改动
- 🚀 跟着模型一起升级:大模型越强,我们的Agent就越聪明
他们把这条路叫做"上下文工程"(Context Engineering),是一种让LLM做事的全新方法论。
🧩 一、KV缓存命中率:性能和成本的生死线
LLM每次生成输出,其实就是"把你给的所有上下文吃一遍,再做下一步"。这会非常慢、非常贵。幸运的是,大模型支持KV Cache —— 如果你之前的上下文没变,它就能"跳过重新计算"。
📉 缓存和不缓存的成本差了10倍:
状态 | 成本(每百万 tokens) |
---|---|
有缓存命中 | $0.30 |
没命中缓存 | $3.00 |
所以,KV Cache 命中率直接决定了你Agent的成本、速度、稳定性。
如何保持缓存命中?
- ❌ 不要在提示里加"精确到秒的时间戳"
- ✅ 保持提示和上下文结构稳定
- ✅ 不要随便修改之前的动作记录或观察结果
- ✅ JSON序列化保持字段顺序一致
🔧 二、工具太多怎么办?遮蔽,而不是移除!
随着Agent越来越复杂,工具数量会爆炸。但工具越多,模型越难选对——越容易"聪明反被聪明误"。
大多数人会怎么做?
➡️ 把无用的工具删掉
Manus是怎么做的?
✅ 保留工具不删,但用"logits遮蔽"控制它不能被选中
举例:
- 所有浏览器工具名以
browser_
开头 - 所有命令行工具以
shell_
开头
通过给模型设置"你只能选 browser_ 的工具",来限制它的行为。这种方法:
- 不破坏上下文(KV Cache 不失效)
- 不让模型找不到之前提到的工具
🧠 三、文件系统就是"无限上下文+外挂记忆"
你以为128K上下文够用了?错!遇到网页、PDF、代码等大数据,分分钟撑爆。
所以Manus的思路是:
把文件系统当作模型的外挂记忆系统。
让模型:
- 写入文件(保存数据)
- 读取文件(按需回忆)
比如:
- 把一整页网页删掉,但保留URL
- 保留文件路径,内容不放上下文
这样可以:
- 减少token成本
- 让记忆随用随取
- 保持信息可恢复、可追踪
✅ 四、写"待办清单"=操控模型注意力
Manus的Agent在做复杂任务时,会自动生成一个 todo.md
文件,不断更新它:
- 勾掉已完成的事项
- 把目标重复写到上下文最后
这样做的目的是:
让模型在每次决策前,都能"回顾一下当前目标"
不然模型容易走着走着就忘了自己要干嘛,尤其是调用几十个工具那种长任务。
💥 五、错误不能抹去,要保留在上下文里
我们人类能从错误中学习,模型也是一样的。
- ❌ 错误发生了?不要清空上下文重试
- ✅ 错误发生了?把错误记录也一并留着!
为什么?
- 模型看到"这种调用失败了",它会自动避开类似操作
- 错误本身,是学习的机会,不是需要隐藏的污点
🎲 六、不要被少样本学习套路误导
你以为喂几个例子模型就能学会?在Agent里,情况不一样!
比如:
Agent看了5份简历都说"不合适",它会开始惯性拒人,哪怕第6个很优秀
Manus的解决方案:
在上下文中加入轻微的多样性
比如:
- 调整措辞
- 换种顺序
- 加点格式变体
这样可以打破模式化,让模型根据实际内容做判断,而不是照抄前面的例子。
📌 总结一句话:
大模型不是万能的,但一个精心设计的上下文,可以让它变得非常聪明。
上下文工程是Agent系统里真正的灵魂,它决定了:
- 模型多快跑
- 错了怎么改
- 工具怎么选
- 记忆能不能持续
✍️ 最后说一句:
Manus团队在过去一年里重写了4次架构,踩了无数坑,才总结出这套上下文工程经验。如果你正在做类似的事,希望这篇整理能帮你少走几步弯路!