部落格
架構

發布於 更新於

Arag 和 Shouryamaan

如何設計代理控制平面

以 Markdown 閱讀

代理控制平面負責執行周邊的決策:身分、授權、憑證範圍、核准、限制、操作狀態、資源所有權及稽核記錄。資料平面則執行允許的資料庫查詢、瀏覽器動作、部署或 API 呼叫。

如果每項工具都用不同方式做出這些決策,系統就沒有真正的控制平面,只有一組會隨工具增加而逐漸分歧的慣例。

分開決策與執行

flowchart LR
    Agent[Agent request] --> Identity[Resolve identity and tenant]
    Identity --> Policy{Policy and approval}
    Policy -->|deny| Audit[Audit decision]
    Policy -->|allow| Broker[Issue scoped credential]
    Broker --> Operation[Create or resume operation]
    Operation --> Tool[Execute tool in data plane]
    Tool --> Resource[(Database, API, browser, compute)]
    Tool --> Operation
    Operation --> Audit

控制平面應回答誰在執行、擁有哪些資源、允許哪項動作、是否需要同意、可執行多少工作,以及如何停止操作。資料平面則接收範圍狹窄的指示,以及完成工作所需的適量權限。

這道邊界是完整 AI 代理架構的一部分。第一天不必將它做成獨立服務,但合約應能在程式碼中清楚看見。

在工具選擇前解析身分

執行工具前,先解析已驗證的人類、租戶、代理及工作階段。當伺服器能從憑證綁定租戶識別碼時,不要接受模型輸出的租戶 ID。

NIST 的零信任架構把信任視為每次請求都要評估的項目,而不是因呼叫者位於內部網路就直接授予。對代理而言,即使請求來自內部工具,下游服務仍要授權其代表的身分。

控制平面、代理工作階段及應用程式執行期應使用不同憑證。能佈建資源的管理憑證不能提供給一般應用程式呼叫。

讓政策回傳具體決策

實用的政策決策會記錄:

  • 主體、租戶、資源及動作;
  • 政策版本與符合的規則;
  • 是否需要人類核准;
  • 支出、呼叫、時間或資料量限制;
  • 允許或拒絕結果,以及穩定原因。

工具描述可以告訴模型何時要求核准,但限制必須在提示詞之外執行。OWASP 的 Excessive Agency 指南建議盡量縮小工具功能、權限與自主程度,並由下游系統執行授權。

以最小實用範圍代理憑證

供應商支援時,資料平面 worker 應取得專供已核准資源與動作使用的短效憑證。如果供應商不支援,則將供應商憑證留在伺服器端工具中,並由包裝層執行相同限制。

絕對不要透過模型上下文、工具描述、URL 或模型可見的錯誤傳送密鑰。追蹤資料應記錄憑證參照,而不是憑證值。

代理安全指南說明完整的身分與密鑰路徑。

將操作與對話分開追蹤

一個對話回合不是操作記錄。會寫入、等待、重試或可能超過請求生命週期的工作,都應建立操作 ID。儲存狀態、遮蔽後的輸入、冪等鍵、核准狀態、嘗試、輸出或其參照,以及終止結果。

如此一來,代理可以查詢部署是否仍在執行,而不會重播部署請求;人類也會有一個穩定物件可供取消、繼續或調查。

在同一平面管理清單與所有權

控制平面應知道每個資料庫、bucket、部署、瀏覽器工作階段及代理憑證屬於哪個租戶。資源清單讓撤銷與刪除可以處理,也能避免模型依顯示名稱選到另一租戶的同名資源。

配額應套用到已驗證的租戶與操作,而不是模型提供的租戶欄位。超過限制時要回傳穩定結果,讓代理能解釋原因,不會盲目重試。

同時稽核決策與結果

稽核記錄需要政策決策與觀察到的結果。「允許刪除」與「刪除完成」是兩個不同事件。應保存操作 ID、執行者、租戶、資源、動作、政策版本、核准參照、時間戳記及結果類別。

預設不要把原始提示詞、密鑰或完整工具結果放進稽核日誌。如果必須保留確切內容,應在另一套存取政策下儲存雜湊或參照。

從既有應用程式內部開始

小型系統可以使用 middleware、政策模組、憑證 adapter、操作資料表及僅附加的稽核資料表來實作。規模或擁有權需要時,再拆分成服務。初期目標是建立一條一致的決策路徑。

下方提示詞會追蹤既有工作流程,並找出藏在個別工具處理函式內的控制。這些重複項目就是第一批應移到共用合約後方的候選者。