Preparação para entrevista
RefatoraçãoCompondo prompts

Extrair Subprompt

Extract Subprompt

Extrair Subprompt (Extract Subprompt) é uma refatoração de IA para sistemas com LLM, do grupo Compondo prompts. Tirar uma responsabilidade do prompt principal e dar a ela uma chamada própria.

Elemento
01/35
Nível
Iniciante
Leitura
4 min
Atualizado
Nesta página 9
  1. 01Problema
  2. 02Solução
  3. 03Antes e depois
  4. 04Por que funciona
  5. 05Passo a passo seguro
  6. 06Riscos
  7. 07Desafio
  8. 08Relacionados
  9. 09Teste seu entendimento
  10. ··Perguntas rápidas

Problema

Um prompt único cuida de várias responsabilidades, cresce sem parar e cada mudança afeta tudo. É o smell Prompt Inchado.

Pense no bot de suporte de um banco no WhatsApp. O mesmo system prompt classifica idioma, mascara cartão, escolhe entre fatura, pedido e Pix, aplica 14 regras de boleto e ainda pede a pesquisa de satisfação. Uma mudança na regra de multa de fatura quebra a detecção de cartão. Ninguém consegue testar uma parte sem as outras.

Solução

Tire uma responsabilidade do prompt principal e dê a ela uma chamada própria, com um prompt curto e uma saída definida. O prompt principal passa a receber o resultado dessa chamada, não as instruções para produzi-lo.

Antes e depois

-SYSTEM = """Você é o assistente de suporte.
-Primeiro, identifique o idioma do cliente e responda nele.
-Detecte se a mensagem contém dados de cartão; se tiver, ignore-os.
-Classifique o assunto entre fatura, pedido e outro.
-Se for fatura, siga estas 14 regras: ...
-Se for pedido, siga estas 11 regras: ...
-Sempre termine com a pergunta de satisfação."""
+TRIAGE = """Leia a mensagem do cliente e devolva idioma, assunto
+e se contém dados de cartão."""                 # subprompt extraído
+
+SUPPORT = {
+    "billing": "Você atende dúvidas de fatura. [regras de fatura]",
+    "orders":  "Você atende dúvidas de pedido. [regras de pedido]",
+}
+
+t = llm_parse(TRIAGE, message, schema=Triage)
+clean = mask_card(message) if t.has_card_data else message
+reply = llm(SUPPORT[t.topic], clean, language=t.language)

Antes: uma chamada com todas as responsabilidades.

flowchart LR
  IN(["1. Mensagem"]):::io --> M(["2. Prompt único: idioma, cartão, assunto, regras de tudo"]):::llm
  M --> OUT(["3. Resposta"]):::io

Depois: a triagem tem sua própria chamada, e cada resposta tem um prompt focado.

flowchart LR
  IN(["1. Mensagem"]):::io --> T(["2. Triagem: idioma, cartão, assunto"]):::llm
  T --> C["3. Mascarar e escolher prompt"]:::tool
  C --> M(["4. Prompt focado no assunto"]):::llm
  M --> OUT(["5. Resposta"]):::io
  1. A mesma mensagem chega.
  2. Uma chamada curta faz só a triagem, com saída estruturada.
  3. O código usa o resultado: mascara dados, escolhe o prompt.
  4. O prompt de resposta cuida de um assunto só.
  5. A resposta sai, e cada etapa aparece separada no trace.

Um caso trabalhado

Mensagem: “boa tarde, a multa do meu boleto PIX saiu errada, cartão 4111…”. A triagem devolve, por exemplo:

{ "language": "pt-BR", "topic": "billing", "has_card_data": true }

O código mascara o cartão. O prompt de fatura recebe o texto limpo e a língua, sem as 11 regras de pedido. Se a multa sair errada, o trace mostra se a triagem errou o assunto ou se o prompt de fatura errou a regra. Antes, os dois erros morriam no mesmo parágrafo.

Por que funciona

Cada responsabilidade num prompt compete pela atenção do modelo com todas as outras. O paper “Lost in the Middle” (Liu et al., 2023) mostrou que modelos usam mal o que fica no meio de um contexto longo. Um prompt de 4 mil tokens com regras de fatura no meio é exatamente esse meio. Separar dá a cada responsabilidade um prompt pequeno, que o modelo segue com mais consistência e que o time consegue testar sozinho.

A saída da chamada extraída vira um contrato. Em vez de “identifique o idioma e responda nele” escondido no meio de um texto longo, existe um campo language que o código lê e passa adiante. Quando algo dá errado, o trace mostra se o erro foi na triagem ou na resposta.

Por fim, as partes passam a evoluir separadas. Mudar as regras de fatura não mexe nas regras de pedido. O destino natural é o Encadeamento de Prompts. Se a extração for uma classificação que escolhe o caminho, Introduzir Roteador deixa a decisão no código.

Prompt único Com subprompt extraído
Teste Um eval mistura triagem e resposta Eval da triagem e eval da resposta, separados
Mudança Regra de fatura pode quebrar detecção de cartão Fatura muda no prompt dela
Trace Um span só Dois spans; o erro tem endereço

A chamada extra paga quando o prompt principal encolhe de verdade e a saída extraída entra no código. Se depois da extração o prompt de resposta continua enorme, você só adicionou latência. Um modelo pequeno na chamada extraída costuma cobrir o round-trip a mais, desde que o prompt principal tenha perdido as regras que estavam lá. Meça tamanho, acurácia por categoria e p95 antes de extrair a próxima peça.

Checagem +20 XP de primeiraO prompt de suporte faz idioma, cartão, assunto, 14 regras de fatura e 11 de pedido. Qual responsabilidade você extrai primeiro?

Passo a passo seguro

  1. Meça. Rode o eval do prompt atual e guarde a acurácia por categoria, o tamanho do prompt e a latência.
  2. Liste as responsabilidades do prompt. Marque as que produzem uma decisão ou um dado usado depois (idioma, assunto, risco).
  3. Escolha uma para extrair, de preferência a que tem saída mais clara.
  4. Escreva o subprompt com só aquela responsabilidade e uma saída estruturada.
  5. Monte um eval do subprompt sozinho com casos reais.
  6. Apague do prompt principal o trecho que foi extraído e passe o resultado como entrada.
  7. Rode o eval completo e compare com a medida inicial.
  8. Repita para a próxima responsabilidade, se valer a pena.

Riscos

  • Mais uma chamada. Latência e custo sobem um pouco. Use um modelo pequeno no subprompt e confira se o prompt principal encolheu o suficiente para compensar.
  • Contexto perdido. O subprompt pode precisar de algo que estava no prompt grande. Passe explicitamente o que ele precisa.
  • Erro em cascata. Se a triagem erra, a resposta erra junto. Defina um caminho padrão para baixa confiança.
  • Extrair demais. Dez chamadas para dez regras pequenas viram o smell oposto. Extraia responsabilidades, não frases. Se a chamada extra não muda o resultado, Embutir Etapa Trivial é o caminho de volta.

Erro comum: extrair o que o código já faz

Checar se a ficha tem marca, modelo e voltagem não precisa de modelo. Extraí-la para um subprompt ainda deixa um LLM fazendo conta. O primeiro destino dessa responsabilidade é código. O subprompt fica para o que é linguagem: tom da descrição, palavras-chave, classificação ambígua.

Checagem +20 XP de primeiraDepois de extrair a triagem, 8% das mensagens caem no prompt de assunto errado. Qual é o próximo passo?

Desafio

Qual responsabilidade deste prompt de um gerador de descrições de produto você extrairia primeiro?

Você escreve descrições de produto para o e-commerce.
Leia a ficha técnica e escreva uma descrição de 80 a 120 palavras.
Verifique se a ficha tem todos os campos obrigatórios (marca, modelo,
voltagem, garantia); se faltar algum, não escreva e liste o que falta.
Use o tom da marca: direto, sem exageros.
Gere também 5 palavras-chave para SEO.
Ver solução

A checagem de campos obrigatórios. Ela tem resposta exata e decide se o resto acontece; aliás, nem precisa de modelo, porque é uma checagem de campos que o código faz sozinho. As palavras-chave são a segunda candidata: uma chamada separada, com saída em lista, testável à parte.

1. Código: validar campos obrigatórios da ficha. Se faltar, devolver a lista.
2. Chamada: escrever a descrição (só tom e tamanho no prompt).
3. Chamada: gerar palavras-chave em schema { keywords: list[str] (5) }.

Relacionados

Teste seu entendimento

Checagem +20 XP de primeiraVocê extraiu 12 chamadas, uma por regra de formatação. A latência foi de 2 s para 18 s. O que aconteceu?

Checagem +20 XP de primeiraO prompt escreve a descrição, confere campos obrigatórios e gera palavras-chave de SEO. Qual extração vem primeiro?

Checagem +20 XP de primeiraVocê extraiu a triagem. Como saber se funcionou?

Checagem +20 XP de primeiraDepois da extração, o prompt de fatura passa a responder em inglês para clientes em português. Qual é a causa mais provável?

Perguntas rápidas

O que é Extrair Subprompt?

Extrair Subprompt (Extract Subprompt) é uma refatoração de IA para sistemas com LLM, do grupo Compondo prompts. Tirar uma responsabilidade do prompt principal e dar a ela uma chamada própria.

Que problema Extrair Subprompt resolve?

Trata Prompt Inchado.

Aonde Extrair Subprompt leva?

Ao padrão de projeto Encadeamento de Prompts.

Para ir além

Relações

Smells que trata 1
Padrões de destino 1
Buscar