Partilhar via


Filtragem de conteúdos

Importante

O sistema de filtragem de conteúdo não é aplicado a prompts e conclusões processadas pelo modelo Whisper no Serviço Azure OpenAI. Saiba mais sobre o modelo Whisper no Azure OpenAI.

O Serviço OpenAI do Azure inclui um sistema de filtragem de conteúdo que funciona em conjunto com modelos principais, incluindo modelos de geração de imagens DALL-E. Este sistema funciona executando tanto o prompt como o preenchimento através de um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída. As variações nas configurações da API e na conceção da aplicação podem afetar as conclusões e, consequentemente, o comportamento de filtragem.

Os modelos de filtragem de conteúdo para as categorias de ódio, sexual, violência e automutilação foram especificamente treinados e testados nos seguintes idiomas: inglês, alemão, japonês, espanhol, francês, italiano, português e chinês. No entanto, o serviço pode funcionar em muitos outros idiomas, mas a qualidade pode variar. Em todos os casos, deve efetuar os seus próprios testes para garantir que funciona para a sua aplicação.

Além do sistema de filtragem de conteúdo, o Serviço Azure OpenAI realiza monitoramento para detetar conteúdo e/ou comportamentos que sugerem o uso do serviço de uma maneira que pode violar os termos do produto aplicáveis. Para obter mais informações sobre como compreender e mitigar os riscos associados ao seu aplicativo, consulte a Nota de Transparência para o Azure OpenAI. Para obter mais informações sobre como os dados são processados para filtragem de conteúdo e monitoramento de abuso, consulte Dados, privacidade e segurança para o Serviço OpenAI do Azure.

As seções a seguir fornecem informações sobre as categorias de filtragem de conteúdo, os níveis de severidade de filtragem e sua configurabilidade e cenários de API a serem considerados no design e implementação de aplicativos.

Categorias de filtragem de conteúdo

O sistema de filtragem de conteúdo integrado no Serviço OpenAI do Azure contém:

  • Modelos neurais de classificação multiclasse destinados a detetar e filtrar conteúdos nocivos; Os modelos abrangem quatro categorias (ódio, sexual, violência e automutilação) em quatro níveis de gravidade (seguro, baixo, médio e alto). O conteúdo detectado no nível de gravidade "seguro" é identificado em anotações, mas não está sujeito a filtragem e não é configurável.
  • Outros modelos de classificação opcionais destinados a detetar o risco de jailbreak e conteúdo conhecido para texto e código; Esses modelos são classificadores binários que sinalizam se o comportamento do usuário ou do modelo se qualifica como um ataque de jailbreak ou corresponde ao texto conhecido ou ao código-fonte. O uso desses modelos é opcional, mas o uso de modelo de código de material protegido pode ser necessário para a cobertura do Compromisso de Direitos Autorais do Cliente.

Categorias de risco

Categoria Description
Ódio e justiça Os danos relacionados com o ódio e a equidade referem-se a qualquer conteúdo que ataque ou utilize linguagem pejorativa ou discriminatória com referência a uma pessoa ou a grupos de identidade com base em certos atributos diferenciadores desses grupos, incluindo, entre outros, raça, etnia, nacionalidade, grupos e expressão de identidade de género, orientação sexual, religião, estatuto de imigração, estatuto de capacidade, aparência pessoal, e tamanho do corpo. 

A equidade diz respeito a garantir que os sistemas de IA tratam todos os grupos de pessoas de forma equitativa, sem contribuir para as desigualdades societais existentes. À semelhança do discurso de ódio, os danos relacionados com a equidade dependem do tratamento díspar dos grupos de identidade.  
Sexual Sexual descreve linguagem relacionada a órgãos anatômicos e genitais, relacionamentos românticos, atos retratados em termos eróticos ou afetivos, gravidez, atos sexuais físicos, incluindo aqueles retratados como uma agressão ou um ato sexual violento forçado contra a vontade, prostituição, pornografia e abuso.  
Violência A violência descreve a linguagem relacionada a ações físicas destinadas a ferir, ferir, danificar ou matar alguém ou algo; descreve armas, armas e entidades relacionadas, tais como fabricantes, associações, legislação, etc.
Automutilação A automutilação descreve a linguagem relacionada com ações físicas destinadas a ferir, ferir, danificar o corpo ou matar-se propositadamente.
Material protegido para texto* O texto de material protegido descreve o conteúdo de texto conhecido (por exemplo, letras de músicas, artigos, receitas e conteúdo da Web selecionado) que pode ser gerado por modelos de linguagem grandes.
Material protegido para código O código de material protegido descreve o código-fonte que corresponde a um conjunto de código-fonte de repositórios públicos, que pode ser gerado por modelos de linguagem grandes sem a citação adequada de repositórios de código-fonte.

