# Reference: Manus Context Engineering Principles 本技能基于 Manus(2025 年 12 月被 Meta 以 20 亿美元收购的 AI 智能体公司)的上下文工程原则。 ## Manus 六大原则 ### 原则 1:围绕 KV-Cache 设计 > "KV-cache 命中率是生产级 AI 智能体唯一最重要的指标。" **统计:** - 输入与输出 Token 比例约 100:1 - 缓存 Token:$0.30/MTok 对比 未缓存:$3/MTok - 成本相差 10 倍! **实现方式:** - 保持 Prompt 前缀稳定(单个 Token 的变化就会使缓存失效) - 系统 Prompt 中不要包含时间戳 - 采用只追加的上下文结构,并配合确定性序列化 ### 原则 2:屏蔽,而非移除 不要动态移除工具(这会破坏 KV-cache)。改用 logit 屏蔽。 **最佳实践:** 使用一致的操作前缀(例如 `browser_`、`shell_`、`file_`),以便于屏蔽。 ### 原则 3:文件系统作为外部记忆 > "Markdown 是我在磁盘上的'工作记忆'。" **公式:** ``` 上下文窗口 = 内存(易失、有限) 文件系统 = 磁盘(持久、无限) ``` **压缩必须可恢复:** - 即使丢弃了网页内容,也要保留 URL - 丢弃文档内容时,保留文件路径 - 绝不能丢失指向完整数据的指针 ### 原则 4:通过复述操控注意力 > "在整个任务过程中持续创建和更新 todo.md,将全局计划推入模型最近的注意力范围。" **问题:** 大约 50 次工具调用之后,模型会忘记原始目标("中间迷失"效应)。 **解决方案:** 在每次决策前重新读取 `task_plan.md`。目标会出现在注意力窗口中。 ``` 上下文开头:[原始目标——很远,已被遗忘] ...大量工具调用... 上下文结尾:[最近读取的 task_plan.md——获得注意力!] ``` ### 原则 5:保留错误信息 > "把错误的弯路留在上下文中。" **原因:** - 带有堆栈跟踪的失败动作能让模型隐式更新认知 - 减少重复犯同样错误 - 错误恢复是"真正智能体行为的清晰信号之一" ### 原则 6:不要被 Few-Shot 固化 > "一致性滋生脆弱性。" **问题:** 重复的动作-观察对会导致漂移和幻觉。 **解决方案:** 引入受控变化: - 稍微变换措辞 - 不要盲目复制粘贴模式 - 在重复性任务上进行重新校准 --- ## 三大上下文工程策略 基于 Lance Martin 对 Manus 架构的分析。 ### 策略 1:上下文缩减 **压缩:** ``` 工具调用有两种表示形式: ├── 完整版:原始工具内容(存储在文件系统中) └── 精简版:仅保留引用/文件路径 规则: - 对较旧的工具结果应用压缩 - 保留近期结果的完整内容(以便指导下一步决策) ``` **摘要:** - 在压缩达到收益递减时应用 - 使用完整的工具结果生成 - 创建标准化的摘要对象 ### 策略 2:上下文隔离(多智能体) **架构:** ``` ┌─────────────────────────────────┐ │ 规划智能体 │ │ └─ 将任务分配给子智能体 │ ├─────────────────────────────────┤ │ 知识管理器 │ │ └─ 审查对话 │ │ └─ 决定文件系统存储 │ ├─────────────────────────────────┤ │ 执行子智能体 │ │ └─ 执行分配的任务 │ │ └─ 拥有各自的上下文窗口 │ └─────────────────────────────────┘ ``` **关键洞察:** Manus 最初使用 `todo.md` 进行任务规划,但发现大约 33% 的操作都花在更新它上。后来转向由专用规划智能体调用执行子智能体的架构。 ### 策略 3:上下文卸载 **工具设计:** - 总共使用不超过 20 个原子函数 - 完整结果存储在文件系统中,而不是上下文中 - 使用 `glob` 和 `grep` 进行搜索 - 渐进式披露:只在需要时加载信息 --- ## 智能体循环 Manus 运行在一个连续的 7 步循环中: ``` ┌─────────────────────────────────────────┐ │ 1. 分析上下文 │ │ - 理解用户意图 │ │ - 评估当前状态 │ │ - 审视最近的观察结果 │ ├─────────────────────────────────────────┤ │ 2. 思考 │ │ - 我是否需要更新计划? │ │ - 下一个合理的操作是什么? │ │ - 是否存在阻碍? │ ├─────────────────────────────────────────┤ │ 3. 选择工具 │ │ - 选择一个工具 │ │ - 确保参数可用 │ ├─────────────────────────────────────────┤ │ 4. 执行操作 │ │ - 工具在沙箱中运行 │ ├─────────────────────────────────────────┤ │ 5. 接收观察结果 │ │ - 结果追加到上下文中 │ ├─────────────────────────────────────────┤ │ 6. 迭代 │ │ - 返回步骤 1 │ │ - 持续执行直到完成 │ ├─────────────────────────────────────────┤ │ 7. 交付结果 │ │ - 将结果发送给用户 │ │ - 附上所有相关文件 │ └─────────────────────────────────────────┘ ``` --- ## Manus 创建的文件类型 | 文件 | 用途 | 创建时机 | 更新时机 | |------|------|----------|----------| | `task_plan.md` | 阶段追踪、进度 | 任务开始时 | 完成阶段后 | | `findings.md` | 发现、决策 | 任何发现之后 | 查看图片/PDF 后 | | `progress.md` | 会话日志、已完成事项 | 在断点处 | 整个会话期间 | | 代码文件 | 实现 | 执行前 | 出错后 | --- ## 关键约束 - **单操作执行(Manus 2025 原始约束):** 每轮仅限一次工具调用,不并行执行。这记录了 Manus 2025 年沙箱实践的约束。**2026 年更新:** 现代宿主环境(Claude Code、Codex CLI)支持并行工具调用和子智能体,因此该约束已不再适用。计划文件(而非每轮一次调用的规则)仍然是协调点:并行调用和子智能体通过磁盘上持久的 Markdown 计划文件共享状态。 - **必须制定计划:** 智能体必须始终知道:目标、当前阶段、剩余阶段 - **文件即记忆:** 上下文 = 易失。文件系统 = 持久。 - **绝不重复失败:** 如果某个操作失败,下一步操作必须不同 - **沟通也是一种工具:** 消息类型:`info`(进度)、`ask`(阻塞)、`result`(终止) --- ## Manus 统计数据 | 指标 | 数值 | |------|------| | 每次任务平均工具调用次数 | ~50 | | 输入与输出 Token 比例 | 100:1 | | 收购价格 | 20 亿美元 | | 达到 1 亿美元收入用时 | 8 个月 | | 上线以来的框架重构次数 | 5 次 | --- ## 关键语录 > "上下文窗口 = 内存(易失、有限)。文件系统 = 磁盘(持久、无限)。所有重要的内容都要写入磁盘。" > "如果操作失败,下一步操作不要与失败操作相同。记录你尝试过的方法。改变策略。" > "错误恢复是真正智能体行为的清晰信号之一。" > "KV-cache 命中率是生产级 AI 智能体唯一最重要的指标。" > "把错误的弯路留在上下文中。" --- ## 来源 基于 Manus 官方上下文工程文档: https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus