Поделиться через


Использование списка блокировок с Azure OpenAI

Настраиваемые фильтры содержимого достаточно для большинства режим палатки потребностей. Однако может потребоваться фильтровать термины, относящиеся к вашему варианту использования.

Необходимые компоненты

  • Подписка Azure. Создайте ее бесплатно.
  • После получения подписки Azure создайте ресурс Azure OpenAI в портал Azure, чтобы получить маркер, ключ и конечную точку. Введите уникальное имя ресурса, выберите подписку, введенную в форме приложения, выберите группу ресурсов, поддерживаемый регион и поддерживаемую ценовую категорию. Затем выберите Создать.
    • Развертывание ресурса занимает несколько минут. После завершения выберите ресурс. В области слева в разделе "Управление ресурсами" выберите "Ключ подписки" и "Конечная точка". Конечная точка и любой из ключей используются для вызова API.
  • Установленный Azure CLI
  • Установленная программа cURL.

Использование блок-списков

Списки блокировок можно создать с помощью API Azure OpenAI. Следующие шаги помогут вам приступить к работе.

Получение маркера

Сначала необходимо получить маркер для доступа к 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. При необходимости замените значение поля description настраиваемым описанием.
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 (обновлен существующий список).

Применение списка блокировок к фильтру содержимого

Если вы еще не создали фильтр содержимого, это можно сделать в Azure AI Foundry. См . фильтрацию содержимого.

Чтобы применить список блокировок завершения к фильтру содержимого, используйте следующую команду cURL:

  1. Замените {subscriptionId} вашим вложенным идентификатором.
  2. Замените {resourceGroupName} именем группы ресурсов.
  3. Замените {accountName} именем ресурса.
  4. Замените {raiPolicyName} именем фильтра содержимого
  5. Замените {token} маркером, полученным на шаге "Получить маркер" выше.
  6. При необходимости измените заголовок"promptBlocklists", "completionBlocklists" чтобы список блокировок применялся к запросам пользователей вместо завершения модели искусственного интеллекта.
  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 в список

Примечание.

В одном списке допускается максимальное ограничение в 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 составляет 1000 символов. Также укажите, является ли шаблон регулярным или точным совпадением.
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  
    }  
}' 

Примечание.

Для добавления нового термина в блок-список может потребоваться около 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": [ 
                    { 
                        "filtered": true, 
                        "id": "raiBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    } 
} 

Если само завершение заблокировано, ответ возвращается 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 
    } 
} 

Следующие шаги