* Se você é proprietário de material de texto e deseja enviar conteúdo de texto para proteção, envie uma solicitação.

Proteções do pedido

Tipo Description
Prompt Shield para ataques de jailbreak Os Ataques de Jailbreak são Prompts do Usuário projetados para provocar o modelo de IA Generativa a exibir comportamentos que foi treinado para evitar ou quebrar as regras definidas na Mensagem do Sistema. Tais ataques podem variar de encenações complexas a subversão sutil do objetivo de segurança.
Escudo Imediato para Ataques Indiretos Os Ataques Indiretos, também conhecidos como Ataques Imediatos Indiretos ou Ataques de Injeção Imediata entre Domínios, são uma vulnerabilidade potencial em que terceiros colocam instruções maliciosas dentro de documentos que o sistema de IA Generativa pode acessar e processar. Requer incorporação e formatação de documentos.

Conteúdo do texto

Aviso

A guia Definições de gravidade neste documento contém exemplos de conteúdo prejudicial que pode ser perturbador para alguns leitores.

Conteúdo da imagem

Aviso

A guia Definições de gravidade neste documento contém exemplos de conteúdo prejudicial que pode ser perturbador para alguns leitores.

Configurabilidade (pré-visualização)

A configuração de filtragem de conteúdo padrão para a série de modelos GPT é definida para filtrar no limite de gravidade média para todas as quatro categorias de dano de conteúdo (ódio, violência, sexual e automutilação) e se aplica a prompts (texto, texto/imagem multimodal) e conclusão (texto). Isso significa que o conteúdo detetado no nível de gravidade médio ou alto é filtrado, enquanto o conteúdo detetado no nível de gravidade baixo não é filtrado pelos filtros de conteúdo. Para DALL-E, o limite de gravidade padrão é definido como baixo para prompts (texto) e finalizações (imagens), portanto, o conteúdo detetado em níveis de gravidade baixo, médio ou alto é filtrado. O recurso de configurabilidade está disponível na visualização e permite que os clientes ajustem as configurações, separadamente para prompts e conclusão, para filtrar o conteúdo de cada categoria de conteúdo em diferentes níveis de gravidade, conforme descrito na tabela abaixo:

Severidade filtrada Configurável para prompts Configurável para finalizações Descrições
Baixa, média, alta Sim Sim Configuração de filtragem mais rigorosa. O conteúdo detetado nos níveis de gravidade baixo, médio e alto é filtrado.
Médio, alto Sim Sim O conteúdo detetado no nível de gravidade baixo não é filtrado, o conteúdo em médio e alto é filtrado.
Alto Sim Sim O conteúdo detetado nos níveis de gravidade baixo e médio não é filtrado. Apenas o conteúdo com nível de severidade alto é filtrado. Requer aprovação1.
Sem filtros Se aprovado1 Se aprovado1 Nenhum conteúdo é filtrado, independentemente do nível de gravidade detetado. Requer aprovação1.

1 Para modelos OpenAI do Azure, apenas os clientes que foram aprovados para filtragem de conteúdo modificada têm controle total de filtragem de conteúdo e podem desativar os filtros de conteúdo. Solicite filtros de conteúdo modificados por meio deste formulário: Azure OpenAI Limited Access Review: Modified Content Filters Para clientes do Azure Government, solicite filtros de conteúdo modificados por meio deste formulário: Azure Government - Request Modified Content Filtering for Azure OpenAI Service.

