Filtrado de contenido

Importante

El sistema de filtrado de contenido no se aplica a solicitudes y finalizaciones procesadas por el modelo Whisper en el servicio Azure OpenAI. Obtenga más información sobre el modelo Whisper en Azure OpenAI.

Azure OpenAI Service incluye un sistema de filtrado de contenido que funciona junto con los modelos centrales. Este sistema funciona ejecutando tanto la solicitud como la finalización a través de un conjunto de modelos de clasificación destinados a detectar y evitar la salida de contenido dañino. El sistema de filtrado de contenido detecta y toma medidas en categorías específicas de contenido potencialmente perjudicial tanto en solicitudes de entrada como en finalizaciones de salida. Las variaciones en las configuraciones de API y el diseño de aplicaciones pueden afectar a las finalizaciones y, por tanto, al comportamiento de filtrado.

Los modelos de filtrado de contenido para las categorías de odio, sexual, violencia y autolesiones se han entrenado y probado específicamente en los siguientes idiomas: inglés, alemán, japonés, español, francés, italiano, portugués y chino. Sin embargo, el servicio puede funcionar en muchos otros idiomas, pero la calidad puede variar. En todos los casos, debe realizar sus propias pruebas para asegurarse de que funciona para la aplicación.

Además del sistema de filtrado de contenido, Azure OpenAI Service realiza la supervisión para detectar contenido o comportamientos que sugieren el uso del servicio de una manera que podría infringir los términos de producto aplicables. Para más información sobre cómo comprender y mitigar los riesgos asociados a la aplicación, consulte la Nota de transparencia para Azure OpenAI. Para más información sobre cómo se procesan los datos en relación con el filtrado de contenido y la supervisión de abusos, consulte Datos, privacidad y seguridad para Azure OpenAI Service.

En las secciones siguientes, se proporciona información sobre las categorías de filtrado de contenido, los niveles de gravedad de filtrado y su capacidad de configuración, además de los escenarios de API que se deben tener en cuenta en el diseño y la implementación de aplicaciones.

Categorías de filtrado de contenido

El sistema de filtrado de contenido integrado en Azure OpenAI Service contiene:

  • Modelos de clasificación neuronales de varias clases destinados a detectar y filtrar contenido dañino; los modelos cubren cuatro categorías (odio, sexual, violencia y autolesiones) en cuatro niveles de gravedad (seguro, bajo, medio y alto). El contenido detectado en el nivel de gravedad "seguro" está etiquetado en anotaciones, pero no está sujeto al filtrado y no es configurable.
  • Modelos de clasificación opcionales adicionales destinados a detectar el riesgo de jailbreak y el contenido conocido para el texto y el código; estos modelos son clasificadores binarios que marcan si el comportamiento del usuario o del modelo se califica como un ataque de jailbreak o coincide con el texto o el código fuente conocidos. El uso de estos modelos es opcional, pero el uso del modelo de código de material protegido puede ser necesario para la cobertura del compromiso de derechos de autor del cliente.

Categorías de daños

Category Descripción
Odio y equidad Los daños relacionados con el odio y la equidad se refieren a cualquier contenido que ataque o utilice un lenguaje peyorativo o discriminatorio con referencia a una persona o grupo identitario basado en ciertos atributos diferenciadores de estos grupos, incluidos, entre otros, la raza, la etnia, la nacionalidad, grupos de identidad y expresión de género, la orientación sexual, la religión, el estatus migratorio, el estado de capacidad, la apariencia personal y el tamaño corporal. 

