AI Agent的“记忆力”与“工具箱”

Agent

基于Manus,探讨AI Agent的上下文工程

AI Agent作为人工智能领域的前沿方向,正逐步从概念走向实际应用。不同于传统的问答系统,AI Agent具备自主思考、规划、执行并与外部环境交互的能力,其应用场景涵盖代码生成、科学研究、客户服务及自动化办公等多个领域。

然而,要使这些AI Agent真正发挥潜力,仅依靠大型语言模型(LLM)的强大能力是不足的。一个关键且常被忽视的环节是“上下文工程”(Context Engineering)。

上下文工程旨在高效管理和利用Agent在执行任务过程中产生的所有相关信息,包括用户指令、历史对话、工具使用记录及环境反馈等。上下文管理的优劣直接影响Agent的智能水平、运行效率及资源消耗。

本文将基于Manus团队在其官方博客《Context Engineering for AI Agents: Lessons from Building Manus》中分享的经验,解析AI Agent上下文工程的五项核心策略。这些策略是Manus团队在实际构建和优化AI Agent过程中积累的宝贵实践经验。

KV-Cache:“短期记忆”优化术

KV-Cache是大型语言模型(LLM)推理过程中的一项关键优化技术。我们可以将其理解为LLM的“速记本”,用于存储模型在处理文本序列时生成的中间计算结果(键值对)。

当模型处理新的文本片段时,如果其前缀与已缓存的内容匹配,模型便可直接复用缓存,避免重复计算,从而显著提升推理效率。这类似于人类在连续对话中,无需每次都从头回忆所有细节,而是基于已有的理解继续交流,以提高沟通效率。

在通用聊天机器人场景中,用户输入和模型输出通常较为简短,KV-Cache的优化效果可能不甚明显。然而,在AI Agent执行复杂多步任务时,其重要性则凸显。

Agent需要经历“思考-行动-观察”的多次迭代循环,每次迭代都会向其“记忆”中添加新的上下文信息,导致上下文长度不断增长。Manus团队观察到,Agent的输入上下文与实际决策输出之间的比例可高达100:1。在这种“长输入、短输出”的场景下,KV-Cache的有效命中对于Agent的运行速度和计算成本至关重要。

为最大化KV-Cache的命中率,Manus团队提出了以下策略:

首先,保持Prompt前缀的稳定性。LLM对上下文的微小变化非常敏感。即使是上下文中的一个字符变动,也可能导致后续所有缓存失效。例如,在系统Prompt中包含精确到秒的时间戳,会导致每次运行都生成不同的Prompt前缀,从而使KV-Cache无法复用。因此,应尽量确保Prompt的起始部分保持固定和简洁。

其次,仅在上下文末尾追加内容。为确保缓存的有效性,Agent的上下文应仅允许在末尾追加新信息,避免修改或插入已有内容。此外,上下文在转换为模型可理解的格式时,其内部元素的顺序也必须保持一致,因为某些编程语言在处理数据结构时可能不保证键的顺序,这可能导致缓存意外失效。

最后,必要时手动设置缓存断点。部分模型平台或推理框架可能不具备自动增量缓存的能力。在这种情况下,开发者需要手动在上下文中明确指定缓存点。设置缓存点时,应至少包含系统Prompt的结尾部分,并需考虑缓存失效的潜在情况。

KV-Cache的优化,看似是模型推理层面的技术细节,实则是AI Agent系统设计中成本与效率平衡的艺术。在Agent多步推理的场景下,每一次KV-Cache的命中都意味着计算资源的节省和响应速度的提升。

Mask, Don"t Remove

随着AI Agent能力的不断扩展,其可调用的工具集(Action Space)也日益庞大。一个Agent可能需要执行发送邮件、数据查询、网页浏览、代码执行等多种操作,其“工具箱”的规模可能达到数百个。

当用户能够自定义添加工具时。工具数量的激增容易导致模型在选择工具时出现混淆或低效决策。Manus团队指出,过度武装的Agent反而可能变得“迟钝”。

面对工具爆炸问题,常见的直觉是采用“动态工具箱”策略,即按需加载工具,类似于检索增强生成(RAG)机制。然而,Manus团队的实践经验表明,除非绝对必要,应避免在Agent运行过程中频繁动态增删工具。原因如下:

动态增删工具会破坏KV-Cache。工具定义通常位于大模型上下文的靠前位置。修改工具定义等同于改变了上下文的前缀,这将导致KV-Cache失效,从而降低推理效率。

模型可能产生“幻觉”或行为异常。如果Agent之前使用过的工具被移除,但其“记忆”中仍保留有该工具的使用记录,模型可能会因缺乏“约束解码”(Constrained Decoding)而生成不符合规范的指令,甚至出现“幻觉”行为。

为解决这一挑战,同时确保Agent能精准选择工具,Manus团队采用了巧妙的“掩码”(Masking)策略。他们并非直接移除工具,而是在Agent“思考”阶段。

通过掩码Token logits的方式,使模型在工具选择时无法“看到”那些不应使用的工具,或仅能“看到”允许使用的工具。这类似于对模型施加一种“柔性约束”,引导其行为。

在实际操作中,许多模型服务商支持“响应预填充”(Response Prefill)功能,允许在不修改工具定义的前提下限制Agent的行动范围。例如,当用户发出指令后,Agent应首先回复用户而非直接调用工具。

Manus团队还建议为工具命名时采用统一前缀(如browser_用于浏览器相关工具,shell_用于命令行工具),以便在特定场景下方便地限制Agent仅从某一类工具中进行选择。

