36氪 - AI相关文章 13小时前
接连陷裁员、“跑路”争议后,Manus联创发文深度复盘
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Manus联合创始人季逸超在技术博客中深度复盘了构建Manus的经验教训,重点分享了AI代理的上下文工程实践。他强调了上下文工程的重要性,并提出了七个关键点,包括押注上下文而非训练模型、重视KV-cache命中率、避免动态工具增减、使用文件系统作为上下文、通过复述操控注意力、保留错误内容以改进行为,以及避免少样本提示的陷阱。这些经验旨在帮助开发者更快地构建高效的AI Agent,并应对实际应用中的挑战。

🎯 **押注上下文而非模型训练:** Manus放弃了从头开始训练模型的策略,转而专注于上下文工程,从而能够快速迭代并使产品与底层模型保持正交。这意味着产品改进可以在几小时内完成,而不是数周,并且不受特定模型更新的限制,能够更好地适应模型发展的趋势。

⚡ **KV-cache命中率是关键指标:** 季逸超指出,KV-cache命中率是AI Agent生产阶段最重要的指标,直接影响延迟和成本。提高命中率的关键在于保持提示前缀稳定、上下文仅追加以及明确标记缓存断点,这能显著降低推理成本,例如Claude Sonnet的缓存输入token成本比未缓存的低10倍。

🛠️ **遮蔽而非移除工具:** 随着Agent能力增强,工具数量会爆炸式增长,动态增减工具会破坏KV-cache并导致模型困惑。Manus通过遮蔽token logits的方式,在不移除工具定义的情况下,根据上下文动态调整工具可用性,确保Agent循环的稳定性和效率。

🗄️ **文件系统作为外部记忆:** 面对上下文长度限制和信息丢失风险,Manus将文件系统视为最终上下文,允许模型按需读写文件,实现外部记忆。这种策略能够缩短上下文长度而不丢失信息,为Agent处理大规模数据提供了可恢复的解决方案。

📝 **通过复述操控注意力:** 为了防止Agent在复杂任务中偏离主题或遗忘目标,Manus通过不断重写todo.md文件来更新全局计划,将目标重述到上下文末尾,将其置于模型的近期注意力范围,从而有效避免“迷失在中间”的问题。

❌ **保留错误内容促进行为改进:** Manus认为,保留失败尝试的上下文信息是改进Agent行为的有效方法。当模型看到失败的行动和结果时,会隐式更新内部信念,减少重复犯错的可能性。错误恢复能力是衡量Agent行为是否成熟的关键指标。

🎲 **打破少样本提示的局限:** 语言模型容易模仿上下文中的行为模式,导致Agent在Agent系统中可能陷入重复的、非最优的路径。Manus通过在行动和观察中引入结构化变化(如序列化模板、措辞、顺序或格式的微小噪声),增加多样性,帮助模型打破模式,调整注意力,提高Agent的鲁棒性。

距3月6日惊艳亮相仅100余天,Manus接连陷入大规模裁员传闻和“删博跑路”争议。

近日,Manus联创季逸超通过一篇技术博客,对公司发展进行了深度复盘,他在文中坦诚地总结了团队在构建Manus过程中积累的经验教训,主要集中在7个方面:

1.不再只是训练模型,而是押注上下文。放弃“从头开始为开放信息提取和语义搜索训练模型”,Manus将押注于上下文工程,“在几小时内而非几周内推出改进,并使产品与底层模型保持正交”。

2.KV-cache命中率是生产阶段AI Agent最重要的单一指标,它直接影响延迟和成本。从上下文工程的角度来看,提高KV-缓存命中率涉及几个关键实践:保持提示前缀稳定、使上下文仅追加、在需要时明确标记缓存断点。

3.除非绝对必要,避免在迭代过程中动态添加或移除工具。Manus使用遮蔽 token logits的方法,让模型看不见不应调用的工具。

4.使用文件系统作为上下文。Manus让模型把长期记忆写入虚拟文件系统,按需读写,实现外部记忆,规避信息丢失。

5.通过复述操控注意力。模型容易中途忘记目标,Manus会不断用自然语言更新并重述todo.md 文件,把全局目标拉回注意力焦点,防止任务跑偏。

6.保留错误的内容。Manus发现,“改善Agent行为最有效的方法之一出奇地简单:将错误尝试保留在上下文中。当模型看到失败的行动——以及由此产生的观察结果或堆栈跟踪——它会隐式地更新其内部信念。这会使其先验远离类似的行动,减少重复相同错误的可能性”。

