Context Engineering 是什麼?AI agent 每一步該看到哪些資料

提示詞寫好了,agent 還是答錯,問題常出在每一步塞給模型的資料。這篇說明 context engineering 在管什麼、為什麼上下文越長越容易漏,以及企業導入 agent 時怎麼取捨。

先說結論

Context engineering(上下文工程)是決定 AI agent 每一步能看到哪些資料:系統指令、工具說明、檢索到的文件、對話紀錄、記憶和工具回傳的結果。提示詞只是其中一塊。上下文有長度上限,塞得越多,模型越容易漏看重點、成本也越高,所以要挑。實務上先只放這一步需要的內容,其他的留下查詢方式,要用時再調;長任務用摘要和筆記接續,複雜任務拆給子 agent。

米色亞麻布上一只打開的皮革旅行箱,只分格裝了幾樣必需品,旁邊堆著一大堆沒放進去的東西
Context Engineering 是什麼?AI agent 每一步該看到哪些資料 封面視覺

舉個例子。一家做五金零件的公司,讓客服 agent 處理退貨申請。某天一位合作多年的客戶提出今年第三次退貨,agent 很快回覆:「依退貨政策,收貨後 14 天內可申請,本次符合資格,已為您建立退貨單。」

問題是公司去年已經把期限改成 7 天,這位客戶的貨是 10 天前收到的。追查下來,提示詞寫得沒有問題,錯在 agent 那一步看到的東西:系統把整本產品手冊都塞了進去,裡面同時有新舊兩版退貨政策;三年來和這位客戶的 40 段對話全部附上;25 個工具的說明也一個不漏。模型在這堆資料裡抓到了舊版那段,還順手呼叫了建立退貨單的工具。

這類問題,業界這一兩年開始用 context engineering 來稱呼。怎麼寫一段清楚的指令,我在 提示詞怎麼寫 整理過;這篇處理的是下一層:agent 執行任務時,每一步放進模型的資料要怎麼挑。

Context Engineering 是什麼:決定每一步讓模型看到什麼

Anthropic 在 2025 年 9 月的工程文章裡,把 context engineering 定義為:在模型推論時,挑選並維持一組最合適的資訊(token)的一整套做法。這組資訊不只是提示詞,還包括系統指令、工具、MCP、外部資料和對話紀錄。

中文常見的譯名有「上下文工程」「情境工程」「脈絡工程」,指的是同一件事。

把開頭的退貨任務拆開來看,agent 每一步收到的上下文大概有這幾類:

上下文的組成在退貨任務裡是什麼誰決定放不放
系統指令「你是客服助理,依公司政策處理退換貨」加上語氣與流程規則寫提示詞的人,通常固定
工具說明查訂單、查出貨、建立退貨單、寄信等工具的名稱與用法系統設計時決定開放哪些
檢索到的文件退貨政策、產品保固條款檢索系統依問題去找
對話紀錄這次對話的前幾句,以及和這位客戶的歷史往來系統設計決定保留多少
記憶「這位客戶偏好電話聯繫」「上次退貨原因是規格不符」系統或 agent 自己記下的筆記
工具回傳的結果查訂單工具回傳的收貨日期、品項、數量每一步執行後產生,會越積越多

表格最後一列最容易被忽略。一般聊天只有一問一答,agent 卻會連續呼叫好幾個工具,每一次的回傳結果都留在上下文裡。LangChain 的整理也提到,長任務加上不斷累積的工具回傳,agent 常常會用掉大量 token,超過上限,或讓成本和回應時間一起變高。

所以 context engineering 要回答的問題很具體:這一步,模型需要看到什麼,才做得出對的判斷。

和提示詞差在哪:一個寫一次,一個每一步都在變

提示詞和 context engineering 常被放在一起比較。我的理解是,前者是後者的一部分:

提示詞Context engineering
管的範圍一段指令怎麼寫每一步送進模型的全部資料
什麼時候決定寫好之後大多固定agent 每走一步都要重新組
常見的問題指令模糊、格式沒講清楚資料太多、太舊、互相矛盾、該有的沒放
誰在處理業務單位也能寫、能改通常要和系統設計一起做

Anthropic 把 context engineering 形容為提示工程自然的延伸。Agent 做的事從單次問答,變成要跑好幾輪、呼叫好幾個工具的任務,要管的東西就從「那段話怎麼寫」,擴大到「整個上下文怎麼組」。

回到退貨的例子。提示詞寫的是「依公司政策處理,超過退貨期限就轉人工」,這句話完全正確,但政策文件放了新舊兩版,模型就得自己猜哪一版才算數。這時候再怎麼改提示詞,效果都有限,要改的是放進去的文件。

