ai-agents-for-beginners

AI 代理的語境工程

語境工程

(點擊上方圖片觀看本課程影片)

了解你正在為其構建 AI 代理的應用程式的複雜性,對於打造可靠的代理非常重要。我們需要構建能有效管理資訊以應付超越提示工程的複雜需求的 AI 代理。

本課將介紹什麼是語境工程及其在構建 AI 代理中的作用。

介紹

本課將涵蓋:

什麼是語境工程 以及它與提示工程的不同之處。

有效語境工程的策略,包括如何撰寫、選擇、壓縮和隔離信息。

常見的語境失敗,這些失敗可能使你的 AI 代理陷入困境以及如何修復。

學習目標

完成本課後,你將能夠理解如何:

定義語境工程 並與提示工程區分。

辨識語境在大型語言模型(LLM)應用中的關鍵組成部分

運用撰寫、選擇、壓縮和隔離語境的策略,提升代理效能。

識別語境中的常見失敗,如污染、分心、混淆和衝突,並實施緩解技術。

什麼是語境工程?

對於 AI 代理而言,語境是推動代理規劃採取特定行動的驅動力。語境工程是一種確保 AI 代理擁有完成下一步任務所需正確資訊的實踐。由於語境視窗大小有限,我們作為代理構建者,需要建立系統和流程來管理在語境視窗中新增、移除和濃縮資訊。

提示工程與語境工程的比較

提示工程著重於一組靜態指令,有效指導 AI 代理遵守規則。語境工程則是如何管理一組動態資訊(包括初始提示),以確保 AI 代理隨時間獲得所需資訊。語境工程的核心理念在於使此過程可重複且可靠。

語境類型

語境類型

務必記住,語境不只是單一項目。AI 代理需要的資訊可能來自各種不同來源,而我們必須確保代理能存取這些來源:

AI 代理可能需要管理的語境類型包括:

指示: 像是代理的「規則」—提示、系統訊息、少數示例(向 AI 展示如何做事)、以及可使用工具的描述。這也是提示工程和語境工程交匯的焦點。

知識: 包括從資料庫檢索的事實及資訊,或代理累積的長期記憶。如果代理需要存取不同的知識庫和資料庫,可整合檢索增強生成(RAG)系統。

工具: 代理可以調用的外部函式、API 和 MCP 伺服器的定義,及使用這些工具後所得到的回饋(結果)。

對話歷史: 與使用者的持續對話。隨著時間推進,這些對話變得更加冗長且複雜,佔用語境視窗空間。

使用者偏好: 隨時間學到的使用者喜好或不喜好。可儲存並在做出重要決策時調用,協助使用者。

有效語境工程的策略

計劃策略

語境工程最佳實踐

良好的語境工程始於良好的計劃。這裡有一個方法,幫助你開始思考如何落實語境工程概念:

  1. 明確定義結果- AI 代理將被分配的任務結果應清晰定義。回答問題「當 AI 代理完成任務時,世界會是什麼樣子?」換句話說,使用者與 AI 代理互動後,應得到什麼變化、資訊或回應。

  2. 繪製語境地圖-定義 AI 代理任務結果後,需回答「AI 代理完成該任務需要哪些資訊?」以便開始繪製該資訊可在哪裡找到的語境地圖。

  3. 建構語境流程-既然知道資訊位置,便要回答「代理如何取得這些資訊?」這可透過多種方式完成,包括 RAG、使用 MCP 伺服器及其他工具。

實務策略

雖然規劃重要,但當資訊開始流入代理的語境視窗時,我們需要實務策略來管理它:

管理語境

部分資訊會自動加入語境視窗,語境工程則側重於更主動的資訊管理,具體可採用以下策略:

  1. 代理筆記本(Agent Scratchpad)
    允許 AI 代理在單一會話期間記錄關於當前任務和用戶互動的重要資訊。應建置在語境視窗外,例如檔案或運行時物件,代理可在此會話中必要時檢索。

  2. 記憶
    筆記本適合管理單次會話外的資訊,記憶則支持代理跨多次會話儲存和提取相關資訊。可能包含摘要、使用者偏好和未來改進的反饋。

  3. 壓縮語境
    當語境視窗變大並接近容量限制時,可用總結和剪裁技巧,只留最重要的資訊或刪除較舊訊息。

  4. 多代理系統
    開發多代理系統本質上也是語境工程,因為每個代理有自己的語境視窗。如何分享及傳遞語境給不同代理是系統規劃的一部分。

  5. 沙盒環境
    如代理需要執行程式碼或處理大量文件資訊,會消耗大量 tokens 處理結果。代理可使用沙盒環境執行代碼,只將結果和其他相關資訊讀入語境視窗。

  6. 運行時狀態物件
    透過建立資訊容器管理代理需要存取特定資訊的情況。對於複雜的任務,促使代理逐步儲存各子任務的結果,語境只相關於該子任務。

語境工程範例

假設我們想要一個 AI 代理幫你 「訂一趟巴黎旅行。」

• 單純使用提示工程的代理可能只會回答:「好的,你想什麼時候去巴黎?」 僅處理使用者當下提出的直接問題。

• 運用上述語境工程策略的代理在回應之前可能會:

  ◦ 檢查你的行事曆,取得可用日期(擷取實時資料)。

  ◦ 回憶過去的旅行偏好(從長期記憶)例如你偏好的航空公司、預算或是否偏好直飛。

  ◦ 識別可用工具 用於訂機票和飯店。

常見的語境失敗

語境污染

定義: 生成的虛假資訊(LLM 幻覺)或錯誤進入語境且被重複引用,使代理執著於不可能的目標或發展荒謬策略。

解決方法: 執行語境驗證隔離措施。在加入長期記憶前先驗證資訊。若偵測有潛在污染,啟動全新語境線程避免錯誤資訊擴散。

旅行訂票範例: 你的代理「幻覺」有一條從小型地方機場直飛遠距國際都市的航班,但該機場其實並無國際航線。此不存在的航班資訊被存入語境。之後你叫代理訂票時,它不斷嘗試尋找該不可能路線的票,導致錯誤重複發生。

解決方案: 在將航班細節加入代理工作語境前,執行一個步驟用實時 API 驗證航班存在和路線。若驗證失敗,錯誤資訊被「隔離」且不再使用。

語境分心

定義: 當語境過大,模型過度聚焦累積的歷史,而非利用訓練中學到的內容,導致行動重複或無益。模型甚至在語境視窗未滿前就可能犯錯。

解決方法: 使用語境摘要。定期將累積資訊壓縮成較短摘要,保留重要細節並刪除冗餘歷史,幫助「重置」聚焦。

旅行訂票範例: 你長時間討論夢想旅遊目的地,還詳細回顧兩年前的背包旅行。當你最後問要「幫我找下月的平價機票」,代理陷入舊有無關細節,持續問背包裝備或舊旅程,忽略你當前請求。

解決方案: 在一定回合數或語境變大後,代理應摘要近期最相關對話—專注於當前旅行日期和目的地—並用此壓縮摘要做下一次 LLM 調用,捨棄較無關的歷史對話。

語境混淆

定義: 當不必要的語境(通常是過多可用工具)讓模型產生錯誤回應或調用不相關工具。較小模型尤易受此影響。

解決方法: 使用 RAG 技術管理工具載入清單。把工具描述存入向量資料庫,且僅選擇與任務相關的工具。研究顯示將工具數量控制在 30 個以下較佳。

旅行訂票範例: 代理能使用數十種工具:book_flightbook_hotelrent_carfind_tourscurrency_converterweather_forecastrestaurant_reservations,等等。你問「在巴黎交通方式如何?」但因工具太多,代理混淆了,可能嘗試在巴黎市內調用 book_flight,或用 rent_car 即使你偏好公共交通,因描述重疊或無法判斷最佳工具。

解決方案: 對工具描述使用 RAG。當問巴黎交通時,系統動態擷取_只有_最相關工具,例如 rent_carpublic_transport_info,並展示集中「載具工具」供 LLM 使用。

語境衝突

定義: 語境內存在衝突資訊,導致推理不一致或回答不佳。經常發生在資訊分階段到達,但先前錯誤假設仍留在語境。

解決方法: 使用語境修剪卸載。修剪意指隨新資訊到來,移除過時或衝突資訊。卸載則給模型一個獨立「筆記本」空間,讓它處理資訊不污染主要語境。

旅行訂票範例: 你先告訴代理「我要經濟艙」,之後又說「這次行程改訂商務艙」。如果兩個指示都在語境,代理可能拿錯搜尋結果或迷惑優先權。

解決方案: 執行語境修剪。當新指示與舊指示衝突,將舊指示刪除或在語境中明確覆蓋。或者代理用筆記本合併衝突偏好後再做決定,確保只有最終一致的指示導引其行動。

對語境工程還有更多問題?

加入Microsoft Foundry Discord,與其他學習者交流,參加問答時段,並獲得你關於 AI 代理的問題解答。


免責聲明: 本文件乃使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們致力於確保準確性,但請留意自動翻譯可能包含錯誤或不準確之處。原始語言版本的文件應被視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們對因使用本翻譯所引致之任何誤解或誤釋概不負責。