Filtros de conteúdo configuráveis para entradas (prompts) e saídas (conclusão) estão disponíveis para os seguintes modelos do Azure OpenAI:

  • Série de modelos GPT
  • GPT-4 Turbo Vision GA* (turbo-2024-04-09)
  • GPT-4O
  • DALL-E 2 e 3

*Disponível apenas para GPT-4 Turbo Vision GA, não se aplica à pré-visualização GPT-4 Turbo Vision

As configurações de filtragem de conteúdo são criadas dentro de um Recurso no Azure AI Studio e podem ser associadas a Implantações. Saiba mais sobre a configurabilidade aqui.

Os clientes são responsáveis por garantir que os aplicativos que integram o Azure OpenAI estejam em conformidade com o Código de Conduta.

Detalhes do cenário

Quando o sistema de filtragem de conteúdo deteta conteúdo nocivo, você recebe um erro na chamada de API se o prompt foi considerado inadequado ou a finish_reason resposta na resposta será content_filter para indicar que parte da conclusão foi filtrada. Ao criar seu aplicativo ou sistema, convém levar em conta esses cenários em que o conteúdo retornado pela API de Conclusão é filtrado, o que pode resultar em conteúdo incompleto. A forma como você age com base nessas informações será específica do aplicativo. O comportamento pode ser resumido nos seguintes pontos:

  • Os pedidos classificados numa categoria filtrada e ao nível de gravidade irão devolver um erro HTTP 400.
  • As chamadas de conclusão sem streaming não retornarão nenhum conteúdo quando o conteúdo for filtrado. O finish_reason valor será definido como content_filter. Em casos raros com respostas mais longas, um resultado parcial pode ser retornado. Nestes casos, o finish_reason será atualizado.
  • Para chamadas de conclusão de streaming, os segmentos serão devolvidos ao usuário à medida que forem concluídos. O serviço continuará transmitindo até atingir um token de parada, comprimento ou quando o conteúdo classificado em uma categoria filtrada e nível de gravidade for detetado.

Cenário: Você envia uma chamada de conclusão sem streaming solicitando várias saídas; Nenhum conteúdo é classificado em uma categoria filtrada e nível de severidade

A tabela abaixo descreve as várias maneiras pelas quais a filtragem de conteúdo pode aparecer:

Código de resposta HTTP Comportamento de resposta
200 Nos casos em que toda a geração passa os filtros conforme configurados, nenhum detalhe de moderação de conteúdo é adicionado à resposta. O finish_reason para cada geração será de parada ou comprimento.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta JSON:

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

Cenário: Sua chamada de API solicita várias respostas (N>1) e pelo menos uma das respostas é filtrada

Código de resposta HTTP Comportamento de resposta
200 As gerações que foram filtradas terão um finish_reason valor de content_filter.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta 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
        }
    ]
}

Cenário: Um prompt de entrada inadequado é enviado para a API de conclusão (para streaming ou não-streaming)

Código de resposta HTTP Comportamento de resposta
400 A chamada de API falha quando o prompt aciona um filtro de conteúdo conforme configurado. Modifique o prompt e tente novamente.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta JSON:

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

Cenário: Você faz uma chamada de conclusão de streaming; Nenhum conteúdo de saída é classificado em uma categoria filtrada e nível de severidade

Código de resposta HTTP Comportamento de resposta
200 Neste caso, a chamada será transmitida de volta com a geração completa e finish_reason será 'duração' ou 'parada' para cada resposta gerada.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta JSON:

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

Cenário: Você faz uma chamada de conclusão de streaming solicitando várias finalizações e pelo menos uma parte do conteúdo de saída é filtrada

Código de resposta HTTP Comportamento de resposta
200 Para um determinado índice de geração, a última parte da geração inclui um valor não nulo finish_reason . O valor é content_filter quando a geração foi filtrada.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta 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
        }
    ]
}

Cenário: O sistema de filtragem de conteúdo não é executado após a conclusão

Código de resposta HTTP Comportamento de resposta
200 Se o sistema de filtragem de conteúdo estiver inativo ou não conseguir concluir a operação a tempo, sua solicitação ainda será concluída sem filtragem de conteúdo. Você pode determinar que a filtragem não foi aplicada procurando uma mensagem de erro no content_filter_result objeto.