La equidad consiste en garantizar que los sistemas de IA traten a todos los grupos de personas de forma equitativa sin contribuir a las desigualdades sociales existentes. Como en el caso de la incitación al odio, los perjuicios relacionados con la equidad se basan en el trato desigual de los grupos identitarios.  
Sexual Sexual describe el lenguaje relacionado con los órganos anatómicos y los genitales, el embarazo, las relaciones románticas, los actos representados en términos eróticos o afectuosos, los actos sexuales físicos, incluidos los representados como una agresión o un acto violento sexual forzado contra la propia voluntad, la prostitución, la pornografía y el abuso.  
Violencia Violencia describe el lenguaje relacionado con acciones físicas destinadas a herir, lesionar, dañar o matar a alguien o algo; describe armas, pistolas y entidades relacionadas, como fabricantes, asociaciones, legislación, etc.
Autolesiones Autolesión describe el lenguaje relacionado con acciones físicas destinadas a herir, lesionar o dañar intencionadamente su propio cuerpo o a suicidarse.
Riesgo de jailbreak Los ataques de jailbreak son avisos de usuario diseñados para provocar el modelo de IA generativa en comportamientos que se entrenaron para evitar o interrumpir las reglas establecidas en el mensaje del sistema. Dichos ataques pueden variar de un papel intrincado a una subversión sutil del objetivo de seguridad.
Material protegido para texto* El texto de material protegido describe contenidos textuales conocidos (por ejemplo, letras de canciones, artículos, recetas y contenidos web seleccionados) que pueden ser emitidos por grandes modelos de lenguaje.
Material protegido para código El código de material protegido describe el código fuente que coincide con un conjunto de códigos fuente de repositorios públicos, que pueden ser emitidos por grandes modelos lingüísticos sin citar adecuadamente los repositorios de origen.

* Si es propietario del material de texto y desea enviar contenido de texto para la protección, envíe una solicitud.

Contenido de texto

Advertencia

La pestaña Definiciones de gravedad de este documento contiene ejemplos de contenido dañino que puede resultar preocupante para algunos lectores.

Contenido de la imagen

Advertencia

La pestaña Definiciones de gravedad de este documento contiene ejemplos de contenido dañino que puede resultar preocupante para algunos lectores.

Capacidad de configuración (versión preliminar)

La configuración de filtrado de contenido predeterminada se establece para filtrar en el umbral de gravedad media para las cuatro categorías de daños en el contenido para las solicitudes y finalizaciones. Esto significa que el contenido que se detecta en el nivel de gravedad medio o alto se filtra, mientras que el contenido detectado en el nivel de gravedad bajo no se filtra con los filtros de contenido. La característica de configuración está disponible en versión preliminar y permite a los clientes ajustar la configuración, por separado para solicitudes y finalizaciones, para filtrar el contenido de cada categoría de contenido en distintos niveles de gravedad, tal y como se describe en la tabla siguiente:

Gravedad filtrada Configurable para solicitudes Configurable para finalizaciones Descripciones
Bajo, medio, alto Configuración de filtrado más estricta. El contenido detectado en niveles de gravedad bajo, medio y alto se filtra.
Medio y alto Configuración predeterminada. El contenido detectado en el nivel de gravedad bajo no se filtra, sino que se filtra el contenido de un nivel medio y alto.
Alto El contenido detectado en niveles de gravedad bajo y medio no se filtra. Solo se filtra el contenido en el nivel de gravedad alto.
Sin filtros Si se aprueba* Si se aprueba* No se filtra ningún contenido, independientemente del nivel de gravedad detectado. Requiere aprobación*.

* Sólo los clientes aprobados para el filtrado de contenidos modificado tienen el control total de los filtros de contenido y pueden desactivarlos parcial o totalmente. El control de filtrado de contenido no se aplica a los filtros de contenido para DALL-E (versión preliminar) o GPT-4 Turbo con Visión (versión preliminar). Solicite filtros de contenido modificado mediante este formulario: Revisión de acceso limitado de Azure OpenAI: filtros de contenido modificados (microsoft.com).

Los clientes son responsables de garantizar que las aplicaciones que integran Azure OpenAI cumplan con el código de conducta.

Las configuraciones de filtrado de contenido se crean dentro de un recurso en Azure AI Studio y se pueden asociar a implementaciones. Obtenga más información sobre la capacidad de configuración aquí.

Detalles del escenario