網路上有些文章把 context engineering 說成提示工程的「取代者」,彷彿提示詞不重要了。實務上兩者都要做:指令寫不清楚,資料挑得再好,模型也不知道要拿它做什麼。

為什麼不能全部塞進去:上下文越長,模型越容易漏

現在的模型動輒可以讀進幾十萬個 token,很多人的直覺是:那就全部放進去,讓模型自己找。

這個做法有兩個代價。

第一個是準確度。Anthropic 把這個現象叫做 context rot(上下文腐化):上下文越長,模型準確找回其中資訊的能力就越差。它的解釋是,模型處理文字時,每個 token 都要和其他所有 token 建立關聯,n 個 token 就有 n² 組關係,上下文越長,注意力被分得越薄。它用「注意力預算」來形容:每多放一段資料,就從這筆有限的預算裡扣一點。

更早的研究也看到類似的現象。史丹佛等單位 2023 年的論文〈Lost in the Middle〉發現,關鍵資訊放在上下文的開頭或結尾時,模型的表現通常最好;放在中間時,表現會明顯下降,即使是專門為長上下文設計的模型也一樣。

一個只放得下三張空白卡片的窄木托盤,旁邊一大疊卡片用黃銅長尾夾夾著

第二個是成本。多數 API 依輸入的 token 計費,agent 又會一步接一步地呼叫模型,每一步都要把上下文重送一次。Anthropic 在說明自家多 agent 研究系統時提到,agent 用掉的 token 大約是一般聊天的 4 倍,多 agent 系統更達到約 15 倍。

把兩個代價放在一起,Anthropic 給的原則是:找出能讓模型做出正確結果的最小一組高價值資訊。模型本身的上下文限制,LLM 是什麼 有另外說明;這裡要記住的是,上下文放得越多,對 agent 的幫助不一定越大,很多時候反而是負擔。

改前改後:同一個退貨任務,上下文怎麼裁

回到開頭的退貨任務。下面是同一個 agent、同一個提示詞,只改上下文的對照:

項目改前改後理由
退貨政策整本產品手冊,新舊兩版政策都在只放現行退貨政策那一段,附版本日期舊版留在裡面,模型就有機會引用錯的那一版
產品資料全部產品的規格與保固只放這張訂單上兩個品項的保固條款其他產品和這次判斷無關,只會分散注意力
歷史對話三年來 40 段對話全文一段 150 字的摘要:往來年資、前兩次退貨的日期與原因、偏好聯繫方式要判斷的是「這位客戶的退貨狀況」,逐字紀錄用不到
工具25 個工具的說明全部附上這一步只開放查訂單、查出貨、建立退貨草稿 3 個寄信、退款這類動作留到人工確認後的下一步
訂單資料客戶所有訂單的完整明細只查這張訂單,回傳收貨日期、品項、數量需要其他訂單時,agent 可以再查
判斷依據沒有特別交代明寫「以收貨日期和現行政策的天數比對,超過期限就轉人工」把要比對的兩個欄位講清楚,模型比較不會自己推論

改後的版本,模型看到的資料少了九成以上,但判斷需要的東西都在:現行政策寫 7 天,訂單顯示 10 天前收貨,結果就是轉人工處理,而不是直接建單。

這張表裡的每一列,其實都在回答同一個問題:這份資料不放,模型會不會少了判斷依據?會,就放;不會,就留下查詢方式,需要時再拿。

歷史對話那一列值得多說一句。摘要要保留什麼,本身就是一個判斷。Anthropic 談壓縮時建議,一開始先盡量保留,確認重要的東西沒被丟掉,再逐步精簡。退貨的例子裡,前兩次退貨的原因和日期一定要留,因為第三次退貨可能就是同一個問題沒解決。

五個常用做法

Anthropic 的工程文章與 LangChain 的整理,用詞不同,做法高度重疊。我把它們整理成企業導入時最常用的五個:

做法解決什麼企業流程裡的例子要付出的代價
按需載入資料太多放不下上下文只放訂單編號,agent 需要時再用工具查明細agent 要多呼叫幾次工具,速度會慢一些
精簡工具工具太多、功能重疊,選錯工具每個流程步驟只開放需要的工具流程設計要先拆得夠細
壓縮與摘要長任務超過上限對話快滿時,把前面的內容整理成摘要,接著繼續摘要可能漏掉後來才發現重要的細節
筆記式記憶任務跨好幾輪、好幾天agent 把進度與待辦寫在固定的筆記檔,下一輪先讀筆記筆記寫錯會一直被沿用
子 agent 分工單一 agent 要處理的資料太雜一個子 agent 專門查庫存,只把結論回報給主 agenttoken 用量明顯增加

以下逐項補充。

按需載入:先給地址,要用時再去拿

Anthropic 稱這種做法為 just-in-time(即時載入):上下文裡只放輕量的識別資訊,例如檔案路徑、查詢條件或網址,agent 判斷需要時才用工具把資料讀進來。它舉的例子是 Claude Code,會先讀專案說明檔,再用搜尋指令找需要的檔案,而不是一開始就把整個專案載入。

企業流程裡最常見的版本就是 RAG:問題進來,先檢索相關段落,再放進上下文。檢索怎麼設計、每一步會在哪裡出錯,RAG 是什麼 有完整的整理,這裡不重複。

精簡工具:工程師自己都選不出來,agent 也選不出來

Anthropic 的建議是維持一組最小、夠用的工具,避免功能重疊。它給了一個很好用的判斷方法:如果工程師看著工具清單,都說不出這個情況該用哪一個,agent 也不會知道。

舉個例子,同時開放「查詢訂單」和「查詢訂單狀態」兩個工具,名稱和說明又很接近,agent 就可能在兩者之間亂選。合併成一個,或把說明寫到不會混淆,錯誤就少很多。透過 MCP 接工具時,工具說明也會進上下文,裝了十幾個 MCP server,光是說明就可能占掉一大塊,MCP 是什麼 裡有接 server 前該檢查的事。

壓縮與摘要:對話快滿時整理一次

長任務跑到一半,上下文快滿了,就把目前為止的內容整理成摘要,用摘要開始新的一段。Anthropic 提到,最安全、最輕量的壓縮是清掉舊的工具回傳結果:agent 已經用過那筆資料、做完判斷,原始的回傳內容就可以拿掉。Claude 的開發平台也把這件事做成功能,可以依設定自動清除較舊的工具結果。

要注意的是摘要本身的品質。開頭退貨的例子裡,如果摘要只寫「老客戶,曾退貨兩次」,漏掉兩次的原因,agent 就少了判斷第三次退貨的關鍵依據。

筆記式記憶:讓 agent 自己記下進度

agent 把重要的事寫在上下文之外的地方,例如一個固定的筆記檔,下一輪或下一次任務開始時先讀它。Anthropic 舉過一個例子:讓 Claude 玩寶可夢遊戲時,它會在筆記裡記錄幾千步的訓練進度與地圖探索,上下文重置後讀回筆記,還能接著原本的策略玩下去。

企業流程裡,這可以是一張跨天處理的客訴單:第一天查了哪些資料、問了客戶什麼、還在等哪個部門回覆,都寫進筆記,第二天接手的 agent(或人)先讀筆記就知道進度。

子 agent 分工:各自處理,只回報結論

把一個大任務拆給幾個子 agent,每個子 agent 在自己的上下文裡深入處理一塊,最後只把精簡的結論交回主 agent。Anthropic 的說法是,子 agent 可能用掉幾萬個 token 探索,但回報的摘要通常只有 1,000 到 2,000 個 token,主 agent 的上下文就能保持乾淨。

代價是總用量。前面提過,Anthropic 的多 agent 系統 token 用量約是一般聊天的 15 倍。所以我會把子 agent 留給真正需要平行查很多資料的任務,例如同時比對十家供應商的規格與交期;一般的客服或資料整理,一個 agent 加上按需載入通常就夠。

上下文也會出錯:四種常見狀況

LangChain 的文章引用 Drew Breunig 的整理,把上下文出錯分成四種。我用同一個客服情境逐一對照:

狀況意思客服情境裡的樣子對應做法
上下文中毒錯誤的內容進了上下文,之後一直被沿用agent 前一步誤判「客戶是 VIP」,寫進筆記,後面每一步都照 VIP 處理記憶與筆記要能查、能改;關鍵欄位從系統查,不從前一步的推論來
上下文分心內容太多,模型被帶偏40 段歷史對話讓模型開始回應兩年前的抱怨歷史紀錄改成摘要
上下文混淆多餘的資訊影響回答25 個工具的說明,讓模型在不需要的時候呼叫了寄信工具每一步只開放需要的工具
上下文衝突上下文裡的資訊互相矛盾新舊兩版退貨政策同時存在只放現行版本,文件標明版本日期

第一種要特別小心。錯的內容可能來自模型自己編出來的推論,也可能來自有人刻意藏進去的指令。前者的成因和處理,在 AI 幻覺是什麼;後者屬於 prompt injection,要從權限和系統設計去防。寫進記憶或筆記的東西,影響會延續到之後的每一步,所以什麼可以寫、誰能改,要在設計時就想好。

我們自己的例子:給 AI 協作的說明文件,先寫「什麼時候讀哪份」

