本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
避免快速注入攻擊的最佳實務
以下護欄和最佳實務已在採用 Anthropic Claude 做為示範模型的 RAG 應用程式上進行測試。這些建議非常適用於 Claude 系列模型,但也可以轉移到其他非 Claude LLMs,等待模型特定的修改 (例如移除 XML 標籤並使用不同的對話屬性標籤)。
使用 <thinking> 和 <answer> 標籤
基本 RAG 範本的實用新增是 <thinking>和 <answer> 標籤。 <thinking> 標籤可讓模型顯示其工作並呈現任何相關摘錄。 <answer>標籤包含要傳回給使用者的回應。在經驗上,當模型回答需要將多個資訊來源拼湊在一起的複雜且細微的問題時,使用這兩個標籤可提高準確性。
使用護欄
保護採用 LLM 的應用程式需要特定的防護機制,才能確認並協助防禦先前所述的常見攻擊。當我們設計本指南中的安全護欄時,我們的方法是使用引入範本的最少權杖數量來產生最大效益。由於大多數模型供應商會依輸入字符收費,因此字符較少的護欄具有成本效益。此外,已顯示過度工程化的範本來降低準確性。
在單對加鹽序列標籤中包裝說明
有些 LLMs遵循範本結構,其中資訊以 XML 標籤包裝,以協助將 LLM 引導至特定資源,例如對話歷史記錄或擷取的文件。標籤詐騙攻擊嘗試利用此結構,方法是將其惡意指示包裝在常見標籤中,並導致模型認為該指令是原始範本的一部分。透過將工作階段特定的英數序列附加到格式為 的每個 XML 標籤,加鹽標籤會停止標籤詐騙<tagname-abcde12345>。額外的指令命令 LLM 僅考慮這些標籤內的指示。
這種方法的一個問題是,如果模型在其答案中使用標籤,無論是預期還是意外,帶鹽序列也會附加到傳回的標籤。現在,使用者知道此工作階段特定的序列,他們可以完成標籤欺騙,可能具有更高的有效性,因為命令 LLM 考慮 salt 標記指示的指令。為了略過此風險,我們會在範本的單一標記區段中包裝所有指示,並使用僅包含加鹽序列的標籤 (例如 <abcde12345>)。然後,我們可以指示模型只考慮此標記工作階段中的指示。我們發現,這種方法阻止模型公開其加鹽序列,並協助防禦標籤詐騙和其他引入或嘗試增強範本指示的攻擊。
教導 LLM 透過提供特定指示來偵測攻擊
我們也包含一組說明常見攻擊模式的說明,以教導 LLM 如何偵測攻擊。這些指示著重於使用者輸入查詢。他們會指示 LLM 識別金鑰攻擊模式的存在,並在發現模式時傳回「偵測到提示攻擊」。這些指示的存在讓我們能為 LLM 提供處理常見攻擊的捷徑。當範本使用 <thinking>和 <answer>標籤時,此捷徑是相關的,因為 LLM 通常會重複且詳細剖析惡意指示,最終可能導致合規 (如下一節的比較所示)。