Cuando el sistema de filtrado de contenidos detecte contenido nocivo, recibirá un error en la llamada a la API si la indicación se ha considerado inapropiada o el finish_reason de la respuesta será content_filter para indicar que se ha filtrado parte de la información completada. Cuando compile su aplicación o sistema, querrá tener en cuenta estos escenarios en los que la API de finalizaciones filtra el contenido devuelto, lo que puede dar lugar a que el contenido esté incompleto. La manera de actuar sobre esta información será específica de la aplicación. El comportamiento puede resumirse en los siguientes puntos:

  • Los mensajes que se clasifican en una categoría filtrada y nivel de gravedad devolverán un error HTTP 400.
  • Las llamadas de finalización sin streaming no devolverán ningún contenido cuando se filtre el contenido. El valor finish_reason se establecerá en content_filter. En casos raros con respuestas más largas, se puede devolver un resultado parcial. En estos casos, se actualizará finish_reason.
  • Para las llamadas de finalización de transmisión, los segmentos se devolverán al usuario a medida que se completen. El servicio continuará transmitiendo hasta alcanzar un token de detención, una longitud o cuando se detecte el contenido clasificado en una categoría filtrada y nivel de gravedad.

Escenario: se envía una llamada de finalización sin streaming que solicita varias salidas; ningún contenido se clasifica en una categoría filtrada y en el nivel de gravedad

En la tabla siguiente se describen las distintas formas en que puede aparecer el filtrado de contenidos:

Código de respuesta HTTP Comportamiento de respuesta
200 En los casos en que toda la generación pasa los filtros tal y como están configurados, no se agrega ningún detalle de moderación de contenido a la respuesta. El finish_reason para cada generación será o bien stop o bien length.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta JSON:

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

Escenario: la llamada API solicita varias respuestas (N>1) y se filtra al menos una de las respuestas.

Código de respuesta HTTP Comportamiento de respuesta
200 Las generaciones filtradas tendrán un valor finish_reason de content_filter.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta 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
        }
    ]
}

Escenario: se envía una solicitud de entrada inapropiada a la API de finalizaciones (ya sea para streaming o no streaming)

Código de respuesta HTTP Comportamiento de respuesta
400 Se produce un error en la llamada API cuando el mensaje desencadena un filtro de contenido tal como está configurado. Modifique el comando de entrada e inténtelo de nuevo.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta JSON:

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

Escenario: realiza una llamada a finalizaciones de streaming; ningún contenido de salida se clasifica en una categoría filtrada y nivel de gravedad

Código de respuesta HTTP Comportamiento de respuesta
200 En este caso, la llamada volverá a transmitirse con la generación completa y finish_reason será "length" o "stop" para cada respuesta generada.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta JSON:

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

Escenario: se realiza una llamada de finalización de streaming que solicita varias finalizaciones y se filtra al menos una parte del contenido de salida

Código de respuesta HTTP Comportamiento de respuesta
200 Para un índice de generación determinado, el último fragmento de la generación incluye un valor de finish_reason no nulo. El valor es content_filter cuando se filtre la generación.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta 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
        }
    ]
}

Escenario: el sistema de filtrado de contenido no se ejecuta en la finalización

Código de respuesta HTTP Comportamiento de respuesta
200 Si el sistema de filtrado de contenidos no funciona o no puede completar la operación a tiempo, su solicitud se completará igualmente sin filtrado de contenido. Puede determinar que el filtrado no se aplicó buscando un mensaje de error en el objeto content_filter_result.

Ejemplo de carga útil de la solicitud:

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

Ejemplo de respuesta 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"
                }
            }
        }
    ]
}

anotaciones

Filtros de contenido

Cuando se activan las anotaciones, como se muestra en el fragmento de código siguiente, se devuelve la siguiente información a través de la API para las categorías principales (odio y equidad, sexual, violencia y autolesiones):

  • categoría de filtros de contenido (odio, sexual, violencia, autolesiones)
  • nivel de gravedad (seguro, bajo, medio o alto) dentro de cada categoría de contenido
  • estado del filtro (true o false).

Modelos opcionales

Los modelos opcionales pueden activarse en modo de anotación (devuelve información cuando se marcó el contenido, pero no se filtró) o en modo de filtro (devuelve información cuando el contenido fue marcado y filtrado).

Cuando las anotaciones están activadas, como se muestra en el fragmento de código siguiente, la API devuelve la siguiente información para los modelos opcionales riesgo de jailbreak, texto de material protegido y código de material protegido:

  • categoría (jailbreak, protected_material_text, protected_material_code),
  • detectado (true o false)
  • filtrado (true o false)