7.不要被少样本提示所困。语言模型会模仿上下文中的行为模式,解决方法是增加多样性,Manus选择在行动和观察中引入少量的结构化变化——不同的序列化模板、替代措辞、顺序或格式的微小噪声,这种受控的随机性有助于打破模式并调整模型的注意力。

Manus此前曾在业界大火,官方介绍是全球首款通用AI智能体,产品发布后,其官网的访问量迅速增长至千万级别,成为Deepseek之后,在国内另一个出圈的AI应用。

资料显示,Manus于3月6日凌晨发布,是一个通用的AI代理,可以连接思想和行动,它不仅会思考,还会提供结果。Manus擅长工作和生活中的各种任务,在用户休息时完成所有事情。产品官网显示,Manus在GAIA基准测试中取得SOTA的成绩,该成绩大幅超过OpenAI。

然而进入7月,Manus“问题不断”。

首先是7月8日,Manus被爆启动国内业务调整:其120名员工中,仅40余名核心技术人员迁往新加坡总部,其余人员均被裁撤;与此同时,公司正式将全球总部迁至新加坡,并同步退出中国市场。针对上述传闻,Manus回应:“基于公司自身经营效率考量,我们决定对部分业务团队进行调整。公司将继续专注核心业务发展,提升整体运营效率。”

随后在7月11日,Manus官方微博和小红书账号的内容清空。

以下为Manus联合创始人季逸超博客全文,标题为《AI代理的上下文工程:构建Manus的经验教训》:

在 Manus 项目的最初阶段,我和我的团队面临一个关键决定:我们应该使用开源基础模型训练一个端到端的 Agent,还是基于前沿模型的上下文学习能力构建一个 Agent?

在我从事 NLP 的第一个十年,我们没有这种选择的奢侈。在遥远的 BERT 时代(是的,已经过去七年了),模型必须先进行微调——并评估——才能转移到新任务。这个过程通常每次迭代需要数周时间,即使与今天的 LLM 相比,这些模型都很小。对于快速发展的应用,特别是在产品市场契合度(PMF)之前,这种缓慢的反馈循环是一个致命问题。

这是我上一个创业公司的惨痛教训,我从头开始为开放信息提取和语义搜索训练模型。然后 GPT-3 和 Flan-T5 出现了,我的内部模型一夜之间变得无关紧要。讽刺的是,这些相同的模型标志着上下文学习的开始——以及一条全新的前进道路。

这个来之不易的教训使选择变得明确:Manus 将押注于上下文工程。这使我们能够在几小时内而非几周内推出改进,并使我们的产品与底层模型保持正交:如果模型进步是上涨的潮水,我们希望 Manus 成为那条船,而不是固定在海床上的柱子。

然而,上下文工程证明并非那么直截了当。它是一门实验科学——我们已经重建了我们的 Agent 框架四次,每次都是在发现了更好的塑造上下文的方式之后。我们亲切地将这种手动架构搜索、提示调整和经验猜测的过程称为「随机研究生下降法」。它不够优雅,但很有效。

这篇文章分享了我们通过自己的「SGD」所达到的局部最优解。如果你正在构建自己的 AI Agent,我希望这些原则能帮助你更快地收敛。

围绕 KV-Cache 进行设计

如果我必须选择仅一个指标,我认为 KV-cache 命中率是生产阶段 AI Agent最重要的单一指标。它直接影响延迟和成本。为了理解原因,让我们看看典型 Agent 如何运作:

在接收用户输入后,Agent 通过一系列工具使用来完成任务。在每次迭代中,模型根据当前上下文从预定义的动作空间中选择一个动作。然后该动作在环境(例如,Manus 的虚拟机沙盒)中执行以产生观察结果。动作和观察结果被附加到上下文中,形成下一次迭代的输入。这个循环持续直到任务完成。

正如你可以想像,上下文随著每一步而增长,而输出——通常是结构化的函数调用——保持相对简短。这使得Agent 程序中的预填充和解码比例与聊天机器人相比高度倾斜。例如,在 Manus 中,平均输入与输出 token 比率约为 100:1。

幸运的是,具有相同前缀的上下文可以利用 KV-cache,这大大减少了首个 token 的时间 (TTFT) 和推理成本——无论你使用的是自托管模型还是调用推理 API。我们谈论的不是小额节省:以 Claude Sonnet 为例,缓存的输入 token 成本为 0.30 美元/MTok(每百万 token),而未缓存的成本为 3 美元/MTok——相差 10 倍。

从上下文工程的角度来看,提高 KV-缓存命中率涉及几个关键实践:

1.保持提示前缀稳定。 由于 LLM 的自回归特性,即使单个标记的差异也会使该标记之后的缓存失效。一个常见的错误是在系统提示的开头包含时间戳——尤其是精确到秒的时间戳。没错,它可以让模型告诉你当前时间,但它也会降低你的缓存命中率。

2.使你的上下文仅追加。 避免修改先前的操作或观察。确保你的序列化是确定性的。许多程式语言和库在序列化 JSON 对象时不保证稳定的键排序,这可能会悄悄破坏缓存。

3.在需要时明确标记缓存断点。 某些模型提供商或推理框架不支持自动增量前缀缓存,而是需要在上下文中手动插入缓存断点。在分配这些断点时,要考虑潜在的缓存过期,并至少确保断点包含系统提示的结尾。

此外,如果你正在使用 vLLM 等框架自托管模型,请确保启用前缀/提示缓存,并且你正在使用会话 ID 等技术来一致地路由分布式工作节点间的请求。

遮蔽,而非移除

随著你的 Agent 获得更多能力,其行动空间自然变得更加复杂——简单来说,工具数量爆炸性增长。最近流行的 MCP 只会火上浇油。如果你允许用户配置工具,相信我:总会有人不可避免地将数百个神秘工具插入到你精心策划的行动空间中。结果,模型更可能选择错误的行动或采取低效的路径。简而言之,你的全副武装的 Agent 变得更笨了。

一个自然的反应是设计一个动态行动空间——也许使用类似 RAG 的东西按需加载工具。我们在 Manus 中也尝试过这种方法。但我们的实验表明一个明确的规则:除非绝对必要,避免在迭代过程中动态添加或移除工具。这主要有两个原因:

1. 在大多数 LLMs 中,工具定义在序列化后位于上下文的前部,通常在系统提示之前或之后。因此,任何更改都将使所有后续操作和观察的 KV-缓存失效。

2. 当先前的操作和观察仍然引用在当前上下文中不再定义的工具时,模型会变得困惑。没有约束解码,这通常会导致模式违规或幻觉行为。

为了解决这个问题,同时仍然改进行动选择,Manus 使用上下文感知的状态机来管理工具可用性。它不是移除工具,而是遮蔽 token logits,在解码过程中防止(或强制)基于当前上下文选择某些行动。

在实践中,大多数模型提供者和推理框架支持某种形式的回应前缀预填充,这允许你在不修改工具定义的情况下限制动作空间。通常有三种函数调用模式(我们将使用来自 NousResearch 的 Hermes 格式作为例子):

•自动 – 模型可以选择调用函数或不调用。通过仅预填充回复前缀来实现:assistant

•必需 – 模型必须调用函数,但选择不受限制。通过预填充到工具调用标记来实现:assistant

