Files
2026-07-13 21:36:08 +08:00

219 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reference: Manus Context Engineering Principles
本技能基于 Manus2025 年 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