跳到主要內容
黯羽輕揚每天積累一點點

RAG vs Context Engineering:我會在什麼場景下選哪個

免費2026-07-03#AI#AI

RAG 和 Context Engineering 看似都在處理上下文,實則分工截然不同。 本文從真實失敗案例出發,給出選擇矩陣、常見錯配代價,以及團隊資源有限時應該優先落地的方案。

這兩個概念到底在同一決策里分別扮演什麼角色

我們在設計 AI 應用時,常常會遇到一個繞不開的矛盾:模型需要更多、更準的上下文,但上下文視窗不是免費的——它既增加延遲,又可能讓模型在無關資訊中丟失關鍵信號。 RAG(Retrieval-Augmented Generation)和 Context Engineering(有時稱為 Loop Engineering 或上下文工程)正是從兩個不同方向解決這個矛盾的。

RAG 的核心動作是「從外部知識庫中檢索」,你通過向量相似度、關鍵詞召回等方式,從文檔庫中精準撈出和用戶查詢最相關的片段,然後拼入 prompt 讓模型使用。 它解決的是“模型不知道的事情”的問題——即私有數據、最新動態或長尾知識。

Context Engineering 則完全不同,它關心的是“如何設計和維護對話的上下文結構”。 當你使用多輪對話、工具調用(function calling)或 Agent 循環時,你需要決策:哪些歷史輪次要保留、哪些工具輸出要注入、角色系統提示該如何編排、上下文視窗滿了該截斷哪些內容。 它解決的是「模型應當如何理解當前狀態」的問題——即對話流、中間狀態和工具調用歷史。

兩者的分工可以用一句話概括:RAG 拉入外部資訊,Context Engineering 編排內部狀態。 在同一個產品中,它們往往協同工作:RAG 為模型補充領域知識,Context Engineering 確保模型不會在長對話中迷失身份或遺忘關鍵指令。

我會在什麼真實場景下選 A 而不是 B

場景:開發一個內部文檔問答 Bot

假設你在團隊里接到一個需求:做一個能回答公司內部技術文檔和流程文檔的機器人。 這個場景下,用戶問題大多是一次性的(“Server 部署流程是什麼? “),對話輪次通常很短(1-3 輪),不需要記憶歷史上下文。 這裡的核心矛盾是:模型不知道公司內部文檔內容。

**你應該先選RAG。 ** 原因很直接:Context Engineering 對你幾乎沒有説明——單輪問答不需要精心編排上下文結構,而RAG解決了知識缺失這個主要矛盾。 你可以搭建一個簡單的檢索鏈路:將內部文檔切塊後向量化存儲,用戶提問時檢索 Top-K 相關塊,拼入 prompt 後交給模型回答。 你甚至不需要額外維護對話狀態。

場景:開發一個持續多輪的專案管理 Agent

現在換一個需求:做一個 Agent,讓它幫助團隊追蹤專案任務狀態、自動分配任務、處理多輪澄清和確認。 使用者可能先問“當前Sprint還有哪些未完成的任務”,Agent 返回 JSON 清單。 用戶接著追問“把最緊急的兩個分配給我”,Agent 調用創建函數並返回確認。 用戶再問「那上個月延期的那幾個誰負責? “——此時 Agent 需要知道前面提到的”最緊急的任務“是指當前 Sprint 內的。

**你應該先選 Context Engineering。 ** RAG 解決不了“模型記不住三分鐘前自己輸出的 JSON 結構”的問題。 你需要設計一個上下文管理方案:每次函數調用后,將執行結果以結構化摘要的形式寫回上下文; 當上下文接近視窗上限時,捨棄最舊的、不再相關的中繼輪次; 同時維護一個「關鍵狀態」固定區域,比如當前專案ID、使用者角色等不變資訊。 這是典型的 Context Engineering 工作。

終端中列印的RAG上下文注入日誌,顯示檢索到的文檔片段被拼入 prompt,用於說明RAG的執行流程。

最常見的錯配方式與代價