•指定 – 模型必须从特定子集中调用函数。通过预填充到函数名称的开头来实现:assistant{「name」: "browser_

使用这个,我们通过直接遮蔽 token 的 logits 来限制动作选择。例如,当用户提供新输入时,Manus 必须立即回复而不是采取动作。我们还特意设计了具有一致前缀的动作名称——例如,所有与浏览器相关的工具都以 browser_开头,命令行工具则以 shell_开头。这使我们能够轻松地强制 Agent 在给定状态下只从某个特定工具组中进行选择,而无需使用有状态的 logits 处理器。

这些设计有助于确保 ManusAgent 循环保持稳定——即使在模型驱动的架构下。

使用文件系统作为上下文

现代前沿大语言模型现在提供 128K 个 token 或更多的上下文窗口。但在真实世界的 Agent 场景中,这通常不够,有时甚至是一种负担。有三个常见的痛点:

1. 观察可能非常庞大,尤其是当 Agent 与网页或 PDF 等非结构化数据互动时。很容易超过上下文限制。

2. 模型性能往往会下降,超过一定的上下文长度后,即使技术上支援该窗口大小。

3. 长输入成本高昂,即使使用前缀缓存。你仍需要为传输和预填充每个标记付费。

为了解决这个问题,许多 Agent 系统实现了上下文截断或压缩策略。但过度激进的压缩不可避免地导致信息丢失。这个问题是根本性的:Agent 本质上必须基于所有先前状态预测下一个动作——而你无法可靠地预测哪个观察可能在十步之后变得至关重要。从逻辑角度看,任何不可逆的压缩都带有风险。

这就是为什么我们在 Manus 中将文件系统视为最终上下文:大小不受限制,本质上持久存在,并且可由 Agent 自身直接操作。模型学会按需写入和读取文件——不仅将文件系统用作储存,还用作结构化的外部记忆。

我们的压缩策略始终设计为可恢复的。例如,只要保留 URL,网页的内容就可以从上下文中删除,如果沙盒中仍然有文件路径,则可以省略文件的内容。这使 Manus 能够缩短上下文长度而不会永久丢失信息。

在开发这个功能时,我发现自己在想像状态空间模型 (SSM)要在 Agent 环境中有效运作需要什么条件。与 Transformers 不同,SSMs 缺乏完整的注意力机制,并且在处理长距离的向后依赖关系时表现不佳。但如果它们能够掌握基于文件的记忆——将长期状态外部化而不是保持在上下文中——那么它们的速度和效率可能会开启一种新型Agent。基于 Agent 的 SSMs 可能是神经图灵机的真正继承者。

通过复述操控注意力

如果你使用过 Manus,你可能注意到一个有趣的现象:在处理复杂任务时,它倾向于创建一个 todo.md 文件——并在任务进行过程中逐步更新它,勾选已完成的项目。

这不仅仅是可爱的行为——这是一种操控注意力的刻意机制。

Manus 中的典型任务平均需要大约 50 次工具调用。这是一个很长的循环——由于 Manus 依赖 LLM 进行决策,它很容易偏离主题或忘记早期目标,尤其是在长上下文或复杂任务中。

通过不断重写待办事项列表,Manus 将其目标重述到上下文的末尾。这将全局计划推入模型的近期注意力范围,避免了「迷失在中间」的问题,并减少了目标错位。实际上,它正在使用自然语言来使自己的焦点偏向任务目标——而无需特殊的架构更改。

保留错误的内容

Agent 会犯错。这不是一个错误—这是现实。语言模型会产生幻觉,环境会返回错误,外部工具会出现异常,而意外的边缘情况随时都会出现。在多步骤任务中,失败不是例外;它是循环的一部分。

然而,一个常见的冲动是隐藏这些错误:清理追踪记录,重试动作,或重置模型的状态,并将其留给神奇的「温度」。这感觉更安全,更受控制。但这是有代价的:抹去失败会移除证据。而没有证据,模型就无法适应。

在我们的经验中,改善 Agent 行为最有效的方法之一出奇地简单:将错误尝试保留在上下文中。当模型看到失败的行动——以及由此产生的观察结果或堆栈跟踪——它会隐式地更新其内部信念。这会使其先验远离类似的行动,减少重复相同错误的可能性。

事实上,我们相信错误恢复是真正 Agent 行为的最清晰指标之一。然而,在大多数学术工作和公开基准测试中,这一点仍然代表性不足,这些测试通常关注理想条件下的任务成功。

不要被少样本提示所困

少样本提示是提高 LLM 输出的常见技术。但在 Agent 系统中,它可能以微妙的方式适得其反。

语言模型是优秀的模仿者;它们模仿上下文中的行为模式。如果你的上下文充满了类似的过去行动-观察对,模型将倾向于遵循该模式,即使它不再是最优的。

这在涉及重复决策或行动的任务中可能很危险。例如,当使用 Manus 帮助审查 20 份简历时,Agent 常常会陷入一种节奏——仅仅因为这是它在上下文中看到的内容而重复类似的行动。这导致偏移、过度泛化,或有时出现幻觉。

解决方法是增加多样性。Manus 在行动和观察中引入少量的结构化变化——不同的序列化模板、替代措辞、顺序或格式的微小噪声。这种受控的随机性有助于打破模式并调整模型的注意力。

换句话说,不要让自己陷入少量样本的窠臼。你的上下文越统一,你的 Agent 就越脆弱。

结论

上下文工程仍然是一门新兴科学——但对于 Agent 系统来说,它已经是必不可少的。模型可能变得更强大、更快速、更便宜,但再多的原始能力也无法取代对记忆、环境和反馈的需求。你如何塑造上下文最终定义了你的 Agent 的行为方式:它运行的速度、恢复的效果以及扩展的程度。

在 Manus,我们通过反复重写、死胡同和跨数百万用户的真实世界测试学到了这些教训。我们在这里分享的内容并非普遍真理——但这些是对我们有效的模式。如果它们能帮助你避免哪怕一次痛苦的迭代,那么这篇文章就达到了它的目的。

Agent 化的未来将取决于一次次对上下文的精雕细琢。好好设计它们吧。

本文来自微信公众号“猎云精选”,36氪经授权发布。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Manus AI Agent 上下文工程 季逸超 AI技术
相关文章