我們內部有一份給 AI 協作用的流程說明,規定一項工作要依序做哪些檢查、參考哪些文件。這份說明原本的寫法,是列出一串開工前要讀的文件,遇到新狀況就再加一份進去,清單越來越長。

這樣做吃過虧。舊紀錄裡已經被取代的寫法、已經決定不公開的資訊,只要還在要讀的範圍內,就有機會被當成現行規則沿用。

2026 年 9 月,我們在說明的開頭加了一張表,每份文件寫清楚三件事:什麼情況下才讀、讀它是為了什麼、和其他文件衝突時誰優先。例如語氣規範只在寫正文時讀,圖片流程只在做圖時讀,公司事實表只在提到公司或產品時讀。同一個月也把一次性的舊紀錄移到封存區,重複的文件合併。

這張表做的事,就是這篇講的按需載入加上衝突處理:

  • 每次工作開始時,只載入這項工作需要的文件,其他文件留著名稱與用途,需要時再讀
  • 文件之間說法不同時,依表上的優先順序判斷,模型不用自己猜哪一份才算數
  • 過期的文件刪除或移到封存區,不留在清單裡當干擾

上下文裡同時存在新舊兩套規則,本身就是一種錯誤來源,這和開頭退貨政策新舊兩版並存是同一個問題。整理上下文,有一半的工作其實是把該退場的東西移走。

導入 agent 時,先檢查這四件事

多數企業的第一個 agent 流程,還用不到子 agent 或複雜的記憶設計。上線前先確認下面四件事,就能避開大部分上下文造成的錯誤:

  1. 每一步的上下文都留紀錄。答錯時,要能回頭看到那一步模型實際收到了什麼:放了哪幾段文件、哪些工具、多少歷史對話。沒有這份紀錄,就只能猜是提示詞還是資料的問題。
  2. 文件只放現行版本,並標明日期。放進檢索範圍的文件,舊版要移出或標示作廢。退貨政策這類會改的規則,最好只有一個來源。
  3. 測一個「很長」的案例。測試集裡放一位往來紀錄很多、訂單很多的客戶,確認上下文變長之後,答案仍然正確、成本仍在預期內。
  4. 估算每一步的 token 用量。記錄一次完整任務用了多少 token,乘上每天的量,看看成本是否合理;用量明顯偏高的步驟,通常就是上下文放太多的地方。

測試集怎麼建、成功率要到多少才上線,可以看 AI agent 專案怎麼驗收。

我們能協助的部分

我們的企業 AI 營運方案在需求診斷時,工程團隊會協助梳理資料現況,先挑一個關鍵流程切入,只整理這個流程會用到的資料。這和這篇講的原則一致:先確定這個流程每一步需要什麼,再決定要準備哪些資料。

模型可以依任務接入 OpenAI、Claude 與 Gemini,依難度調配;資料異常或高風險的判斷設計成先暫停,交由專人確認後再執行。

常見問題

模型能讀的上下文越來越長,還需要 context engineering 嗎?

需要。上下文上限變大,代表放得下,不代表模型都讀得準。上下文越長,找回關鍵資訊的準確度會下降,每一步的費用也會跟著增加。上限變大之後,要挑的東西反而更多。

Context engineering 一定要工程師才能做嗎?

系統怎麼組上下文,通常要工程師實作;但決定放什麼,最需要的是熟悉流程的人。哪份文件是現行版本、判斷退貨要看哪幾個欄位、哪些歷史紀錄有用,這些由業務單位先列出來,工程師再照著設計,效果會比工程師自己猜好很多。

開了記憶功能,錯的東西會不會一直被記著?

會。記憶和筆記裡的內容會被之後的每一步沿用,寫錯就會一直錯下去。設計時要讓記憶可以查看和修改,關鍵資料(客戶等級、合約條件)每次從系統查,不從記憶讀;也要定期檢查記憶裡有沒有過期或來路不明的內容。

對話太長時,直接開一個新對話可以嗎?

可以,這其實就是最簡單的壓縮。重點是開新對話前,把需要延續的東西帶過去:目前的進度、已確認的事實、還沒解決的問題。直接開新對話、什麼都不帶,agent 就得從頭再查一次。

參考來源

從這篇繼續看相關內容

依文章主題整理同站文章、服務/產品與 FAQ 入口,讓下一步有清楚的閱讀方向。

延伸閱讀

下一步

服務入口

了解企業 AI 營運導入

名詞弄清楚之後,看 AI agent 怎麼接進既有系統,以及哪些動作要人工確認。

查看相關頁面

常見問題

AI 的 token 是什麼?

用量和費用怎麼算,先看一題直接回答。

查看 FAQ 解答

企業 AI 落地實踐

把文章裡的判斷帶回你的流程

從一個實際工作流開始,與 EthorX 共同釐清 AI agents 的導入起點。