特務安全

打造安全的 AI 代理是 Agent Framework 與應用程式開發者共同的責任。 代理框架提供基本組件——抽象、提供者與編排——但開發者需負責驗證輸入、保護資料流,並根據其情境適當配置工具。

本文概述使用 Agent Framework 建立安全且具保障代理的最佳實務。

Tip

關於確定性、基於標籤的防禦,防止即時注入與資料外洩,請參見 FIDES 的代理安全。 FIDES 以可在敏感工具執行 強制執行政策的資訊流控制中介軟體,補充本頁所述的啟發式最佳實務。

了解信任界線

當代理執行時,資料會經過多個元件流動:使用者輸入、聊天歷史提供者、上下文提供者、LLM 服務以及功能工具。 每一個資料進出應用程式的邊界,都代表潛在的攻擊面。

需要考慮的關鍵信任界線:

  • AI 服務 — 接收聊天訊息(可能包含個人識別資訊及系統指令),並回傳 LLM 產生的輸出。
  • 聊天記錄儲存 — 服務提供者可透過外部儲存載入並保存對話訊息。
  • 情境服務 — 情境提供者可從外部服務(記憶體、使用者設定檔、RAG 結果)擷取或儲存資料。
  • 工具存取服務 — 函式工具執行開發者提供的程式碼,可能呼叫外部 API 或資料庫。

所有外部服務通訊皆由開發者選擇的客戶端 SDK 處理。 代理框架不管理這些服務的認證、加密或連線細節。

最佳做法

驗證函式輸入

AI 可以呼叫你提供的任何函式作為工具並選擇參數。 將 LLM 提供的參數視為不受信任的輸入,類似於網頁 API 中的使用者輸入。

  • 使用允許清單 — 將輸入與已知良好值進行驗證,而非試圖過濾已知不良模式。 例如,檢查檔案路徑是否在允許的目錄中,而不是檢查 .. 穿過序列。
  • 強制執行類型與範圍限制 — 確認參數符合預期型態且在可接受範圍內(數字界限、字串長度限制、日期範圍)。
  • 限制字串長度 — 強制字串參數的最大長度,以防止資源耗盡或注入攻擊。
  • 防止路徑遍歷 — 當函式接受檔案路徑時,將其解析為絕對路徑並確認其落在允許的目錄範圍內。
  • 使用參數化查詢 — 若參數用於 SQL 查詢、shell 指令或其他直譯上下文,請使用參數化查詢或轉義 — 切勿使用字串串接。

高風險工具需取得核准

預設情況下,所有提供給代理的工具皆可在未經使用者批准的情況下被調用。 利用 工具核准 機制將高風險作業封鎖在人工確認後。

在決定哪些工具需要核准時,請考慮:

  • 副作用 — 修改資料、傳送通訊、購買或其他副作用的工具通常需經核准。
  • 資料敏感 性 — 存取或回傳敏感資料(PII、財務資料、憑證)的工具需獲得批准。
  • 可逆 性 — 不可逆操作(刪除、發送電子郵件)比唯讀查詢風險更高。
  • 影響範圍 — 影響範圍較廣的工具(如大規模作業)應比範圍狹窄的工具更嚴格審查。

保持系統訊息由開發者控制

聊天訊息帶有一個角色(systemuserassistanttool, ),決定 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 聊天選項中)。
  • 費率限制 — 利用費率限制設施以防止成本超支及同時請求的濫用。

下一步