Como moderar texto com o Azure AI Content Safety em Python
A moderação de conteúdo deixou de ser opcional em qualquer aplicação que receba texto escrito por utilizadores. O Azure AI Content Safety analisa uma frase e devolve um nível de severidade para quatro categorias de risco — ódio, violência, conteúdo sexual e automutilação — sem precisares de treinar qualquer modelo nem manter listas de palavras proibidas. Vais aprender a configurar o serviço e a moderar texto com Python em poucos minutos, com um exemplo funcional que podes adaptar ao teu produto.
Pré-requisitos
- Uma subscrição do Azure ativa (o serviço tem um plano gratuito para testes).
- Python 3.8 ou superior instalado.
- Permissões para criar recursos no portal do Azure.
- Conhecimentos básicos de linha de comandos e de Python.
Passo 1: Criar o recurso Azure AI Content Safety
No portal do Azure, cria um recurso do tipo Content Safety (também disponível como parte de um recurso Azure AI Services multi-serviço). Escolhe a subscrição, um grupo de recursos, uma região próxima dos teus utilizadores e um nome. A região importa por dois motivos: reduz a latência das chamadas e ajuda a cumprir requisitos de residência de dados. Depois de criado, abre a secção Keys and Endpoint e copia uma das chaves e o endpoint — vais precisar dos dois no código.
Passo 2: Instalar o SDK e guardar as credenciais
Instala a biblioteca oficial com o pip. É boa prática guardar a chave e o endpoint em variáveis de ambiente, para não deixares segredos escritos no código nem em repositórios.
pip install azure-ai-contentsafety
# Linux / macOS
export CONTENT_SAFETY_KEY="a-tua-chave"
export CONTENT_SAFETY_ENDPOINT="https://SEU-RECURSO.cognitiveservices.azure.com/"
No Windows usa setx em vez de export e reabre o terminal para as variáveis ficarem disponíveis.
Passo 3: Analisar texto em Python
Cria um ficheiro moderar.py. O código cria um ContentSafetyClient, envia uma frase e recebe a análise das quatro categorias de conteúdo.
import os
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions
from azure.core.credentials import AzureKeyCredential
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
key = os.environ["CONTENT_SAFETY_KEY"]
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
texto = "Bom dia! Alguem me pode ajudar com uma duvida?"
resposta = client.analyze_text(AnalyzeTextOptions(text=texto))
for item in resposta.categories_analysis:
print(f"{item.category}: severidade {item.severity}")
Executa com python moderar.py. Cada linha mostra uma categoria — Hate, SelfHarm, Sexual e Violence — e o respetivo nível de severidade devolvido pelo serviço. Cada categoria é avaliada de forma independente, por isso a mesma frase pode ter severidade alta numa e 0 nas restantes.
Passo 4: Decidir o que bloquear com um limiar
O serviço não decide por ti se o conteúdo é aceitável: devolve apenas severidades. É a tua aplicação que define o limiar a partir do qual rejeita o texto. Um limiar de 4 costuma ser um bom ponto de partida.
LIMIAR = 4
bloquear = any(item.severity >= LIMIAR for item in resposta.categories_analysis)
print("Conteudo bloqueado" if bloquear else "Conteudo aprovado")
Ajusta o valor conforme o contexto: um fórum para crianças precisa de um limiar mais baixo do que uma plataforma para adultos. Podes ainda aplicar limiares diferentes por categoria.
Nunca confies apenas na moderação automática para decisões de alto risco: combina-a com revisão humana sempre que a severidade for limítrofe.
Verificar o resultado
Para confirmar que a integração funciona, testa com frases claramente seguras e claramente problemáticas. Uma frase neutra deve devolver severidade 0 em todas as categorias, enquanto uma frase ofensiva deve elevar a severidade na categoria correspondente. A escala vai de 0 (seguro) a 6 (risco elevado), com os valores por omissão 0, 2, 4 e 6. Se receberes um erro de autenticação, confirma o endpoint e a chave; se o resultado for sempre 0, verifica se estás mesmo a enviar o texto de teste correto.
Conclusão
Com poucas linhas de Python passaste a ter moderação de texto pronta a integrar em formulários, chats ou comentários, sem treinar modelos nem manter listas de palavras à mão. O passo seguinte natural é analisar também imagens com o método analyze_image, criar blocklists personalizadas para termos específicos do teu domínio e registar as decisões para auditoria. Que limiar faz sentido para o teu produto — preferes bloquear a mais, ou arriscar deixar passar?