Exemplo de carga útil de solicitação:

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

Exemplo de resposta 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"
                }
            }
        }
    ]
}

Anotações

Filtros de conteúdo

Quando as anotações são habilitadas, conforme mostrado no trecho de código abaixo, as seguintes informações são retornadas por meio da API para as categorias ódio e justiça, sexual, violência e automutilação:

  • categoria de filtragem de conteúdo (ódio, sexual, violência self_harm)
  • o nível de severidade (seguro, baixo, médio ou alto) dentro de cada categoria de conteúdo
  • estado de filtragem (true ou false).

Modelos opcionais

Os modelos opcionais podem ser ativados no modo de anotação (retorna informações quando o conteúdo foi sinalizado, mas não filtrado) ou no modo de filtro (retorna informações quando o conteúdo foi sinalizado e filtrado).

Quando as anotações são habilitadas, conforme mostrado nos trechos de código abaixo, as seguintes informações são retornadas pela API para modelos opcionais:

Modelo Saída
fuga de presos detetado (verdadeiro ou falso),
filtrado (verdadeiro ou falso)
ataques indiretos detetado (verdadeiro ou falso),
filtrado (verdadeiro ou falso)
texto material protegido detetado (verdadeiro ou falso),
filtrado (verdadeiro ou falso)
Código do material protegido detetado (verdadeiro ou falso),
filtrado (verdadeiro ou falso),
Exemplo de citação do repositório público do GitHub onde o trecho de código foi encontrado,
A licença do repositório

Ao exibir o código em seu aplicativo, é altamente recomendável que o aplicativo também exiba a citação de exemplo das anotações. A conformidade com a licença citada também pode ser exigida para a cobertura do Compromisso de Direitos Autorais do Cliente.

Consulte a tabela a seguir para obter a disponibilidade da anotação em cada versão da API:

Categoria 2024-02-01 GA 2024-04-01-visualização 2023-10-01-visualização 2023-06-01-visualização
Ódio
Violência
Sexual
Automutilação
Prompt Shield para ataques de jailbreak
Prompt Shield para ataques indiretos
Texto material protegido
Código do material protegido
Lista de bloqueio de palavrões
Lista de bloqueio personalizada
# 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))

Saída

