Фильтрация содержимого

Внимание

Система фильтрации контента не применяется к запросам и завершениям, обрабатываемым моделью Whisper в службе Azure OpenAI. Дополнительные сведения о модели Whisper в Azure OpenAI.

Служба Azure OpenAI включает систему фильтрации содержимого, которая работает вместе с основными моделями. Эта система работает, выполняя запрос и завершение с помощью ансамбля моделей классификации, направленных на обнаружение и предотвращение вывода вредного содержимого. Система фильтрации содержимого обнаруживает и принимает меры по определенным категориям потенциально вредного содержимого как в запросах ввода, так и в завершении выходных данных. Изменения в конфигурациях API и дизайне приложения могут повлиять на завершение и, следовательно, на поведение фильтрации.

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

Помимо системы фильтрации содержимого служба Azure OpenAI выполняет мониторинг для обнаружения содержимого и (или) поведения, которые позволяют использовать службу таким образом, чтобы нарушать применимые условия продукта. Дополнительные сведения о понимании и устранении рисков, связанных с приложением, см. в заметке о прозрачности для Azure OpenAI. Дополнительные сведения о том, как данные обрабатываются для фильтрации содержимого и мониторинга злоупотреблений, см. в статье "Данные, конфиденциальность и безопасность azure OpenAI Service".

В следующих разделах содержатся сведения о категориях фильтрации содержимого, уровнях серьезности фильтрации и их настройке, а также сценариях API, которые следует учитывать в разработке и реализации приложений.

Категории фильтрации содержимого

Система фильтрации содержимого, интегрированная в службу Azure OpenAI, содержит следующее:

  • Нейронные модели классификации с несколькими классами, направленные на обнаружение и фильтрацию вредного содержимого; Модели охватывают четыре категории (ненависти, сексуального насилия и самоповредения) на четырех уровнях серьезности (безопасных, низких, средних и высоких). Контент, обнаруженный на "безопасном" уровне серьезности, помечается в аннотациях, но не подлежит фильтрации и не подлежит настройке.
  • Другие необязательные модели классификации, направленные на обнаружение риска в тюрьме и известное содержимое для текста и кода; эти модели представляют собой двоичные классификаторы, которые помечают, является ли поведение пользователя или модели квалифифицирующимися как атака в виде атаки на джейл-брейк или соответствует известному тексту или исходному коду. Использование этих моделей является необязательным, но использование защищенной модели материального кода может потребоваться для покрытия обязательств по защите авторских прав клиента.

Категории вреда

Категория Description
Ненависть и справедливость Вред, связанный с ненавистью и справедливостью, относится к любому содержимому, которое нападает или использует дискриминационный или дискриминационный язык со ссылкой на человека или группы удостоверений на основе определенных различных атрибутов этих групп, включая, но не ограничивается расой, этнической принадлежностью, национальностью, группами гендерной идентификации и выражением, сексуальной ориентацией, религией, иммиграционным статусом, статусом, личным появлением, и размер тела. 

Справедливость связана с обеспечением того, чтобы системы искусственного интеллекта относились ко всем группам людей справедливо, не внося вклад в существующие социальные неравенства. Как и в случае с ненавистной речью, справедливость, связанные с вредом, зависят от разрозненного обращения с группами удостоверений.  
Сексуальной Сексуальный описывает язык, связанный с анатомическими органами и гениталиями, романтические отношения, действия, изображаемые в эротических или ласковых терминах, беременности, физических сексуальных актах, включая те, которые изображаются как нападение или принудительный сексуальный насильственный акт против воли, проституции, порнографии и злоупотреблений.  
Насилие Насилие описывает язык, связанный с физическими действиями, предназначенными для того, чтобы повредить, ранить, повредить или убить кого-то или что-то; описывает оружие, оружие и связанные с ними сущности, такие как производство, ассоциации, законодательство и т. д.
Самоповредение Самоповреждение описывает язык, связанный с физическими действиями, предназначенными для намеренного повреждения, травмы, повреждения тела или убийства себя.
Риск взлома тюрьмы Атаки в тюрьме — это запросы пользователей, предназначенные для того, чтобы спровоцировать модель генерированного ИИ на отображение поведения, которое было обучено, чтобы избежать или нарушить набор правил, заданных в системном сообщении. Такие атаки могут отличаться от сложной роли до тонкой подражания цели безопасности.
Защищенный материал для текста* Защищенный текст материала описывает известное текстовое содержимое (например, текст песни, статьи, рецепты и выбранное веб-содержимое), которое можно выводить большими языковыми моделями.
Защищенный материал для кода Защищенный материальный код описывает исходный код, соответствующий набору исходного кода из общедоступных репозиториев, которые можно выводить большими языковыми моделями без надлежащей ссылки на исходные репозитории.

