Pular para o conteúdo principal

Você não tem problema de prompt — tem problema de contexto ou de harness

· 10 min para ler
Bruno Carneiro
Fundador da @TautornTech
Prompt Engineering, Context Engineering e Harness Engineering

Você já ficou meia hora refinando um prompt, tentando deixar as instruções mais claras, mais detalhadas, com exemplos, com restrições — e o agente continuou errando da mesma forma?

Já passou por isso: o modelo alucina mesmo com o prompt perfeito. Ou pior: o agente age no mundo, faz uma coisa que não deveria, e você vai descobrir isso em produção. Não no chat de testes, não no sandbox. Em produção, com dado real.

Isso não é problema de prompt. E polir o texto do sistema prompt não vai resolver.

Esse artigo é sobre entender onde o problema de fato está — e por que confundir as três camadas de engenharia de IA custa tempo, dinheiro e, às vezes, incidentes.

As três disciplinas que viraram sinônimos (e não deveriam ser)

O mercado jogou tudo no mesmo saco: "prompt engineering". Você quer que o modelo responda melhor? Escreve um prompt melhor. Quer um agente mais confiável? Prompt melhor. Quer reduzir alucinação? Prompt melhor.

Funciona num nível básico. Mas quanto você começa a construir coisa real — um agente que lê arquivo, abre PR, manda email, consulta banco — essa visão começa a rachar. E as rachaduras aparecem justamente onde mais dói: em produção.

Andrej Karpathy foi um dos primeiros a colocar nome nisso de forma clara: o que a maioria chama de prompt engineering é na verdade Context Engineering — "a arte delicada e a ciência de preencher a janela de contexto com exatamente as informações certas". E existe ainda uma terceira camada que quase ninguém fala, que é o Harness — a infraestrutura que envolve o modelo e converte saída probabilística em software confiável.

São três disciplinas separadas. Cada uma resolve um conjunto diferente de falhas. Confundi-las leva a esforço no lugar errado.

Prompt Engineering: o que você pede e como pede

Prompt Engineering é a camada mais visível. É onde você define:

  • O papel do modelo ("você é um revisor de código sênior...")
  • As restrições ("nunca delete arquivos sem confirmar")
  • O formato da resposta (JSON, markdown, lista numerada)
  • Os exemplos de comportamento esperado (few-shot)
  • O raciocínio passo a passo (chain-of-thought)

É uma disciplina real, tem técnica, tem resultado. Quando o modelo produz saída inconsistente, fora de formato, com tom errado, ou faz coisas que você explicitamente disse pra não fazer — você tem um problema de prompt.

O erro mais comum aqui é ser vago. O modelo não vai "entender o que você quis dizer". Ele vai seguir o que você escreveu.

"Revise o código e melhore onde precisar"

✅ "Revise o código a seguir. Foque em:
1. Bugs e edge cases não tratados
2. Violações de segurança (OWASP Top 10)
3. Inconsistências com o padrão do restante do arquivo
Não refatore além do necessário. Responda em markdown com uma seção por problema encontrado."

Quando investir em prompt:

  • A resposta vem no formato errado
  • O modelo ignora restrições que você definiu
  • O tom ou nível de detalhe está incorreto
  • O comportamento é inconsistente entre chamadas similares

Quando parar de mexer no prompt: Quando o modelo responde certo para o que você perguntou, mas a informação que ele tem é errada ou incompleta. Aí o problema não é o prompt.

Context Engineering: o que o modelo consegue ver

Aqui é onde o jogo muda. E onde a maioria das falhas reais de agentes em produção mora.

Context Engineering é a disciplina de montar deliberadamente a janela de contexto — decidir o que entra, o que fica de fora, em que ordem, com qual granularidade. Não é um texto estático. É uma construção dinâmica por turno.

Um exemplo direto: você tem um agente de suporte que responde dúvidas técnicas. O prompt está impecável. Mas o agente alucina informações sobre a API do produto. Por quê?

