共用方式為


如何在 Microsoft Foundry 模型中使用封鎖清單

Microsoft Foundry 中可 設定的護欄與控制 功能足以滿足大多數內容審核需求。 不過,您可能需要篩選適合使用案例的特定字詞。 為此,您可以使用自訂封鎖清單。

Azure OpenAI 中可用的可設定內容篩選足以滿足大部分的內容仲裁需求。 不過,您可能需要篩選適合使用案例的特定字詞。 為此,您可以使用自訂封鎖清單。

Prerequisites

  • Azure 訂用帳戶。 免費建立一個
  • 擁有 Azure 訂用帳戶之後,請在 Azure 入口網站中建立 Azure OpenAI 資源,以取得您的令牌、密鑰和端點。 輸入資源的唯一名稱、選取您在應用程式表單上輸入的訂用帳戶、選取資源群組、支援的區域以及支援的定價層。 然後選擇 [建立]
    • 部署資源需要幾分鐘的時間。 完成後,選取 [移至資源]。 在左側窗格中,於 [資源管理] 下選取 [訂用帳戶金鑰和端點]。 端點和其中一個金鑰是用以呼叫 API。
  • 已安裝 Azure CLI
  • 已安裝 cURL

使用封鎖清單

您可以使用 Azure OpenAI API 建立封鎖清單。 下列步驟可協助您開始使用。

取得權杖

首先,您需要取得權杖,以存取 API 以建立、編輯和刪除封鎖清單。 您可以使用下列 Azure CLI 命令取得此權杖:

az account get-access-token 

建立或修改封鎖清單

將下列 cURL 命令複製至文字編輯器,並進行下列變更:

  1. 以您的訂用帳戶識別碼取代 {subscriptionId}。
  2. 以您的資源群組名稱取代 {resourceGroupName}。
  3. 以您的資源名稱取代 {accountName}。
  4. 以您清單的自訂名稱取代 {raiBlocklistName} (在 URL 中)。 允許的字元:0-9, A-Z, a-z, - . _ ~
  5. 以您從上述「取得權杖」步驟中取得之權杖取代 {token}。
  6. 選擇性將「描述」欄位的值取代為自訂描述。
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "description": "This is a prompt blocklist"  
    } 
}' 

回應碼應該為 201 (建立新清單) 或 200 (更新現有清單)。

將封鎖清單套用至內容篩選

如果你還沒建立內容過濾器,可以在 Foundry 裡建立。 請參閱內容篩選

若要將完成封鎖清單套用至內容篩選,請使用下列 cURL 命令:

  1. 以您的訂用帳戶識別碼取代 {subscriptionId}。
  2. 以您的資源群組名稱取代 {resourceGroupName}。
  3. 以您的資源名稱取代 {accountName}。
  4. 以您的內容篩選名稱取代 {raiPolicyName}
  5. 以您從上述「取得權杖」步驟中取得之權杖取代 {token}。
  6. 如果您要將封鎖清單套用至使用者提示,而不是 AI 模型完成,可以選擇性地將"completionBlocklists"標題變更為"promptBlocklists"
  7. 將本文中的 "raiBlocklistName" 取代為您清單的自訂名稱。 允許的字元:0-9, A-Z, a-z, - . _ ~
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiPolicies/{raiPolicyName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

將 blockItems 新增至清單

Note

一個清單中允許的字詞上限為 10,000 個。

將下列 cURL 命令複製至文字編輯器,並進行下列變更:

  1. 以您的訂用帳戶識別碼取代 {subscriptionId}。
  2. 以您的資源群組名稱取代 {resourceGroupName}。
  3. 以您的資源名稱取代 {accountName}。
  4. 以您清單的自訂名稱取代 {raiBlocklistName} (在 URL 中)。 允許的字元:0-9, A-Z, a-z, - . _ ~
  5. 以您清單項目的自訂名稱取代 {raiBlocklistItemName}。
  6. 以您從上述「取得權杖」步驟中取得之權杖取代 {token}。
  7. "blocking pattern" 欄位的值取代為您想新增至封鎖清單的項目。 blockItem 的最大長度為 1,000 個字元。 並指定模式是否為 Regex 或完全符合。
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{  
    "properties": {  
        "pattern": "blocking pattern",  
        "isRegex": false  
    }  
}' 

Note

將新字詞新增至封鎖清單可能需要大約 5 分鐘的時間。 在 5 分鐘後測試封鎖清單。

回應碼應該為 200

{ 
  "name": "raiBlocklistItemName", 
  "id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName", 
  "properties": { 
    "pattern": "blocking pattern", 
    "isRegex": false 
  } 
} 

使用封鎖清單分析文字

現在,您可以測試具有封鎖清單的部署。 如需呼叫 Azure OpenAI 端點的指示,請瀏覽快速入門

在下列範例中,具有封鎖清單的 GPT-35-Turbo 部署正在封鎖提示。 回應會傳回 400 錯誤。

{
  "error": {
    "message": "The response was filtered due to the prompt triggering Azure OpenAI's content management policy. Please modify your prompt and retry. To learn more about our content filtering policies please read our documentation: https://go.microsoft.com/fwlink/?linkid=2198766",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400,
    "innererror": {
      "code": "ResponsibleAIPolicyViolation",
      "content_filter_result": {
        "custom_blocklists": {
          "details": [{ "filtered": true, "id": "pizza" }],
          "filtered": true
        }
      }
    }
  }
}

如果完成本身遭到封鎖,回應會傳回 200,因為完成只會在封鎖清單內容相符時關閉。 註釋顯示封鎖清單項目相符。

{ 
    "id": "chatcmpl-85NkyY0AkeBMunOjyxivQSiTaxGAl", 
    "object": "chat.completion", 
    "created": 1696293652, 
    "model": "gpt-35-turbo", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": "content_filter", 
            "message": { 
                "role": "assistant" 
            }, 
            "content_filter_results": { 
                "custom_blocklists": [ 
                    { 
                        "filtered": true, 
                        "id": "myBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "usage": { 
        "completion_tokens": 75, 
        "prompt_tokens": 27, 
        "total_tokens": 102 
    } 
}