Confiança em IA é engenharia, não fala: o que dev faz no código

Confiança em IA é engenharia, não fala: o que dev faz no código

Dario Amodei, CEO da Anthropic, rebateu o investidor Gavin Baker e disse que a rejeição popular à expansão da IA não vem dos avisos dos executivos — vem de uma crise de confiança acumulada há décadas entre população, governo e big techs. Na minha leitura, ele está certo no diagnóstico, mas convenientemente omite o quanto o próprio setor contribuiu para esse buraco. Vou destrinchar isso abaixo, com olhar de quem programa com IA todo dia e entende os bastidores técnicos que a matéria do Olhardigital.com.br não explorou.

Por que essa discussão importa para quem desenvolve com IA

Quando o CEO de uma das empresas mais influentes do setor (a criadora do Claude) entra num debate público sobre confiança, a temperatura muda para quem trabalha com IA em produção. Não é só filosofia corporativa — afeta regulamentação, disponibilidade de GPU, custo de inferência e até o tipo de dado que conseguimos treinar modelos.

Na minha experiência, vejo três efeitos práticos imediatos:

  • Pressão regulatória aumenta, e código que era simples vira conformidade complexa (logs, auditoria, explicabilidade).
  • Custo de API sobe quando há resistência local à construção de data centers — menos chip, mais caro.
  • Reputação do produto sofre: usuário final lê matéria sobre “risco existencial” e desconfia do seu chatbot de suporte.

A fala do Amodei toca no ponto nevrálgico: confiança não é um problema de comunicação, é um problema de arquitetura. E isso, como dev, eu posso resolver (pelo menos na parte que me cabe).

O que o Amodei realmente disse — e o que ficou de fora

Segundo a matéria do Olhardigital, Amodei argumenta três coisas: que mantém discurso equilibrado, que existe um ensaio seu (“Machines of Loving Grace”) mostrando visão positiva, e que a culpa da rejeição popular é histórica — não atual.

O que a fonte não disse: o ensaio “Machines of Loving Grace” foi publicado em outubro de 2024 e virou meme no Twitter/X porque soava utópico demais frente aos problemas reais (viés, alucinação, custo energético). Na prática, devs que testaram Claude 3.5 Sonnet na época sabem: o modelo era bom em código, mas inconsistente em tarefas longas e com prompts em português. A percepção negativa tem base técnica, não só cultural.

E aqui entra a parte que me incomoda como engenheiro: o setor trata “confiança” como se fosse variável de marketing. Não é. É variável de engenharia.

Confiança como problema de engenharia, não de comunicação

Quando o CEO fala em “crise de confiança”, o dev precisa traduzir isso em requisitos técnicos. Eu trabalho assim em todo projeto de IA que entra em produção:

  1. Observabilidade: você precisa saber o que o modelo está fazendo.
  2. Determinismo parcial: mesma entrada, saída parecida (não idêntica, mas dentro de margem).
  3. Trilha de auditoria: prompt, versão do modelo, temperatura, tokens consumidos.
  4. Fallback explícito: quando o modelo falha, o sistema degrada com graça — não quebra silenciosamente.
  5. Explicabilidade sob demanda: o usuário (ou o auditor) consegue perguntar “por que você respondeu isso?”.

Se você não tem isso, você não tem produto confiável — tem demo bonito.

Comparação rápida entre provedores de IA

Critério Anthropic (Claude) OpenAI (GPT) Google (Gemini)
Logs de inferência nativos Sim (via API + console) Sim (logs são ativados por padrão) Parcial (Vertex AI sim, app do Gemini nem sempre)
Explicabilidade de raciocínio Boa (chain-of-thought exposto em alguns tiers) Fraca (modelo o3 mostra raciocínio, mas com variações) Média
Ferramentas de red-teaming Constitutional AI documentada Tooling interno robusto, pouco exposto Moderate
Compliance LGPD/HIPAA Sim, com BAA disponível Sim, enterprise Sim, enterprise

Se você está decidindo qual stack usar em produção, isso importa mais do que benchmark de MMLU.

Na Prática: construindo um wrapper de IA com observabilidade real

