打造安全的 AI 代理是 Agent Framework 與應用程式開發者共同的責任。 代理框架提供基本組件——抽象、提供者與編排——但開發者需負責驗證輸入、保護資料流,並根據其情境適當配置工具。
本文概述使用 Agent Framework 建立安全且具保障代理的最佳實務。
Tip
關於確定性、基於標籤的防禦,防止即時注入與資料外洩,請參見 FIDES 的代理安全。 FIDES 以可在敏感工具執行 前 強制執行政策的資訊流控制中介軟體,補充本頁所述的啟發式最佳實務。
了解信任界線
當代理執行時,資料會經過多個元件流動:使用者輸入、聊天歷史提供者、上下文提供者、LLM 服務以及功能工具。 每一個資料進出應用程式的邊界,都代表潛在的攻擊面。
需要考慮的關鍵信任界線:
- AI 服務 — 接收聊天訊息(可能包含個人識別資訊及系統指令),並回傳 LLM 產生的輸出。
- 聊天記錄儲存 — 服務提供者可透過外部儲存載入並保存對話訊息。
- 情境服務 — 情境提供者可從外部服務(記憶體、使用者設定檔、RAG 結果)擷取或儲存資料。
- 工具存取服務 — 函式工具執行開發者提供的程式碼,可能呼叫外部 API 或資料庫。
所有外部服務通訊皆由開發者選擇的客戶端 SDK 處理。 代理框架不管理這些服務的認證、加密或連線細節。
最佳做法
驗證函式輸入
AI 可以呼叫你提供的任何函式作為工具並選擇參數。 將 LLM 提供的參數視為不受信任的輸入,類似於網頁 API 中的使用者輸入。
-
使用允許清單 — 將輸入與已知良好值進行驗證,而非試圖過濾已知不良模式。 例如,檢查檔案路徑是否在允許的目錄中,而不是檢查
..穿過序列。 - 強制執行類型與範圍限制 — 確認參數符合預期型態且在可接受範圍內(數字界限、字串長度限制、日期範圍)。
- 限制字串長度 — 強制字串參數的最大長度,以防止資源耗盡或注入攻擊。
- 防止路徑遍歷 — 當函式接受檔案路徑時,將其解析為絕對路徑並確認其落在允許的目錄範圍內。
- 使用參數化查詢 — 若參數用於 SQL 查詢、shell 指令或其他直譯上下文,請使用參數化查詢或轉義 — 切勿使用字串串接。
高風險工具需取得核准
預設情況下,所有提供給代理的工具皆可在未經使用者批准的情況下被調用。 利用 工具核准 機制將高風險作業封鎖在人工確認後。
在決定哪些工具需要核准時,請考慮:
- 副作用 — 修改資料、傳送通訊、購買或其他副作用的工具通常需經核准。
- 資料敏感 性 — 存取或回傳敏感資料(PII、財務資料、憑證)的工具需獲得批准。
- 可逆 性 — 不可逆操作(刪除、發送電子郵件)比唯讀查詢風險更高。
- 影響範圍 — 影響範圍較廣的工具(如大規模作業)應比範圍狹窄的工具更嚴格審查。
保持系統訊息由開發者控制
聊天訊息帶有一個角色(system, user, assistanttool, ),決定 AI 服務如何解讀訊息。 了解這些角色至關重要:
| 角色 | 信任等級 |
|---|---|
system |
最高信任 — 直接作用於大型語言模型 (LLM) 的行為。 絕不能包含不受信任的輸入。 |
user |
不可信 — 可能包含即時注入嘗試或惡意內容。 |
assistant |
不受信任 — 由大型語言模型(LLM)產生,LLM 是一個外部系統。 |
tool |
不可信 — 可能包含來自外部系統或使用者影響內容的資料。 |
請勿將終端使用者輸入放入 system-role 訊息中。 Agent Framework 預設未輸入文字為 user role,但以程式化方式建構訊息時需謹慎。
退伍軍人推廣服務提供者
上下文提供者 與 歷史提供者 可注入任何角色的訊息,包括 system。 只連結你信任的醫療提供者。
請注意間接提示注入:若底層資料庫受到入侵,敵對性內容可能影響大型語言模型(LLM)的行為。 例如,透過 RAG 檢索的文件可能包含隱藏指令,導致大型語言模型偏離預期行為或透過工具呼叫外洩資料。
驗證並淨化 LLM 輸出
LLM 回應應被視為不可信輸出。 AI 服務是 Agent Framework 無法控制的外部端點。 注意事項:
- 幻覺 ——大型語言模型(LLM)可能產生聽起來合理但事實錯誤的資訊。 未經驗證,不要將 LLM 輸出視為權威。
- 間接提示注入 — 由工具、上下文提供者或聊天歷史提供者檢索的資料,可能包含旨在影響大型語言模型的對抗性內容。
- 惡意有效載荷 — 若未經過淨化(XSS 的 HTML/JavaScript、注入的 SQL、shell 指令)渲染或執行,LLM 輸出可能包含有害內容。
在以 HTML 呈現、執行程式碼、用於資料庫查詢或傳遞給任何安全敏感情境前,務必先驗證並消毒 LLM 輸出。
保護日誌中的敏感資料
Agent Framework 支援透過 OpenTelemetry 進行日誌記錄與遙測。 敏感資料只有在明確啟用時才會被記錄:
-
日誌 — 在日誌層
Trace級,會記錄整個ChatMessages集合。 這可能包含個人身份資訊(PII)。 生產環境中絕不應啟用Trace級別。 -
遙測 — 當設置
EnableSensitiveData時,遙測將包含聊天訊息的完整內容,包括功能調用及其結果。 請勿在生產環境中啟用此功能。
安全會話資料
Sessions (AgentSession) 代表對話上下文,並可序列化以維持持久性。 將序列化會話視為敏感資料:
- 會話可能會引用對話內容或會話識別碼。
- 從不受信任來源還原會話等同於接受不受信任的輸入。 儲存後端被入侵可能會改變角色以提升信任度。
- 會話儲存在具備適當存取控制與加密的安全儲存中。
實施資源限制
代理框架不會對輸入/輸出長度或請求率施加限制,因為它不知道什麼對你的情境來說是合理的。 您負責:
- 輸入長度限制 — 限制輸入長度以防止上下文溢位或 DoS 攻擊。
-
輸出長度限制 — 使用服務提供的限制(例如
MaxOutputTokens聊天選項中)。 - 費率限制 — 利用費率限制設施以防止成本超支及同時請求的濫用。
下一步
相關內容
- FIDES 的代理安全 — 確定性提示注入與資料外洩防禦
- 工具核准
- 函式工具
- 可檢視性
- 情境提供者