{ 
  "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 obter detalhes sobre os pontos de extremidade da API REST de inferência para o Azure OpenAI e como criar Chat e Conclusão, siga as diretrizes de referência da API REST do Serviço OpenAI do Azure. As anotações são retornadas para todos os cenários ao usar qualquer versão de API de visualização a partir de 2023-06-01-preview, bem como a versão 2024-02-01da API GA.

Cenário de exemplo: um prompt de entrada contendo conteúdo classificado em uma categoria filtrada e nível de gravidade é enviado para a API de conclusão

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

Incorporação de documentos em prompts

Um aspeto fundamental das medidas de IA Responsável do Azure OpenAI é o sistema de segurança de conteúdo. Este sistema é executado em conjunto com o modelo GPT principal para monitorar quaisquer irregularidades na entrada e saída do modelo. Seu desempenho é melhorado quando ele pode diferenciar entre vários elementos do seu prompt, como entrada do sistema, entrada do usuário e saída do assistente de IA.

Para recursos de deteção aprimorados, os prompts devem ser formatados de acordo com os seguintes métodos recomendados.

API de conclusão de bate-papo

A API de Conclusão de Chat é estruturada por definição. Consiste numa lista de mensagens, cada uma com uma função atribuída.

O sistema de segurança analisará este formato estruturado e aplicará o seguinte comportamento:

  • No conteúdo mais recente do "usuário", as seguintes categorias de Riscos RAI serão detetadas:
    • Ódio
    • Sexual
    • Violência
    • Automutilação
    • Jailbreak (opcional)

Este é um exemplo de matriz de mensagens:

{"role": "system", "content": "Provide some context and/or instructions to the model."}, 
{"role": "user", "content": "Example question goes here."}, 
{"role": "assistant", "content": "Example answer goes here."}, 
{"role": "user", "content": "First question/message for the model to actually respond to."} 

Incorporar documentos no seu prompt

Além da deteção do último conteúdo do utilizador, o Azure OpenAI também suporta a deteção de riscos específicos dentro de documentos de contexto através de Escudos de Aviso – Deteção de Ataques Imediatos Indiretos. Você deve identificar partes da entrada que são um documento (por exemplo, site recuperado, e-mail, etc.) com o seguinte delimitador de documento.

<documents> 
*insert your document content here* 
</documents>

Quando você fizer isso, as seguintes opções estarão disponíveis para deteção em documentos marcados:

  • Em cada conteúdo de "documento" marcado, detete as seguintes categorias:
    • Ataques indiretos (opcional)

Aqui está um exemplo de matriz de mensagens de conclusão de chat:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n*insert your document content here*\n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."} 

JSON escapando

Quando você marca documentos não verificados para deteção, o conteúdo do documento deve ser escapado por JSON para garantir uma análise bem-sucedida pelo sistema de segurança OpenAI do Azure.

Por exemplo, consulte o seguinte corpo de e-mail:

Hello Josè, 

I hope this email finds you well today.

Com a fuga de JSON, ler-se-ia:

Hello Jos\u00E9,\nI hope this email finds you well today. 

O texto escapado em um contexto de conclusão de bate-papo seria:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n Hello Jos\\u00E9,\\nI hope this email finds you well today. \n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."}

Streaming de conteúdo

Esta seção descreve a experiência e as opções de streaming de conteúdo do Azure OpenAI. Os clientes têm a opção de receber conteúdo da API à medida que é gerado, em vez de esperar que partes de conteúdo que foram verificadas passem pelos seus filtros de conteúdo.

Predefinido

O sistema de filtragem de conteúdo é integrado e habilitado por padrão para todos os clientes. No cenário de streaming padrão, o conteúdo de conclusão é armazenado em buffer, o sistema de filtragem de conteúdo é executado no conteúdo armazenado em buffer e, dependendo da configuração de filtragem de conteúdo, o conteúdo é retornado ao usuário se não violar a política de filtragem de conteúdo (configuração de usuário padrão ou personalizada da Microsoft), ou é imediatamente bloqueado e retorna um erro de filtragem de conteúdo, sem devolver o conteúdo de conclusão prejudicial. Este processo é repetido até o final do fluxo. O conteúdo é totalmente verificado de acordo com a política de filtragem de conteúdo antes de ser devolvido ao usuário. O conteúdo não é retornado token por token neste caso, mas em "blocos de conteúdo" do respetivo tamanho de buffer.

Filtro assíncrono

Os clientes podem escolher o Filtro Assíncrono como uma opção adicional, proporcionando uma nova experiência de streaming. Nesse caso, os filtros de conteúdo são executados de forma assíncrona e o conteúdo de conclusão é retornado imediatamente com uma experiência de streaming suave token por token. Nenhum conteúdo é armazenado em buffer, o que permite uma experiência de streaming rápida com latência zero associada à segurança do conteúdo.

Os clientes devem estar cientes de que, embora o recurso melhore a latência, é uma compensação contra a segurança e a verificação em tempo real de seções menores da saída do modelo. Como os filtros de conteúdo são executados de forma assíncrona, as mensagens de moderação de conteúdo e os sinais de violação de política são atrasados, o que significa que algumas seções de conteúdo prejudicial que, de outra forma, teriam sido filtradas imediatamente podem ser exibidas para o usuário.

Anotações: Anotações e mensagens de moderação de conteúdo são retornadas continuamente durante o fluxo. É altamente recomendável que você consuma anotações em seu aplicativo e implemente mecanismos adicionais de segurança de conteúdo de IA, como a edição de conteúdo ou o retorno de informações de segurança adicionais ao usuário.

Sinal de filtragem de conteúdo: o sinal de erro de filtragem de conteúdo está atrasado. Em caso de violação da política, ela é devolvida assim que estiver disponível e o fluxo é interrompido. O sinal de filtragem de conteúdo é garantido dentro de uma janela de ~1.000 caracteres do conteúdo que viola a política.

Compromisso de Direitos Autorais do Cliente: O conteúdo sinalizado retroativamente como material protegido pode não ser elegível para a cobertura do Compromisso de Direitos Autorais do Cliente.

Para habilitar o Filtro Assíncrono no Azure OpenAI Studio, siga o guia de instruções do Filtro de conteúdo para criar uma nova configuração de filtragem de conteúdo e selecione Filtro Assíncrono na seção Streaming.

Comparação dos modos de filtragem de conteúdo

Comparar Streaming - Padrão Streaming - Filtro assíncrono
Status GA Pré-visualização Pública
Elegibilidade Todos os clientes Clientes aprovados para filtragem de conteúdo modificado
Como ativar Ativado por padrão, nenhuma ação necessária Os clientes aprovados para filtragem de conteúdo modificada podem configurá-la diretamente no Azure OpenAI Studio (como parte de uma configuração de filtragem de conteúdo, aplicada no nível de implantação)
Modalidade e disponibilidade Texto; todos os modelos GPT Texto; todos os modelos GPT
Experiência de streaming O conteúdo é armazenado em buffer e retornado em partes Latência zero (sem buffering, os filtros são executados de forma assíncrona)
Sinal de filtragem de conteúdo Sinal de filtragem imediata Sinal de filtragem atrasado (em incrementos de até ~1.000 caracteres)
Configurações de filtragem de conteúdo Suporta configuração de filtro padrão e qualquer configuração de filtro definida pelo cliente (incluindo modelos opcionais) Suporta configuração de filtro padrão e qualquer configuração de filtro definida pelo cliente (incluindo modelos opcionais)

Anotações e exemplos de respostas

Mensagem de anotação de prompt

Isso é o mesmo que anotações padrão.

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

Mensagem de token de conclusão

As mensagens de conclusão são encaminhadas imediatamente. Nenhuma moderação é executada primeiro, e nenhuma anotação é fornecida 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 
} 

