Prompt engineering em produção (AWS edition)
- ⬜🛠️ Bedrock Agents — orquestração multi-step(AWS AI Practitioner (AIF-C01))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Prompt engineering tem má fama porque muita gente vende truque. O que o exame cobra é diferente e mais útil: um conjunto pequeno de técnicas com nome, cada uma resolvendo um problema específico, e a noção de que prompt em produção é código — versionado, testado e medido.
A regra que organiza tudo: o modelo não sabe o que você quer, sabe o que você escreveu. Quase todo problema de qualidade atribuído ao modelo é instrução ambígua, exemplo ausente, ou formato de saída não especificado.
As técnicas que o exame nomeia
Cada uma tem um gatilho reconhecível no enunciado.
| Técnica | O que é | Quando o exame pede |
|---|---|---|
| Zero-shot | Só a instrução, sem exemplo | Tarefa comum e bem definida. É o default — não complique sem motivo |
| Few-shot | Dois a cinco exemplos de entrada e saída no prompt | "A saída precisa seguir um formato específico" ou "a classificação usa categorias próprias da empresa" |
| Chain-of-thought | Pedir o raciocínio passo a passo antes da resposta | "Cálculo em várias etapas", "raciocínio lógico", "o modelo erra contas simples" |
| ReAct | Alternar raciocínio e ação (usar ferramenta), em ciclo | Quando há ferramenta envolvida — é o padrão que os agents implementam por baixo |
| Prefilling da resposta | Começar a resposta do assistente por você, para forçar o formato | "A saída tem que ser JSON válido e nada mais" |
| System prompt | O papel e as regras, separados da mensagem do usuário | "O assistente deve manter o tom e recusar assunto fora do escopo" |
Onde few-shot deixa de compensar
Few-shot custa tokens em toda chamada, porque os exemplos vão no prompt. Se você precisa de dezenas de exemplos para acertar o formato, a pergunta muda: talvez seja caso de fine-tuning. A fronteira que o exame cobra é essa — poucos exemplos, prompt; muitos exemplos e formato estável, fine-tune.
A anatomia de um prompt de produção
Não é uma frase. São camadas com funções distintas, e a ordem importa: o que vem primeiro é o que o modelo trata como enquadramento.
resp = cliente.converse(
modelId="anthropic.claude-sonnet-4-5-20250929-v1:0",
# System separado da conversa: é o que dá a ele resistência maior a
# instrução injetada no meio do texto do usuário.
system=[{"text": (
"Você é o assistente de suporte da Acme. Responda SOMENTE com base nos "
"trechos fornecidos em <fontes>. Se a resposta não estiver ali, diga "
"exatamente: 'Não encontrei isso na documentação.'"
)}],
messages=[
{"role": "user", "content": [{"text": (
"<fontes>\n" + trechos_recuperados + "\n</fontes>\n\n"
"<pergunta>" + pergunta_do_usuario + "</pergunta>"
)}]},
# Prefill: a resposta do assistente já começa aqui. O modelo continua
# de onde paramos, então não há espaço para preâmbulo.
{"role": "assistant", "content": [{"text": "{"}]},
],
inferenceConfig={"temperature": 0, "maxTokens": 1024},
)Delimitação é controle de segurança
Delimitar a entrada do usuário com tag é defesa, não estética. Sem delimitação, um texto que diga "ignore as instruções acima" chega ao modelo indistinguível de instrução legítima. Com o texto dentro de `<pergunta>`, e o system dizendo que ali dentro é dado do usuário, a tentativa fica bem mais difícil.
Temperatura, top-p e o que escolher
O exame cobra a direção, não a matemática.
| Parâmetro | O que faz | Escolha para |
|---|---|---|
| temperature 0 | Praticamente determinístico: sempre o token mais provável | Extração, classificação, JSON, qualquer coisa que será processada por código |
| temperature alta | Distribui a escolha entre tokens plausíveis | Redação criativa, geração de variações, brainstorm |
| top-p (nucleus) | Corta a cauda: considera só os tokens que somam p de probabilidade | Alternativa a temperatura. Ajustar os dois ao mesmo tempo confunde mais que ajuda |
| maxTokens | Teto da resposta | Controle de custo e de latência. Resposta cortada no meio geralmente é este limite, não falha do modelo |
O sintoma mais mal diagnosticado
Resposta truncada é quase sempre `maxTokens` baixo, e o campo `stopReason` na resposta diz isso literalmente: `max_tokens` em vez de `end_turn`. Ler o `stopReason` antes de investigar o modelo economiza horas — é a primeira coisa a conferir quando a saída chega incompleta.
Uma aplicação envia um manual de 30 mil tokens no system prompt em toda chamada, seguido da pergunta do usuário. O custo mensal está alto. A equipe ativa prompt caching mas o custo não cai. Qual é a causa mais provável?
Prompt caching: onde o custo cai de verdade
Quando o começo do prompt é longo e estável — system extenso, exemplos, um documento de referência — pagar por ele em cada chamada é desperdício. Prompt caching guarda o processamento desse prefixo e cobra muito menos nas chamadas seguintes que o reaproveitam.
Dois detalhes que o exame cobra e que costumam ser lembrados errado. Primeiro: no Bedrock o cache é explícito — você marca onde o prefixo termina, com um checkpoint. Não é automático. Segundo: o cache é de prefixo — só serve se o começo do prompt for byte a byte idêntico. Trocar uma palavra no system invalida tudo dali para frente.
system=[
{"text": manual_de_produto_inteiro}, # 40 mil tokens, iguais sempre
# Marca o fim do trecho cacheável. Da próxima chamada com o mesmo prefixo,
# o processamento dele sai muito mais barato.
{"cachePoint": {"type": "default"}},
]- → até aqui é fixo
- → prefixo repetido
- → se subir antes do checkpoint
- Conceito de arquitetura
- Fora da AWS
- Gestão e governança
A ordem é a feature. Tudo que se repete fica antes do checkpoint; tudo que muda fica depois. Inverter isso não gera erro nem aviso — só faz o cache nunca acertar, e a conta chegar igual à de antes.
- O cache guarda um prefixo, não um pedaço qualquer. Ele reaproveita o processamento do começo do prompt até o checkpoint. Por isso o trecho reaproveitável precisa ser o primeiro — não existe cachear um bloco do meio.
- O checkpoint marca a fronteira, e é explícito. No Bedrock você declara o ponto. Não há detecção automática do que é estável — o serviço não adivinha qual parte do seu prompt se repete.
- Depois do checkpoint pode mudar à vontade. Trecho de RAG e pergunta do usuário mudam a cada chamada, e é exatamente para isso que ficam depois: eles não afetam a validade do prefixo.
- Um byte diferente no prefixo derruba tudo. Acrescentar a data de hoje no system, ou o nome do usuário, faz o prefixo ser único por chamada. O cache passa a errar sempre — e o sintoma é "ativei e não mudou nada".
- Confirme no campo de uso, não na sensação. A resposta traz quantos tokens foram lidos do cache. Repita a mesma chamada duas vezes: se a segunda vem com leitura zerada, o prefixo está mudando entre as chamadas, e o culpado costuma ser um carimbo de data ou um identificador de sessão dentro do system. É a única medição que distingue "ativei" de "está funcionando".
Por que o cache "não funciona"
Ordem importa por causa do prefixo: o que muda a cada chamada tem de ficar DEPOIS do checkpoint. Colocar a pergunta do usuário antes do trecho estável faz o prefixo mudar sempre, e o cache nunca acerta — a conta continua a mesma e você fica achando que a feature não funciona.
Prompt é código
A parte que separa protótipo de produção não é a técnica, é o processo.
| Prática | Por que importa |
|---|---|
| Versionar o prompt no repositório | Prompt em string dentro do código de negócio não tem histórico nem revisão. Mudança de prompt é mudança de comportamento |
| Ter um conjunto de casos com resposta esperada | Sem isso, "melhorei o prompt" é opinião. Com 30 casos, é medição |
| Fixar temperature em 0 nos testes | Comparar duas versões com saída aleatória mede ruído |
| Registrar tokens de entrada e saída por chamada | É o que permite atribuir custo depois. Instrumentar antes é fácil; retroagir é quase impossível |
| Testar o caso de "não sei" | O comportamento mais valioso de um assistente de suporte é admitir que a informação não está na base |
Perguntas frequentes
❓ O que muda na engenharia de prompt quando é na AWS?
❓ Quando usar few-shot em vez de instrução?
❓ Cache de prompt reduz custo de verdade?
Fixando
Um extrator precisa devolver JSON estrito para ser consumido por código, mas o modelo às vezes começa a resposta com "Claro! Aqui está o JSON:". Qual combinação resolve com menos esforço?
Uma equipe quer saber se a nova versão do prompt de classificação melhorou a qualidade. O que caracteriza uma avaliação confiável?
Próximo passo
Prompt resolve muito, mas não tudo. O próximo módulo trata do que fazer quando prompt não basta: customização de modelo e avaliação. É aif-fine-tuning-eval.
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…