

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 避免快速注入攻擊的最佳實務
<a name="best-practices"></a>

以下護欄和最佳實務已在採用 Anthropic Claude 做為示範模型的 RAG 應用程式上進行測試。這些建議非常適用於 Claude 系列模型，但也可以轉移到其他非 Claude LLMs，等待模型特定的修改 （例如移除 XML 標籤並使用不同的對話屬性標籤）。

## 使用 <thinking> 和 <answer> 標籤
<a name="xml-tags"></a>

基本 RAG 範本的實用新增是 `<thinking>`和 `<answer>` 標籤。 `<thinking>` 標籤可讓模型顯示其工作並呈現任何相關摘錄。 `<answer>`標籤包含要傳回給使用者的回應。在經驗上，當模型回答需要將多個資訊來源拼湊在一起的複雜且細微的問題時，使用這兩個標籤可提高準確性。

## 使用護欄
<a name="guardrails"></a>

保護採用 LLM 的應用程式需要特定的防護機制，才能確認並協助防禦先前所述的[常見攻擊](common-attacks.md)。當我們設計本指南中的安全護欄時，我們的方法是使用引入範本的最少權杖數量來產生最大效益。由於大多數模型供應商會依輸入字符收費，因此字符較少的護欄具有成本效益。此外，已顯示過度工程化的範本來降低準確性。

### 在單對加鹽序列標籤中包裝說明
<a name="salted-seq"></a>

有些 LLMs遵循範本結構，其中資訊以 XML 標籤包裝，以協助將 LLM 引導至特定資源，例如對話歷史記錄或擷取的文件。標籤詐騙攻擊嘗試利用此結構，方法是將其惡意指示包裝在常見標籤中，並導致模型認為該指令是原始範本的一部分。*透過將工作階段特定的英數序列附加到格式為 的每個 XML 標籤，加鹽標籤*會停止標籤詐騙`<tagname-abcde12345>`。額外的指令命令 LLM 僅考慮這些標籤內的指示。

這種方法的一個問題是，如果模型在其答案中使用標籤，無論是預期還是意外，帶鹽序列也會附加到傳回的標籤。現在，使用者知道此工作階段特定的序列，他們可以完成標籤欺騙，可能具有更高的有效性，因為命令 LLM 考慮 salt 標記指示的指令。為了略過此風險，我們會在範本的單一標記區段中包裝所有指示，並使用僅包含加鹽序列的標籤 （例如 `<abcde12345>`)。然後，我們可以指示模型只考慮此標記工作階段中的指示。我們發現，這種方法阻止模型公開其加鹽序列，並協助防禦標籤詐騙和其他引入或嘗試增強範本指示的攻擊。

### 教導 LLM 透過提供特定指示來偵測攻擊
<a name="shortcuts"></a>

我們也包含一組說明常見攻擊模式的說明，以教導 LLM 如何偵測攻擊。這些指示著重於使用者輸入查詢。他們會指示 LLM 識別金鑰攻擊模式的存在，並在發現模式時傳回「偵測到提示攻擊」。這些指示的存在讓我們能為 LLM 提供處理常見攻擊的捷徑。當範本使用 `<thinking>`和 `<answer>`標籤時，此捷徑是相關的，因為 LLM 通常會重複且詳細剖析惡意指示，最終可能導致合規 （如下一節的比較所示）。