原文地址:manus.im/blog/Contex…
省流版:
一、围绕KV缓存进行设计
相同前缀的上下文可利用 KV 缓存,大幅减少首次生成标记时间(TTFT)和推理成本。以 Claude Sonnet 为例,缓存的输入标记费用为 0.30 美元 / 千标记,未缓存则高达 3 美元 / 千标记,差距达 10 倍之多。从上下文工程角度,提升 KV 缓存命中率需遵循几个关键做法:
- 保持你的提示前缀稳定。 由于LLM的自回归特性,即使是单个标记的差异也会使该标记之后的缓存失效。一个常见的错误是在系统提示的开头包含时间戳——尤其是精确到秒的时间戳。虽然这让模型能告诉你当前时间,但也会降低你的缓存命中率
- 使你的上下文只追加。 避免修改之前的操作或观察。确保你的序列化是确定性的。许多编程语言和库在序列化JSON对象时不保证键顺序的稳定性,这可能会悄无声息地破坏缓存。
- 在需要时明确标记缓存断点。 某些模型提供商或推理框架不支持自动增量前缀缓存,而是需要在上下文中手动插入缓存断点。在分配这些断点时,要考虑潜在的缓存过期问题,并至少确保断点包含系统提示的结尾。
此外,如果你正在使用像 vLLM 这样的框架自托管模型,请确保启用了前缀/提示缓存,并且你正在使用会话 ID 等技术在分布式工作节点之间一致地路由请求。
二、遮蔽,而非移除
随着 AI 智能体功能增强,动作空间愈发复杂,工具数量激增,尤其在 MCP 流行及用户可自定义工具的情况下,模型易选错动作或执行低效路径。Manus 团队尝试设计动态动作空间,但实验表明,除非必要,应避免在迭代过程中动态添加或移除工具,原因主要有两点:
- 在大多数LLM中,工具定义在序列化后位于上下文的前部,通常在系统提示之前或之后。因此任何更改都会使后续所有动作和观察的KV缓存失效。
- 当先前的动作和观察仍然引用当前上下文中不再定义的工具时,模型会感到困惑。如果没有约束解码,这通常会导致模式违规或幻觉动作。
为了解决这个问题并仍然改进动作选择,Manus使用上下文感知的状态机来管理工具可用性。它不是移除工具,而是在解码过程中掩蔽token的logits,以基于当前上下文阻止(或强制)选择某些动作。
- 自动 – 模型可以选择调用或不调用函数。通过仅预填充回复前缀实现:<|im_start|>assistant
- 必需 – 模型必须调用函数,但选择不受约束。通过预填充到工具调用令牌实现:<|im_start|>assistant<tool_call>
- 指定 – 模型必须从特定子集中调用函数。通过预填充到函数名称的开头实现:<|im_start|>assistant<tool_call>{"name": "browser_ 通过这种方式,我们通过直接掩码token的logits来约束动作选择。例如,当用户提供新输入时,Manus必须立即回复而不是执行动作。我们还有意设计了具有一致前缀的动作名称——例如,所有与浏览器相关的工具都以browser_开头,命令行工具以shell_开头。这使我们能够轻松确保代理在给定状态下只从特定工具组中进行选择而无需使用有状态的logits处理器。
这些设计有助于确保Manus代理循环保持稳定——即使在模型驱动的架构下。
三、使用文件系统作为上下文
大模型的上下文窗口无论多大都存在限制,且超长上下文会降低推理速度、增加成本。Manus 创新性地将文件系统当作代理的外部记忆,信息可随时存取,确保历史状态可查、可读写、可恢复。这一做法突破了模型本身上下文窗口的局限,为 AI 代理处理复杂、长期任务提供了强大的支持,使得代理在执行任务过程中能够随时调用历史信息,保持任务的连贯性与准确性。
Manus压缩策略始终设计为可恢复的。例如,只要保留URL,网页内容就可以从上下文中移除;如果沙盒中仍然保留文档路径,则可以省略文档内容。这使得Manus能够缩短上下文长度,而不会永久丢失信息。
四、通过复述操控注意力
在长链条任务中,Agent 容易遗忘早期目标。Manus 引入 todo.md 的动态更新机制:
- 持续将任务回顾写入上下文末尾,让模型“复述”目标——并在任务进行过程中逐步更新它,勾选已完成的项目。。
- 解决Agent在50+步任务中的“中间迷失”问题
五、保留错误的内容
智能体在执行任务过程中出错难以避免,传统做法可能是隐藏错误并重新开始,但 Manus 团队认为应将失败信息留在上下文里。这样模型能够 “看到” 失败路径——以及由此产生的观察结果或堆栈跟踪,形成负面示例,从而在后续执行中减少同类错误。通过这种方式,上下文不仅包含成功经验,也积累了错误教训,助力Agent不断自我修正与优化。
六、不要被少样本示例所困
- 少样本提示的局限性:虽然少样本提示是提升 LLM 输出的常用技术,但在代理系统中可能适得其反。由于语言模型擅长模仿上下文的行为模式,若上下文中充满类似的行动 - 观察对,模型会倾向于遵循该模式,即便其已非最优选择。
- 具体风险:在涉及重复决策或行动的任务(如用 Manus 审查 20 份简历)中,代理可能因上下文模式陷入固定节奏,重复类似行动,导致偏离目标、过度泛化甚至产生幻觉。
- 解决办法:通过增加多样性打破单一模式,例如 Manus 会在行动和观察中引入结构化变化(如不同序列化模板、替代性措辞、格式微小差异等),以受控的随机性调整模型注意力,避免代理因上下文单一而变得脆弱。
总结
Manus的七大法则源于四次重构与百万次真实交互,非万能公式,却是Manus验证有效的路径。为我们节省一些错成本并提供了构建Agent的一些宝贵的思路,感谢Manus🙏。