目錄

賦予 AI 長效記憶:深入解析 AI Agent 的核心技術「上下文工程 (Context Engineering)」

在 AI Agent 的研發領域,我們正經歷一場範式轉移。大語言模型 (LLM) 雖強,但其「無狀態 (Stateless) 」的本質與有限的 Context Window,使其在處理現實世界長線任務時舉步維艱。Context Engineering 便是為了解決這項挑戰而生的核心技術。本文為 Hung-Yi Lee 老師發布的 Context Engineering 介紹影片 的筆記。

  • Context Engineering 的數學本質:將上下文更新從「無腦串接」進化為由處理函數 F F 驅動的狀態轉換: Ct+1F(Ct,It,Ot) C_{t+1} \leftarrow F(C_t, I_t, O_t)
  • 壓縮的雙面刃:暴力抹除 (Observation Masking) 能顯著降低成本,但會引發「軌跡延長 (重複執行) 」與「上下文崩塌」。
  • 記憶體 vs. 硬碟:確立 C={P,M} C = \{P, M\} 架構,讓 LLM 只處理 Prompt (工作記憶) ,而將大量歷史儲存於 Memory (硬碟) 。
  • Sub-Agent 作為濾波器:透過「摺疊 (Folding) 」機制,將複雜的執行過程轉化為鋸齒狀的 Context 長度變化。
  • 自主進化路徑:從人類定義規則,進化到由 AI 自主維護操作手冊 (Playbook) 與自動編寫檢索程式碼。

LLM 是「活在當下」的機器。為了讓它具備處理連續任務的能力,我們必須在每一輪互動中,將過去的歷史重新「餵」給模型。

  • 技術挑戰:直接串接歷史會導致 Context 隨時間呈線性爆炸。
  • Agent 的真面目:在 Context Engineering 視角下,Agent 是一個攔截器。它決定模型「下一秒該看到什麼」。有效的 Context Engineering 必須確保輸入內容 「不能太長」 (避免成本激增與注意力失焦) ,也 「不能太短」 (避免遺失關鍵任務限制) 。

當 Context 過長時,最直覺的作法是壓縮。影片中提到了以下做法:

  • 方法論:對於冗長的工具輸出 (Tool Output) ,直接以 [詳見 log1.txt] 取代。
  • 研究發現 (Observation Masking):在 SWE-bench 軟體工程任務中,這種「Hard Clear」的表現驚人地與昂貴的 LLM 摘要 (Summarization) 持平。
  • 代價分析:當記憶被抹除,模型常會出現 「軌跡延長 (Trajectory Elongation) 」 現象。例如:模型忘記已檢查過某檔案,導致重複呼叫相同 API。
  • 問題描述:普通摘要常會濾除掉「系統限制」 (如:刪除前必須詢問人類) 。
  • ACON 方法:引入 Reflector LLM。系統不微調權重,而是讓 Reflector 比較「成功軌跡」與「失敗摘要」,自動生成 Feedback (壓縮指南)。在 AppWorld 測試中,加入 Feedback 的摘要正確率大幅回升,甚至在峰值 Token 極低的情況下超越了未壓縮的模型。
  • 核心困局:沒人知道「完美的摘要」長怎樣,故無法進行 SFT。
  • 解決方案:模型先生產摘要,直到任務結束後,根據「任務成敗」發放獎勵。這讓「摘要大腦」與「執行大腦」達成聯合優化

我們必須將 Context 分為兩個子集:

  1. Prompt (PP):真正進入 LLM 運算核心的資訊 (工作記憶) ,受 Context Window 限制。
  2. Memory (MM):存在外部系統 (硬碟) 的資訊,容量理論上無限。

Context Engineering 的目標:管理 PPMM 之間的動態平衡。

  • A-MEMMem0 提供了記憶層 (Memory Layer) 的具體實作。
  • Memory OS:提出了像作業系統管理分頁檔 (Page File) 一樣管理 LLM 上下文的願景。

影片中強調,呼叫 Sub-Agent 的能力並非 LLM 天生具備,而是需要後天訓練。

  • AgentFold:透過強化學習訓練 spawn (繁衍) 與 return (回傳) 動作。
  • 隔離與合併邏輯
    • 隔離:主 Agent 在呼叫 Sub-Agent 時,只傳遞核心指令 (Context 量瞬間驟降) 。
    • 合併 (摺疊):Sub-Agent 在執行過程產生的幾千行過程會被銷毀,僅回傳一兩行結果給主 Agent。
  • 視覺化影響:這使得 Agent 的 Context 長度曲線呈現 「鋸齒狀 (Sawtooth) 」 —— 緩慢增長後因任務結束而大幅下降,克服了 Context 爆炸的物理屏障。

為了避免 PP (Prompt) 被無關資訊塞滿,過濾機制至關重要:

  1. 兩段式讀取:使用 memory_search (找位置) 搭配 memory_get (拿特定行數),避免無腦 Read 全檔案。
  2. MCP-Zero:取代傳統 RAG。讓 AI 先「描述」它現在需要的工具,系統才動態加載對應的 API 定義。這解決了工具過多 (Tool Bloat) 導致模型失焦的問題。

最高階的 Context Engineering 是讓 AI 決定自己的 Context。

  • Dynamic Cheatsheet:模型在任務中會自主維護一份「小抄」,紀錄哪些策略無效、哪些 Code 可重複使用。
  • ACE:採用 Generator (草稿) 、Reflector (審核) 、Curator (發布) 三角色系統,確保 AI 修正自身 System Prompt 時不會發生致命誤刪。
  • Recursive Language Models:模型在運作時只攜帶 Meta-data,遇到問題時會 「寫一段 Python 程式碼」 去檢索存在硬碟裡的歷史 Token。
  1. AI 的「囤積症」抗拒研究證明 LLM 天生討厭刪除記憶。因此,強大的 Agent 框架 (如 OpenClaw) 必須具備系統級強制攔截 (Memory Flush) 的機制,不能全權交由模型決定。
  2. 從筆記到本能:Context Engineering 的未來不僅是壓縮,而是「經驗的沉澱」。成功的 Agent 應該在多次任務後,將 Context 轉化為一套高效的 Playbook。
  3. 待解決問題:當記憶被轉存為指標 (Pointer) 後,如何在不大幅增加延遲的前提下,確保模型能精準「喚回」所需的細節,仍是優化效能的關鍵戰場。