為了讓系統更具可控性與可維護性,我們通常會將上下文拆成三個層次:即時上下文、持久上下文與外部上下文。這三層會共同構成 AI 的記憶與知識體系
即時上下文指的是模型在當前呼叫所能看到的內容,它構成了模型做出回應時最直接的視野,其內容通常包含:
即時上下文只與目前對話有關,過去的內容如果不相關就可能被剪掉或壓縮摘要,另外因為 token 上限的關係,對話歷史、工具輸出、搜尋結果...等都可能面臨被截斷或替換的風險。
此外,並非所有歷史紀錄都會被完整放進來,所以我們需要一些設計策略,選擇哪些資訊最值得被保留。
當我們希望模型聚焦在最近的三句對話時,可以這樣設計提示詞,明確限制他的視野:
以下是本次任務最關鍵的對話歷史(僅列出最重要的三句):
- 使用者 A:「我們正在討論,下一季應該優先研發哪個產品線?」
- AI B:「數據顯示,智能手錶在年輕族群的需求正高速增長。」
- 使用者 A:「很好,那我們應該從功能面切入,還是價格面?」
你的任務:
請基於這三句對話,判斷應優先從「功能面」還是「價格面」切入市場。請提供你的理由與具體的下一步行動建議。
這種設計能有效將即時上下文限縮在核心範圍內,避免模型被過往的次要資訊所干擾
持久上下文相當於我們的長期記憶。它儲存了在多輪對話、甚至跨越多個會話 (Session) 中需要持續保留的資訊。這層記憶不像即時上下文那樣頻繁變動,但它提供了 AI 的個性與記憶感,讓 AI 在後續互動中能記住我們是誰,且不需要我們重複提醒。
這層上下文的關鍵職責包括:
持久記憶通常儲存在向量資料庫中,所以最重要的是我們要如何根據當前對話的意圖,精準的找出最相關的記憶片段,而非暴力的載入所有記憶。此外,過時的記憶也需要定期刪除或歸檔,以免佔用資源;而錯誤的資訊如果存到了長期記憶中,也可能在後續的互動不斷被重複引用,導致錯誤的記憶循環。
最後,就是當有新的資訊時,系統必須要決定是新增一條記憶?還是更新或覆蓋既有的記憶片段。
假設我們已經在系統記憶中存了關於使用者的愛好與設定,接下來可以這樣組合提示詞:
[系統注入的持久上下文摘要]
- 使用者偏好:深夜工作,效率更高
- 內容風格:喜歡簡潔、條列式的報表風格
- 歷史興趣:過去曾多次查詢「AI 在教育領域的應用」
[使用者當前的提示詞]
請基於我的習慣,幫我擬定一份「深夜讀書計畫」的建議書
[最終組合的提示詞]
背景資訊:
- 使用者偏好深夜工作。
- 使用者喜歡簡潔的報表風格。
任務:
請為這位使用者擬定一份「深夜高效讀書計畫」,並用簡潔的報表格式呈現。
透過這種方式,系統能將把過去的記憶融入到新任務,且不需要使用者重複提供資訊
外部上下文,可以想成是 AI 的外部大腦或圖書館,它指的是模型沒有內建的、必須從外部來源獲得的資訊。這也是 RAG (Retrieval-Augmented Generation, 檢索增強生成) 策略的核心。
外部上下文的來源非常廣泛,包括但不限:
外部上下文的好處是可以提供模型在訓練截止日期之後的最新資訊,或是特定領域的專業知識,所以模型的回答就能引用外部資料,增加可信度。
因為外部上下文需要依賴外部來源的資訊,所以要特別注意外部內容的準確性,如果搜尋回來的內容跟使用者問題不完全相關,甚至包含錯誤訊息,就會造成後續內容的崩壞,因此如何對搜尋結果進行過濾、排序和驗證就變得非常重要。
此外,考量到外部文件過於龐大的問題,如果直接塞到即時上下文中,可能讓 token 直接爆掉,所以我們要先切塊、摘要或是選擇性的提取內容。
最後,為了提高使用者對輸出的信任感與可驗證性,我們在生成的回應中要清楚標示資訊來源,方便使用者反查與驗證。
當任務需要依賴外部知識庫時,提示詞的設計應引導模型「先搜尋,後生成」:
任務:撰寫一篇關於「區塊鏈在網路安全領域的應用」的入門說明。
執行步驟:
1. 搜尋:請先從我們的技術知識庫中,搜尋三篇最相關的文章。
2. 摘要:為每一篇文章生成 2-3 行的摘要。
3. 生成:請以這三份摘要為核心背景,撰寫一篇約 500 字的入門文章。
4. 引用:在文章結尾,必須列出你參考的三篇文章原始來源。
這樣的提示詞設計,就能確保 AI 先拿到外部上下文,再在其基礎上生成內容。
現在我們已經知道這三層上下文的特性與功能,接下來要進一步設計他們之間的相互協作,以下是一些設計的思考方式與架構建議:
上下文工程中,對這三層的流程,不是一次全塞給 AI,而是要設計一個有順序、有選擇的資訊流。
當收到使用者請求時,系統首先從外部上下文搜尋最新或最相關的文件;接著,從持久上下文中搜尋補充性的個人背景;最後,將這些整理好的內容與即時上下文 (最近的對話) 組合起來,一起送給模型
假設我要請 AI 幫我產生一份競爭對手的分析報告,可以這樣設計資訊流:
搜尋公司 X, Y, Z 的市場資料與最近新聞,選出最相關的 5 段文字。
使用者記憶摘要:
- 偏好「數據導向」分析
- 報告必須有「表格 + 總結」結構
對話歷史:
User:「幫我分析這些競爭對手」
根據以下外部資料與使用者偏好,請撰寫一份競爭對手分析報告,
必須包含表格 (功能、價格、市占率對比) 與三段文字總結。
[外部檢索資料片段]
[使用者記憶摘要]
[最近對話歷史]
不同情境下, 這三層上下文的重要性也會有所不同
例如,在處理一個需要高度個人化的任務時,持久上下文的權重就應該更高;而在回答一個事實性問題時,外部上下文則最為關鍵
為了提升 AI 的反應速度,系統可以在使用者提問之前,就預先處理或更新一部分上下文,例如定期同步外部知識庫,或在對話空檔時摘要持久記憶
我們希望系統能自我優化,可以根據模型回應的品質,記錄哪些上下文片段對結果的提升有效,哪些反而是要排除的噪音干擾。這些紀錄都將成為下一輪優化的參考依據
這篇文章跟大家介紹了三層上下文:即時、持久與外部。他們都很重要,千萬不能只依賴某一層,不然很有可能讓 AI 產生記憶斷層、資訊過多或知識太舊的問題。
如果才剛踏入上下文工程的世界,可以先從以下兩個步驟開始進行: