部落格
架構

發布於 更新於

Arag 和 Anshu

AI 代理架構:記憶、工具、狀態與持久執行

以 Markdown 閱讀

AI 代理架構不能只有模型與工具迴圈。正式環境的設計必須分開身分、工具、工作狀態、長期記憶、持久執行、後端服務及遙測,因為每一層負責的失敗都不同。

最清楚的測試是在兩次外部寫入之間讓程序當機。系統應知道是誰執行、哪些已完成、哪些可能已完成,以及從哪裡繼續,而不是要求模型從對話文字重建現實狀態。

從執行路徑開始

flowchart TB
    Trigger[User or event] --> Loop[Model and agent loop]
    Loop --> Policy[Identity and policy]
    Policy --> Tools[Tool registry]
    Tools --> Durable[Durable execution]
    Durable --> Backend[Backend services]
    Loop <--> State[(Task state)]
    Loop <--> Memory[(Long-term memory)]
    Loop --> Telemetry[Traces, logs, metrics, evals]
    Tools --> Telemetry
    Durable --> Telemetry
    Backend --> Telemetry

模型提出下一個動作,政策決定該身分是否可以執行,工具層把決策轉成範圍明確的合約,持久執行在外部副作用前後記錄進度,後端服務保存權威業務資料,遙測則讓人類能重建整次執行。

這個順序屬於更廣泛的正式環境代理堆疊,但為一項真實工作流程繪圖,比畫出公司裡每一項服務更有用。

讓每一層只擁有一種事實

模型迴圈負責選擇,但不負責授權

迴圈保存提示詞、近期訊息、工具結果及停止規則。它可以選擇工具,但下游系統必須執行權限限制。提示詞寫著「只能讀取發票」只是指引,不是存取控制邊界。

工具公開範圍明確的動作

工具合約會為操作命名、限制引數,並回傳下一步決策所需的欄位。不能只因模型能描述需求,就公開範圍廣泛的管理 API。MCP 工具設計指南涵蓋選擇、結構描述、穩定錯誤及安全寫入。

身分與政策決定哪些事情可以發生

將租戶、使用者、代理及委派的權限範圍帶到實際執行動作的系統。影響重大的呼叫前應檢查政策,稽核記錄則要保存決策。伺服器能從憑證推導租戶 ID 時,不要要求模型提供。

工作狀態記錄本次執行的位置

工作狀態包含目前步驟、已完成操作、等待中的核准、重試次數及下一次排程嘗試。狀態必須能在建立它的程序結束後繼續存在。對話記錄是執行的輸入,卻無法可靠編碼交易狀態,因此不能取代明確狀態。

記憶在不同執行間傳遞選定事實

記憶可以包含使用者偏好、先前摘要或擷取的文件。它是可能出錯的上下文,因此要保留來源、保留期限與刪除規則。不能只用「發票已寄出」這類記憶句子記錄不可逆的副作用;這項事實應存在權威後端狀態中。

持久執行能承受中斷

持久執行負責協調重試、檢查點、等待及繼續。Temporal 將它定義為透過重播已記錄事件歷史,讓執行在當機或中斷後繼續。即使不採用 Temporal,而只實作較小的操作帳本,這個模型仍然有用。請參考 Temporal 的持久執行說明及完整的代理持久性指南。

後端服務擁有業務事實

訂單、付款、檔案、權限及客戶記錄,應存在能執行其不變條件的系統中。代理透過範圍受限的 API 或工具存取。模型回應可以解釋訂單,但不能成為正式訂單記錄。

遙測重新串起整條路徑

使用一條追蹤連接模型呼叫、工具選擇、政策檢查、工具執行及下游請求,並加入操作 ID 與遮蔽後的引數。日誌記錄事件、指標呈現彙總健康狀態、評估驗證預期行為,三者不能互相取代。

選擇產品前先區分失敗

代理在逾時後重複寄信,應調查持久執行與冪等性;下週記錯偏好,應調查記憶與來源;讀取另一租戶的記錄,應調查身分與授權;選擇 delete_project 而不是 archive_project,則應調查可見工具集及選擇測試。

購買單一「代理平台」不會消除這些邊界,只會改變負責它們的元件。應明確記錄責任歸屬,包括產品名稱背後實際使用的資料庫或佇列。

先繪製最棘手的工作流程

不要從唯讀對話開始。選擇一項會寫入兩次、等待核准、呼叫不可靠 API 或可能產生費用的工作流程,在每個副作用前後標記權威記錄。下方提示詞會把這條路徑轉成架構圖,並指出目前只存在於模型上下文視窗中的層級。