Manus团队提出的“掩码而非移除”策略,充分体现了“柔性约束”的设计哲学。它在保证Agent灵活性的同时,通过巧妙的机制维持了系统的稳定性和可控性。

这提示我们在设计Agent系统时,不仅要关注模型能力和工具丰富度,更要学会利用LLM自身的特性,以“四两拨千斤”的巧劲儿,在不增加系统复杂度的前提下,提升Agent的智能和可靠性。这种设计思路远比简单粗暴地增删功能更为高级和有效。

Use the File System as Context

尽管当前大型语言模型的上下文窗口已扩展至128K甚至更大,但在AI Agent的实际工作场景中,这通常仍显不足,甚至可能成为一种“甜蜜的负担”。主要原因在于:

信息过载导致上下文溢出。Agent在处理网页或PDF等富文本信息时,其巨大的信息量可能轻易超出上下文窗口限制。

模型存在“长文本遗忘”问题。即使上下文窗口足够大,模型也可能在处理超长文本时出现对早期内容理解和利用能力下降的问题。

长上下文带来高昂的计算成本。即使有KV-Cache优化,传输和预填充大量Token仍会产生显著的计算资源消耗。

为应对这些挑战,许多Agent系统会采用上下文截断或压缩策略。然而,过度或不可逆的压缩可能导致关键信息丢失。由于Agent的下一步行动依赖于所有历史状态,任何不可逆的信息损失都可能带来风险。

Manus团队在此提出了一种创新的解决方案:将文件系统作为Agent的“终极上下文” 。文件系统具备近乎无限的存储容量和持久化能力,且Agent能够直接对其进行读写操作。

通过让模型学会按需读写文件,文件系统不再仅仅是存储介质,而成为一个结构化、外部化的“记忆库”。这类似于人类大脑将大量知识存储于外部载体(如书籍、电脑、互联网),并在需要时进行查阅。

Manus的上下文压缩策略是“可恢复”的。例如,网页内容可以暂时从上下文中移除,但其URL会被记录;文档内容可以不直接放入上下文,只需记录其在沙盒中的路径。这样,Agent的上下文得以缩短,同时信息不会永久丢失。

将文件系统作为Agent的“外部大脑”,这一策略极具前瞻性。它不仅有效缓解了LLM上下文长度的限制,更重要的是,它革新了Agent的信息处理范式,使其能够像人类一样,将“短期记忆”(LLM上下文)与“长期记忆”(文件系统)相结合。

Manipulate Attention Through Recitation

与Manus Agent交互的用户可能会注意到一个有趣的现象:在处理复杂任务时,Manus倾向于创建一个todo.md文件,并在任务进展过程中不断更新,标记已完成项。这并非简单的习惯,而是Manus团队精心设计的一种“操纵注意力”的策略。

一个典型的Manus任务可能涉及平均50次工具调用,这是一个漫长的循环过程,Agent的决策高度依赖于大模型。在上下文过长或任务复杂度较高时,大模型容易出现“注意力漂移”或遗忘早期目标的问题,即所谓的“lost-in-the-middle”现象。这类似于人类在处理多任务时,若频繁被打断或信息量过大,也可能偏离最初的目标。

Manus的解决方案是:持续重写todo.md列表,将自身的目标反复“复述”到上下文的末尾。这一策略非常有效,它能将全局计划强制推入模型最近的注意力范围,从而有效避免“lost-in-the-middle”问题,确保Agent的目标始终保持一致。

Keep the Wrong Stuff In

Agent在执行任务过程中犯错是不可避免的现实。大型语言模型可能产生“幻觉”,外部环境可能返回错误信息,工具调用也可能不按预期执行,各种异常情况层出不穷。在多步骤任务中,失败并非偶然,而是循环过程的固有组成部分。

然而,许多人在面对错误时,本能地选择隐藏失败痕迹:清理错误日志,重新尝试,甚至重置模型状态,并将问题归咎于“神奇”的温度(temperature)参数。这种做法看似安全可控,但代价是抹去了失败的证据,导致模型无法从错误中学习和进步。

Manus团队的经验揭示了一个令人惊讶的简单方法,能让Agent变得更智能:将错误的尝试及其伴随的错误信息或堆栈跟踪原封不动地保留在上下文中

当模型“看到”一个失败的动作及其反馈时,它会悄然更新自身的“认知”,如同内心敲响警钟:“哦,原来这样行不通!”如此一来,模型在下次遇到类似情况时,便能自动规避该错误,减少重复犯错的可能性。

Manus团队甚至认为,Agent从错误中恢复的能力,是判断其是否真正具备“智能”的最明显标志之一。遗憾的是,当前大多数学术研究和公开评测仍侧重于Agent在理想条件下的成功率,而忽视了这种从失败中学习的关键能力。

总结

综上所述,上下文工程对于AI Agent系统而言,是一门新兴且至关重要的学问。尽管大型语言模型本身的能力持续增强,推理速度更快,成本更低,但它们无法替代Agent的“记忆力”、与环境交互的能力以及从反馈中学习的能力。最终,Agent的智能水平、恢复能力及可扩展性,都取决于为其构建的“上下文舞台”。

Manus团队分享的这些经验,是他们在历经无数次迭代、克服重重挑战,并基于数百万真实用户反馈所积累的成果。尽管这些策略并非放之四海而皆准的普适真理,但它们在Manus的实践中已被证明行之有效。如果这些经验能帮助您规避潜在的陷阱,少走弯路,那么本文的目的便已达成。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论