Porque ninguém jogou a documentação atualizada na janela de contexto. O modelo está respondendo baseado no que aprendeu no treinamento — que pode estar desatualizado, incompleto, ou simplesmente errado pro seu produto específico.

Isso não se resolve com prompt. Se resolve com Context Engineering:

  • RAG (Retrieval-Augmented Generation): recupera os trechos relevantes da documentação e injeta antes da pergunta
  • Compressão de histórico: em conversas longas, resume as interações antigas em vez de mandar tudo sempre
  • Progressive disclosure: manda metadados primeiro (nomes de arquivo, headers) e só expande o conteúdo completo quando necessário
  • Higiene de saída de ferramentas: quando o agente chama uma API e ela retorna 50KB de JSON, você não manda tudo na janela — você filtra, trunca, extrai o que importa

O CEO da Shopify, Tobi Lütke, descreveu bem: context engineering é "a arte de fornecer todo o contexto para que a tarefa seja plausivelmente solucionável pelo LLM". Não basta dizer o que fazer — o modelo precisa ter os fatos necessários pra fazer certo.

Quando investir em context:

  • O modelo dá respostas genéricas quando deveria ser específico
  • Alucinações diminuem quando você cola a documentação manualmente no chat
  • Em conversas longas, a qualidade cai conforme o histórico cresce
  • O custo de tokens explode com o número de usuários

Quando parar de mexer no contexto: Quando o modelo vê os dados certos mas o agente ainda age errado — comete ação duas vezes, ignora um step de aprovação, ou estoura o orçamento de chamadas. Aí o problema é o harness.

Janela de contexto bem montada:

[System Prompt] ← o que o modelo é e o que não deve fazer
[Documentação relevante] ← recuperada via RAG, não estática
[Histórico comprimido] ← resumo das últimas N interações, não o log completo
[Estado atual do sistema] ← o que mudou desde a última ação
[Tool outputs filtrados] ← só o que importa da resposta das ferramentas
[Instrução do turno] ← o que o usuário pediu agora

Harness Engineering: o que envolve o modelo

Essa é a camada que quase ninguém fala — e que faz toda a diferença quando o agente começa a agir no mundo.

Harness é toda a infraestrutura que envolve o modelo. Não é o que você pede (prompt), não é o que o modelo vê (contexto). É o loop completo que converte a saída probabilística do modelo em software que se comporta de forma previsível:

  • Orquestração do ciclo (planejar → chamar ferramenta → observar → repetir)
  • Timeouts e retries quando a ferramenta falha
  • Sandboxing para limitar o que o agente pode tocar
  • Gates de aprovação antes de ações irreversíveis
  • RBAC: o modelo só pode chamar as ferramentas que aquele usuário tem permissão
  • Idempotência: se a mesma ação rodar duas vezes, o resultado é o mesmo
  • Circuit breaker: agente gastou $X em tokens? Para. Chamou 30 vezes o mesmo endpoint? Para.
  • Audit trail: log de tudo que o agente fez, com quais inputs, com quais resultados

Se você tem um agente de coding (tipo Claude Code, Cursor, ou um próprio) que propõe editar arquivos — quem aplica o patch, roda os testes, verifica que não quebrou nada, e para se falhar? Não é o modelo. É o harness.

Se o agente pode mandar email, criar tarefa no Jira, ou dar merge num PR — quem decide que aquela ação precisa de aprovação humana antes de executar? Não é o prompt. É o harness.

aviso

O hype de IA ainda vende Prompt Engineering como a habilidade principal. A dor de produção mora em Context e Harness. É exatamente aqui que demos em produção acontecem, onde o custo explode, onde a confiança do usuário vai embora.

Quando investir em harness:

  • O agente pode agir no mundo (não só responder — ele executa, modifica, envia)
  • Você precisa de auditoria ("quem autorizou isso?")
  • O custo escala com os usuários de forma inesperada
  • O agente funciona no demo mas não sobrevive às condições reais
  • Ações se repetem, ou ficam em loop sem critério de parada