Para el modelo de código de material protegido, la API devuelve la siguiente información adicional:

  • una cita de ejemplo de un repositorio público de GitHub donde se encontró un fragmento de código
  • la licencia del repositorio.

Cuando muestre código en la aplicación, se aconsejamos que muestre también la cita de ejemplo de las anotaciones. El cumplimiento de la licencia citada también puede exigirse para la cobertura del compromiso de derechos de autor del cliente.

Las anotaciones están disponibles actualmente en la versión 2024-02-01 de la API de disponibilidad general y en todas las versiones preliminares a partir de 2023-06-01-preview finalizaciones y finalizaciones de chat (modelos GPT). El siguiente fragmento de código muestra cómo usar anotaciones:

# 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))

Output

{ 
  "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 
    } 
  ]
} 

Para más información sobre los puntos de conexión de la API de REST de inferencia para Azure OpenAI y cómo crear chat y finalizaciones, siga las Instrucciones de referencia de la API de REST de Azure OpenAI Service. Las anotaciones se devuelven para todos los escenarios al usar cualquier versión preliminar de la API a partir de 2023-06-01-preview, así como la versión 2024-02-01de la API de disponibilidad general.

Escenario de ejemplo: se envía una solicitud de entrada que contiene contenido clasificado en una categoría filtrada y el nivel de gravedad se envía a la API de finalizaciones

{
    "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"
                }
            }
        }
    }
}

Streaming de contenido

En esta sección se describe la experiencia y las opciones de streaming de contenido de Azure OpenAI. Con la aprobación, puede recibir contenido de la API a medida que se genera, en lugar de esperar a recibir fragmentos de contenido comprobados para pasar los filtros de contenido.

Valor predeterminado

El sistema de filtrado de contenido está integrado y habilitado de manera predeterminada para todos los clientes. En el escenario de streaming predeterminado, el contenido de finalización se almacena en búfer, el sistema de filtrado de contenido se ejecuta en el contenido almacenado en búfer y, en función de la configuración del filtrado de contenido, se devuelve contenido al usuario si no infringe la directiva de filtrado de contenido (configuración de usuario personalizada o predeterminada de Microsoft), o se bloquea inmediatamente, lo que devuelve un error de filtrado de contenido, sin devolver contenido de finalización perjudicial. Este proceso se repite hasta el final de la secuencia. El contenido se verifica en su totalidad en función de la directiva de filtrado de contenido antes devolverse al usuario. En este caso, el contenido no se devuelve token por token, sino en “fragmentos de contenido” del tamaño de búfer correspondiente.

Filtro modificado asincrónico

Los clientes aprobados para los filtros de contenido modificados pueden elegir Filtro modificado asincrónico como una opción adicional, lo que proporciona una nueva experiencia de streaming. En este caso, los filtros de contenido se ejecutan de forma asincrónica, el contenido de finalización se devuelve inmediatamente con una experiencia de streaming de token por token fluida. No se almacena en búfer ningún contenido, lo que permite una latencia cero.

Los clientes deben tener en cuenta que, aunque la característica mejora la latencia, puede implicar una compensación en términos de seguridad y verificación en tiempo real de secciones más pequeñas de la salida del modelo. Dado que los filtros de contenido se ejecutan de forma asincrónica, los mensajes de moderación de contenido y las señales de infracción de directivas se retrasan, por lo que se podrían mostrar al usuario algunas secciones de contenido perjudicial que se habrían filtrado inmediatamente de otro modo.

Anotaciones: las anotaciones y los mensajes de moderación de contenido se devuelven continuamente durante la secuencia. Se recomienda encarecidamente consumir anotaciones en la aplicación e implementar mecanismos de seguridad de contenido de IA adicionales, como la expurgación de contenido o la devolución de información de seguridad adicional al usuario.

Señal de filtrado de contenido: se retrasa la señal de error de filtrado de contenido. En el caso de una infracción de directiva, se devuelve tan pronto como está disponible y se detiene la secuencia. La señal de filtrado de contenido se garantiza dentro de una ventana de aproximadamente 1000 caracteres del contenido que infringe la directiva.

