Claude alucinante enviou denúncia falsa (seu agente também?)
Claude (Anthropic) enviou denúncia falsa em caso de homicídio. Alucinação real. Seu agente de vendas/suporte pode alucinar também. Mitigação.
Equipe OpenClaw · Time de Engenharia & Produto
A Equipe OpenClaw é formada por engenheiros, designers e especialistas em IA dedicados a construir a melhor plataforma de agentes conversacionais para negócios brasileiros. Combinamos expertise…
Claude alucinante enviou denúncia falsa (seu agente também?)
Notícia: Claude (modelo de Anthropic) foi usado por investigadores e enviou uma denúncia falsa em um caso de homicídio não solucionado na Filadélfia. O agente "pensou" que tinha informações sobre um suspeito, mas inventou tudo. Resultado: Polícia investigou uma pista completamente falsa.
Implicação: Se Claude (um dos melhores LLMs do mercado) alucina e inventa fatos, seu agente de vendas/suporte/atendimento TAMBÉM pode alucinar e prejudicar seu negócio.
**"Você é founder de SaaS de suporte com agente WhatsApp.
Cenário: Cliente pergunta algo fora do escopo ├─ Cliente: "Qual é o CNPJ de vocês?" ├─ Agente: "Nosso CNPJ é 12.345.678/0001-90" (alucinado) ├─ Cliente: Acredita e coloca no banco de dados ├─ Cliente: Tenta transferência com CNPJ falso ├─ Transação falha ├─ Cliente: "Seu agente me deu CNPJ errado! Vocês são fraudadores?" ├─ Resultado: Processo, multa, perda de confiança └─ Dano: Reputação destruída + liability legal
Realidade: Agentes alucinam CONSTANTEMENTE ├─ Claude: Melhor LLM, ainda alucina ├─ GPT-4: Também alucina ├─ Your agente custom: Provavelmente alucina mais └─ Solução: Guardrails + validation + disclosure "**
O que é alucinação em agentes (e por que acontece)
Definição técnica
Alucinação em LLM: ├─ Agente inventa informação que não foi treinado ├─ Agente pensa que "sabe" mas na verdade chuta ├─ Agente responde com confiança sobre coisa falsa ├─ Usuário acredita (parece plausível) └─ Resultado: Dano à confiança / business
Exemplos de alucinação: ├─ "Seu CNPJ é [número falso]" ├─ "O preço do plano Pro é R$ 999/mês" (é R$ 299) ├─ "Temos integração com Salesforce" (não temos) ├─ "Seu pedido foi enviado" (não foi, ainda tá pending) ├─ "Você é cliente desde 2020" (cliente é de 2024) └─ "Seu débito é de R$ 5.000" (real é R$ 500)
Por que agentes alucinam? ├─ Treinamento: Modelo aprendeu padrões, não fatos exatos ├─ Probabilidade: Agente escolhe token mais provável (nem sempre correto) ├─ Confiança: LLM sempre escolhe "algo plausível" vs "não sei" ├─ Contexto: Agente não tem acesso a base de dados real ├─ Generalização: Agente generaliza ("se X é Y, então Z também é Y") └─ Resultado: Alucinação é FEATURE, não bug (trade-off de design)
Estatísticas: Alucinação é COMUM
Pesquisa de alucinação em LLMs (2024-2026):
Claude 3 Opus (melhor): ├─ Alucinação: 5-10% (muito baixo, mas não zero) ├─ Contexto: Com acesso a docs = 2-5% ├─ Sem contexto = 15-20% └─ Implicação: Mesmo melhor LLM alucina
GPT-4 Turbo: ├─ Alucinação: 8-12% ├─ Com retrieval: 3-7% ├─ Sem retrieval: 20-25% └─ Implicação: Depende muito de contexto
Seu agente custom (sem guardrails): ├─ Alucinação: 15-30% ├─ Razão: Sem validação, sem acesso a dados real ├─ Impacto: Muito alto (clientes sofrem) └─ Implicação: PRECISA de mitigação
Regra de ouro: └─ "LLM sem guardrails = 20-30% alucinação" └─ "LLM com guardrails = 1-5% alucinação" └─ Diferença: Guardrails reduzem alucinação 6-10x
Caso real: Anthropic + Polícia (Filadélfia)
O que aconteceu:
-
Investigadores usaram Claude pra analisar caso de homicídio └─ Pergunta: "Quem pode ser suspeito?" └─ Contexto: Caso frio de 20 anos, poucos dados
-
Claude "respondeu" com nome + descrição └─ Nome: [inventor pela IA] └─ Descrição: [também inventado] └─ Confiança: Muito alta (parecia plausível)
-
Polícia investigou └─ Buscou pessoa: Não existe └─ Investigação: Wasted time + resources └─ Resultado: Pista falsa
-
Descoberta: └─ Anthropic admitiu: "Claude alucinava" └─ Não era malicioso, era incapacidade └─ Problema: LLM não deveria fazer isso em contexto crítico └─ Lição: Guardrails são OBRIGATÓRIOS em produção
Impacto: ├─ Reputação Anthropic: Manchada ("AI alucina") ├─ Confiança em LLMs: Reduzida ("LLM não é confiável") ├─ Regulação: Vai apertar ("IA precisa de oversight") ├─ Seu business: RISCO (se agente alucina, você sofre) └─ Moral: Alucinação é real, não teórico
Por que seu agente pode alucinar (e prejudicar você)
Cenários críticos (onde alucinação é desastre)
❌ CRÍTICO - Alucinação destrói negócio:
-
Informações financeiras ├─ Agente: "Seu saldo é R$ 50.000" ├─ Realidade: R$ 5.000 (10x diferença!) ├─ Cliente: Faz decisão baseada em info falsa ├─ Resultado: Prejuízo financeiro └─ Liability: Você é responsável
-
Dados do cliente ├─ Agente: "Seu email é [email falso]" ├─ Realidade: Email é [outro] ├─ Resultado: Cliente não recebe notificação importante ├─ Compliance: LGPD violation (informação errada) └─ Multa: R$ 50K+
-
Termos de contrato ├─ Agente: "Você tem 30 dias de trial" ├─ Realidade: 7 dias ├─ Cliente: Espera 30 dias, perde acesso ├─ Resultado: Chargeback, cliente furioso └─ Liability: Agente mentiu
-
Recomendação de produto ├─ Agente: "Plano Pro é melhor pra você" ├─ Realidade: Plano Basic é suficiente (mais barato) ├─ Resultado: Cliente paga 5x mais desnecessariamente ├─ Reclamação: "Seu agente me enganou" └─ Liability: Deceptive practice (ilegal em alguns países)
-
Status de pedido ├─ Agente: "Seu pedido foi enviado ontem" ├─ Realidade: Ainda tá em warehouse ├─ Cliente: Espera package, nunca chega ├─ Escalação: Customer service manual (caro) └─ Liability: False information = lawsuit risk
⚠️ PADRÃO: Alucinação em área crítica = DISASTER
Tipos de alucinação (por severidade)
🔴 CRÍTICA (destroy business): ├─ Dados financeiros (saldo, preço, taxa) ├─ Informações pessoais (email, telefone, endereço) ├─ Status de pedido / contrato ├─ Termos legais / compliance └─ Acesso / permissões
🟠 ALTA (damage reputation): ├─ Recomendação de produto (cliente escolhe errado) ├─ Disponibilidade de feature (cliente pensa que existe) ├─ Horário de atendimento (cliente chega fora do horário) └─ Integração existente (cliente pensa que temos)
🟡 MÉDIA (bad UX): ├─ Explicação técnica errada (confunde cliente) ├─ Feature request (agente promete algo que não temos) ├─ Compatibilidade ("funciona com Windows 95") └─ Documentação (link errado)
🟢 BAIXA (acceptable): ├─ Contextual chat (conversa casual) ├─ Exemplo de código (inspiração, não production) ├─ Explicação teórica (não é fato crítico) └─ Motivacional ("Você vai conseguir!")
Regra: └─ Se é CRÍTICA ou ALTA = PRECISA GUARDRAIL └─ Se é MÉDIA = Considere guardrail └─ Se é BAIXA = Pode deixar sem (mas mencione "AI generated")
Mitigação: Como reduzir alucinação em produção
Estratégia 1: Retrieval-Augmented Generation (RAG)
Ideia: Agente não inventa, consulta base de dados real
Fluxo tradicional (com alucinação): ├─ Cliente: "Qual é nosso CNPJ?" ├─ Agente: [LLM processa] "É 12.345.678/0001-90" (INVENTADO) ├─ Resultado: Alucinação └─ Confiança: Destruída
Fluxo com RAG (sem alucinação): ├─ Cliente: "Qual é nosso CNPJ?" ├─ Agente Step 1: Busca em database → "12.345.678/0001-90" (REAL) ├─ Agente Step 2: LLM formata resposta → "Nosso CNPJ é 12.345.678/0001-90" ├─ Resultado: Informação correta └─ Confiança: Mantida
Código (Python):
from langchain.chains import RetrievalQA from langchain.vectorstores import Chroma
Setup: Base de dados vetorizada
db = Chroma.from_documents(docs, embeddings) # Seus documentos retriever = db.as_retriever()
RAG chain
qa_chain = RetrievalQA.from_chain_type( llm=claude, chain_type="stuff", # Retriever first retriever=retriever )
Uso
response = qa_chain.run("Qual é nosso CNPJ?") print(response) # "Nosso CNPJ é [REAL, não inventado]"
Benefício: ├─ Alucinação: -80% (só alucinações no formatting) ├─ Confiança: Alto (dados são reais) ├─ Liability: Reduzido (informação verificada) └─ Trade-off: Setup inicial (precisa vetorizar dados)
Estratégia 2: Validation Layer (verificação pós-geração)
Ideia: Agente gera resposta, mas validamos antes de enviar
Fluxo: ├─ Step 1: Agente gera resposta ├─ Step 2: Validar contra regras ├─ Step 3: Se inválido, recusa ou refaz ├─ Step 4: Envia só se validado └─ Resultado: Zero alucinação crítica
Código (Python):
def validate_response(response: str, category: str) -> bool: """ Valida resposta antes de enviar ao cliente """
validators = {
"financial": [
lambda x: is_valid_number(x), # É número?
lambda x: is_in_range(x, min=0, max=1_000_000), # Tá no range?
],
"email": [
lambda x: is_valid_email(x), # Email válido?
lambda x: x in database, # Existe na base?
],
"cnpj": [
lambda x: is_valid_cnpj(x), # CNPJ válido?
lambda x: x in company_data, # Existe nos dados?
]
}
for validator in validators[category]:
if not validator(response):
return False # Falhou validação
return True # Passou
Uso em agente
agent_response = claude(prompt)
if validate_response(agent_response, "cnpj"): send_to_customer(agent_response) # Seguro else: send_fallback("Desculpa, não consegui verifi car essa info. Aguarde um humano.") alert_support(agent_response) # Humano revisa
Benefício: ├─ Alucinação: Bloqueada antes de prejudicar ├─ Liability: Reduzido (verificação prova due diligence) ├─ UX: Degradado (fallback é básico) └─ Trade-off: Mais lógica, menos automação
Estratégia 3: Confident Answering (agente sabe quando não sabe)
Ideia: Agente prefere "não sei" a inventar
Prompt tradicional: "Responda a pergunta do cliente de forma útil e detalhada." └─ Resultado: Agente inventa pra ser útil
Prompt mitigador: """ Responda apenas com informações que você TEM CERTEZA. Se não sabe, DIGA "Não tenho essa informação". Nunca invente dados (dados financeiros, email, telefone). É melhor dizer "não sei" que dar informação errada. """ └─ Resultado: Agente é honesto
Código (Python):
SYSTEM_PROMPT = """ Você é um agente de suporte. REGRAS:
- Responda APENAS com informações que você tem certeza
- Se não sabe, diga: "Não tenho essa informação. Um humano vai ajudar."
- NUNCA invente: CNPJ, email, telefone, saldo, data
- NUNCA prometa feature que a empresa não tem
- Se tiver dúvida, pergunte ao cliente ao invés de adivinhar
- Sempre mencione: "Verificue com um humano pra ter certeza"
Exemplos de ERRADO (inventar): ❌ "Seu saldo é R$ 50.000" (sem verificar) ❌ "Temos integração com Salesforce" (sem ter certeza) ❌ "Seu email é [qualquer coisa]" (sem perguntar)
Exemplos de CERTO (honesto): ✅ "Não tenho acesso ao seu saldo. Um humano vai verificar." ✅ "Não tenho certeza se temos integração. Vou conferir." ✅ "Qual é seu email? Vou verificar na base de dados." """
response = claude( prompt=user_message, system=SYSTEM_PROMPT )
Benefício: ├─ Alucinação: Muito reduzida (agente é honesto) ├─ Confiança: Aumenta (agente não promete fake) ├─ Escalação: Mais casos vão pra humano └─ Trade-off: Menos automação, mais humano (caro)
Estratégia 4: Structured Output (respostas validadas por schema)
Ideia: Agente só pode responder em formato específico (JSON schema)
Fluxo: ├─ Agente: Precisa responder em JSON ├─ JSON schema: Define campos válidos ├─ LLM: Não consegue inventar fora do schema ├─ Validação: Automática (se não tá no schema, falha) └─ Resultado: Zero resposta inesperada
Código (Python com Pydantic):
from pydantic import BaseModel, validator from typing import Literal
class SupportResponse(BaseModel): """ Schema: Agente DEVE responder assim """
answer: str # Resposta
confidence: Literal["high", "medium", "low"] # Só essas opções
requires_human: bool # Precisa de humano?
category: Literal["billing", "technical", "general"] # Categorias
@validator("confidence")
def validate_confidence(cls, v):
if v not in ["high", "medium", "low"]:
raise ValueError("Confidence deve ser high/medium/low")
return v
LLM responde em JSON (validado)
response_json = claude( prompt=user_message, output_schema=SupportResponse )
Resultado: Sempre válido
if response_json.confidence == "low" or response_json.requires_human: escalate_to_human() # Humano toma conta else: send_to_customer(response_json.answer)
Benefício: ├─ Alucinação: Estruturalmente impossível fora do schema ├─ Confiança: Alta (formato garantido) ├─ Escalação: Automática (campos obrigatórios) └─ Trade-off: Setup inicial, UX estruturado
Real-world: Implementar guardrails (passo a passo)
Checklist de implementação
☑️ TIER 1 (Deve fazer): ├─ RAG pra dados críticos (CNPJ, email, saldo) ├─ Validation layer (regras de negócio) ├─ Fallback pra humano (se alucinação detectada) └─ Monitoring (track alucinação rate)
☑️ TIER 2 (Deveria fazer): ├─ Structured output (JSON schema) ├─ Confident answering (agente diz "não sei") ├─ A/B test (com vs sem guardrails) └─ Logs detalhados (audit trail)
☑️ TIER 3 (Nice to have): ├─ Fine-tuning (custom model pra seu domain) ├─ Fact-checking (agente verifica itself) ├─ Explainability (agente explica reasoning) └─ Continuous improvement (feedback loop)
Implementação mínima (48 horas)
python import anthropic from datetime import datetime
class SafeAgent: def init(self): self.client = anthropic.Anthropic() self.critical_fields = ["cnpj", "email", "saldo", "contrato"] self.logs = []
def process_query(self, user_message: str, category: str) -> str:
"""
Agente seguro: Guardrails básicos
"""
# Step 1: Gera resposta
response = self.client.messages.create(
model="claude-3-5-sonnet",
max_tokens=500,
system="Você é um agente de suporte. Seja honesto. Se não sabe, diga.",
messages=[{"role": "user", "content": user_message}]
)
answer = response.content[0].text
# Step 2: Valida categoria crítica
if category in self.critical_fields:
if not self.is_safe(answer, category):
# Alucinação detectada
self.log_hallucination(user_message, answer, category)
return "Não tenho certeza dessa info. Um humano vai ajudar."
# Step 3: Loga tudo
self.log_response(user_message, answer, category)
# Step 4: Retorna
return answer
def is_safe(self, answer: str, category: str) -> bool:
"""
Validação rápida
"""
if category == "cnpj":
return self.is_valid_cnpj(answer)
elif category == "email":
return self.is_valid_email(answer)
elif category == "saldo":
return self.is_valid_amount(answer)
return True
def is_valid_cnpj(self, text: str) -> bool:
import re
# CNPJ format: 12.345.678/0001-90
return bool(re.search(r'\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}', text))
def is_valid_email(self, text: str) -> bool:
import re
return bool(re.search(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', text))
def is_valid_amount(self, text: str) -> bool:
try:
# Extracta número da resposta
import re
match = re.search(r'R\$\s*([\d.,]+)', text)
if match:
amount = float(match.group(1).replace('.', '').replace(',', '.'))
return 0 <= amount <= 100_000_000 # Range razoável
return False
except:
return False
def log_hallucination(self, query: str, answer: str, category: str):
self.logs.append({
"timestamp": datetime.now().isoformat(),
"type": "hallucination",
"query": query,
"answer": answer,
"category": category,
"action": "blocked"
})
def log_response(self, query: str, answer: str, category: str):
self.logs.append({
"timestamp": datetime.now().isoformat(),
"type": "normal",
"query": query,
"answer": answer,
"category": category
})
def get_metrics(self) -> dict:
total = len(self.logs)
hallucinations = len([l for l in self.logs if l["type"] == "hallucination"])
return {
"total_queries": total,
"hallucinations_detected": hallucinations,
"hallucination_rate": hallucinations / total if total > 0 else 0
}
Uso
agent = SafeAgent()
Pergunta crítica
response = agent.process_query( "Qual é nosso CNPJ?", category="cnpj" ) print(response)
Métricas
metrics = agent.get_metrics() print(f"Hallucination rate: {metrics['hallucination_rate']*100:.1f}%")
Conclusão: Alucinação é liability real
O caso Anthropic provou:
Antes: "Alucinação é teórica, só em edge cases." Depois: "Alucinação é real, foi enviada pro FBI."
Realidade: ├─ LLMs (mesmo melhores) alucinam ├─ Alucinação causa dano real (legal, financeiro, reputacional) ├─ Seu agente TAMBÉM pode alucinar ├─ Sem guardrails = Russian roulette └─ Com guardrails = Seguro
Impacto pra seu business:
Sem mitigação (risco): ├─ Cliente: Recebe informação falsa ├─ Seu agente: Alucinante ├─ Você: Responsável legalmente ├─ Resultado: Lawsuit, multa, reputação └─ Custo: Pode ser > R$ 100K
Com mitigação (seguro): ├─ Cliente: Recebe info verificada OU escalação humana ├─ Seu agente: Confiável ├─ Você: Due diligence documentada ├─ Resultado: Confiança, segurança └─ Custo: Dev effort (mas vale a pena)
Bottom line:
Deixar agente sem guardrails = Colocar bomba no seu negócio Implementar guardrails = Desativar a bomba
Priority:
- Implemente RAG (dados críticos)
- Implemente validation (regras)
- Implemente fallback (humano cuida)
- Monitor & improve (alucinação rate)
Custo vs benefit: ├─ Custo: R$ 10-50K (implementação) ├─ Benefit: Evita lawsuit de R$ 500K+ ├─ ROI: 10-50x └─ Moral: Vale MUITO a pena
→ OpenClaw: Agentes com guardrails contra alucinação (pronto pra produção)
Seu agente alucina? Hora de mitigar. ⚠️
Publicado em 10 de outubro de 2026