Técnicas

Encadeamento e decomposição de prompts

O encadeamento de prompts divide uma tarefa complexa em uma sequência de prompts simples. Como decompor uma tarefa, passar dados entre os passos e tratar erros na cadeia.

Traduzido do original em inglês. Código, prompts e saídas de modelos são mantidos em inglês.

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.

Coloque em prática

Experimente com a ferramenta analisador de prompts

Encontre ambiguidades, contexto ausente, conflitos e tokens desperdiçados em qualquer prompt. É gratuito, determinístico e não exige conta.

Ferramentas relacionadas do PromptFlowEngine

Mais sobre técnicas

Ver todos os guias de engenharia de prompts