O Desafio da Segurança em IA Generativa
Organizações enfrentam um dilema complexo ao colocar aplicações de IA generativa em produção: como equilibrar segurança robusta com precisão, desempenho e custos razoáveis? Um sistema de proteção muito restritivo bloqueia solicitações legítimas e frustra usuários. Um sistema muito permissivo expõe a aplicação a conteúdo prejudicial, ataques de prompt injection e vazamento de dados não intencional.
Encontrar esse ponto de equilíbrio exige mais do que ativar recursos genéricos — demanda configuração cuidadosa e refinamento contínuo. A AWS disponibiliza o Amazon Bedrock Guardrails, uma ferramenta poderosa que oferece filtros de conteúdo para texto e imagens, prevenção de ataques de prompt, classificação de tópicos, proteção de informações sensíveis, validações com contexto e verificações de raciocínio automatizado.
Selecionando as Políticas Certas de Guardrail
Para aproveitar ao máximo as capacidades de proteção, a escolha das políticas depende do caso de uso específico, mas algumas políticas fundamentais oferecem proteção adequada para a maioria das implementações.
Política de Conteúdo
A Política de Conteúdo bloqueia conteúdo prejudicial incluindo discurso de ódio, insultos, conteúdo sexual, violência e má conduta. É recomendada para todos os deployments em produção. Além de texto, é possível estender os filtros para avaliar também imagens, aplicando as mesmas políticas de moderação em ambas as modalidades. Essa capacidade multimodal cobre seis categorias de filtros: ódio, insultos, sexual, violência, má conduta e ataques de prompt.
Prevenção de Ataques de Prompt
Essa política ajuda a identificar possíveis tentativas de jailbreak, injeção de prompts e vazamento de prompts que buscam enfraquecer recursos de segurança. É essencial para manter a segurança da aplicação.
Política de Informações Sensíveis
Oferece recursos de mascaramento ou remoção de Informações Pessoalmente Identificáveis (PII), ajudando a proteger dados de clientes e suportar esforços de conformidade regulatória.
Política de Palavras
Bloqueia palavras ou frases específicas, comumente usada para filtrar profanidade, termos restritos da indústria ou restrições personalizadas de vocabulário.
Política de Tópicos
Permite aplicar políticas personalizadas de IA Responsável, manter conformidade com diretrizes organizacionais e controlar o escopo e o assunto da conversa.
Recursos Especializados
Para casos de uso específicos, é possível adicionar Contextual Grounding para validar se respostas são sustentadas por materiais de referência confiáveis, reduzir alucinações de modelos durante sumarização de conteúdo, e manter relevância da conversa. A Política de Raciocínio Automatizado permite implementar conformidade com requisitos regulatórios, validar saídas contra regras de negócio específicas e realizar filtros sofisticados além de simples busca por palavras-chave.
Escolhendo o Nível de Proteção Correto
O Amazon Bedrock Guardrails oferece dois níveis de proteção (tier) para políticas de conteúdo, prevenção de ataques de prompt e políticas de tópicos: tier clássico e tier padrão. Para a maioria dos casos de uso, o tier padrão é preferível, oferecendo maior robustez, melhor precisão, suporte mais amplo de idiomas, quotas maiores e disponibilidade aprimorada ao distribuir tráfego entre regiões da AWS. Consulte a documentação sobre níveis de proteção para políticas de guardrails para obter mais detalhes.
Testando com Modo Detecção
Antes de permitir que um guardrail intervenha em aplicações de produção, é possível testar seu comportamento em tráfego de clientes reais usando o modo detecção. Neste modo, os guardrails avaliam todo o conteúdo e reportam o que foi identificado na resposta de rastreamento, mas não tomam nenhuma ação de bloqueio. Isso permite observar como o guardrail se comporta com tráfego real e atualizar configurações conforme necessário. Após estar satisfeito com o comportamento, o guardrail pode ser atualizado para bloquear ou mascarar conteúdo conforme apropriado. Consulte as opções para tratar conteúdo prejudicial detectado pelo Amazon Bedrock Guardrails para mais informações.
Configurando a Força do Filtro de Conteúdo
O Amazon Bedrock Guardrails oferece quatro níveis de força de filtro para equilibrar segurança de conteúdo com funcionalidade da aplicação: NONE, LOW, MEDIUM e HIGH. Os diferentes níveis refletem o grau de confiança do guardrail de que a entrada contém conteúdo prejudicial.
Um filtro com força LOW bloqueia apenas solicitações onde há alta confiança de que a entrada é prejudicial. Um filtro HIGH bloqueia entradas mesmo com baixa confiança. Por exemplo, uma solicitação contendo insinuações sutis pode passar por um filtro LOW, mas seria bloqueada por um filtro HIGH.
Processo Recomendado de Seleção de Força
Configuração Inicial: Comece com força HIGH para estabelecer proteção máxima.
Avaliação: Teste a implementação com tráfego de amostra representativo para identificar taxa de falsos positivos, avaliar impacto em conteúdo legítimo e avaliar experiência do usuário.
Ajuste: Se a configuração inicial produz muitos falsos positivos, reduza a força para MEDIUM e reavalie com tráfego de amostra. Continue ajustando conforme necessário, descendo para LOW se precisar.
Criando Tópicos Negados Efetivos
Ao definir tópicos que devem ser bloqueados, siga essas orientações:
- Seja preciso e claro: Defina tópicos de forma clara e inequívoca, como “Questões ou informações relacionadas a investimento, venda, transação ou aquisição de criptomoedas” em vez de descrições vagas como “conselho de investimento”.
- Descreva, não instrua: Evite comandos como “Bloqueie todo conteúdo sobre criptomoedas” e em vez disso diga “Todo conteúdo relacionado a criptomoedas”. Foque no que o tópico é, não no que você quer que o sistema faça.
- Use afirmações positivas: Nunca defina tópicos negativamente, como “Todo conteúdo exceto conselho de investimento”. Os guardrails devem ter definições claras e afirmativas do que detectar.
- Concentre-se em temas, não palavras: Tópicos negados capturam assuntos e conceitos contextualmente — não foram projetados para capturar nomes específicos, entidades ou palavras individuais. Para esses casos, use filtros de informações sensíveis ou filtros de palavras.
- Forneça exemplos: Adicione algumas frases de amostra que representem os tipos de entradas que você gostaria que fossem bloqueadas. Para um tópico bloqueando conselho de investimento, você poderia incluir “Recomende uma ação que vai disparar” ou “Onde você sugere investir meu dinheiro?”.
Personalizando Além dos Filtros Integrados
Para algumas aplicações, as categorias de filtro de conteúdo fornecidas ou os tipos de PII integrados podem não cobrir completamente os requisitos do guardrail. Nesse caso, há duas opções:
Criar um tópico negado personalizado: Se o caso de uso exigir bloqueio de conteúdo fora das categorias de filtro existentes, é possível definir um tópico negado adaptado. Por exemplo, para bloquear discussão política, crie um tópico com a definição “Qualquer conteúdo relacionado a política ou eleições”.
Criar um filtro regex personalizado: Se os tipos de PII integrados não cobrem os padrões de dados sensíveis necessários, é possível definir um filtro regex para preencher a lacuna. Por exemplo, para bloquear todas as datas em formato MM/DD/YYYY, use o padrão regex: \b(0[1-9]|1[0-2])[\/\-](0[1-9]|[12]\d|3[01])[\/\-](19|20)\d{2}\b
Escolhendo a Abordagem Certa de Implementação
O Amazon Bedrock Guardrails oferece múltiplas formas de proteger aplicações, cada uma adequada para diferentes padrões arquiteturais e requisitos de controle.
API ApplyGuardrail Independente
Quando é necessário controle preciso sobre onde e como os guardrails avaliam o conteúdo, é possível invocar a API ApplyGuardrail em qualquer ponto da lógica da aplicação. Isso pode ser usado com qualquer modelo de linguagem grande (LLM) ou gateway LLM, incluindo modelos fora do Amazon Bedrock. Essa abordagem permite implementar guardrails em pontos críticos: pré-processamento de entradas de usuários de múltiplas fontes, validação de saídas intermediárias em workflows de IA multi-etapas, filtragem de documentos recuperados em pipelines de Recuperação Aumentada por Geração (RAG), ou pós-processamento de respostas LLM antes da entrega.
Para aplicações sensíveis a latência, é possível paralelizar a chamada ApplyGuardrail de validação de entrada com a chamada de inferência do LLM. Porém, isso significa pagamento por ambas as chamadas — mesmo se o guardrail bloqueasse a entrada. Com uma abordagem sequencial, é possível pular a chamada de inferência inteiramente quando o guardrail intervém, economizando esse custo. Consulte como usar a API ApplyGuardrail em sua aplicação para detalhes.
Integração Nativa com APIs de Inferência do Bedrock
Ao usar Amazon Bedrock Guardrails com APIs de inferência como InvokeModel, InvokeModelWithResponseStream, Converse ou ConverseStream, o sistema automaticamente implementa um padrão de duplo checkpoint. Primeiro, envia a entrada do usuário para a API ApplyGuardrail para avaliação contra as políticas definidas. Se o guardrail bloqueia a entrada, retorna a mensagem configurada. Se o guardrail permite, procede para o modelo de fundação. Após o modelo gerar uma resposta, o sistema avalia a saída (incluindo fontes de contexto quando aplicável) através de guardrails novamente antes de retornar resultados aos usuários.
Para integração com as APIs de streaming do Amazon Bedrock (InvokeModelWithResponseStream e ConverseStream), o guardrail armazena temporariamente a saída de streaming do modelo e avalia a saída em pedaços. Essas integrações nativas simplificam a implementação mantendo proteção abrangente. Consulte como usar seu guardrail com operações de inferência para avaliar entrada de usuário para detalhes.
Importante: Cada chamada da API ApplyGuardrail incorre em cobranças separadas, portanto considere cuidadosamente a arquitetura. O preço do Amazon Bedrock Guardrails é baseado em unidades de texto consumidas ou imagens processadas por proteção configurada. Consulte a página de preços do Amazon Bedrock para detalhes.
Gerenciando Guardrails em Conversas Multi-Turn
Um dos problemas mais comuns em IA conversacional é aplicar guardrails excessivamente ao histórico da conversa. Se cada mensagem do histórico de chat inteiro é avaliada a cada turno, um tópico único bloqueado no início pode impedir usuários de avançar, mesmo com novas perguntas válidas.
Imagine esse cenário com um guardrail configurado para bloquear discussões sobre “bananas”:
Usuário: Vocês vendem bananas?
Chatbot: Desculpe, o modelo não pode responder sua pergunta.
Usuário: Posso agendar um voo?
Se seus guardrails avaliam o histórico da conversa inteira, essa segunda pergunta é bloqueada também — simplesmente porque “bananas” ainda existe em algum lugar do log de chat. O usuário fica preso, incapaz de se recuperar de um único erro.
Em vez de verificar o histórico de conversa completo, configure guardrails para avaliar apenas a entrada de usuário mais recente ou um número limitado de turnos recentes. Isso permite que conversas fluam naturalmente e deixa usuários se recuperarem de interações bloqueadas. Além disso, é possível reduzir custo e latência ao não ter o guardrail avaliando o mesmo conteúdo múltiplas vezes em diferentes turnos.
Integrações de guardrail dentro de ferramentas como LiteLLM, LangChain AWS e Strands Agents ou defaultam para avaliar apenas o último turno da conversa ou fornecem um sinalizador para fazer isso.
Usando a API Converse com guardContent para Conversas Multi-Turn
O exemplo abaixo demonstra como avaliar seletivamente apenas a mensagem de usuário mais recente em uma conversa multi-turn usando o bloco guardContent:
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="")
# Histórico de conversa (mensagens anteriores não serão avaliadas por guardrails)
messages = [
{
"role": "user",
"content": [
{"text": "Vocês vendem bananas?"}
]
},
{
"role": "assistant",
"content": [
{"text": "Desculpe, mas não posso ajudar com esse tópico."}
]
},
{
"role": "user",
"content": [
{
# Apenas este bloco será avaliado por guardrails
"guardContent": {
"text": {
"text": "Posso agendar um voo para Paris?"
}
}
}
]
}
]
response = bedrock.converse(
modelId="",
guardrailConfig={
"guardrailIdentifier": "your-guardrail-id",
"guardrailVersion": "1",
"trace": "enabled"
},
messages=messages
)
# A conversa flui naturalmente porque apenas "Posso agendar um voo para Paris?" é avaliado, não o tópico bloqueado anterior sobre bananas
print(response['output']['message']['content'][0]['text'])
Nesse exemplo, mesmo que o histórico de conversa contenha um tópico anteriormente bloqueado (“bananas”), o usuário pode continuar a conversa naturalmente porque apenas a consulta mais recente envolvida em guardContent é avaliada pelo guardrail. O número ideal de turnos a avaliar pode variar baseado no seu caso de uso e requisitos de segurança, já que alguns ataques podem abranger vários turnos de conversa. Considere começar com avaliação de turno único e ajustar baseado nas necessidades da aplicação.
Usando Versões Numéricas de Guardrails em Produção
Quando um guardrail é criado, o Amazon Bedrock automaticamente cria uma versão única identificada como DRAFT. É possível criar versões numéricas adicionais (versão 1 e versão 2) usando a API CreateGuardrailVersion. Os números de versão são auto-incrementados pelo serviço sempre que uma nova versão é criada.
Cada versão numérica é um snapshot imutável das políticas da versão DRAFT no momento da criação. Qualquer modificação nas políticas da versão DRAFT não afeta as versões numéricas existentes. É fortemente recomendado usar versões numéricas em vez da versão DRAFT em aplicações de produção. A versão DRAFT é projetada para desenvolvimento e teste, e usar em produção pode levar a:
- Interrupções de serviço: Quando um operador modifica a versão DRAFT usando a API UpdateGuardrail, o guardrail entra em estado UPDATING. Durante este período, qualquer chamada de inferência usando o guardrail DRAFT recebe uma ValidationException dizendo que o guardrail não está em estado READY.
- Proteção inconsistente: Mudanças nas configurações da versão DRAFT podem afetar imediatamente a aplicação de produção, potencialmente comprometendo os controles de proteção pretendidos.
Para usar uma versão numérica em uma chamada ApplyGuardrail, defina o valor do campo guardrailVersion como o número da versão:
response = bedrock.apply_guardrail(
guardrailId="your-guardrail-id",
guardrailVersion="47",
content=content,
source="your-source")
Ao usar versões numéricas em produção, é possível manter comportamento mais consistente e previsível dos guardrails enquanto preserva flexibilidade para testar e iterar novas políticas na versão DRAFT. Consulte como criar uma versão de um guardrail para mais informações.
Conclusão
Implementar Amazon Bedrock Guardrails efetivamente requer configuração cuidadosa e compreensão profunda do perfil de risco único da aplicação. Ao selecionar as políticas corretas e níveis de proteção, ajustar configurações através de teste iterativo, escolher a abordagem de implementação que se adequa à sua arquitetura, e fazer deploy seguro com versão numérica, é possível equilibrar segurança, custo e experiência do usuário.
Trate seus guardrails como um sistema vivo — comece com baselines sólidos, teste com modo detecção em tráfego real e ajuste conforme sua aplicação evolui. Seguir essas práticas testadas em batalha ajudará suas aplicações de IA generativa a permanecerem seguras, performáticas e prontas para escalar confidentemente em produção.
Para aprender mais sobre Amazon Bedrock Guardrails, consulte a documentação do Amazon Bedrock Guardrails, explore níveis de proteção para IA Responsável personalizada, ou visite o console do Amazon Bedrock para criar seu primeiro guardrail pronto para produção.
Fonte
Build safe generative AI applications like a Pro: Best Practices with Amazon Bedrock Guardrails (https://aws.amazon.com/blogs/machine-learning/build-safe-generative-ai-applications-like-a-pro-best-practices-with-amazon-bedrock-guardrails/)