Sintoma clássico de problema de harness: tudo funciona no playground. Em produção, com usuário real, em carga, com falha intermitente de API — o agente fica preso num loop, ou executa a mesma ação duas vezes, ou não para quando deveria.

Como diagnosticar em qual camada está o seu problema

Isso aqui salvou muito tempo pra mim. Antes de sair ajustando qualquer coisa, pergunta:

O modelo está respondendo algo errado ou no formato errado?
→ Problema de Prompt. Revise as instruções, adicione exemplos, seja mais específico.

O modelo está respondendo certo pro que ele viu, mas o que ele viu estava errado ou incompleto?
→ Problema de Context. Melhore a recuperação, filtre melhor os outputs das ferramentas, comprima o histórico.

O modelo está respondendo certo e vendo as informações certas, mas o agente como sistema ainda falha?
→ Problema de Harness. Falta gate de aprovação, falta idempotência, falta circuit breaker, falta log.

Uma tabela rápida:

SintomaCamada
Resposta no formato erradoPrompt
Resposta ignora restrição explícitaPrompt
Alucina fato que estava na documentaçãoContext
Custo de tokens explode com usuáriosContext
Qualidade cai em conversa longaContext
Agente age duas vezes na mesma coisaHarness
Demo funciona, produção nãoHarness
Sem registro de quem fez o quêHarness
Agente não para quando deveriaHarness

A maturidade do agente

Isso segue uma progressão natural conforme o agente fica mais capaz:

Estágio 1 — Copiloto/Q&A: Responde, sugere, não age. Prompt bem feito + contexto mínimo (talvez um pouco de RAG). O harness é basicamente rate limit e logging.

Estágio 2 — Assistente com ferramentas: Chama APIs, lê banco, gera artefatos. Context Engineering vira obrigatório — output de ferramenta precisa ser curado. Harness define a superfície de ferramenta e o tratamento de erro.

Estágio 3 — Agente operacional: Age de forma autônoma, executa fluxos completos, escala para múltiplos usuários, integra com sistemas externos. Aqui o Harness domina. Aprovações, política compartilhada, idempotência, audit trail, ações unificadas entre canais.

A maioria dos times está tentando construir Estágio 3 com só Prompt Engineering de Estágio 1. Daí a frustração.

O que eu aprendi apanhando

Fui no caminho errado várias vezes nessa ordem:

Primeiro erro: ficar ajustando prompt quando o agente alucinava porque não tinha a informação. Passei horas tentando fazer o modelo "não inventar" via instrução. A solução era jogar o documento certo na janela.

Segundo erro: empilhar contexto sem critério. Achar que mandar mais informação sempre ajuda. Não ajuda. Janela grande com lixo é pior que janela pequena com o essencial. O modelo se perde no meio.

Terceiro erro (o pior): deixar o agente agir sem harness porque "tava funcionando nos testes". Aí em produção ele executou uma ação duas vezes porque a API retornou timeout na primeira e ele interpretou como falha. Sem idempotência no harness, sem gate de verificação antes de executar de novo — problema garantido.

dica

Antes de construir um agente que age no mundo, responde essa lista:

  • O que acontece se a ferramenta falha? (retry? fallback? para?)
  • O que acontece se a ação roda duas vezes? (idempotente? duplica dado?)
  • Existe ação irreversível aqui? (se sim, precisa de gate de aprovação)
  • Como eu rastreio o que o agente fez? (se não tem log, tem problema)

Conclusão

A distinção não é só semântica. É diagnóstico.

Quando você entende que são três camadas separadas, você para de gastar energia no lugar errado. Não polindo prompt quando o problema é contexto. Não enchendo a janela de tokens quando o problema é que o agente não tem gate de aprovação.

Prompt Engineering resolve como o modelo entende o que você quer.

Context Engineering resolve se o modelo tem as informações certas pra agir.

Harness Engineering resolve se o sistema ao redor do modelo é confiável o suficiente pra ir pra produção.

Agente bom em produção precisa das três. O que muda é a proporção — e saber quando cada uma está te limitando.

Referências