* Если вы являетесь владельцем текстового материала и хотите отправить текстовое содержимое для защиты, отправьте запрос.

Текстовое содержимое

Предупреждение

Вкладка "Определения серьезности" в этом документе содержит примеры вредного содержимого, которое может беспокоить некоторых читателей.

Содержимое изображения

Предупреждение

Вкладка "Определения серьезности" в этом документе содержит примеры вредного содержимого, которое может беспокоить некоторых читателей.

Настройка (предварительная версия)

Конфигурация фильтрации содержимого по умолчанию используется для фильтрации по порогу средней серьезности для всех четырех категорий вреда содержимого для запросов и завершения. Это означает, что содержимое, обнаруженное на уровне серьезности среднего или высокого уровня, фильтруется, а содержимое, обнаруженное на низком уровне серьезности, не фильтруется фильтрами содержимого. Функция настройки доступна в предварительной версии и позволяет клиентам настраивать параметры отдельно для запросов и завершения, чтобы фильтровать содержимое для каждой категории контента на разных уровнях серьезности, как описано в таблице ниже:

Фильтрация серьезности Настраиваемая для запросов Настраиваемая для завершения Descriptions
Низкий, средний, высокий Да Да Самая строгая конфигурация фильтрации. Содержимое, обнаруженное на уровнях серьезности, низком, среднем и высоком, фильтруется.
Средний, высокий Да Да Значение по умолчанию. Содержимое, обнаруженное на низком уровне серьезности, не фильтруется, содержимое на среднем и высоком уровне фильтруется.
Высокая Да Да Содержимое, обнаруженное на уровнях серьезности, не фильтруется. Фильтруется только содержимое на высоком уровне серьезности.
Фильтры отсутствуют. Если утверждено* Если утверждено* Содержимое не фильтруется независимо от уровня серьезности. Требуется утверждение*.

* Только клиенты, которые были утверждены для фильтрации измененного содержимого, имеют полный элемент управления фильтрацией содержимого и могут частично или полностью отключить фильтры содержимого. Управление фильтрацией содержимого не применяется к фильтрам содержимого для DALL-E (предварительная версия) или GPT-4 Turbo с Vision (предварительная версия). Применить к измененным фильтрам содержимого с помощью этой формы: Azure OpenAI Limited Access Review: Modified Content Filtering (microsoft.com).

Клиенты отвечают за обеспечение соответствия приложений, интегрирующих Azure OpenAI кодексу поведения.

Конфигурации фильтрации содержимого создаются в ресурсе в Azure AI Studio и могут быть связаны с развертываниями. Дополнительные сведения о настройке см. здесь.

Подробности сценария

Когда система фильтрации содержимого обнаруживает вредное содержимое, по вызову API появляется сообщение об ошибке, если запрос был признан неуместным, или finish_reason ответ будет content_filter иметь значение для обозначения того, что некоторые из завершения были отфильтрованы. При создании приложения или системы необходимо учитывать эти сценарии, в которых содержимое, возвращаемое API завершения, фильтруется, что может привести к неполному содержимому. То, как вы работаете с этой информацией, будет зависеть от конкретного приложения. Поведение можно свести к сведению в следующих пунктах:

  • Запросы, классифицированные по отфильтрованной категории и уровню серьезности, возвращают ошибку HTTP 400.
  • Вызовы завершения без потоковой передачи не возвращают содержимое при фильтрации содержимого. Для finish_reason параметра будет задано значение content_filter. В редких случаях с более длинными ответами может быть возвращен частичный результат. В таких случаях finish_reason обновляется.
  • Для вызовов завершения потоковой передачи сегменты будут возвращены пользователю по мере их завершения. Служба будет продолжать потоковую передачу до достижения маркера остановки, длины или при обнаружении содержимого, классифицированного по отфильтрованной категории и уровня серьезности.

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

В таблице ниже описаны различные способы фильтрации содержимого:

Код ответа HTTP Реакция на событие при ответе
200 В случаях, когда все поколения передают фильтры как настроенные, в ответ не добавляются сведения о кон режим палатки раций. Для finish_reason каждого поколения будет либо остановка, либо длина.

Пример полезных данных запроса:

{
    "prompt":"Text example", 
    "n": 3,
    "stream": false
}

Пример ответа JSON:

{
    "id": "example-id",
    "object": "text_completion",
    "created": 1653666286,
    "model": "davinci",
    "choices": [
        {
            "text": "Response generated text",
            "index": 0,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Сценарий. Вызов API запрашивает несколько ответов (N>1) и по крайней мере один из ответов фильтруется

Код ответа HTTP Реакция на событие при ответе
200 Поколения, которые были отфильтрованы, будут иметь finish_reason значение content_filter.

Пример полезных данных запроса:

{
    "prompt":"Text example",
    "n": 3,
    "stream": false
}

Пример ответа JSON:

{
    "id": "example",
    "object": "text_completion",
    "created": 1653666831,
    "model": "ada",
    "choices": [
        {
            "text": "returned text 1",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null
        },
        {
            "text": "returned text 2",
            "index": 1,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Сценарий: недопустимый запрос ввода отправляется в API завершения (для потоковой или непотоковой передачи)

Код ответа HTTP Реакция на событие при ответе
400 Вызов API завершается сбоем, когда запрос активирует фильтр содержимого, как настроено. Измените запрос и повторите попытку.

Пример полезных данных запроса:

{
    "prompt":"Content that triggered the filtering model"
}

Пример ответа JSON:

"error": {
    "message": "The response was filtered",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400
}

Сценарий: вызов завершения потоковой передачи; Содержимое выходных данных не классифицируется по отфильтрованной категории и уровню серьезности

Код ответа HTTP Реакция на событие при ответе
200 В этом случае вызов будет выполняться обратно с полным поколением и finish_reason будет иметь значение "длина" или "остановка" для каждого созданного ответа.

Пример полезных данных запроса:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Пример ответа JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670914,
    "model": "ada",
    "choices": [
        {
            "text": "last part of generation",
            "index": 2,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Сценарий. Вызов завершения потоковой передачи запрашивает несколько завершений и по крайней мере часть выходного содержимого фильтруется

Код ответа HTTP Реакция на событие при ответе
200 Для заданного индекса поколения последний блок поколения включает ненулевое finish_reason значение. Значение заключается в content_filter том, когда поколение было отфильтровано.

Пример полезных данных запроса:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Пример ответа JSON:

 {
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670515,
    "model": "ada",
    "choices": [
        {
            "text": "Last part of generated text streamed back",
            "index": 2,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Сценарий: система фильтрации содержимого не выполняется при завершении

Код ответа HTTP Реакция на событие при ответе
200 Если система фильтрации содержимого отключена или не может завершить операцию вовремя, запрос по-прежнему завершится без фильтрации содержимого. Вы можете определить, что фильтрация не была применена, найдите сообщение об ошибке в объекте content_filter_result .

Пример полезных данных запроса:

{
    "prompt":"Text example",
    "n": 1,
    "stream": false
}

Пример ответа JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1652294703,
    "model": "ada",
    "choices": [
        {
            "text": "generated text",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null,
            "content_filter_result": {
                "error": {
                    "code": "content_filter_error",
                    "message": "The contents are not filtered"
                }
            }
        }
    ]
}

Заметки

Фильтры содержимого

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

  • категория фильтрации содержимого (ненависть, сексуальное насилие, self_harm)
  • уровень серьезности (безопасный, низкий, средний или высокий) в каждой категории содержимого
  • состояние фильтрации (true или false).

Необязательные модели

Необязательные модели можно включить в анотации (возвращает сведения, когда содержимое помечено, но не отфильтровано) или режим фильтра (возвращает сведения, когда содержимое помечено и отфильтровано).

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

  • категория (джейл-брейк, protected_material_text, protected_material_code);
  • обнаружен (true или false),
  • фильтруется (true или false).

Для модели защищенного кода материалов следующие дополнительные сведения возвращаются API:

  • Пример ссылки на общедоступный репозиторий GitHub, в котором найден фрагмент кода
  • лицензия репозитория.

При отображении кода в приложении настоятельно рекомендуется также отобразить пример ссылки на заметки. Соответствие приведенной лицензии также может потребоваться для покрытия обязательств по защите авторских прав клиента.

Заметки в настоящее время доступны в общедоступной версии 2024-02-01 API и во всех предварительных версиях, начиная с 2023-06-01-preview завершения и завершения чата (модели GPT). В следующем фрагменте кода показано, как использовать заметки:

# os.getenv() for the endpoint and key assumes that you are using environment variables.

import os
from openai import AzureOpenAI
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-03-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") 
    )

response = client.completions.create(
    model="gpt-35-turbo-instruct", # model = "deployment_name".
    prompt="{Example prompt where a severity level of low is detected}" 
    # Content that is detected at severity level medium or high is filtered, 
    # while content detected at severity level low isn't filtered by the content filters.
)

print(response.model_dump_json(indent=2))

Выходные данные

{ 
  "choices": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "protected_material_code": { 
          "citation": { 
            "URL": " https://github.com/username/repository-name/path/to/file-example.txt", 
            "license": "EXAMPLE-LICENSE" 
          }, 
          "detected": true,
          "filtered": false 
        }, 
        "protected_material_text": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "finish_reason": "stop", 
      "index": 0, 
      "message": { 
        "content": "Example model response will be returned ", 
        "role": "assistant" 
      } 
    } 
  ], 
  "created": 1699386280, 
  "id": "chatcmpl-8IMI4HzcmcK6I77vpOJCPt0Vcf8zJ", 
  "model": "gpt-35-turbo-instruct", 
  "object": "text.completion",
  "usage": { 
    "completion_tokens": 40, 
    "prompt_tokens": 11, 
    "total_tokens": 417 
  },  
  "prompt_filter_results": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "jailbreak": { 
          "detected": false, 
          "filtered": false 
        }, 
        "profanity": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "prompt_index": 0 
    } 
  ]
} 

Дополнительные сведения о конечных точках REST API вывода для Azure OpenAI и создании чата и завершения см. в руководстве по REST API службы Azure OpenAI. Заметки возвращаются для всех сценариев при использовании любой предварительной версии API, начиная с 2023-06-01-preview, а также версии API общедоступной версии 2024-02-01.

Пример сценария: входной запрос, содержащий содержимое, классифицированное по отфильтрованной категории и уровню серьезности, отправляется в API завершения

{
    "error": {
        "message": "The response was filtered due to the prompt triggering Azure 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=21298766",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400,
        "innererror": {
            "code": "ResponsibleAIPolicyViolation",
            "content_filter_result": {
                "hate": {
                    "filtered": true,
                    "severity": "high"
                },
                "self-harm": {
                    "filtered": true,
                    "severity": "high"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered":true,
                    "severity": "medium"
                }
            }
        }
    }
}

Потоковая передача содержимого

В этом разделе описаны возможности потоковой передачи содержимого Azure OpenAI и параметры. При утверждении у вас есть возможность получать содержимое из API по мере его создания, а не ожидать фрагментов содержимого, которые были проверены для передачи фильтров содержимого.

По умолчанию.

Система фильтрации содержимого интегрирована и включена по умолчанию для всех клиентов. В сценарии потоковой передачи по умолчанию содержимое буферируется, система фильтрации содержимого выполняется в буферизованном содержимом, и ( в зависимости от конфигурации фильтрации содержимого) содержимое возвращается пользователю, если он не нарушает политику фильтрации содержимого (майкрософт по умолчанию или настраиваемую конфигурацию пользователя), или немедленно блокируется и возвращает ошибку фильтрации содержимого, без возврата вредного содержимого завершения. Этот процесс повторяется до конца потока. Содержимое полностью проверено в соответствии с политикой фильтрации содержимого перед возвратом пользователю. Содержимое не возвращается по маркеру в данном случае, но в "фрагментах содержимого" соответствующего размера буфера.

Асинхронный измененный фильтр

Клиенты, которые были утверждены для измененных фильтров содержимого, могут выбрать асинхронный измененный фильтр в качестве дополнительного варианта, предоставляя новый интерфейс потоковой передачи. В этом случае фильтры содержимого выполняются асинхронно, а содержимое завершения возвращается немедленно с гладкой потоковой передачей маркеров по маркерам. Содержимое не буферичено, что позволяет нулю задержки.

Клиенты должны знать, что, хотя функция повышает задержку, это компромисс против безопасности и проверки в режиме реального времени небольших разделов выходных данных модели. Так как фильтры содержимого выполняются асинхронно, сообщения con режим палатки ration и сигналы о нарушении политики задерживаются, что означает, что некоторые разделы вредного содержимого, которые в противном случае были бы отфильтрованы немедленно, могут отображаться пользователю.

Заметки: заметки и кон режим палатки рация сообщений постоянно возвращаются во время потока. Настоятельно рекомендуется использовать заметки в приложении и реализовывать дополнительные механизмы безопасности содержимого ИИ, такие как изменение содержимого или возврат дополнительных сведений о безопасности пользователю.

Сигнал фильтрации содержимого: отложен сигнал об ошибке фильтрации содержимого. В случае нарушения политики он возвращается как только он доступен, и поток останавливается. Сигнал фильтрации содержимого гарантируется в окне 1000 символов содержимого, нарушающего политику.

Утверждение для изменения фильтрации содержимого требуется для доступа к асинхронном измененном фильтру. Здесь можно найти приложение. Чтобы включить его в Azure OpenAI Studio, следуйте инструкциям по фильтру содержимого, чтобы создать новую конфигурацию фильтрации содержимого и выбрать асинхронный измененный фильтр в разделе "Потоковая передача".

Сравнение режимов фильтрации содержимого

Сравнить Потоковая передача — по умолчанию Потоковая передача — асинхронный измененный фильтр
Состояние Общедоступная версия Общедоступная предварительная версия
Пригодность Все клиенты Клиенты, утвержденные для изменения фильтрации содержимого
Включение Включено по умолчанию, действие не требуется Клиенты, утвержденные для фильтрации измененного содержимого, могут настроить его непосредственно в Azure OpenAI Studio (в рамках конфигурации фильтрации содержимого, примененной на уровне развертывания).
Модальность и доступность Текст; все модели GPT Текст; все модели GPT, кроме gpt-4-vision
Потоковая передача Содержимое буферичено и возвращается в блоках Нулевая задержка (без буферизации, фильтры выполняются асинхронно)
Сигнал фильтрации содержимого Немедленное фильтрация сигнала Отложенный сигнал фильтрации (до 1000 символов приращения)
Конфигурации фильтрации содержимого Поддерживает значение по умолчанию и любой определяемый клиентом параметр фильтра (включая необязательные модели) Поддерживает значение по умолчанию и любой определяемый клиентом параметр фильтра (включая необязательные модели)

Заметки и примеры ответов

Сообщение заметки запроса

Это то же самое, что и заметки по умолчанию.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

Сообщение маркера завершения

Сообщения о завершении перенаправляются немедленно. Модерация не выполняется сначала, и изначально не предоставляются заметки.

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

Сообщение заметки

Текстовое поле всегда будет пустой строкой, указывающей на отсутствие новых маркеров. Заметки будут иметь отношение только к уже отправленным маркерам. Может быть несколько заметок, ссылающихся на одни и те же маркеры.

"start_offset" и "end_offset" смещения с низкой степенью детализации в тексте (с 0 в начале запроса), чтобы пометить текст, к которому относится заметка.

"check_offset" представляет, сколько текста было полностью модерировано. Это монопольная нижняя граница "end_offset" значений будущих заметок. Это не уменьшается.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

Пример потока ответа (передает фильтры)

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

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"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":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

Пример потока ответа (заблокирован по фильтрам)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","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":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

Внимание

При активации фильтрации содержимого для запроса и "status": 400 получения в рамках ответа может потребоваться плата за этот запрос, так как запрос был оценен службой. Плата также будет взиматься при "status":200 получении "finish_reason": "content_filter". В этом случае запрос не имеет никаких проблем, но завершение, созданное моделью, было обнаружено нарушение правил фильтрации содержимого, что приводит к фильтрации завершения.

Рекомендации

При разработке приложения учитывайте приведенные ниже рекомендации, чтобы обеспечить удобство работы с приложением и свести к минимуму потенциальный вред.

  • Определите, как следует обрабатывать сценарии, в которых пользователи отправляют запросы с содержимым, отфильтрованным по категории и уровню серьезности, или используют приложение не по назначению.
  • Проверьте finish_reason, чтобы узнать, фильтруется ли завершение.
  • Убедитесь, что в content_filter_result нет объекта ошибки (указывающего на то, что фильтры содержимого не применены).
  • Если вы используете модель защищенного кода материала в режиме анотации, отобразите URL-адрес ссылки при отображении кода в приложении.

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