Mensagem de anotação

O campo de texto será sempre uma cadeia de caracteres vazia, indicando que não há novos tokens. As anotações só serão relevantes para tokens já enviados. Pode haver várias mensagens de anotação referentes aos mesmos tokens.

"start_offset" e "end_offset" são deslocamentos de baixa granularidade no texto (com 0 no início do prompt) para marcar para qual texto a anotação é relevante.

"check_offset" representa a quantidade de texto que foi totalmente moderada. É um limite inferior exclusivo sobre os "end_offset" valores de anotações futuras. Não está diminuindo.

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 
} 

Fluxo de resposta de amostra (passa filtros)

Abaixo está uma resposta real de conclusão de bate-papo usando o Filtro Assíncrono. Observe como as anotações de prompt não são alteradas, os tokens de conclusão são enviados sem anotações e as novas mensagens de anotação são enviadas sem tokens — em vez disso, elas são associadas a determinados deslocamentos de filtro de conteúdo.

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

Fluxo de resposta de amostra (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

Quando a filtragem de conteúdo é acionada para um prompt e um "status": 400 é recebido como parte da resposta, haverá uma cobrança por essa solicitação, pois o prompt foi avaliado pelo serviço. Devido à natureza assíncrona do sistema de filtragem de conteúdo, ocorrerá uma cobrança pelos tokens de prompt e conclusão. As cobranças também ocorrerão quando um "status":200 for recebido com "finish_reason": "content_filter". Neste caso, o prompt não teve problemas, mas a conclusão gerada pelo modelo foi detetada para violar as regras de filtragem de conteúdo, o que resulta na conclusão sendo filtrada.

Melhores práticas

Como parte do design da sua aplicação, considere as seguintes boas práticas para oferecer uma experiência positiva com a sua aplicação e, ao mesmo tempo, minimizar potenciais danos:

  • Decida como pretende lidar com cenários em que os utilizadores enviam pedidos que contêm conteúdo classificado numa categoria filtrada e nível de gravidade ou utilizam a sua aplicação indevidamente.
  • Verifique finish_reason para ver se a conclusão está filtrada.
  • Verifique se não existe nenhum objeto de erro no content_filter_result (a indicar que os filtros de conteúdo não foram executados).
  • Se você estiver usando o modelo de código de material protegido no modo de anotação, exiba o URL de citação quando estiver exibindo o código em seu aplicativo.

Próximos passos