先锋 趋势 方法 投研 作者
面向智能体的上下文工程——Lance Martin,LangChain
返回节目精读

面向智能体的上下文工程——Lance Martin,LangChain

摘要

  • 智能体经济学的决定因素,与其说是工具调用循环,不如说是每一轮重新送入模型的内容。 Martin 提到,Manus 的典型任务大约会调用50次工具,Anthropic 的生产级智能体可能调用数百次;他的简易深度研究器曾消耗500,000个token,每次运行成本1–2美元。运营层面的核心要求,是“给模型喂对下一步来说恰到好处的上下文”,因为过长的历史既会耗尽上下文窗口,也会出现“上下文腐化”。

  • 卸载是降低token消耗、又不永久删除证据的有效方式。 Martin 会把原始工具输出存入文件系统或智能体状态,再返回高召回率摘要、URL或指针,让智能体按需取回细节。压缩可能有损,尤其在不可逆的情况下;Alessio 转述 Jeff 在一次线下聚会上的说法:经过人工整理的压缩效果大约比自动方案好2倍,因此原始材料应始终可恢复。

  • 多智能体的收益取决于工作负载形态,而不是部署了多少个智能体。 并行子智能体适合只读研究收集,随后由一个中心化智能体统一写作;但当多个编码智能体进行相互依赖的写入,并且“隐式地做出决策”时,风险就会迅速上升。协调质量和任务拆解,比贴上“多智能体”标签更重要。

  • 简单的智能体式检索,有时可以胜过复杂的索引栈。 面对 Windsurf 的分块、嵌入、知识图谱、grep 和重排序,Claude Code 只使用基础文件工具、不做索引;在 Martin 针对 LangGraph、覆盖约3百万个文档token的20道题测试中,带有高质量描述的 llms.txt 目录配合按需抓取,效果非常好。“llms.txt 里的描述非常重要”,这意味着文档打包、提示词和 MCP 资源都已成为检索产品的一部分。

  • 缓存可以改善延迟和单位经济性,但无法修复长上下文导致的推理退化。 主持人认为,Responses API 以及更新版 Anthropic 和 Gemini 的行为,可能已经会自动缓存稳定前缀;Martin 此前则使用过 Anthropic 的显式缓存配置。但“缓存解决不了长上下文问题”:100,000个缓存token,仍然是模型正在使用的100,000个token;此外,供应商专属的缓存机制也可能加深平台锁定。

  • 记忆是跨越时间展开的上下文工程,而自动化既带来价值,也带来故障模式。 Claude Code 的显式模型是加载 CLAUDE.md,只有在用户要求时才写入,行为更可预测;主持人引用 Simon 的例子:ChatGPT 在生成图片时调取了无关记忆,把用户所在位置加入了图片。Martin 更偏好的用法更窄:把人类对环境型智能体的纠正,转化为更新后的偏好,让它“随着时间变得更聪明”。

  • 真正耐用的智能体架构,应当能够随着基础模型进步而被拆除。 Martin 提到,在相同成本下,算力每5年提升10倍;他的 Open Deep Research 曾两次重建,因为原本合理的结构后来变成了瓶颈。经验是:针对今天的能力“增加结构”,但“记得之后把它移除”。这更偏向低层、可重写的编排,而不是不透明的智能体抽象。

精读

1. 工具输出让提示词工程变成上下文工程

  • Martin 对这个术语的定义,始于它为何会流行:成功的流行词,往往捕捉到了行业共同经历。开发者起初被告知,智能体不过是“在循环中调用工具”;但很快发现,要让这个循环可靠运行,关键在于“给模型喂对下一步来说恰到好处的上下文”。提示词工程仍然是其中一部分,却已经无法概括模型接收输入的完整界面。

  • 在聊天场景中,人的消息是主要变量;而在智能体场景中,每一次工具调用返回的结果,都会沿着整个轨迹进入上下文。系统指令、用户意图、中间观察、错误信息和检索到的文档不断累积,因此构建者需要决定模型在每一步看到什么,而不只是润色开场提示词。

  • 规模让这种区别变得具体。Manus 说,典型任务大约会调用50次工具;Anthropic 则说,生产级智能体可能调用数百次。Martin 最初的简易 Open Deep Research 循环,会把高token消耗的研究结果不断传回上下文,最终一次运行消耗约500,000个token,成本达到1–2美元。

  • 上下文窗口只是显而易见的上限。Martin 还提到 Chroma 关于“上下文腐化”的研究:随着上下文变长,模型表现可能在达到形式上的窗口上限之前,就以不规则的方式恶化。因此,更大的窗口只能容纳更多累积内容,并不能免除对输入内容进行筛选和组织的必要。

2. 卸载保留证据,压缩则可能将其删除

  • Manus 的核心做法,是把文件系统视为“外置记忆”。智能体不必将每个原始工具结果都写回消息历史,而是可以把结果存入磁盘或运行时状态,再传回摘要、URL或引用。模型知道这个工件存在,之后可以再取回,而不必反复为完整内容付费。

  • 当被问及卸载后哪些元数据仍会保留时,Martin 提醒不要随意写一行摘要。对于 Open Deep Research,他会精心设计提示词,让模型生成穷尽式、高召回率的关键要点:既要压缩内容、节省token,又要覆盖足够多的信息,让智能体判断原始文档是否相关。Cognition 进一步讨论了在智能体边界使用微调摘要模型。

  • 压缩也可以发生在工具边界,或接近上下文窗口上限时——Claude Code 在约95%处进行的常规压缩,是一个直观例子。Hugging Face 的研究智能体把高token消耗的代码执行留在环境内,只返回有限上下文;Anthropic 的多智能体研究器则会先总结发现,再传递给下游智能体。

  • 风险在于不可逆。Manus 保留原始观察结果,以防剪枝和摘要丢失某个之后才变得重要的细节。Alessio 转述 Jeff 在一次线下聚会上的说法:经过人工整理的压缩效果大约比自动压缩好2倍。编码尤其敏感:智能体可能不仅需要当前实现,还需要知道此前为什么做出这些决策。

3. 并行智能体最适合收集信息,而不是共同构建

  • Cognition 反对子智能体,并不是认为并行永远无效,而是因为每个智能体都会隐式地做出决策。如果多个编码智能体写入相互关联的组件,它们的假设可能发生冲突,而摘要又未必携带足够的历史来完成协调。主持人举的测试例子进一步放大了问题:负责写测试的智能体,可能需要同时理解实现是如何变化的,以及为什么会这样变化。

  • Martin 更偏好的边界,是区分读和写。研究收集天然适合并行,因为子智能体可以收集相互独立的证据;共享上下文形成后,再由一个智能体完成最终报告。Martin 的系统和 Anthropic 的研究架构都采用了这一模式。“多智能体用在什么任务上,影响极大。”

  • Claude Code 支持子智能体,说明协调式编码至少可以尝试;但 Martin 仍然保留限定:需要紧密协调写入的编码任务,依然困难得多。Cognition 所说的“不要用子智能体”,与 Anthropic 成功的研究系统之间看似矛盾;一旦明确工作负载和通信负担,矛盾就消失了。

4. 智能体式检索有时可以绕开复杂的索引栈

  • Windsurf 代表了 Martin 所描述的经典检索管线:沿语义边界切分代码,生成嵌入,再把语义搜索与 grep 和知识图谱信号结合,最后对结果重排序。Claude Code 则采取相反路线——不做索引,只用基础文件工具进行智能体式探索,但依然“效果非常好”。

  • Martin 用20道 LangGraph 编码题测试了这笔权衡,文档规模约3百万个token。他比较了向量库检索、列出文档URL和描述并按需加载的 llms.txt 文件,以及把所有文档直接塞进上下文。简单的 llms.txt 路线,让编码智能体可以反复识别并抓取真正需要的页面。

  • 在那次4月的测试快照中,Claude Code 在 Martin 的特定测试上胜过 Cursor,但他反复提醒,“这些东西一直在变化”。他得出的稳定结论更有限:只要每个文件都有高质量描述,智能体式抓取就能效果极佳;而这些描述本身,还可以由爬取文档的 LLM 低成本生成。

  • MCP 可以更有意识地打包这类上下文。Martin 使用项目专属服务器,内含文档、资源和提示词,用来教模型如何使用服务器。主持人还提到一个案例:把使用说明留在 README 中,导致系统出现看似“技能问题”的失败;把提示词放进服务器后,效果更好。主持人强调,MCP 不只是工具集成——提示词、资源和采样能力,都可以把提取工作移到主上下文之外。

