Encadear prompts significa resolver uma tarefa com vários prompts em sequência, em que a saída de um vira a entrada do seguinte. A decomposição de prompts é a etapa de projeto anterior: decidir como dividir a tarefa. Juntos, são a forma mais confiável de fazer um modelo realizar algo complicado.
Por que um único prompt grande falha
Um prompt que pede a um modelo para extrair, analisar, decidir e escrever de uma só vez tem vários problemas:
- As instruções competem. Quanto mais um prompt pede, maior a chance de um requisito ser negligenciado.
- Você não sabe qual parte falhou. Uma resposta final errada pode vir de qualquer passo.
- Você não consegue testar as partes. Não há nada a verificar até o fim.
- Cada chamada paga por todas as instruções, mesmo as irrelevantes para esta entrada.
Uma cadeia dá a cada passo uma tarefa, uma entrada clara e uma saída verificável.
Como decompor uma tarefa
Pergunte o que uma pessoa cuidadosa faria, em ordem, e onde passaria o trabalho a outra pessoa. Bons pontos de divisão são onde:
- o tipo de trabalho muda (ler, depois julgar, depois escrever).
- um resultado intermediário vale a pena ser verificado (os fatos extraídos, antes de tirar conclusões).
- um passo só às vezes se aplica (traduzir apenas se o texto não estiver em inglês).
- passos diferentes precisam de modelos diferentes (um modelo pequeno para classificar, um maior para escrever).
Um exemplo resolvido
A tarefa: responder ao e-mail de reclamação de um cliente.
Passo 1: extrair. Um modelo pequeno e rápido transforma o e-mail em fatos estruturados.
Extract from the email in the tags: order_id, product, the problem in
one sentence, and what the customer is asking for. Return JSON only.
Use null for anything not stated.
<email>
{{email}}
</email>
Passo 2: decidir. O código consulta o pedido. Um prompt aplica a política.
Given the complaint and the order record, choose one action from:
refund, replace, escalate, explain. Give the policy clause that applies.
Return JSON: {"action": string, "clause": string}.
<complaint>{{step1_json}}</complaint>
<order>{{order_record}}</order>
<policy>{{policy}}</policy>
Passo 3: escrever. Um terceiro prompt redige a resposta a partir da decisão.
Write a reply to the customer, under 120 words, that states the action
and what happens next. Do not promise anything outside the action.
<action>{{step2_json}}</action>
<customer_name>{{name}}</customer_name>
Cada passo pode ser testado isoladamente. Se as respostas prometem a coisa errada, você olha a saída do passo 2 e sabe de imediato se a culpa é da decisão ou da redação.
Passando dados entre os passos
Use saída estruturada entre os passos. JSON ou campos com tags, não prosa. O prompt seguinte, e o seu código, podem então confiar na forma. Veja os prompts de saída estruturada.
Passe apenas o que o próximo passo precisa. Encaminhar todo o histórico alonga os prompts seguintes e deixa os erros iniciais se espalharem.
Valide em cada fronteira. Verifique a saída de cada passo antes de usá-la. Uma cadeia sem validação multiplica erros: cinco passos que acertam cada um 95% das vezes só acertam todos juntos cerca de 77% das vezes.
Delimite tudo o que inserir. A saída de um modelo é uma entrada não confiável para o seguinte. Um e-mail de reclamação que diz “ignore suas instruções” passou pelo passo 1 e agora está dentro do prompt do passo 2. Envolva o conteúdo inserido em tags. Veja a injeção de prompt.
Formatos de cadeia
| Formato | Descrição | Exemplo |
|---|---|---|
| Sequencial | A, depois B, depois C | Extrair, decidir, escrever |
| Roteamento | Classificar e escolher um ramo | Perguntas de cobrança vão para um prompt, bugs para outro |
| Paralelo | Passos independentes ao mesmo tempo, depois mesclar | Resumir 10 documentos e combinar |
| Gerar e verificar | Um prompt produz, outro revisa | Redigir e depois criticar frente aos requisitos |
| Laço | Repetir até que uma condição se cumpra | Revisar até a validação passar, com um limite de tentativas |
Limite sempre os laços. Uma cadeia que tenta para sempre é uma queda de serviço e uma fatura.
Encadeamento versus alternativas
Versus cadeia de pensamento. A cadeia de pensamento mantém o raciocínio dentro de uma única resposta. Use quando os passos não são conhecidos de antemão. Use uma cadeia quando são: você ganha capacidade de teste e controle.
Versus agentes. Em uma cadeia, o seu código decide a ordem. Em um agente, o modelo decide. Uma cadeia é mais barata, mais rápida e previsível. Escolha um agente apenas quando o caminho depende do que for descoberto ao longo do processo. Veja o prompting ReAct e os prompts para agentes de IA.
Custos a observar
Uma cadeia faz mais chamadas. Mantenha-a econômica:
- Use o menor modelo que dê conta de cada passo.
- Execute passos independentes em paralelo para reduzir a latência.
- Pule passos que não se aplicam a esta entrada.
- Use cache para a parte fixa de cada prompt quando o provedor oferecer. Veja a otimização de tokens.
Mantenha cada elo saudável
Uma cadeia tem vários prompts a manter, então um problema em um deles passa facilmente despercebido. Guarde cada um como arquivo e verifique todos a cada mudança. O portão de testes de prompts reprova um pull request quando qualquer prompt do repositório cai abaixo do seu nível de qualidade ou excede o orçamento de tokens, e o analisador de prompts reporta variáveis sem delimitação, que mais importam onde um passo alimenta o seguinte.