Manus是我比较常用的通用Agent。最近Manus团队分享了他们话费上千万美金学习的Agent构建的经验和教训,很值得大家学习。
ManusAI 在构建其 AI Agent 的过程中,选择了基于前沿模型的上下文学习能力,而非从头训练端到端模型。这一决策使得他们能够快速迭代和部署改进,并使产品与底层模型解耦。然而,上下文工程并非易事,ManusAI 团队通过反复试验和架构探索,总结出了一系列宝贵的经验教训。
1. 围绕 KV-Cache 进行设计
KV-Cache 命中率是生产阶段 AI Agent 最重要的指标,直接影响延迟和成本。在 Agent 操作中,上下文会随着每次迭代而增长,而输出通常较短,导致预填充和解码的比例高度倾斜。利用 KV-Cache 可以显著降低首次生成时间(TTFT)和推理成本。
实践要点:
- 保持提示前缀稳定: LLM 的自回归特性意味着即使是单个 token 的差异也会使缓存失效。避免在系统提示开头包含时间戳等动态信息。
- 使上下文仅追加: 避免修改先前的动作或观察结果,并确保序列化是确定性的,以防止静默地破坏缓存。
- 在需要时明确标记缓存断点: 对于不支持自动增量前缀缓存的模型,需要手动插入缓存断点,并确保断点包含系统提示的末尾。
- 启用前缀/提示缓存: 如果自托管模型,确保启用前缀/提示缓存,并使用会话 ID 在分布式工作器之间一致地路由请求。
2. 遮蔽而非移除
随着 Agent 能力的增强,其动作空间会变得越来越复杂。动态添加或移除工具会带来问题,因为这会使 KV-Cache 失效,并可能导致模型混淆或幻觉。ManusAI 采用上下文感知的状态机来管理工具可用性,通过遮蔽 token logits 来限制或强制选择某些动作,而不是移除工具定义。
实践要点:
- 避免动态增删工具: 除非绝对必要,否则不要在迭代过程中动态添加或移除工具。
- 利用响应预填充: 大多数模型提供商和推理框架支持响应预填充,这允许在不修改工具定义的情况下约束动作空间。
- 设计一致的动作名称前缀: 例如,所有浏览器相关工具以
browser_开头,命令行工具以shell_开头,这有助于在特定状态下轻松限制 Agent 只能选择特定组的工具。
3. 将文件系统用作上下文
尽管现代 LLM 提供了巨大的上下文窗口,但在实际 Agent 场景中仍然可能不足。观察结果可能非常庞大,模型性能会下降,并且长输入成本高昂。ManusAI 将文件系统视为终极上下文,模型可以按需读写文件,将文件系统不仅用作存储,还用作结构化的外部化记忆。
实践要点:
- 利用文件系统进行上下文管理: 将文件系统作为无限大小、持久且可由 Agent 直接操作的上下文。
- 可恢复的压缩策略: 确保压缩策略是可恢复的,例如,网页内容可以从上下文中删除,只要其 URL 保持不变,并且文档内容可以省略,只要其路径在沙盒中保留。
4. 通过复述操纵注意力
Agent 在处理复杂任务时,会创建 todo.md 文件并逐步更新。ManusAI 通过不断将待办事项列表重写到上下文的末尾,将全局计划推入模型的注意力范围,从而避免“中间遗失”问题并减少目标错位。
实践要点:
- 将目标复述到上下文末尾: 通过自然语言将任务目标和待办事项列表不断重写到上下文的末尾,以保持模型的注意力集中。
5. 保留错误信息
Agent 会犯错误,隐藏这些错误会阻止模型学习和适应。ManusAI 的经验表明,将错误信息保留在上下文中是改进 Agent 行为的最有效方法之一。当模型看到失败的动作和结果观察或堆栈跟踪时,它会隐式更新其内部信念,从而减少重复相同错误的可能性。
实践要点:
- 保留错误信息: 不要隐藏错误,而是将其保留在上下文中,以便模型能够从失败中学习并改进。
- 错误恢复是 Agent 行为的关键指标: 错误恢复能力是真正 Agent 行为的最清晰指标之一。
6. 避免少样本陷阱
少样本提示是一种常见的改进 LLM 输出的技术,但在 Agent 系统中可能会适得其反。语言模型是优秀的模仿者,如果上下文充满了相似的动作-观察对,模型就会倾向于遵循这种模式,即使它不再是最优的。ManusAI 通过引入少量结构化变体来增加多样性,例如不同的序列化模板、替代措辞、微小的噪声或格式化,从而打破这种模式并调整模型的注意力。
实践要点:
- 增加多样性: 在动作和观察中引入少量结构化变体,以避免模型陷入重复模式。
- 避免少样本陷阱: 不要让 Agent 陷入“少样本陷阱”,即过度模仿上下文中的模式。
结论
上下文工程对于 AI Agent 来说仍然是一个新兴但至关重要的领域。模型能力再强,也无法取代对记忆、环境和反馈的需求。
塑造上下文的方式决定了 Agent 的行为方式、运行速度、恢复能力以及扩展性。ManusAI 通过在数百万用户中进行真实世界测试,总结出了这些经验教训,希望能帮助其他构建 AI Agent 的团队更快地收敛并避免痛苦的迭代。
参考地址
- AI代理的上下文工程:构建Manus的经验教训:manus.im/blog/Contex…
- 上下文学习:arxiv.org/abs/2301.00…
- 少样本提示:www.promptingguide.ai/techniques/…
往期文章: