Encadeamento de prompts (prompt chaining) é dividir um trabalho em uma sequência de prompts, em que a saída de um prompt vira parte da entrada do seguinte. Em vez de pedir a um modelo que leia cinquenta avaliações, encontre os problemas, classifique-os e escreva um relatório de uma vez só, você pede cada uma dessas coisas por vez. Cada prompt tem um trabalho, e entre as etapas você (ou o seu código) pode olhar o resultado, corrigi-lo ou parar.
O bloco abaixo é uma cadeia de três etapas que transforma avaliações de clientes em um recado para a equipe de produto. Cada aba é uma etapa. A entrada da etapa 2 é a resposta da etapa 1, colada, e a entrada da etapa 3 é a resposta da etapa 2.
[
{"review": 1, "complaint": "Bateria acabou depois de 4 horas"},
{"review": 1, "complaint": "Cabo de carregamento curto demais"},
{"review": 2, "complaint": "App fica deslogando"},
{"review": 3, "complaint": "Bateria não aguenta o trajeto"},
{"review": 4, "complaint": "App travou no pareamento"},
{"review": 4, "complaint": "Bateria descarrega rápido"},
{"review": 5, "complaint": "Cabo curto demais para usar carregando"}
]
A etapa 1 só lê e extrai. A etapa 2 nunca vê as avaliações, só a lista, então não tem como voltar a resumi-las. A etapa 3 só escreve. Se a etapa 3 vier com o tom errado, você roda de novo só a etapa 3; a extração e o agrupamento continuam como estavam.
Repare no que a etapa 3 não diz: que uma bateria acabou depois de 4 horas, ou que os problemas do app eram deslogar e travar. A etapa 3 só recebeu os nomes dos temas, então esses detalhes não estavam na entrada dela. Decidir o que cada etapa recebe é a principal escolha de design em uma cadeia, e um detalhe que você quer na resposta final precisa ser passado adiante até o fim.
Por que encadear em vez de escrever um prompt enorme
Cada etapa tem um trabalho e um padrão. Um único prompt que pede extração, análise e um texto caprichado tem três objetivos para equilibrar, e nada mostra qual deles ele deixou pela metade. Um prompt com um só trabalho pode dizer exatamente como é um bom resultado para aquele trabalho, e você pode julgar a resposta com base nisso.
Você pode conferir o meio do caminho. Em um único prompt, uma reclamação esquecida some dentro de um parágrafo bem escrito e você nunca a vê. Em uma cadeia, a lista da etapa 1 está ali. Conferi-la leva segundos, e corrigi-la antes da etapa 2 é mais barato do que encontrar o erro no relatório final.
Cada etapa pode ter os próprios ajustes. A extração e o agrupamento pedem uma temperatura baixa e uma saída estruturada que o código consiga ler. A etapa de escrita pode ser mais livre. No código, você pode até mandar etapas diferentes para modelos diferentes, como um modelo pequeno e rápido para a extração.
As falhas ficam localizadas. Quando uma cadeia quebra, você sabe qual etapa quebrou e roda de novo só essa.
Os custos também são reais. Uma cadeia faz mais chamadas, então demora mais e custa mais do que um único prompt. E um erro que passa por uma etapa inicial é carregado para todas as seguintes, e é por isso que vale a pena conferir as etapas intermediárias.
Como desenhar uma cadeia
- Anote as etapas que você faria à mão. Se você primeiro faria uma lista, depois a ordenaria e depois escreveria o texto, são três prompts. Etapas que exigem tipos diferentes de raciocínio são os lugares naturais para dividir.
- Decida o formato de saída de cada etapa antes de escrever o prompt dela. O que a próxima etapa consome deve ser fácil de ler e de conferir: um array JSON, uma lista numerada, uma tabela. Texto corrido só serve para a última etapa.
- Passe só o que a próxima etapa precisa. A etapa 2 acima recebe a lista de reclamações, não as avaliações. Menos entrada significa menos coisa para distrair, e deixa cada etapa testável sozinha.
- Acrescente uma verificação entre as etapas. No código, faça o parse do JSON e confirme que os campos existem. Para decisões de julgamento, a verificação pode ser ela mesma um prompt: "Esta lista contém todas as reclamações destas avaliações? Responda sim ou não e depois liste as que estiverem faltando."
- Marque com clareza o material colado. A entrada de cada etapa é um texto produzido por uma etapa anterior, e os delimitadores impedem que o modelo o leia como novas instruções.
Aqui está uma etapa de verificação para a cadeia acima, rodada em uma versão da saída da etapa 1 que esqueceu uma reclamação. Uma verificação assim é um prompt separado com uma pergunta estreita, então é mais fácil de acertar do que a própria extração.
Incompleta
- Avaliação 4: a bateria descarrega rápido
Se a verificação disser "Incompleta", rode a etapa 1 de novo ou acrescente o item que falta à mão antes de a etapa 2 rodar.
Uma cadeia no código
No código, uma cadeia é uma sequência de chamadas em que cada prompt é montado a partir da resposta anterior. Esta versão usa o SDK Python da Anthropic; a mesma estrutura funciona com qualquer fornecedor.
import json
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt):
response = client.messages.create(
model=MODEL,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
reviews = open("reviews.txt", encoding="utf-8").read()
complaints = ask(
"List every complaint in the reviews inside the <reviews> tags. Ignore praise. "
'Return a JSON array of objects with the keys "review" and "complaint". '
"Return only the JSON, with no code fence.\n\n"
f"<reviews>\n{reviews}\n</reviews>"
)
json.loads(complaints) # raises an error here if step 1 did not return valid JSON
themes = ask(
"Group these complaints into themes. Return only a JSON array with the keys "
'"theme", "count" and "reviews", sorted by count, highest first.\n\n'
f"<complaints>\n{complaints}\n</complaints>"
)
note = ask(
"Write a note of at most four sentences to the product team based on these "
f"themes. Lead with the most common one.\n\n<themes>\n{themes}\n</themes>"
)
print(note)
A linha do json.loads é a verificação mais simples possível: se a etapa 1 responder com texto corrido, a cadeia para ali em vez de passar uma entrada ruim adiante. Uma cadeia de produção também conferiria os campos, tentaria de novo uma etapa que falhou e registraria cada resultado intermediário, para que uma resposta final ruim possa ser rastreada até a etapa que a causou.
Encadeamento em um app de chat
Você não precisa de código para encadear prompts. Rode a etapa 1, leia a resposta, corrija o que estiver errado e cole no prompt da etapa 2. Fazer cada etapa em um chat novo mantém a conversa anterior fora do contexto, então uma instrução escrita para uma etapa não afeta a seguinte. Ficar em um único chat é mais rápido e funciona quando as etapas estão bem relacionadas, mas o histórico inteiro vai junto com cada nova mensagem.
Encadeamento e técnicas parecidas
O chain of thought é o raciocínio escrito dentro de uma resposta; uma cadeia de prompts são várias respostas, com você no controle do que passa de uma para a outra. As duas técnicas combinam bem: qualquer etapa de uma cadeia pode pedir um raciocínio passo a passo.
Em uma cadeia, as etapas são definidas de antemão por você. Quando o próprio modelo decide qual é a próxima etapa, como pesquisar, ler um resultado e então escolher outra ação, o padrão passa a ser um loop de agente, descrito em ReAct. Cadeias fixas são mais fáceis de testar e prever, então são o melhor ponto de partida sempre que você já conhece as etapas.
Perguntas frequentes
O que é prompt chaining?
Prompt chaining, ou encadeamento de prompts, é uma técnica em que você divide uma tarefa em vários prompts que rodam um depois do outro, e a saída de cada prompt é inserida no seguinte. Por exemplo, um prompt extrai as reclamações de avaliações, um segundo as agrupa em temas e um terceiro escreve um relatório a partir dos temas.
Qual é a diferença entre prompt chaining e chain of thought?
O chain of thought acontece dentro de uma resposta: o modelo escreve o raciocínio antes da resposta. O prompt chaining usa várias chamadas separadas, e você ou o seu código passam o resultado de uma para a outra. Você pode inspecionar, corrigir ou rodar de novo qualquer etapa de uma cadeia, o que não dá para fazer com o raciocínio dentro de uma única resposta.
Dá para fazer prompt chaining no ChatGPT ou no Claude sem programar?
Dá. Rode o primeiro prompt, confira a resposta e cole-a no prompt seguinte, no mesmo chat ou em um novo. Abrir um chat novo para cada etapa impede que rascunhos e instruções anteriores influenciem as etapas seguintes.
Quando usar prompt chaining em vez de um único prompt?
Use uma cadeia quando um prompt pede vários tipos diferentes de trabalho, como extrair, analisar e escrever, ou quando você precisa conferir ou reaproveitar um resultado intermediário. Se um único prompt já dá uma resposta confiável, a cadeia só acrescenta chamadas, custo e tempo de espera.