我見過最典型的錯配是:一個只有 3 輪對話的簡單問答產品,團隊卻在花大精力設計上下文視窗壓棧、截斷策略、狀態壓縮。 代價是開發週期從 2 周拉長到 6 周,而使用者體驗幾乎沒提升。 反過來,在一個需要 20 輪以上對話的複雜 Agent 場景里,團隊只在 RAG 上堆向量庫和重排序模型,卻忽視上下文丟失導致的工具調用失敗,結果 Agent 經常答非所問、重複操作,用戶滿意度極低。

另一個常見誤區是“RAG 和 Context Engineering 能互相替代”。 有人以為只要把歷史對話全部丟進RAG索引就能實現記憶,但RAG的檢索粒度是片段級別的,它無法保證模型重建連貫的上下文狀態。 例如,使用者上一輪說“把任務指派給張三”,這一輪問“他完成了嗎”,如果模型只檢索到“把任務指派給張三”這個片段,它無法知道“他”指代誰。 Context Engineering 通過顯式維護指代映射(比如在上下文中存一個 {action: “assign”, user: “張三”, task: “...”} 的結構)來解決這類問題。

筆記型電腦上顯示RAG遷移檢查清單,列出分塊、索引、檢索、評估步驟,用於展示落地RAG的工程流程。

如果團隊現在只能先落一個,應該先做哪一個

核心判斷標準是:知識缺口 + 對話輪次

如果使用者的典型場景是單輪或短對話(≤5輪),且問題涉及大量私有或動態知識,先做RAG。 因為此時 Context Engineering 能帶來的邊際收益很低——簡單的 prompt 指令足以維持上下文。 你可以在後續反覆運算中再補充上下文歷史管理,甚至一開始就用截斷“最後 N 輪”的粗暴方法。

如果使用者的典型場景是多輪複雜任務(執行 >5 輪的工具調用或狀態流轉),且知識不是主要矛盾(模型已有的訓練數據已覆蓋),先做 Context Engineering。 因為上下文丟失會直接導致 Agent 無法完成目標任務,這是致命缺陷。 而知識不足可以用臨時方案彌補,比如讓模型在回答中說“我找不到相關信息,請提供更多上下文”。

一個實用的經驗法則:當你發現模型錯誤大多是「忘記之前說了什麼」導致的,優先 Context Engineering; 當錯誤大多是“不知道這個知識”導致的,優先RAG。

做出選擇後下一步要補什麼能力

如果你先做了 RAG,下一步要關注:

  • 分塊策略優化:文檔切塊大小、重疊視窗、元數據編排直接影響檢索品質。
  • 檢索質量監控:引入重排序模型(Cohere Rerank、BGE Reranker)或混合檢索(BM25 + 向量)來降低雜訊。
  • 上下文注入設計:檢索到的片段如何自然插入 prompt,既不能打斷角色指令,也不能被模型忽略。

如果你先做了 Context Engineering,下一步要關注:

  • 狀態持久化與對齊:如何將對話中的關鍵狀態(使用者身份、任務狀態、上下文指紋)持久化,並在多輪中保持對齊。
  • 上下文壓縮與摘要:在上下文視窗耗盡前,自動對歷史內容進行摘要壓縮,保留關鍵資訊。
  • 工具調用的反饋迴圈:每個工具調用后,將執行結果結構化地注入上下文,供後續決策使用。

兩者最終都會走向融合:一個成熟的 AI 產品需要RAG持續補充知識,也需要 Context Engineering 維持狀態。 但初期取捨決定了團隊的投入產出比,選錯方向可能浪費數月時間。

具體的決策場景比“哪個更好”更值得討論

如果你剛接觸這個話題,不妨梳理一下自己當前想做的產品:它需要模型回答它不知道的事情嗎? 用戶會連續問 10 輪以上嗎? 把這兩個維度畫成一張決策矩陣,大概率能快速定位當前最應該發力的方向。 不要因為RAG是熱門詞就先上RAG,也不要因為 Agent 大火就覺得 Context Engineering 是萬能藥。 兩者各有邊界,清晰定義問題才能選出正確的工具。

評論

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

提交評論