你大機率已經看過無數篇關於 Context Engineering 的文章了。概念不難:給 AI 足夠且精確的上下文,讓它產生更可靠的程式碼。但當你真正打開編輯器,想把「結構化上下文」塞進每天的 coding 工作流程時,多數人會卡在同一個地方:不知道從哪裡開始,試了幾天又退回了舊習慣。
本文將跳過概念解釋,直接給你一套能在本週內驗證的落地路徑。你不需要改造整個項目,也不需要引入複雜的編排框架。你只需要先搭一層最薄的脈絡層,然後學會正確的注入時機。
卡在落地環節的真正原因
大部分開發者失敗不是因為不懂 Context Engineering,而是高估了自己的抽象能力。你試著一開始就設計一套覆蓋所有場景的上下文 schema,結果寫了兩週還沒跑通一次。另一個常見情況是:你把上下文管理寫進了業務邏輯裡,導致每次改 prompt 都需要改程式碼,最終維護成本高到放棄。
真實場景:你正在開發一個使用多個 API 的 Node.js 後端,每呼叫一次 OpenAI 的 chat completion 都需要上傳目前使用者角色、已執行的函式清單、最近一次錯誤堆疊。你把這些資訊一股腦塞進系統 prompt,發現 token 消耗暴增,而且模型反而更容易被無關資訊幹擾。
失敗點:沒有區分「穩定上下文」和「動態上下文」。穩定的如專案規格、介面定義,動態的如目前函數狀態、使用者輸入。把它們混在一起,既浪費 token 又讓模型分心。

最先要搭的層:一個輕量上下文註冊表
別一上來就搞 Context Manager 或 RAG 管道。你需要的是最薄的一層:一個結構化的上下文註冊表,能區分哪些上下文是項目級的(一直存在),哪些是會話級的(每次對話重置),哪些是查詢級的(僅本次請求)。
可執行做法:以 JSON 物件管理,每個鍵對應一個上下文來源,聲明其作用域和優先權。實現時只需一個函數,在每次呼叫 AI 之前合併目前作用域下的上下文區塊。

// 最小实现
const contextRegistry = {
project: {
codingStandards: { content: "Use async/await, avoid any", scope: "session" },
apiSpec: { content: loadFile("./api-spec.md"), scope: "project" },
},
query: {
currentFunction: { content: "createUser(userData)", scope: "query" },
lastError: { content: errorStack, scope: "query" },
},
};
function buildContext(queryScopeKeys: string[]) {
return Object.values(contextRegistry)
.filter(item => item.scope === "project" || ...)
.map(item => item.content)
.join('\n');
}
這一步的價值在於:你將上下文從程式碼中解耦出來,可以獨立修改、調試,甚至針對不同模型調整上下文密度。
執行中最容易失敗的動作與排查方法
最常犯的錯誤是「上下文膨脹而不自知」。你不斷增加上下文項,但沒意識到很多資訊模型已經透過訓練資料知道了(例如常見庫的用法),或者當前任務根本不需要。
失敗場景:你為模型上傳了整個專案的目錄結構,認為它能據此理解程式碼關係。但實際效果是模型在產生 import 路徑時憑空捏造文件,因為「目錄結構」只告訴了它文件名,沒告訴每個文件的職責——上下文資訊密度不足。
排查方法:每次新增新的情境後,執行簡單的「情境效度測試」:讓模型只基於該情境回答一個已知問題,看是否準確擷取。如果模型回答出現幻覺,表示上下文不是不完整,就是噪音太多。更直接的指標:觀察每次 API 呼叫的 completion_tokens 和 prompt_tokens 比例,如果 prompt 持續成長但 completion 品質沒提升,就需要裁剪上下文。
另一個失敗點:上下文注入時機搞錯。很多人在使用者輸入前就把全部上下文塞給模型,但實際最佳時機是在使用者輸入之後、呼叫模型之前,根據使用者問題動態選擇相關上下文。這能大幅減少 token 浪費。
可複製的最小落地路徑
下面這套路徑可以在兩天內跑通,不需要任何額外函式庫,只使用到 OpenAI SDK 或任何相容 API。
- 列出你目前在使用的所有 AI coding 場景(如程式碼產生、debug、重構)。
- 為每個場景寫下你覺得模型需要的「知識」:專案規格、API 文件、常用程式碼片段、最近更改記錄。
- 用前面說的註冊表結構,將這些知識分類為 project、session、query 三檔。
- 修改 AI 呼叫函數,在每次請求前呼叫 buildContext() 以產生上下文區塊,拼接到 system message 中。
- 運行一天,記錄每次呼叫的 token 數和輸出品質。第二天根據記錄剔除無用的上下文項目。
這條路徑不完美,但它能讓你立刻上手。後續最佳化方向包括:為不同模型自訂上下文格式(如 Claude 的 XML 標籤偏好)、將上下文來源改為資料庫或檔案系統實現持久化、引入自動上下文選擇(基於 embedding 相似度)。
失敗時的備用方案
如果上面的路徑試了兩天依然覺得笨重,很可能是因為你選的場景本身不適合當前模型知識邊界。例如你試著讓 GPT-3.5 產生它沒見過的內部函式庫程式碼,再多的上下文也只是硬塞,模型無法真正「理解」意圖。
備用方案 1:降級為「模板 + 手動定位」。放棄動態上下文,改為為每個場景寫一個靜態系統 prompt 模板,在模板中預留佔位符,手動填入少量關鍵資訊。雖然笨,但可控。
備用方案 2:改用程式碼補全類模型(如 Codex 或 Cursor 的內建模型),這些模型自然適應局部上下文,不需要你刻意管理全域。
備用方案 3:將複雜任務拆解為多次調用,每個子任務只攜帶非常少的上下文。例如先讓模型規劃步驟,再逐步產生程式碼,每一步只需上一步的輸出作為上下文。
下一步:從可做到高效
當你跑通最小路徑後,會自然遇到新的問題:如何讓上下文自動更新而非手動編輯?如何測試情境組合的效果?如何讓團隊共享上下文配置?這些問題已經超出了本文的範疇,但正是你從「會用」到「精用」的關鍵進階方向。
如果你想系統掌握 Context Engineering 在複雜多步驟工作流程中的設計模式、測試方法和反模式,可以考慮深入學習 AI 程式設計進階課程。從一般開發者到 Agent 工程師的轉變,往往就始於你對「脈絡」這一層的掌控力。

暫無評論,快來發表你的看法吧