AI代理的上下文工程:构建Manus的经验教训
来源: Manus 官方博客 | 作者: Yichao ‘Peak’ Ji(Manus 创始人) 发布日期: 2025-07-18 | 内容类型: 技术博客(独白/论述) 总结方法: 金字塔原理 + SCQA + 渐进式总结
执行摘要
Manus 团队选择基于上下文工程而非微调来构建 AI 代理,经过四次框架重建,总结出六条核心实践原则:围绕 KV 缓存设计以降低延迟和成本、用 logits 遮蔽而非动态移除工具来管理行动空间、将文件系统作为无限外部记忆、通过复述 todo 列表操控模型注意力、保留错误上下文以促进自我纠正、以及引入结构化变化避免少样本模式固化。这些原则的核心思想是:上下文的塑造方式决定了代理的行为质量,而非模型本身的能力。
SCQA 框架
| 要素 | 内容 |
|---|---|
| 情境 (S) | 前沿 LLM 的上下文学习能力使得构建 AI 代理不再必须依赖微调,Manus 选择了上下文工程路线 |
| 矛盾 (C) | 上下文工程看似简单,实则充满挑战:缓存失效、工具爆炸、上下文溢出、注意力漂移、错误处理、模式固化等问题层出不穷 |
| 问题 (Q) | 如何系统性地设计和管理 AI 代理的上下文,使其在生产环境中稳定、高效、可扩展? |
| 答案 (A) | 六条经过实战验证的上下文工程原则,覆盖性能优化、行动空间管理、记忆外部化、注意力引导、错误恢复和多样性保持 |
核心论点结构
中心论点:上下文工程是 AI 代理系统最关键的工程实践,它决定了代理的速度、恢复能力和扩展性。
-
围绕 KV 缓存设计是性能优化的核心
- Manus 的平均输入输出 token 比为 100:1,缓存命中直接决定成本(缓存 vs 未缓存相差 10 倍)
- 三个关键实践:保持提示前缀稳定、上下文只追加不修改、明确标记缓存断点
-
用遮蔽(masking)而非移除来管理工具可用性
- 动态添加/移除工具会破坏 KV 缓存并导致模型困惑
- Manus 采用上下文感知状态机 + logits 遮蔽,通过一致的工具名称前缀(如
browser_、shell_)实现分组约束
-
文件系统是终极上下文——无限、持久、可操作
- 128K 上下文窗口在真实代理场景中仍不够用,且长上下文降低性能、增加成本
- 压缩策略必须可恢复(保留 URL/路径即可还原),文件系统充当结构化外部记忆
-
通过复述操控注意力,解决”丢失在中间”问题
- Manus 典型任务需约 50 次工具调用,长循环中模型易偏离目标
- 持续重写 todo.md 将全局计划推入近期注意力范围,无需架构变更
-
保留错误上下文是提升代理自我纠正能力的关键
- 擦除失败会移除证据,模型无法学习避免重复错误
- 错误恢复是真正代理行为的最明显指标,但学术基准中严重代表不足
-
避免少样本模式固化,引入结构化多样性
- 重复的行动-观察对会让模型陷入模仿模式
- 通过不同序列化模板、替代措辞、格式微噪音打破模式惯性
章节摘要
背景与选择:上下文工程 vs 微调
作者回顾了从 BERT 时代到 GPT-3 的 NLP 发展历程,以亲身经历说明微调路线的致命缺陷——反馈循环慢、模型易被新一代淘汰。Manus 选择上下文工程路线,使产品与底层模型保持正交,“如果模型进步是上涨的潮水,我们希望 Manus 成为那条船,而不是固定在海床上的柱子”。团队将迭代过程戏称为”随机研究生下降”(SGD)。
围绕 KV 缓存进行设计
KV 缓存命中率是生产 AI 代理最重要的单一指标。代理的输入远大于输出(Manus 约 100:1),缓存命中可将成本降低 10 倍。关键实践包括保持提示前缀稳定(避免在系统提示开头放时间戳)、确保上下文只追加(JSON 序列化键顺序须确定性)、以及在必要时手动标记缓存断点。
遮蔽,而非移除
工具数量爆炸(尤其 MCP 生态加剧了这一问题)会导致代理决策质量下降。动态增删工具会破坏 KV 缓存且引发模型困惑。Manus 的解决方案是保持工具定义不变,通过 logits 遮蔽在解码阶段约束可选动作,并设计一致的工具名称前缀(browser_、shell_)实现分组控制。
使用文件系统作为上下文
128K 上下文窗口在真实场景中不够用:观察结果庞大、长上下文降低性能、成本高昂。Manus 将文件系统视为终极上下文——无限大小、天然持久、代理可直接操作。压缩策略始终设计为可恢复的(保留 URL/路径即可还原内容)。作者还展望了 SSM(状态空间模型)若能掌握基于文件的记忆,可能成为神经图灵机的真正继任者。
通过复述操控注意力
Manus 处理复杂任务时会创建并持续更新 todo.md 文件。这不是装饰性行为,而是刻意的注意力操控机制——将全局计划复述到上下文末尾,推入模型的近期注意力范围,避免”丢失在中间”问题。典型任务约 50 次工具调用,长循环中目标漂移是真实问题。
保留错误的内容
隐藏错误(清理痕迹、重试操作)会移除模型学习的证据。Manus 的经验表明,将失败的尝试保留在上下文中是改善代理行为最有效的方法之一——模型看到失败后会隐式更新内部信念,降低重复犯错概率。
不要被少样本示例所困
少样本提示在代理系统中可能适得其反——上下文中重复的行动-观察对会让模型陷入模仿模式。例如审查 20 份简历时,代理会因模式惯性而重复类似行动。解决方案是引入结构化变化:不同序列化模板、替代措辞、格式微噪音。
关键洞察
-
KV 缓存命中率是代理系统的”北极星指标” 在 100:1 的输入输出比下,缓存命中直接决定了延迟和成本。系统提示开头放时间戳这种看似无害的设计,实际上会摧毁缓存效率。
-
工具管理的正确抽象层是解码层而非定义层 不要在运行时增删工具定义(会破坏缓存和一致性),而是通过 logits 遮蔽在解码阶段实现动态约束,这是更优雅且高效的方案。
-
文件系统是 LLM 的”外部海马体” 上下文窗口本质上是工作记忆,而文件系统提供了长期记忆。关键在于压缩必须可恢复——只压缩可通过路径/URL 还原的内容。
-
自我复述是最低成本的注意力工程 通过持续更新 todo.md 将目标推入上下文末尾,利用 LLM 对近期 token 的注意力偏好,无需任何架构改动即可解决目标漂移问题。
-
错误是代理的学习信号,不是需要清除的噪音 保留错误上下文使模型能进行隐式的贝叶斯更新,这是区分真正代理行为和简单脚本执行的关键能力。
可行建议
- 优化 KV 缓存命中率:审计系统提示中的动态内容(时间戳、随机 ID),确保 JSON 序列化键顺序确定性(来源:Peak Ji)
- 采用 logits 遮蔽管理工具:设计一致的工具名称前缀体系,用状态机 + 预填充约束替代动态工具增删(来源:Peak Ji)
- 将文件系统纳入代理架构:让代理学会读写文件作为外部记忆,设计可恢复的压缩策略(来源:Peak Ji)
- 实现目标复述机制:在长循环任务中让代理持续更新任务清单,将计划推入近期注意力范围(来源:Peak Ji)
- 保留完整的错误轨迹:不要清理失败的尝试,让模型从自身错误中学习调整(来源:Peak Ji)
名言金句
“如果模型进步是上涨的潮水,我们希望 Manus 成为那条船,而不是固定在海床上的柱子。” — Yichao ‘Peak’ Ji
“我们亲切地将这种手动架构搜索、提示调整和经验猜测的过程称为’随机研究生下降’。这并不优雅,但它有效。” — Yichao ‘Peak’ Ji
“擦除失败会移除证据。没有证据,模型就无法适应。” — Yichao ‘Peak’ Ji
“你的上下文越单一,你的智能体就变得越脆弱。” — Yichao ‘Peak’ Ji
“智能体的未来将一次构建一个上下文。好好设计它们吧。” — Yichao ‘Peak’ Ji
作者原创框架
上下文工程六原则框架
Peak Ji 提出了构建生产级 AI 代理的六条上下文工程原则,覆盖了从底层性能优化到高层行为控制的完整栈:
| 层次 | 原则 | 解决的问题 |
|---|---|---|
| 性能层 | 围绕 KV 缓存设计 | 延迟和成本 |
| 行动层 | 遮蔽而非移除 | 工具爆炸与决策质量 |
| 记忆层 | 文件系统作为上下文 | 上下文窗口限制 |
| 注意力层 | 通过复述操控注意力 | 长循环目标漂移 |
| 学习层 | 保留错误内容 | 重复犯错 |
| 鲁棒性层 | 避免少样本固化 | 模式惯性与脆弱性 |
资源清单
论文与技术
| 名称 | 类型 | 提及语境 |
|---|---|---|
| BERT (2018) | 论文 | 微调时代的代表,反衬上下文学习的优势 |
| GPT-3 (2020) | 论文 | 上下文学习的开端 |
| Flan-T5 (2022) | 论文 | 与 GPT-3 一起标志上下文学习时代 |
| KV 缓存 | 技术概念 | 代理系统性能优化的核心机制 |
| 神经图灵机 (2014) | 论文 | SSM + 文件记忆可能是其真正继任者 |
| vLLM | 开源框架 | 自托管模型的前缀缓存实现 |
| MCP (Model Context Protocol) | 协议 | 工具爆炸问题的加剧因素 |
| Hermes 格式 (NousResearch) | 技术规范 | 函数调用预填充的示例格式 |
本总结由 transcript-summarizer skill 生成 方法论:金字塔原理 (Minto) + SCQA + 渐进式总结 (Forte) + In Vivo Coding 原始文件:transcript.md(121 行) 本总结未使用 Shownotes 辅助信息