Técnicas

Otimização de prompts: um método iterativo

Otimização de prompts é melhorar um prompt por meio de medição. Um ciclo repetível de otimização de prompts para LLMs, com refinamento, conjuntos de testes e quando parar.

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

A otimização de prompts é o processo de melhorar um prompt em relação a um objetivo definido: respostas melhores, menos tokens, menor latência ou um formato mais consistente. O que a separa do tateio é a medição. Você decide o que significa “melhor”, muda uma coisa e verifica.

Decida o que você está otimizando

Um prompt pode ser otimizado em vários eixos, e eles puxam em direções opostas.

Objetivo Medido por Costuma custar
Qualidade Taxa de acertos em um conjunto de testes Tokens
Consistência Mesma entrada, mesma forma de saída Flexibilidade
Custo Tokens de entrada e saída por chamada Contexto, exemplos
Latência Tempo até o primeiro e o último token Profundidade de raciocínio
Segurança Resistência a injeção e vazamentos Alguma utilidade

Escolha um objetivo principal e um limite para os demais, por exemplo “aumentar a taxa de acertos sem passar de 800 tokens de entrada”.

O ciclo de otimização

1. Corrija primeiro os problemas estáticos

Alguns defeitos não precisam de um modelo para serem encontrados: sem objetivo, palavras vagas, tamanhos sem números, instruções conflitantes, sem formato de saída, frases repetidas, variáveis sem delimitação. Limpe-os antes de gastar com chamadas ao modelo. O analisador de prompts do PromptFlowEngine os lista, cada um com uma correção sugerida.

2. Monte um conjunto de testes

Reúna de 20 a 50 entradas que representem o uso real. Inclua:

  • Casos típicos.
  • Casos extremos: vazios, muito longos, em vários idiomas, malformados.
  • Casos adversariais: texto que tenta mudar as instruções.
  • Falhas anteriores. Cada bug vira um teste.

Para cada entrada, anote o que uma saída correta deve conter ou satisfazer.

3. Estabeleça uma linha de base

Execute o prompt atual em cada entrada e registre os resultados. Esse número é aquilo com que cada mudança é comparada. Sem ele, você não distingue uma melhoria do ruído.

4. Leia as falhas

Agrupe-as. Dez falhas costumam ter duas ou três causas. Procure o padrão: são sempre entradas longas, sempre uma categoria, sempre o mesmo campo ausente?

5. Formule uma hipótese e faça uma mudança

“O modelo acrescenta comentários porque o prompt não diz para retornar apenas JSON.” Faça essa mudança e nada mais.

6. Execute de novo o conjunto inteiro

Verifique se as falhas foram corrigidas e, tão importante quanto, se nada que passava antes agora falha. Uma correção para um caso que quebra outros dois é uma regressão.

7. Mantenha ou reverta, e repita

Registre o que você mudou e por quê. Veja o gerenciamento de prompts para o versionamento.

Movimentos de refinamento que costumam funcionar

Sintoma Refinamento
A saída varia em tamanho Troque palavras de tamanho por números
A saída varia em forma Acrescente um formato explícito ou um esquema
Ignora uma regra Tire-a de um parágrafo e coloque em uma lista; remova conflitos
Genérico demais Acrescente contexto de público e domínio
Errado em casos extremos Acrescente uma regra ou um exemplo para esse caso
Inventa fatos Forneça fontes e exija “não informado” quando ausentes
Prolixo Dê um limite de palavras e diga o que deixar de fora

Movimentos de refinamento que costumam não funcionar

  • Acrescentar ênfase (maiúsculas, “muito importante”) a todas as linhas.
  • Repetir a mesma instrução em vários lugares.
  • Anexar uma nova regra de caso especial a cada falha sem verificar conflitos.
  • Mudar a redação de algo que não era a causa.

Otimizando tokens

Quando a qualidade for aceitável, reduza o custo sem mudar o comportamento:

  1. Remova saudações, cortesias e enchimento.
  2. Apague frases repetidas e quase repetidas.
  3. Corte o contexto que não altera nenhuma resposta do conjunto de testes.
  4. Reduza o número de exemplos e teste de novo.
  5. Coloque primeiro a parte estável do prompt para que o cache do provedor se aplique.

Os passos 1 e 2 são mecânicos e seguros de automatizar. O otimizador de prompts do PromptFlowEngine os executa e depois verifica que cada frase original, requisito e trecho protegido continua presente, de modo que o prompt mais curto peça exatamente o que o mais longo pedia. Detalhes na otimização de tokens.

Otimização automatizada

Existem ferramentas que procuram prompts melhores automaticamente, fazendo um modelo propor variantes e pontuando-as no seu conjunto de testes. Elas podem achar melhorias que as pessoas deixam passar. Precisam de três coisas para funcionar: um bom conjunto de testes, uma função de pontuação confiável e uma revisão do prompt vencedor, porque um otimizador explora qualquer fraqueza da métrica.

Uma cautela semelhante vale ao pedir a um modelo de chat que “melhore este prompt”. Ele produzirá algo que soa melhor. Pode também omitir uma restrição ou acrescentar uma suposição. Compare o resultado com o original e confirme que todo requisito sobreviveu.

Quando parar

Pare quando o prompt atender ao objetivo no conjunto de testes e novas mudanças moverem os resultados dentro do ruído. Passado esse ponto, mais ganhos virão de um contexto melhor, de outra técnica, como o encadeamento de prompts, ou de outro modelo.

O que uma pontuação baseada em regras pode e não pode dizer

Uma pontuação de qualidade estática, como a da avaliação de prompts, mede o prompt como escrito: clareza, completude, consistência e segurança. É rápida e reproduzível, por isso serve para cada edição e cada commit. Não mede o que um modelo faz com o prompt. Use-a para manter o prompt saudável e um conjunto de testes para confirmar a saída. Ambos são tratados em testes e avaliação de prompts.

Coloque em prática

Experimente com a ferramenta otimizador de prompts

Corte tokens e acrescente estrutura, com prova de que cada requisito foi mantido. É gratuito, determinístico e não exige conta.

Ferramentas relacionadas do PromptFlowEngine

Mais sobre técnicas

Ver todos os guias de engenharia de prompts