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