Vou mostrar um exemplo mínimo, mas real, de como eu implemento uma camada de confiança entre o usuário e a API de LLM. Uso Python porque é o que a maioria dos devs vai plugar no backend, mas o padrão vale para Node/Go/Rust.

import hashlib
import json
import time
import uuid
from dataclasses import dataclass, asdict
from typing import Optional
import logging

# Logger estruturado — nada de print solto em produção
logger = logging.getLogger("ai.trust")

@dataclass
class InferenceRecord:
    request_id: str
    user_id_hash: str  # nunca o user_id puro — LGPD
    model: str
    temperature: float
    prompt_hash: str   # hash do prompt, não o prompt inteiro
    response_hash: str
    tokens_in: int
    tokens_out: int
    latency_ms: int
    timestamp: float
    fallback_used: bool
    confidence_score: Optional[float] = None

def hash_prompt(prompt: str) -> str:
    """Hash SHA-256 para identificar prompts sem expor conteúdo sensível."""
    return hashlib.sha256(prompt.encode("utf-8")).hexdigest()[:16]

def call_with_trust(
    user_id: str,
    prompt: str,
    model_callable,
    model_name: str,
    temperature: float = 0.7,
    max_retries: int = 2,
):
    """Wrapper que adiciona observabilidade, retry e fallback explícito."""
    start = time.time()
    user_hash = hash_prompt(user_id)
    prompt_h = hash_prompt(prompt)

    last_error = None
    for attempt in range(max_retries + 1):
        try:
            response = model_callable(prompt, temperature=temperature)
            latency = int((time.time() - start) * 1000)

            # Heurística simples de confiança — em produção use modelo calibrado
            confidence = min(1.0, len(response) / 500) if response else 0.0

            record = InferenceRecord(
                request_id=str(uuid.uuid4()),
                user_id_hash=user_hash,
                model=model_name,
                temperature=temperature,
                prompt_hash=prompt_h,
                response_hash=hash_prompt(response),
                tokens_in=len(prompt.split()),
                tokens_out=len(response.split()),
                latency_ms=latency,
                timestamp=time.time(),
                fallback_used=False,
                confidence_score=confidence,
            )

            logger.info("ai_inference", extra={"record": asdict(record)})
            return response

        except Exception as e:
            last_error = e
            logger.warning(f"Tentativa {attempt + 1} falhou: {e}")
            time.sleep(2 ** attempt)  # backoff exponencial

    # Fallback explícito — degrade com graça
    logger.error(f"Fallback acionado após {max_retries} retries: {last_error}")
    return "Desculpe, não consegui processar agora. Tente novamente em instantes."

# Exemplo de uso com a API da Anthropic
# from anthropic import Anthropic
# client = Anthropic()
# 
# def claude_call(prompt, temperature):
#     msg = client.messages.create(
#         model="claude-3-5-sonnet-latest",
#         max_tokens=1024,
#         temperature=temperature,
#         messages=[{"role": "user", "content": prompt}],
#     )
#     return msg.content[0].text
#
# resposta = call_with_trust(
#     user_id="user_123",
#     prompt="Explique refatoração de código",
#     model_callable=claude_call,
#     model_name="claude-3-5-sonnet"
# )

Esse padrão resolve quatro das cinco exigências de confiança que listei acima. A quinta (explicabilidade sob demanda) você consegue plugar depois com log de chain-of-thought ou um modelo menor que resume o raciocínio.

Cuidado com a armadilha clássica: nunca logar o prompt inteiro em produção. Se o usuário digitou dado pessoal ou senha, você acabou de vazar no seu log. Por isso uso hash_prompt — preserva rastreabilidade sem expor conteúdo.

Erros Comuns que devs cometem ao integrar IA (e que alimentam a crise de confiança)

