Identifique conteúdo prejudicial em textos e imagens.
Responses
Use os modelos de moderação da OpenAI para detectar conteúdo prejudicial em textos e imagens. Você pode classificar entradas de forma independente com o endpoint de moderação ou solicitar pontuações de moderação junto com uma resposta gerada. Use os resultados para aplicar a política do seu aplicativo, por exemplo, filtrando conteúdo, encaminhando uma solicitação para revisão ou tomando medidas em relação a contas que enviam conteúdo sinalizado.
O modelo omni-moderation-latest aceita entradas de texto e imagem. Ele não classifica áudio. O endpoint de moderação é gratuito, e os arquivos de imagem podem ter até 20 MB.
Segurança infantil: Não envie à API de Moderação material identificado como abuso sexual infantil (CSAM) ou suspeito de conter esse tipo de conteúdo. A API não foi projetada para detectar ou lidar com CSAM e não substitui medidas específicas de proteção infantil. Consulte nossas Orientações sobre CSAM para conhecer as etapas de prevenção, detecção, resposta e denúncia de CSAM.
Seu aplicativo precisa saber quais categorias de conteúdo prejudicial se aplicam a textos, imagens ou ambos.
Modere conteúdo gerado
Quando seu aplicativo precisar de texto gerado e pontuações de moderação juntos, passe um objeto moderation no nível superior da solicitação de geração. A API retorna pontuações de moderação para a entrada do modelo e a saída gerada sem uma solicitação de moderação separada.
O modelo continua gerando normalmente. Revise os resultados da moderação antes de mostrar a saída a um usuário ou executar ações subsequentes.
Defina moderation.model ao criar uma resposta:
Gere uma resposta com pontuações de moderação
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27import OpenAI from "openai";const client = new OpenAI();const response = await client.responses.create({ model: "gpt-6-astra", input: [ { role: "user", content: "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative.", }, ], moderation: { model: "omni-moderation-latest" },});const inputModeration = response.moderation.input;const outputModeration = response.moderation.output;if (inputModeration.type === "error") { throw new Error(inputModeration.message);}if (outputModeration.type === "error") { throw new Error(outputModeration.message);}console.log(inputModeration.flagged);console.log(outputModeration.flagged);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27from openai import OpenAIclient = OpenAI()response = client.responses.create(model="gpt-6-astra",input=[ {"role": "user","content": ("A user asks for instructions to make a harmful weapon. ""Draft a brief refusal and offer a safer alternative." ), } ],moderation={"model": "omni-moderation-latest"},)input_moderation = response.moderation.inputoutput_moderation = response.moderation.outputif input_moderation.type =="error":raiseRuntimeError(input_moderation.message)if output_moderation.type =="error":raiseRuntimeError(output_moderation.message)print(input_moderation.flagged)print(output_moderation.flagged)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.core.JsonValue;import com.openai.models.responses.ResponseCreateParams;import java.util.ArrayList;import java.util.List;import java.util.Map;ResponseCreateParams params = ResponseCreateParams.builder() .model("gpt-6-astra") .input( "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative.") .putAdditionalBodyProperty( "moderation", JsonValue.from(Map.of("model", "omni-moderation-latest"))) .build();var response = client.responses().create(params);var moderation = response .moderation() .orElseThrow( () -> new IllegalStateException("The response did not include moderation results"));List<Boolean> flags = new ArrayList<>();var input = moderation.input();if (input.isError()) { throw new IllegalStateException(input.asError().message());}if (!input.isModerationResult()) { throw new IllegalStateException("Missing input moderation flag");}flags.add(input.asModerationResult().flagged());var output = moderation.output();if (output.isError()) { throw new IllegalStateException(output.asError().message());}if (!output.isModerationResult()) { throw new IllegalStateException("Missing output moderation flag");}flags.add(output.asModerationResult().flagged());flags.forEach(System.out::println);
1
2
3
4
5
6
7
8
9
10
11require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative.", moderation: { model: "omni-moderation-latest" })puts(response.moderation)
A Responses API retorna um objeto moderation_result referente à entrada em response.moderation.input e um objeto moderation_result referente à saída em response.moderation.output.
Defina moderation.model ao criar uma conclusão de chat:
Gere uma conclusão de chat com pontuações de moderação
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26import OpenAI from "openai";const client = new OpenAI();const completion = await client.chat.completions.create({ model: "gpt-6-astra", messages: [ { role: "user", content: "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative.", }, ], moderation: { model: "omni-moderation-latest" },});const inputResult = completion.moderation.input;const outputResult = completion.moderation.output;if (inputResult.type === "error") throw new Error(inputResult.message);if (outputResult.type === "error") throw new Error(outputResult.message);const inputModeration = inputResult.results[0];const outputModeration = outputResult.results[0];console.log(inputModeration.flagged);console.log(outputModeration.flagged);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30from openai import OpenAIclient = OpenAI()completion = client.chat.completions.create(model="gpt-6-astra",messages=[ {"role": "user","content": ("A user asks for instructions to make a harmful weapon. ""Draft a brief refusal and offer a safer alternative." ), } ],moderation={"model": "omni-moderation-latest"},)input_result = completion.moderation.inputoutput_result = completion.moderation.outputif input_result.type =="error":raiseRuntimeError(input_result.message)if output_result.type =="error":raiseRuntimeError(output_result.message)input_moderation = input_result.results[0]output_moderation = output_result.results[0]print(input_moderation.flagged)print(output_moderation.flagged)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.core.JsonValue;import com.openai.models.chat.completions.ChatCompletionCreateParams;import java.util.ArrayList;import java.util.List;import java.util.Map;ChatCompletionCreateParams params = ChatCompletionCreateParams.builder() .model("gpt-6-astra") .addUserMessage( "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative.") .putAdditionalBodyProperty( "moderation", JsonValue.from(Map.of("model", "omni-moderation-latest"))) .build();var completion = client.chat().completions().create(params);var moderation = completion .moderation() .orElseThrow( () -> new IllegalStateException("The completion did not include moderation results"));List<Boolean> flags = new ArrayList<>();var input = moderation.input();if (input.isError()) { throw new IllegalStateException(input.asError().message());}if (!input.isModerationResults() || input.asModerationResults().results().isEmpty()) { throw new IllegalStateException("Missing input moderation flag");}flags.add(input.asModerationResults().results().get(0).flagged());var output = moderation.output();if (output.isError()) { throw new IllegalStateException(output.asError().message());}if (!output.isModerationResults() || output.asModerationResults().results().isEmpty()) { throw new IllegalStateException("Missing output moderation flag");}flags.add(output.asModerationResults().results().get(0).flagged());flags.forEach(System.out::println);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require "openai"client = OpenAI::Client.newcompletion = client.chat.completions.create( model: "gpt-6-astra", messages: [ { role: :user, content: "A user asks for instructions to make a harmful weapon. Draft a brief refusal and offer a safer alternative." } ], moderation: { model: "omni-moderation-latest" })puts(completion.moderation)
Chat Completions retorna contêineres de resultados de moderação em completion.moderation.input e completion.moderation.output. Para uma solicitação com uma única opção gerada, leia o primeiro resultado de entrada e de saída em results[0]. Se você solicitar várias opções, completion.moderation.output.results[i] corresponde a completion.choices[i].
Os resultados de moderação incluídos na resposta usam os mesmos campos de categoria que um resultado de moderação independente. Comece com flagged para uma decisão inicial e, em seguida, examine categories e category_scores para registro em logs, roteamento, trilhas de auditoria ou filas de revisão humana. Uma recusa ou outra resposta que leve a segurança em consideração ainda pode ser sinalizada se abordar conteúdo prejudicial. Trate as pontuações de moderação como sinais para a política do seu aplicativo, não como uma decisão automática de bloqueio.
Verifique o tipo do resultado de moderação antes de ler as pontuações se seu aplicativo precisar lidar com falhas de moderação. Se uma etapa de moderação não puder ser concluída, o campo de moderação correspondente à entrada ou à saída poderá conter um erro em vez de pontuações de moderação.
Para solicitações com chamadas de ferramentas, a moderação abrange os argumentos dessas chamadas e as saídas das ferramentas quando aparecem no conteúdo da conversa. Ela não abrange nomes, descrições ou esquemas de ferramentas, nem esquemas de formato de resposta.
Se você transmitir uma resposta gerada por streaming, as pontuações de moderação chegarão depois que toda a saída gerada estiver disponível. Elas não são incluídas nos deltas parciais da saída.
Veja um exemplo completo de saída para uma imagem de um único quadro de um filme de guerra. O modelo identifica indícios de violência na imagem, com uma pontuação superior a 0,8 na categoria violence.
A resposta JSON inclui campos que descrevem quais categorias estão presentes na entrada e o grau de confiança do modelo em cada categoria.
Categoria de saída
Descrição
flagged
Definido como true se o modelo classificar o conteúdo como potencialmente prejudicial;
caso contrário, false.
categories
Contém um dicionário de sinalizações de violação por categoria. Para cada categoria,
o valor é true se o modelo sinalizar uma violação na categoria correspondente;
caso contrário, false.
category_scores
Contém um dicionário de pontuações por categoria. Cada pontuação representa a
confiança do modelo de que a entrada contém conteúdo da categoria. O
valor fica entre 0 e 1, sendo que valores mais altos indicam maior confiança.
category_applied_input_types
Contém os tipos de entrada aos quais a pontuação da categoria se aplica. Por exemplo,
se a categoria violence/graphic se aplicar tanto a entradas de imagem quanto de texto,
a propriedade violence/graphic será definida como ["image", "text"].
Planejamos aprimorar continuamente o modelo usado pelo endpoint de moderação.
Por isso, políticas personalizadas que dependem de category_scores podem precisar
de recalibração ao longo do tempo.
Consulte as categorias compatíveis
A tabela abaixo descreve as categorias de conteúdo que o endpoint de moderação pode detectar e os tipos de entrada aceitos por cada categoria.
As categorias marcadas como "Somente texto" não aceitam entradas de imagem. Se você enviar apenas
imagens (sem texto) ao modelo omni-moderation-latest, ele
retornará uma pontuação de 0 para essas categorias não compatíveis com imagens. Os arquivos de imagem têm
um limite de 20 MB.
Categoria
Descrição
Entradas
harassment
Conteúdo que expressa, incita ou promove linguagem de assédio contra
qualquer alvo.
Somente texto
harassment/threatening
Conteúdo de assédio que também inclui violência ou danos graves contra qualquer
alvo.
Somente texto
hate
Conteúdo que expressa, incita ou promove ódio com base em raça, gênero,
etnia, religião, nacionalidade, orientação sexual, deficiência
ou casta. Conteúdo de ódio direcionado a grupos não protegidos (por exemplo, jogadores
de xadrez) é considerado assédio.
Somente texto
hate/threatening
Conteúdo de ódio que também inclui violência ou danos graves contra o
grupo visado com base em raça, gênero, etnia, religião, nacionalidade,
orientação sexual, deficiência ou casta.
Somente texto
illicit
Conteúdo que oferece conselhos ou instruções sobre como cometer atos ilícitos. Uma
frase como "como furtar em lojas" se enquadraria nesta categoria.
Somente texto
illicit/violent
Os mesmos tipos de conteúdo sinalizados pela categoria illicit, mas que também
incluem referências à violência ou à obtenção de uma arma.
Somente texto
self-harm
Conteúdo que promove, incentiva ou retrata atos de autolesão, como
suicídio, cortes autoinfligidos e transtornos alimentares.
Texto e imagens
self-harm/intent
Conteúdo em que a pessoa expressa que está praticando ou pretende
praticar atos de autolesão, como suicídio, cortes autoinfligidos e transtornos
alimentares.
Texto e imagens
self-harm/instructions
Conteúdo que incentiva a prática de atos de autolesão, como suicídio,
cortes autoinfligidos e transtornos alimentares, ou que fornece instruções ou orientações sobre como
praticar esses atos.
Texto e imagens
sexual
Conteúdo destinado a provocar excitação sexual, como descrições de
atividade sexual, ou que promove serviços sexuais (excluindo educação sexual
e bem-estar).
Texto e imagens
sexual/minors
Conteúdo sexual que inclui uma pessoa com menos de 18 anos.
Somente texto
violence
Conteúdo que retrata morte, violência ou lesões físicas.
Texto e imagens
violence/graphic
Conteúdo que retrata morte, violência ou lesões físicas com detalhes
explícitos.