5. 缓存削减重复推理,但无法消除上下文腐化

  • Manus 建议缓存之前的消息历史,因为否则每一轮智能体调用都要重新发送相同的前缀。Martin 使用过 Anthropic 的显式缓存标记;主持人则认为,Responses API 以及 Anthropic 和 Gemini 的隐式缓存,正在变得越来越自动化。在历史保持稳定的情况下,缓存命中可以显著降低成本和延迟。

  • Martin 的限定是决定性的:一段缓存后的100,000-token历史,仍然会向模型呈现100,000个token供其使用。他表示,自己引用的上下文腐化结论,无论是否启用缓存都成立,因此缓存解决的是经济问题,而不是推理问题。主持人还指出了平台锁定:自托管开放模型可以直接控制缓存,而供应商 API 只能近似实现这种控制。

6. 记忆本质上是由读写策略管理的检索

  • Martin 从两个决策来拆解记忆:何时写入,以及何时读取;每个环节又有多少自动化。Claude Code 处在最简单的一端:每次会话加载 CLAUDE.md,而用户明确要求它保存新信息。Martin 喜欢这种“00”模式,因为读写两端都保持清晰可见。

  • ChatGPT 则代表了自动化的极端:系统同时决定保存什么,以及调取什么。主持人引用 Simon 的失败案例:用户提出图片请求时,系统意外加入了用户所在位置。Martin 更大的框架是,规模化读取记忆最终会与检索趋同:它同样是一条可能很复杂的 RAG 管线,只不过处理的是过往对话,而不是文档或公开网络。

  • 对于环境型智能体,Martin 认为人类介入提供了清晰的写入信号。他的邮件助手在发送前暂停,允许他修改语气或调整工具调用,然后让 LLM 反思这次纠正并更新既有指令。“记忆与人在环路中配合得非常好”,因为明确的编辑会逐步暴露用户偏好,而不是要求系统自行猜测。

7. 苦涩的教训会惩罚那些比模型活得更久的脚手架

  • Martin 引用的表述是:在相同成本下,算力每5年提升10倍,而使用更多数据和算力的通用方法,最终会击败手工构建的假设。以今天的能力水平看,某些结构可能不可或缺;但纪律在于“记得之后把它移除”,避免它最终成为继续进步的上限。

  • 他在2024年的研究流程中写入了强假设:避开不可靠的工具调用,把报告拆成预定义章节,再并行写出这些章节。最初,这套流程比智能体更可靠;但随着工具使用能力快速提升,二者的比较发生逆转。随后,结构开始阻碍 MCP 等能力,也阻碍模型自行选择研究路径。

  • Martin 第一次减少结构时,仍然保留了一个隐藏错误:每个研究子智能体都负责撰写自己的报告章节。由于智能体之间无法协调决策,合并后的报告彼此割裂。他取消了独立写作,保留并行研究收集,最后改为一次性完成整体写作。

  • 按 Martin 的限定,最终形成的 Open Deep Research 是 Deep Research Bench 上表现最好的开源深度研究智能体——“至少在那个特定基准上”如此,但仍不如 OpenAI 的端到端强化学习系统。他还提到 GPT-5 的强劲表现,并认为开源助手可以持续享受模型改进带来的收益;这再次说明,只有当架构不阻碍模型进步时,应用才能真正吃到模型升级的红利。

8. 可重写的编排,比不透明的抽象更耐用

  • 主持人把苦涩的教训延伸到了产品:一家既有公司可以用 AI 改进现有工作流,但当模型足够强大后,AI 原生设计可能反过来超越它。结构更少的产品一开始可能看起来更差,直到跨过能力阈值——正如 Claude 3.5 “命中”时的 Cursor——随后突然突破结构化产品的上限。

  • Martin 区分了框架和抽象。LangGraph 暴露低层节点、边和状态,同时提供实用的检查点与状态管理;他可以用这些组件把研究流程替换成智能体,然后再次重建。相比之下,“from framework import agent”这类抽象更有风险,因为其中隐藏的假设可能难以检查,也难以拆除。

  • Shopify 内部的 Roast 系统,为低层编排提供了组织层面的理由。当许多团队各自构建智能体和工作流时,审查与协调会变得困难;一套由可组合原语组成的公共库,可以降低认知负担,又不必强行采用一种不透明的智能体设计。Martin 表示,自己对反框架批评持同情态度,只要这些批评真正针对的是抽象。

  • MCP 的实践动因也相同。Anthropic 的工具调用在2024年中左右变得足够有效后,各团队开始创建彼此不兼容的集成,随后出现“彻底的混乱”;标准协议让工具更容易接入和审查,也降低了认知负担。因此,本期最后留下的原则不是零结构,而是让结构中的假设始终可见、可替换、可移除。