本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
避免即時注入攻擊的最佳做法
下面的護欄和最佳實踐是由 Resenpic 克勞德作為示範模型供電的 RAG 應用程序進行了測試。這些建議非常適用於 Claude 模型系列,但也可以轉移到其他非克勞德 LMS,等待模型特定的修改(例如移除 XML 標籤和使用不同的對話歸因標籤)。
使用<thinking>和<answer>標籤
基本 RAG 模板的一個有用的補充是<thinking>
和<answer>
標籤。 <thinking>
標籤可讓模型顯示其作品並呈現任何相關摘錄。 <answer>
標籤包含要返回給用戶的響應。從經驗上講,當模型回答複雜而細微的問題時,使用這兩個標籤可以提高準確性,這些問題需要將多個資訊來源拼湊在一起。
使用護欄
保護由 LLM 驅動的應用程式需要特定的護欄來確認並協助防禦先前描述的常見攻擊。當我們在本指南中設計安全護欄時,我們的方法是通過引入模板的令牌數量最少來產生最大的好處。由於大多數模型供應商都是通過輸入令牌收費,因此具有較少令牌的護欄具有成本效益。此外,已顯示過度設計的模板以降低準確性。
將指令包裝在一對鹽漬序列標籤中
一些有限責任公司遵循模板結構,其中信息被包裝在 XML 標籤<tagname-abcde12345>
附加指令 LLM 只考慮這些標籤中的指令。
這種方法的一個問題是,如果模型在其答案中使用標籤(預期或意外),則咸序列也會附加到返回的標籤中。現在,用戶知道了這個特定於會話的序列,他們可以完成標籤欺騙-由於命令 LLM 考慮鹽標記指令的指令,因此可能具有更高的效率。為了避免這種風險,我們將所有指令包裝在模板中的單個標記部分中,並使用僅由加鹽序列組成的標籤(例如,<abcde12345>
)。然後,我們可以指示模型僅考慮此標籤工作階段中的指示。我們發現,這種方法阻止了模型揭露其鹽漬序列,並幫助防禦標籤欺騙和其他引入或試圖增強模板指令的攻擊。
教授 LLM 通過提供特定說明來檢測攻擊
我們還包括一組說明解釋常見攻擊模式的說明,以教授 LLM 如何檢測攻擊。該指令集中在用戶輸入查詢。他們指示 LLM 識別關鍵攻擊模式的存在,並在發現模式時返回「檢測到提示攻擊」。這些說明的存在使我們能夠為 LLM 提供處理常見攻擊的快捷方式。當模板使用<thinking>
和<answer>
標籤時,此快捷方式是相關的,因為 LLM 通常會重複和過度詳細地解析惡意指令,這最終可能導致合規性(如下一節中的比較所示)。