超越 Prompt 和 RAG,「上下文工程」成了 Agent 核心勝負(fù)手
當(dāng) Prompt 已卷成八股、RAG 也堆成圖書館,Agent 的下一輪護(hù)城河只剩一條——「上下文工程」:讓 AI 像人類一樣“把書讀厚再把書讀薄”,在 100 萬(wàn) token 里秒篩 0.1% 關(guān)鍵信號(hào),并隨對(duì)話持續(xù)重寫自己的“記憶權(quán)重”。誰(shuí)能把動(dòng)態(tài)上下文壓縮成可解釋、可干預(yù)、可遷移的“認(rèn)知緩存”,誰(shuí)就握住了 Agent 從“答得對(duì)”到“做得成”的生死開關(guān)。
最近這段時(shí)間,context engineering(上下文工程)是 agent 開發(fā)者中的 buzzword。這個(gè)概念由 Andrej Karpathy 提出,引起了很多開發(fā)者的共鳴,直指當(dāng)下 agent 開發(fā)的核心痛點(diǎn):搭建流程看似簡(jiǎn)單,但在實(shí)際運(yùn)行中,由海量工具調(diào)用和 long horizon reasoning 產(chǎn)生的冗長(zhǎng)上下文,正成為 agent 性能和成本的巨大瓶頸,甚至?xí)?dǎo)致模型能力的下降。
Context engineering 指的就是在正確時(shí)間為 agent 提供正確信息的方法論,這個(gè)概念覆蓋并超越了 prompt engineering 和 RAG,成為了 agent 開發(fā)的核心勝負(fù)手。如果把 LLM 類比為計(jì)算機(jī)的 CPU,那么 context window 就是計(jì)算機(jī)的 RAM,它處理信息的信噪比直接決定了產(chǎn)品的效果,因?yàn)樵跇?gòu)建 agent 的過程中,輸入的 context 不僅來(lái)自人類指令,還來(lái)自 agent 運(yùn)行中的工具調(diào)用和思維鏈,把內(nèi)存空間壓縮到最關(guān)鍵的信息上就至關(guān)重要。
為了深入探討這一挑戰(zhàn),我們系統(tǒng)梳理了 LangChain 工程師 Lance Martin、Chroma 的聯(lián)合創(chuàng)始人 Jeff Huber、Manus、Anthropic、Cognition 等一線團(tuán)隊(duì)的實(shí)踐經(jīng)驗(yàn),將他們的解決方案歸納為五大策略:轉(zhuǎn)移(Offload)、壓縮(Reduce)、檢索(Retrieve)、隔離(Isolate)和緩存(Cache)。本文將詳解這些方法論,并結(jié)合 The Bitter Lesson 的啟示,探討在模型能力持續(xù)迭代的今天,我們應(yīng)該如何構(gòu)建真正面向未來(lái)的 AI agent。
01.Context Engineering 是什么?
很多人認(rèn)為 2025 年是 agent 元年,但在實(shí)踐中,開發(fā)者普遍發(fā)現(xiàn)雖然 agent 的搭建流程看起來(lái)簡(jiǎn)單,但要讓整個(gè)系統(tǒng)高效運(yùn)行卻非常困難,context 管理是其中的關(guān)鍵瓶頸。
今年 6 月,Karpathy 發(fā)布一條篇推文,正式提出了 context engineering:“filling an LLM’s context window with just the right information for the next step(在大語(yǔ)言模型的上下文窗口中放入正好適合它執(zhí)行下一步所需的信息)”,這個(gè)概念迅速引起了眾多開發(fā)者的共鳴。
Karpathy 發(fā)布的推文
Chroma 的聯(lián)合創(chuàng)始人 Jeff Huber 認(rèn)為, context engineering 本質(zhì)上是 AI engineering 的一個(gè)子集,核心在于每次調(diào)用 LLM 時(shí),都要明確哪些信息需要放入 context window,這其實(shí)包含了兩個(gè)循環(huán):
- 內(nèi)循環(huán)(innerloop):即時(shí)篩選,明確當(dāng)前結(jié)果生成所需的context;
- 外循環(huán)(outerloop):長(zhǎng)期優(yōu)化,通過迭代確保contextwindow始終只包含相關(guān)信息。
Chroma 是一家 AI 初創(chuàng)公司,核心產(chǎn)品是開源向量數(shù)據(jù)庫(kù) ChromaDB,可以為 AI 應(yīng)用提供高效的數(shù)據(jù)檢索和存儲(chǔ)解決方案。
為什么需要 context engineering?
Prompt engineering 是 context engineering 概念的子集和早期形式。
ChatGPT 這樣的 Chatbot 主要依賴人類輸入,因此優(yōu)化 prompt 非常重要。但在構(gòu)建 agent 的過程中,輸入的 context 不僅來(lái)自人類指令,還來(lái)自 agent 運(yùn)行中的工具調(diào)用和檢索的多元信息,這時(shí) context engineering 就變得格外重要。
隨著工具調(diào)用的次數(shù)越來(lái)越多,agent 會(huì)動(dòng)態(tài)生成大量新的需要管理的 context。Manus 團(tuán)隊(duì)在技術(shù)博客中指出一個(gè)典型任務(wù)通常需要約 50 次工具調(diào)用。Anthropic 的一個(gè) multi-agent 研究也表明,生產(chǎn)級(jí) agent 在運(yùn)行時(shí)甚至可能需要多達(dá)數(shù)百次工具調(diào)用;Lance Martin 在開發(fā)開源 AI 研究助手 Open Deep Research 這個(gè)項(xiàng)目時(shí)發(fā)現(xiàn),agent 每次工具調(diào)用都會(huì)消耗大量 token,如果不對(duì)此進(jìn)行優(yōu)化,單次運(yùn)行可能就要消耗 50 萬(wàn)個(gè) token,成本會(huì)達(dá)到 1-2 美元。
Manus 在官方發(fā)布的《AI 代理的 context 工程:構(gòu)建 Manus 的經(jīng)驗(yàn)教訓(xùn)》中表示:
Manus 中的一個(gè)典型任務(wù)平均需要大約 50 次工具調(diào)用。這是一個(gè)很長(zhǎng)的循環(huán)——由于 Manus 依賴 LLM 進(jìn)行決策,它很容易偏離主題或忘記早期目標(biāo),尤其是在長(zhǎng)上下文或復(fù)雜任務(wù)中。
通過不斷重寫待辦事項(xiàng)列表,Manus 將其目標(biāo)復(fù)述到上下文的末尾。這將全局計(jì)劃推入模型的近期注意力范圍內(nèi),避免了”丟失在中間”的問題,并減少了目標(biāo)不一致。實(shí)際上,它使用自然語(yǔ)言來(lái)使自己的注意力偏向任務(wù)目標(biāo)——而不需要特殊的架構(gòu)變更。
而且如果每次工具調(diào)用產(chǎn)生的 context 都直接傳入模型,很快就會(huì)觸及 LLM 的 context window 上限。Chroma 在 7 月發(fā)布的報(bào)告 Context Rot: How Increasing Input Tokens Impacts LLM Performance 顯示,隨著 context 長(zhǎng)度增加,模型的注意力會(huì)分散,推理能力也會(huì)隨之下降。Jeff Huber 把這種現(xiàn)象稱為 context 衰減(context decay),他甚至認(rèn)為當(dāng)前大多數(shù)出色的 AI 初創(chuàng)公司或 AI native 應(yīng)用的核心能力實(shí)際上就是 context engineering。
Source: Chroma, Context Rot: How Increasing Input Tokens Impacts LLM Performance
Claude Sonnet 4, GPT-4.1, Qwen3-32B, and Gemini 2.5 Flash on Repeated Words Task
總而言之,簡(jiǎn)單 agent(naive agent)在實(shí)際運(yùn)行時(shí)往往陷入雙重困境:
1. 它必須要處理幾十到上百次工具調(diào)用累積出來(lái)的大量 context;
2. 它在面對(duì)過長(zhǎng) context 時(shí)不僅可能因超出 context window 而無(wú)法繼續(xù)運(yùn)行,還可能容易發(fā)生 context decay 讓模型能力下降。
正是這些痛點(diǎn),催生了“context engineering”這一新方向,目標(biāo)就是在 agent 的構(gòu)建過程中,通過精心設(shè)計(jì)和選擇傳遞給模型的 context 來(lái)提升模型的效率和效果。圍繞這一目標(biāo),學(xué)界和業(yè)界提出了多種方法,其中比較具有代表性的做法可以歸納為五類:Offload(轉(zhuǎn)移)、Reduce(簡(jiǎn)化)、Retrieve(檢索)、Isolate(隔離)和 Cache(緩存)。
context engineering 的五種方法
02.方法一:Offload 轉(zhuǎn)移
Lance Martin 在 Latent Space 的分享中提到 offload context 有以下用法:
使用文件系統(tǒng)來(lái)記錄筆記;
使用文件系統(tǒng)(如 todo.md)來(lái)規(guī)劃/跟蹤進(jìn)度;
使用文件系統(tǒng)讀寫 token 占用很大的 context;
使用文件來(lái)存儲(chǔ)長(zhǎng)期記憶。
Offload 方式
如前文所述,基礎(chǔ)版 agent 在執(zhí)行過程中會(huì)進(jìn)行多次工具調(diào)用,每一次調(diào)用的結(jié)果都會(huì)直接傳回給 LLM,這導(dǎo)致所有 context 也會(huì)被完整傳入 LLM,context window 會(huì)迅速膨脹,token 消耗過高,效率也會(huì)下降。為了解決這個(gè)問題,Manus 認(rèn)為 offload context 是非常重要且有用的。
Offload context 的核心思想在于 agent 不必在每次工具調(diào)用時(shí)都把完整的 context 原封不動(dòng)地傳回模型,而是可以將這些信息轉(zhuǎn)移到其他形式。最常見的方式是把文件系統(tǒng)當(dāng)作一種外部 memory。在這種模式下,agent 僅會(huì)給模型返回一個(gè)摘要或 URL 作為標(biāo)識(shí),模型只在需要時(shí)才會(huì)調(diào)用這些外部存儲(chǔ)的內(nèi)容,而不是一直持有全部原始 context,因此這種方式能夠顯著優(yōu)化資源利用率,使得 agent 運(yùn)行更高效、更具擴(kuò)展性。
offload context 運(yùn)行原理
有一個(gè)值得關(guān)注的問題是應(yīng)該如何在 context 中保留足夠的摘要或元數(shù)據(jù),讓模型能夠理解被 offload 的內(nèi)容到底包含什么。尤其是在 deep research 時(shí),agent 往往需要 offload 整頁(yè)的內(nèi)容,因此必須要生成一個(gè)有效的摘要來(lái)描述文件中的信息,prompt engineering 在其中起到了非常重要的作用:用戶可以通過反復(fù)打磨 prompt,讓摘要在能夠覆蓋文檔核心信息的同時(shí),實(shí)現(xiàn)顯著的內(nèi)容壓縮。
- 以O(shè)penDeepResearch為例,LanceMartin表示在實(shí)踐中,OpenDeepResearch生成摘要的方式是通過精心設(shè)計(jì)的prompt來(lái)引導(dǎo)模型產(chǎn)出一份詳盡的要點(diǎn),將文檔的核心信息逐條列出。這樣不僅能在信息壓縮的過程中盡量保持內(nèi)容的準(zhǔn)確還原,還能讓LLM在必要時(shí)判斷是否要調(diào)取完整的context。
- Cognition在Don’tBuildMulti-Agents這篇博客中強(qiáng)調(diào),摘要生成是一個(gè)值得投入大量精力的環(huán)節(jié),不能被簡(jiǎn)單對(duì)待。他們甚至提出可以用微調(diào)模型(fine-tunedmodel)專門來(lái)做摘要工作。雖然Cognition當(dāng)時(shí)的語(yǔ)境主要是討論agent邊界和歷史消息摘要,但LanceMartin認(rèn)為這個(gè)邏輯同樣適用于由工具調(diào)用產(chǎn)生的大量context,核心目標(biāo)始終是讓模型清楚context里有什么。
Source: Cognition, Don’t Build Multi-Agents
03.方法二:Reduce 壓縮
Lance Martin 在 Latent Space 的分享中提到,reduce context 有以下幾種用法和注意事項(xiàng):
總結(jié) agent 的消息歷史;
剪裁消息歷史中不相關(guān)的部分;
對(duì)工具調(diào)用的輸出進(jìn)行總結(jié)或剪裁;
在 agent 之間交接時(shí)進(jìn)行總結(jié)或剪裁;
但要小心信息丟失!
Reduce 用法和注意事項(xiàng)
Context reduce 指的是通過摘要(summarization)、剪裁(pruning)等方法來(lái)減少 context 所包含的內(nèi)容。一個(gè)典型場(chǎng)景是當(dāng) Claude Code 里 95% 的 context window 都被占滿時(shí),系統(tǒng)會(huì)自動(dòng)觸發(fā) reduce 機(jī)制。
context reduce 運(yùn)行原理
但 context reduce 也存在風(fēng)險(xiǎn)。Manus 認(rèn)為如果 reduce 是不可逆的,將可能會(huì)導(dǎo)致嚴(yán)重的信息丟失,這也是 Manus 選擇使用 context offload 的原因:先將工具調(diào)用的完整結(jié)果 offload 到磁盤保存,確保原始數(shù)據(jù)不丟失,然后再進(jìn)行 reduce,即使 reduce 后的信息是有損的,仍然可以隨時(shí)回溯原始 context。Cognition 也強(qiáng)調(diào)摘要生成必須非常謹(jǐn)慎,如前文所述,他們甚至認(rèn)為可以用微調(diào)模型(fine-tuned model)專門來(lái)做摘要來(lái)確保關(guān)鍵信息不會(huì)遺漏。
Manus 在官方發(fā)布的《AI 代理的 context 工程:構(gòu)建 Manus 的經(jīng)驗(yàn)教訓(xùn)》中表示:
許多代理系統(tǒng)實(shí)現(xiàn)了上下文截?cái)嗷驂嚎s策略。但過度激進(jìn)的壓縮不可避免地導(dǎo)致信息丟失。這個(gè)問題是根本性的:代理本質(zhì)上必須根據(jù)所有先前狀態(tài)預(yù)測(cè)下一個(gè)動(dòng)作——而你無(wú)法可靠地預(yù)測(cè)哪個(gè)觀察結(jié)果可能在十步之后變得至關(guān)重要。從邏輯角度看,任何不可逆的壓縮都帶有風(fēng)險(xiǎn)。
這就是為什么我們?cè)?Manus 中將文件系統(tǒng)視為終極上下文:大小不受限制,天然持久化,并且代理可以直接操作。模型學(xué)會(huì)按需寫入和讀取文件——不僅將文件系統(tǒng)用作存儲(chǔ),還用作結(jié)構(gòu)化的外部記憶。
我們的壓縮策略始終設(shè)計(jì)為可恢復(fù)的。例如,只要保留 URL,網(wǎng)頁(yè)內(nèi)容就可以從上下文中移除;如果沙盒中仍然保留文檔路徑,則可以省略文檔內(nèi)容。這使得 Manus 能夠縮短上下文長(zhǎng)度,而不會(huì)永久丟失信息。
在開發(fā)這個(gè)功能時(shí),我發(fā)現(xiàn)自己在想象**狀態(tài)空間模型(State Space Model, SSM)**在智能體環(huán)境中有效工作需要什么條件。與 Transformer 不同,SSM 缺乏完整的注意力機(jī)制,并且在處理長(zhǎng)距離的后向依賴關(guān)系時(shí)表現(xiàn)不佳。但如果它們能夠掌握基于文件的記憶——將長(zhǎng)期狀態(tài)外部化而不是保存在上下文中——那么它們的速度和效率可能會(huì)開啟一類新型智能體。基于 SSM 的智能體可能是神經(jīng)圖靈機(jī)真正的繼任者。
Manus 官方發(fā)布的《AI 代理的 context 工程:構(gòu)建 Manus 的經(jīng)驗(yàn)教訓(xùn)》
考慮到不同任務(wù)場(chǎng)景對(duì) context reduce 的要求可能并不相同,有一個(gè)值得討論的問題是 context reduce 是否應(yīng)該保留 agent 之前的錯(cuò)誤路徑(wrong paths)。
有觀點(diǎn)認(rèn)為如果錯(cuò)誤路徑被保留下來(lái),agent 可能會(huì)不斷重復(fù)相同的錯(cuò)誤操作,因此必須去掉錯(cuò)誤信息,明確告訴 agent 不要再沿著錯(cuò)誤方向繼續(xù)下去,而是需要去嘗試新的方法。
- DrewBreunig在文章HowtoFixYourContext中表示模型產(chǎn)生的幻覺如果被寫入context,就會(huì)持續(xù)污染agent的后續(xù)決策;
- Gemini在技術(shù)報(bào)告中也記錄了相關(guān)案例,比如Gemini在玩寶可夢(mèng)游戲時(shí)出現(xiàn)了幻覺,這會(huì)導(dǎo)致Gemini在后續(xù)的步驟中不斷偏離正確方向。
Source: Drew Breunig, How Long Contexts Fail
但從工程角度看,判斷應(yīng)該什么時(shí)候在消息歷史中移除錯(cuò)誤記錄往往是非常復(fù)雜的,這會(huì)加大 agent 框架(agent scaffolding/harness)的邏輯負(fù)擔(dān)和維護(hù)成本。因此有人認(rèn)為,與其增加這種復(fù)雜性,不如直接保留錯(cuò)誤信息。
此外,還有觀點(diǎn)認(rèn)為保留錯(cuò)誤信息可以讓 agent 在下次行動(dòng)時(shí)根據(jù)錯(cuò)誤調(diào)整自己的行為,比如在 coding 場(chǎng)景中,agent 需要持續(xù)構(gòu)建和修改代碼,保留較完整的歷史信息通常能提升模型表現(xiàn),即便是在代碼修改任務(wù)里,模型如果能理解早期的決策依據(jù),整體效果會(huì)更好:
- Manus認(rèn)為保留錯(cuò)誤能讓agent從失敗中學(xué)習(xí);
- ClaudeCode會(huì)打印錯(cuò)誤日志,并在后續(xù)過程中利用這些日志進(jìn)行調(diào)整。
04.方法三:Retrieve 檢索 & Memory 記憶
Lance Martin 在 Latent Space 的分享中提到,retrieve context 有以下幾種用法:
結(jié)合多種檢索方法并進(jìn)行重排序;
構(gòu)建系統(tǒng),將檢索結(jié)果組裝進(jìn)提示詞中;
基于工具描述檢索相關(guān)工具。
Retrieve 用法
Retrieve context 指的是從外部資源(比如知識(shí)庫(kù)、歷史對(duì)話、文檔、工具輸出等)檢索與當(dāng)前任務(wù)相關(guān)的信息,然后把這些檢索到的內(nèi)容加入到模型的 context 中,來(lái)輔助模型生成更準(zhǔn)確、可靠的輸出。Retrieval 的出現(xiàn)時(shí)間雖然早于 context engineering,但已經(jīng)成為 context engineering 的重要組成部分。
其中,RAG 就是一種傳統(tǒng)檢索方法,用經(jīng)典的向量檢索或語(yǔ)義檢索。比如 Windsurf 從引擎設(shè)計(jì)的角度切入,先根據(jù)精心設(shè)計(jì)的語(yǔ)義邊界,把代碼拆分成獨(dú)立的代碼塊,并為這些代碼塊生成向量嵌入(embedding),然后利用語(yǔ)義相似性向量搜索來(lái)完成檢索。但 Windsurf 并不只依賴這一手段,還會(huì)結(jié)合傳統(tǒng)的 grep 搜索,甚至構(gòu)建知識(shí)圖譜,最后將所有檢索結(jié)果統(tǒng)一排序和整合,形成了一個(gè)典型的復(fù)雜、多步驟 RAG 流程。
grep 搜索全稱為 global regular expression print,是一種基于字符串匹配的文本搜索方法,能逐行掃描文件內(nèi)容,查找與給定正則表達(dá)式或關(guān)鍵字匹配的結(jié)果。
還有一種方法是通過調(diào)用簡(jiǎn)單的工具(例如 grep)在文件中進(jìn)行探索式搜索(poke around files),完全繞過了傳統(tǒng)機(jī)制,方式非常簡(jiǎn)潔,效果卻很好,有些團(tuán)隊(duì)甚至公開表示他們只做抓?。╯crap),不做索引(indexing),比如在 Anthropic 負(fù)責(zé) Claude code 的 Boris Cherny 就表示 Claude Code 完全沒有做任何索引,只依靠生成式檢索。
為了系統(tǒng)比較不同方法的效果,Lance Martin 在今年 4 月設(shè)計(jì)了一次基準(zhǔn)測(cè)試,核心問題是如何在多語(yǔ)言文檔中實(shí)現(xiàn)有效檢索。測(cè)試內(nèi)容包括 20 個(gè)與 LangGraph 相關(guān)的編碼任務(wù),不同的 coding agent 需要依靠文檔檢索來(lái)生成 LangGraph 代碼。對(duì)比對(duì)象為 Claude Code 和 Cursor,采用的檢索方法分為三類:
1. 經(jīng)典向量檢索:將有約 300 萬(wàn) token 的文檔導(dǎo)入向量數(shù)據(jù)庫(kù),再通過標(biāo)準(zhǔn)向量搜索完成檢索;
2. 文件工具檢索:基于文本文件和簡(jiǎn)單文件加載工具的檢索,更接近生成式搜索,做法是提供一個(gè)包含所有文檔 URL 和簡(jiǎn)要描述的 Markdown 文件,讓 agent 可以借助工具調(diào)取所需文檔;
3. context 填充(context stuffing):直接將全部約 300 萬(wàn) token 的文檔一次性輸入到 coding agent 的 context 中。
結(jié)果表明,在特定測(cè)試場(chǎng)景下,第二種方法效果最佳。在第二種方法下,agent 會(huì)先根據(jù) Markdown 文件的描述判斷需要調(diào)用哪些文檔,再逐步調(diào)取并閱讀,最終生成正確代碼。這個(gè)結(jié)果也印證了 Anthropic 的 Boris 的觀點(diǎn):為 LLM 提供基礎(chǔ)文件工具的訪問能力,并通過文本描述讓它能夠理解文件內(nèi)容,往往就能取得良好效果。同時(shí),這種做法還避免了復(fù)雜索引所帶來(lái)的高成本和高維護(hù)負(fù)擔(dān)。
Lance Martin 后來(lái)長(zhǎng)期采用這一方法,他認(rèn)為僅依靠文本和簡(jiǎn)單搜索工具,并結(jié)合 Claude Code,就能滿足大部分檢索需求。Latent Space 主持人 Shawn Wang 認(rèn)為簡(jiǎn)單的方法往往已經(jīng)能夠解決 80% 的問題,而復(fù)雜的索引和多步驟檢索可能只在少數(shù)追求極高精度的場(chǎng)景下才是真正必要的。
特別的是,在代碼倉(cāng)庫(kù)的文檔管理與檢索中,“文本”形式展現(xiàn)出了獨(dú)特優(yōu)勢(shì),它不僅簡(jiǎn)潔,而且可讀性極高:
- Cognition的DeepWiki用的就是類似“文本”的思路,它可以將任意公開GitHub倉(cāng)庫(kù)自動(dòng)轉(zhuǎn)換成類似wiki的文檔形式,并附帶架構(gòu)圖、源代碼鏈接、摘要等,以便讓開發(fā)者快速理解倉(cāng)庫(kù)結(jié)構(gòu)與內(nèi)容;
- ShawnWang開發(fā)了一個(gè)瀏覽器插件,能在任意代碼倉(cāng)庫(kù)中直接打開Wiki;
- LanceMartin開發(fā)了一個(gè)小項(xiàng)目,可以將代碼倉(cāng)庫(kù)整理成易讀的文本格式,并借助LLM生成高質(zhì)量描述,具體流程是這個(gè)工具會(huì)先自動(dòng)遍歷倉(cāng)庫(kù)內(nèi)的所有文檔頁(yè)面,再將每個(gè)頁(yè)面?zhèn)鬟f給GPT或其他LLM,然后生成詳盡摘要,最后將這些摘要匯總成一份文本文件。ClaudeCode得到這個(gè)文本文件后,就能準(zhǔn)確判斷該調(diào)用哪個(gè)文檔頁(yè)面,例如依據(jù)問題快速定位到對(duì)應(yīng)URL。
記憶檢索是特定 Context 下的檢索
Agent 的記憶可分為四類:情景記憶(episodic memory)、語(yǔ)義記憶(semantic memory)、程序記憶(procedural memory)和背景記憶(background memory)。對(duì)于長(zhǎng)期運(yùn)行的 agent 來(lái)說,區(qū)分這些記憶類型尤為關(guān)鍵。但在傳統(tǒng)的 context engineering 討論中,這種細(xì)分的記憶分類還沒有得到充分重視。
Source: LangChain, Context Engineering
在記憶與 context engineering 的關(guān)系上,Lance 認(rèn)為可以從寫入記憶(writing memories)和讀取記憶(reading memories)這兩個(gè)維度來(lái)理解,同時(shí)還要考慮自動(dòng)化程度(degree of automation)。在實(shí)際應(yīng)用中,agent 依據(jù)自動(dòng)化程度,可以分成兩種模式:
1. 類似 Claude Code 的極簡(jiǎn)模式:Claude Code 的設(shè)計(jì)非常直觀,在讀取記憶時(shí),它會(huì)在啟動(dòng)時(shí)自動(dòng)加載用戶的 GitHub 倉(cāng)庫(kù),而在寫入記憶時(shí),則需要用戶手動(dòng)指定,將內(nèi)容保存到 GitHub 的某個(gè)文件。
2. 全自動(dòng)記憶:在這種模式下,agent 會(huì)在后臺(tái)自動(dòng)決定何時(shí)寫入或讀取記憶。但這種方式存在明顯風(fēng)險(xiǎn),尤其是記憶檢索的不可控性。比如曾有用戶希望生成某個(gè)場(chǎng)景的圖片,模型卻自動(dòng)檢索到用戶的地理位置,并把這個(gè)位置信息意外融入生成內(nèi)容中,而這并非用戶的真實(shí)意圖。從實(shí)際發(fā)展來(lái)看,OpenAI 在 ChatGPT 的記憶功能上投入了大量精力,但效果依然有限,這也表明了全自動(dòng)記憶仍是一個(gè)極具挑戰(zhàn)性的方向。
Lance 認(rèn)為寫入記憶的難點(diǎn)在于如何判斷何時(shí)寫入,而讀取記憶在大規(guī)模場(chǎng)景下則可以直接理解為 retrieval。換句話說,大規(guī)模的記憶讀取本質(zhì)上就是在做檢索操作。因此,記憶的讀取部分應(yīng)當(dāng)被視為檢索的一種特定應(yīng)用場(chǎng)景。只是這種檢索的特殊性在于,它并不是檢索外部知識(shí)庫(kù)或公開網(wǎng)頁(yè),而是檢索過去的對(duì)話內(nèi)容。例如,當(dāng)系統(tǒng)需要回顧用戶的歷史對(duì)話時(shí),本質(zhì)上就是一種帶有 context 約束的檢索。
進(jìn)一步來(lái)說,復(fù)雜的記憶系統(tǒng)往往就是復(fù)雜的 RAG 系統(tǒng)。雖然外界并不清楚 OpenAI 記憶工具的具體實(shí)現(xiàn)細(xì)節(jié),但很可能是通過對(duì)用戶過往對(duì)話做索引,并結(jié)合向量搜索或類似方法來(lái)實(shí)現(xiàn)檢索功能。這與 Windsurf 提出的多步驟 RAG 流程在邏輯上類似。相比之下,Claude Code 的做法則非常簡(jiǎn)單,它在每次啟動(dòng)時(shí)自動(dòng)加載用戶的代碼倉(cāng)庫(kù),雖然方式樸素,但在實(shí)際使用中效果出奇地好。這些案例表明,記憶的讀取與檢索在很多情況下可以視為同一類問題,只是場(chǎng)景和語(yǔ)境有所不同。
05.方法四:Isolate 隔離
Lance Martin 在 Latent Space 的分享中提到,isolate context 有以下幾種用法和注意事項(xiàng):
將 context 拆分給多個(gè) agent;
但要謹(jǐn)慎!
Multi-agent 可能會(huì)做出相互沖突的決策;
如果能讓 sub-agent 避免參與決策,則能降低風(fēng)險(xiǎn)。
Isolate 用法和注意事項(xiàng)
Isolate context 指的是將 context 拆分開來(lái),從而避免不同類型信息相互干擾,這與 multi-agent 架構(gòu)密切相關(guān)。在 Isolate context 的背景下,不同角色的 agent 能夠各自壓縮并管理不同的內(nèi)容,從而避免單一 agent 承擔(dān)全部 context 的負(fù)擔(dān),這種分工被認(rèn)為是更高效的。
isolate context 運(yùn)行原理
但 Cognition 認(rèn)為在 multi-agent 架構(gòu)下,sub-agent 要獲得足夠的 context 是極其困難的。為此,Cognition 投入了大量精力在 context 的摘要與壓縮上。
特別的是,在 coding 場(chǎng)景中,如何在 sub-agent 之間分配和傳遞 context 是一個(gè)非常棘手的問題。在 coding 任務(wù)中,sub-agent 之間往往存在狀態(tài)依賴(state dependency),這意味著不同 sub-agent 的決策可能會(huì)相互影響甚至產(chǎn)生沖突。例如,一個(gè) sub-agent 負(fù)責(zé)寫測(cè)試,另一個(gè)負(fù)責(zé)修改邏輯,如果它們各自獨(dú)立決策,最后在整合時(shí)可能會(huì)出現(xiàn)不一致的問題。因此,Cognition 認(rèn)為不要依賴 sub-agent 來(lái)處理此類任務(wù)。
此外,Cognition 的 Walden Yan 還提到過“反向書寫任務(wù)(reverse write tasks)”,比如 coding 這類任務(wù)需要不同 sub-agent 分別負(fù)責(zé)最終系統(tǒng)的不同組件,這會(huì)導(dǎo)致 agent 之間必須頻繁溝通,而當(dāng)前 agent 間的通信機(jī)制仍處于早期階段,這使得 coding 類場(chǎng)景的問題更加突出和復(fù)雜。
這也反映了 Cognition 與 Anthropic 的核心分歧:Cognition 認(rèn)為不要使用 multi-agent,而 Anthropic 則認(rèn)為 multi-agent 非常有用。Lance Martin 認(rèn)為這取決于 multi-agent 要解決的具體問題:應(yīng)用場(chǎng)景和使用方式會(huì)極大影響 multi-agent 的運(yùn)行效果,應(yīng)該將 multi-agent 用于易并行、只讀(read-only) 的場(chǎng)景。
比如在 deep research 場(chǎng)中,agent 的工作主要是讀取信息,也就是收集 context,當(dāng)所有并行的讀取任務(wù)完成后,最后才會(huì)統(tǒng)一進(jìn)行書寫,比如撰寫最終的研究報(bào)告。Anthropic 的報(bào)告中提到,他們的 deep research agent 就是采用了這種架構(gòu):sub-agent 并行收集信息,最后統(tǒng)一產(chǎn)出結(jié)果。
相比之下,coding agent 的情況更加復(fù)雜,雖然現(xiàn)在 Anthropic 的 Claude Code 已經(jīng)支持 sub-agent 模式,表明 Anthropic 認(rèn)為這種架構(gòu)在 coding 任務(wù)中至少是值得嘗試的,但 Lance Martin 還是認(rèn)為,如果 sub-agent 的任務(wù)需要高度協(xié)同,coding 場(chǎng)景就會(huì)非常棘手。
Cognition 與 Anthropic 的觀點(diǎn)分歧
06.方法五:Cache 緩存
Lance Martin 在 Latent Space 的分享中提到,cache context 有以下幾種用法:
緩存輸入的 tokens,在 Claude-sonnet 上成本可降低 10 倍!
將 agent 的指令、工具描述緩存到前綴中。
將可變 context / 最近的觀測(cè)結(jié)果添加到后綴中。
Cache 用法
開發(fā)者在初次搭建 agent 時(shí)常遇到高昂的循環(huán)成本問題,因?yàn)?agent 每一次循環(huán)都需要重復(fù)傳遞之前的工具調(diào)用結(jié)果,從而要消耗大量 token。為了降低延遲和成本,將消息歷史進(jìn)行緩存被視為一種有效策略。2025 年 7 月,Manus 提出了緩存(caching)概念,利用鍵值(KV)緩存機(jī)制來(lái)提高 AI agent 在處理多步驟任務(wù)時(shí)的效率和成本效益。
Manus 在官方發(fā)布的《AI 代理的 context 工程:構(gòu)建 Manus 的經(jīng)驗(yàn)教訓(xùn)》中表示:
如果我必須選擇一個(gè)指標(biāo),我認(rèn)為 KV-cache 命中率是生產(chǎn)階段 AI 代理最重要的單一指標(biāo)。它直接影響延遲和成本。為了理解原因,讓我們看看典型代理是如何運(yùn)作的:
在接收用戶輸入后,代理通過一系列工具使用鏈來(lái)完成任務(wù)。在每次迭代中,模型根據(jù)當(dāng)前上下文從預(yù)定義的動(dòng)作空間中選擇一個(gè)動(dòng)作。然后在環(huán)境中執(zhí)行該動(dòng)作(例如,Manus 的虛擬機(jī)沙盒)以產(chǎn)生觀察結(jié)果。動(dòng)作和觀察結(jié)果被附加到上下文中,形成下一次迭代的輸入。這個(gè)循環(huán)持續(xù)進(jìn)行,直到任務(wù)完成。
正如你所想象的,隨著每一步的推進(jìn),上下文不斷增長(zhǎng),而輸出——通常是結(jié)構(gòu)化的函數(shù)調(diào)用——保持相對(duì)簡(jiǎn)短。這使得代理(agents)相比聊天機(jī)器人的預(yù)填充和解碼比例高度傾斜。例如在 Manus 中,平均輸入與輸出的 token 比例約為 100:1。
幸運(yùn)的是,具有相同前綴的上下文可以利用 KV 緩存,這大大減少了首個(gè) token 的生成時(shí)間(TTFT)和推理成本——無(wú)論你是使用自托管模型還是調(diào)用推理 API。我們說的不是小幅度的節(jié)?。豪缡褂?Claude Sonnet 時(shí),緩存的輸入 token 成本為 0.30 美元/百萬(wàn) token,而未緩存的成本為 3 美元/百萬(wàn) token——相差 10 倍。
但不同的 API 在實(shí)際應(yīng)用中存在差異,比如 OpenAI 會(huì)自動(dòng)緩存,從而避免重復(fù)傳輸;而早期的 Anthropic 需要用戶自己顯式設(shè)置緩存請(qǐng)求頭(caching header)。
需要注意的是,緩存只能優(yōu)化延遲和成本問題,但無(wú)法解決 long context 的根本問題,也就是說即使緩存生效,當(dāng) context 達(dá)到十萬(wàn) token 時(shí),模型仍然需要完整處理這么長(zhǎng)的 context,無(wú)論是否有緩存,模型的性能衰減(context decay)問題依然會(huì)存在。
更進(jìn)一步,緩存策略往往與服務(wù)商綁定。如果用戶非常依賴廠商提供的緩存機(jī)制,那用戶可能面臨“廠商鎖定”,難以自由切換服務(wù),但如果是運(yùn)行自有開源模型,那能完全掌控緩存策略,實(shí)現(xiàn)更高靈活性。
07.the Bitter Lesson 的啟發(fā)
OpenAI 的 Hyung Won Chung 在 the Bitter Lesson in AI Research 的演講中指出,在相同成本下,計(jì)算能力每五年大約增長(zhǎng)十倍,這種 scaling 的趨勢(shì)是推動(dòng) AI 進(jìn)步的關(guān)鍵因素。歷史經(jīng)驗(yàn)表明,那些歸納偏置較少、更通用、更依賴大量數(shù)據(jù)和計(jì)算的算法,往往比依賴手工特征設(shè)計(jì)或內(nèi)置歸納偏置的算法表現(xiàn)更好。簡(jiǎn)單來(lái)說,the Bitter Lesson 指出了讓機(jī)器通過大量數(shù)據(jù)和計(jì)算自主學(xué)習(xí)如何思考,比人工教機(jī)器如何思考更有效。
Hyung Won Chung 曾是 OpenAI 的 Research Scientist,主要研究推理(reasoning)與 agents,他是 o1-preview、o1、Deep Research 等項(xiàng)目的核心貢獻(xiàn)者,并領(lǐng)導(dǎo)過 Codex mini 的模型訓(xùn)練。
“歸納偏置”(Inductive bias)指的是系統(tǒng)在面對(duì)有限數(shù)據(jù)時(shí),為了能夠進(jìn)行合理的泛化而內(nèi)在帶有的一套假設(shè)或偏好。換句話說,它是一種先驗(yàn)約束,讓模型在無(wú)限可能的解釋中,更傾向于選擇某些解釋,從而提高學(xué)習(xí)效率。
Source: the Bitter Lesson in AI Research
Hyung Won Chung 還提出,在任何研究階段,為了在當(dāng)時(shí)的計(jì)算條件下獲得理想性能,通常需要為算法添加一些結(jié)構(gòu)(structure),例如更多的建模假設(shè)或歸納偏置。這在計(jì)算資源有限時(shí)確實(shí)是有幫助的,但隨著計(jì)算能力增加,這些人為添加的結(jié)構(gòu)反而會(huì)成為進(jìn)一步發(fā)展的瓶頸。
Source: the Bitter Lesson in AI Research
只要框架透明,就有實(shí)用價(jià)值
Lance 表示,當(dāng)人們討論架構(gòu)框架(frameworks)時(shí),往往包含兩類不同的東西:agent 抽象(agent abstractions)和底層編排框架(low-level orchestration frameworks)。很多開發(fā)者反對(duì)的其實(shí)是前者,而不是后者。
Source: LangChain, How to think about agent frameworks
以 Shopify 的 Roast 框架為例,這是一個(gè)開源的 AI 工作流編排(workflow orchestration)工具,提供了可組合的底層構(gòu)建塊,沒有預(yù)設(shè)狀態(tài)判斷(no judges state),允許用戶自由搭建 agent 和工作流。Lance 并不反對(duì)這種架構(gòu),他認(rèn)為這種方式可以充分利用底層構(gòu)建塊的靈活性,他在搭建 Open Deep Research 時(shí)也是先搭工作流,再拆解重構(gòu)成 agent。相比之下,agent 抽象(agent abstractions)則容易隱藏邏輯,使系統(tǒng)在模型能力提升時(shí)難以拆解和重構(gòu)。
Lance 認(rèn)為開發(fā)者需要警惕 agent 抽象(agent abstractions),但這并不意味著要排斥底層編排框架,只要框架提供的是透明、可自由組合的節(jié)點(diǎn),而非黑箱,就具有實(shí)用價(jià)值。
企業(yè)客戶在內(nèi)部嘗試搭建 agent 和工作流時(shí),往往一開始都選擇自行搭建,但隨著代碼難以管理、協(xié)作和評(píng)審問題逐漸出現(xiàn),標(biāo)準(zhǔn)化框架和可組合組件就顯得尤為必要。比如,在 2024 年年中,隨著 Anthropic 模型的工具調(diào)用能力提升,許多企業(yè)紛紛開始集成,但由此帶來(lái)了很多混亂。于是 MCP 出現(xiàn),為工具訪問制定標(biāo)準(zhǔn)協(xié)議,降低協(xié)同成本與認(rèn)知負(fù)擔(dān)。這表明,大型組織推動(dòng)標(biāo)準(zhǔn)化框架的根本動(dòng)因是為了解決實(shí)際的協(xié)作問題,而不是為了框架本身。
實(shí)踐經(jīng)驗(yàn)
Lance Martin 在過去一年搭建 Open Deep Research 的過程中,最初采用的是高度結(jié)構(gòu)化的流程,幾乎不依賴工具調(diào)用,因?yàn)楫?dāng)時(shí)業(yè)界普遍認(rèn)為工具調(diào)用并不可靠,所以他在系統(tǒng)中預(yù)先嵌入了大量假設(shè),將研究問題拆解為多個(gè)部分并行處理,最后再整合成完整報(bào)告。這個(gè)流程在當(dāng)時(shí)確實(shí)更穩(wěn)定,但隨著模型能力的快速提升,這種繁復(fù)的結(jié)構(gòu)反而限制了模型對(duì) MCP 和工具調(diào)用能力的使用。
因此 Lance 轉(zhuǎn)向使用 agent 架構(gòu),去掉過多結(jié)構(gòu),允許 agent 自主決定研究路徑,實(shí)現(xiàn)工具調(diào)用。這驗(yàn)證了 Hyung Won Chung 的觀點(diǎn):researcher 需要不斷重新評(píng)估“基于當(dāng)前模型能力,我的假設(shè)是否還成立”。Lance 甚至用 GPT-5 進(jìn)行了測(cè)試,結(jié)果表明,隨著模型能力不斷提升,Open Deep Research 這個(gè)開源系統(tǒng)也能夠同步跟進(jìn)并適應(yīng)這些進(jìn)展。
此外,Anthropic 的 Boris 在設(shè)計(jì) Claude Code 的時(shí)候也遵循了 the Bitter Lesson:讓 Claude Code 的系統(tǒng)保持盡可能地簡(jiǎn)單、通用,為用戶提供廣泛的模型訪問權(quán)限。
值得注意的是,傳統(tǒng)企業(yè)采用 AI 的常見做法是將 AI 嵌入已有工作流,因?yàn)檫@些企業(yè)已經(jīng)擁有成熟的流程和結(jié)構(gòu),AI 的作用主要是優(yōu)化和增強(qiáng)這些流程。但 AI-native 產(chǎn)品則往往不會(huì)受限于現(xiàn)有流程,而是在模型能力達(dá)到足夠水平后,從零開始構(gòu)建產(chǎn)品:
- 相比VSCode,Cursor和Windsurf更適合AIcoding,因?yàn)樗鼈儫o(wú)需改造舊流程;
- Cognition也是從一開始就以agent為核心進(jìn)行原生設(shè)計(jì),而不是把a(bǔ)gent當(dāng)作現(xiàn)有工具的補(bǔ)充。
過去兩年半,企業(yè)常常在糾結(jié)應(yīng)該是將 AI 嵌入現(xiàn)有流程還是重構(gòu)流程,產(chǎn)生這種糾結(jié)的原因在于早期模型能力不足,重構(gòu)效果不好,因此結(jié)構(gòu)化方法往往表現(xiàn)更好,因此容易讓人誤以為這些結(jié)構(gòu)是長(zhǎng)久有效的解決方案。但現(xiàn)在模型能力已超過臨界點(diǎn),最佳策略是用更少結(jié)構(gòu)化來(lái)搭建系統(tǒng)。
Anthropic 創(chuàng)始人 Jared Kaplan 表示構(gòu)建“目前尚不完美的產(chǎn)品”或許是合理策略,因?yàn)殡S著模型指數(shù)級(jí)進(jìn)步,產(chǎn)品價(jià)值會(huì)被逐步釋放。這也正是 the Bitter Lesson 在企業(yè)應(yīng)用中的具體體現(xiàn):早期依賴結(jié)構(gòu)獲得短期優(yōu)勢(shì),但長(zhǎng)期來(lái)看,靈活、少結(jié)構(gòu)、通用的方法才能在模型能力增長(zhǎng)的浪潮中取得最終勝利。
- Cursor早期并不完美,但隨著Claude3.5發(fā)布,正好匹配了模型能力追上產(chǎn)品需求的節(jié)點(diǎn)。
- Windsurf的產(chǎn)品曲線表現(xiàn)出一個(gè)平臺(tái)期(ceiling),隨后快速爆發(fā)(boom),增長(zhǎng)最終放緩。
Source: Lance Martin 在 Latent Space 演示的 PPT
編譯:Haozhen 編輯:Cage 排版:夏悅涵
本文由人人都是產(chǎn)品經(jīng)理作者【海外獨(dú)角獸】,微信公眾號(hào):【海外獨(dú)角獸】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自Claude官網(wǎng)截圖
- 目前還沒評(píng)論,等你發(fā)揮!