Se requiere aprobación para el filtrado de contenido modificado para el acceso al filtro modificado asincrónico. La aplicación se puede encontrar aquí. Para su habilitación en Azure OpenAI Studio, siga la Guía paso a paso del filtro de contenido para crear una nueva configuración de filtrado de contenido y seleccione Filtro modificado asincrónico en la sección Streaming.

Comparación de los modos de filtrado de contenido

Comparación Streaming: valor predeterminado Streaming: filtro modificado asincrónico
Estado GA Vista previa pública
Elegibilidad Todos los clientes Clientes aprobados para el filtrado de contenido modificado
Cómo habilitar Habilitado de forma predeterminada, no se necesita realizar ninguna acción Los clientes aprobados para el filtrado de contenido modificado pueden configurarse directamente a través de Azure OpenAI Studio (como parte de una configuración de filtrado de contenido que se aplica a nivel de implementación)
Modalidad y disponibilidad Texto; todos los modelos de GPT Texto; todos los modelos de GPT excepto gpt-4-vision
Experiencia de streaming El contenido se almacena en búfer y se devuelve en fragmentos Cero latencia (sin almacenamiento en búfer; los filtros se ejecutan de forma asincrónica)
Señal de filtrado de contenido Señal de filtrado inmediata Señal de filtrado retrasada (en incrementos de hasta unos 1000 caracteres)
Configuración de filtrado de contenido Admite el valor predeterminado y cualquier configuración de filtro definida por el cliente (incluidos los modelos opcionales) Admite el valor predeterminado y cualquier configuración de filtro definida por el cliente (incluidos los modelos opcionales)

Anotaciones y respuesta de ejemplo

Mensaje de anotación de consulta

Este es igual que las anotaciones predeterminadas.

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

Mensaje de token de finalización

Los mensajes de finalización se reenvían inmediatamente. No se realiza ninguna moderación primero y no se proporciona ninguna anotación inicialmente.

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 
} 

Mensaje de anotación

El campo de texto siempre será una cadena vacía, lo que indica que no hay nuevos tokens. Las anotaciones solo serán relevantes para los tokens ya enviados. Puede haber varios mensajes de anotación que hacen referencia a los mismos tokens.

"start_offset" y "end_offset" son desplazamientos de granularidad baja en texto (con 0 al principio de la consulta) para los que es relevante la anotación.

"check_offset" representa la cantidad de texto que se ha moderado completamente. Este es un límite inferior exclusivo en los valores "end_offset" de anotaciones futuras. No es decreciente.

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 
} 

Flujo de respuesta de ejemplo (pasa filtros)

A continuación, se muestra una respuesta de finalización de chat real con el filtro modificado asincrónico. Observe cómo no se cambian las anotaciones de consulta; los tokens de finalización se envían sin anotaciones; y los nuevos mensajes de anotación se envían sin tokens, en su lugar asociados a determinados desplazamientos de filtro de contenido.

{"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] 

Flujo de respuesta de ejemplo (bloqueado por filtros)

{"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] 

Importante

Cuando se desencadena el filtrado de contenido para una solicitud y se recibe un "status": 400 como parte de la respuesta, podría haber un cargo por esta solicitud a medida que el servicio la evalúe. También se producirán cargos cuando se reciba un "status":200 con "finish_reason": "content_filter". En este caso, la solicitud no tenía ninguna incidencia, pero se detectó la finalización generada por el modelo para infringir las reglas de filtrado de contenido dando lugar a que se filtre la finalización.

procedimientos recomendados

Como parte del diseño de la aplicación, tenga en cuenta los siguientes procedimientos recomendados para ofrecer una experiencia positiva con la aplicación, a la vez que minimiza posibles daños:

  • Decida cómo quiere controlar los escenarios en los que sus usuarios envían avisos con contenido clasificado en una categoría y nivel de gravedad filtrados o hacen un mal uso de su aplicación.
  • Compruebe finish_reason para ver si se filtra la generación.
  • Compruebe que no hay ningún objeto de error en content_filter_result (lo que indica que los filtros de contenido no se ejecutaron).
  • Si utiliza el modelo de código de material protegido en modo de anotación, muestre la URL de la cita cuando muestre el código en su aplicación.

Pasos siguientes