Lista compilada a partir de revisão de código real em clientes e times que já treinei:

  1. Tratar o LLM como oráculo. Sem validação de saída, você entrega alucinação direto pro usuário final. Sempre passe a resposta por uma camada de sanity check (regex, JSON schema, ou modelo menor de verificação).
  2. Esconder a IA do usuário. UX que finge ser humano quando é chatbot erode confiança. Seja explícito: “Sou uma IA, posso errar”.
  3. Não versionar o modelo. Você muda de gpt-4-turbo pra gpt-4o e o comportamento muda silenciosamente. Trave a versão em produção e atualize com feature flag.
  4. Custo invisível. Loop infinito de retries com prompt grande explode a fatura. Coloque timeout duro e budget por usuário.
  5. Ignorar fallback humano. Quando a IA erra feio, precisa ter um humano (ou pelo menos um formulário de feedback) no loop. Produtos que ignoram isso viram caso de suporte público.
  6. Confundir benchmark com qualidade. MMLU alto ≠ bom pro seu caso de uso. Faça eval com seu próprio dataset.
  7. Não documentar limitações. Se o modelo não sabe X, documente. Transparência técnica é o antídoto mais barato contra crise de confiança.

O “porquê” por trás da crise de confiança segundo Amodei — e por que ele está meio certo

Amodei coloca a culpa na história: décadas de big tech prometendo e entregando privacidade violada, layoffs em massa, monopólio de dados. Faz sentido. Quando o Facebook vira Meta e continua coletando o mesmo tanto de dado com nome novo, a sociedade aprende a desconfiar.

Mas ele esquece convenientemente que o setor de IA, especificamente, alimenta isso com decisões técnicas ruins:

  • Treino em dados sem consentimento explícito.
  • Modelos que inventam fatos com confiança.
  • Energia consumida sem transparência (data centers que não publicam pegada de carbono).
  • Lock-in proprietário (se você usar Anthropic e eles mudarem a API, você reescreve código).

Como dev, eu vejo isso de dentro: a maioria dos produtos de IA que chegam em produção não tem nem log estruturado, quanto mais auditoria. Então quando um CEO fala em “confiança”, eu penso que o trabalho começa no código, não no PR.

FAQ — perguntas que devs realmente fazem

1. Como sei se o modelo que estou usando é o que a documentação diz?

Faça pinagem de versão na chamada da API (ex.: model="claude-3-5-sonnet-20241022" em vez de "claude-3-5-sonnet-latest"). Teste o output contra um golden set conhecido periodicamente.

2. Vale a pena rodar LLM local em vez de API para ganhar confiança do usuário?

Depende. Se seu cliente é enterprise com requisito de soberania de dados (saúde, jurídico, governo), sim — vale Llama 3.1 70B ou Mistral em servidor dedicado. Se é SaaS B2C, o custo de manter GPU e treinar equipe geralmente supera o ganho.

3. Como explicar pro meu chefe que “confiança em IA” não é só marketing?

Mostre o custo de um incidente. LGPD multa até 2% do faturamento (limitada a R$ 50 milhões por infração). Um vazamento via prompt logado mal feito custa caro. Confiança vira linha da planilha quando você coloca o número.

4. Anthropic, OpenAI ou Google — qual tem a melhor postura de segurança hoje?

Anthropic publica mais sobre alinhamento (Constitutional AI, RLHF detalhado). OpenAI tem tooling interno mais maduro, mas menos transparente. Google fica no meio. Para compliance pesado, Anthropic e Google tendem a ser mais fáceis de auditar.

5. Como monitoro alucinação do modelo em produção sem quebrar a latência?

Use uma amostra (5-10% das requisições) e rode um verificador menor (Haiku, GPT-4o-mini, ou um classificador treinado in-house) em paralelo. Se detectar alucinação, marca pra revisão humana. Não precisa rodar em 100% — estatística resolve.

Conclusão: confiança não se pede, se constrói — em código

A fala do Amodei reflete um setor que finalmente percebeu que reputação importa. Mas devs não podem esperar o PR consertar a percepção pública. A gente constrói a confiança linha por linha: com logs, versionamento, fallback e transparência técnica.

Próximo passo prático: pegue o snippet acima, adapte pro seu stack e adicione uma camada de observabilidade hoje. Não precisa ser o sistema perfeito — precisa ser melhor do que print(response).

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto — especialmente se quiser um post sobre eval de modelos em produção.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.