Estratégias de Engenharia de Prompts
Estratégias de Engenharia de Prompts
Mensagens e funções
Crie prompts fornecendo uma matriz de messages que contenham instruções para o modelo. Cada
mensagem pode ter um role , o que influencia como o modelo pode interpretar a entrada.
user Instruções que solicitam alguma saída Passe a mensagem do usuário final para o modelo.
do modelo. Semelhante a mensagens
que você digitaria no ChatGPT como um
Write a haiku about programming.
usuário final.
developer Instruções para o modelo que são Descreva como o modelo deve se comportar e responder
priorizadas antes das mensagens do em geral.
usuário, seguindo a cadeia de
comando . Anteriormente chamado de
1 You are a helpful assistant
system prompt. 2 that answers programming
3 questions in the style of a
4 southern belle from the
5 southeast United States.
assistant Uma mensagem gerada pelo modelo, Forneça exemplos ao modelo de como ele deve responder
talvez em uma solicitação de geração à solicitação atual.
anterior (veja a seção "Conversas"
Por exemplo, para fazer com que um modelo responda
abaixo).
corretamente a piadas do tipo toc-toc, você pode fornecer
um diálogo completo de ida e volta de uma piada do tipo
toc-toc.
As funções de mensagem podem ajudar você a obter melhores respostas, especialmente se você
quiser que um modelo siga instruções hierárquicas. Elas não são determinísticas, então a melhor
maneira de usá-las é apenas tentar coisas e ver o que lhe dá bons resultados.
Aqui está um exemplo de uma mensagem do desenvolvedor que modifica o comportamento do
modelo ao gerar uma resposta a uma user mensagem:
1 Well, sugar, that's a fine question you've got there! Now, in the
2 world of JavaScript, semicolons are indeed a bit like the pearls
3 on a necklace – you might slip by without 'em, but you sure do look
4 more polished with 'em in place.
5
6 Technically, JavaScript has this little thing called "automatic
7 semicolon insertion" where it kindly adds semicolons for you
8 where it thinks they oughta go. However, it's not always perfect,
9 bless its heart. Sometimes, it might get a tad confused and cause
10 all sorts of unexpected behavior.
1 Well, sugar, that's a fine question you've got there! Now, in the
2 world of JavaScript, semicolons are indeed a bit like the pearls
3 on a necklace – you might slip by without 'em, but you sure do look
4 more polished with 'em in place.
5
6 Technically, JavaScript has this little thing called "automatic
7 semicolon insertion" where it kindly adds semicolons for you
8 where it thinks they oughta go. However, it's not always perfect,
9 bless its heart. Sometimes, it might get a tad confused and cause
10 all sorts of unexpected behavior.
Você também pode explorar exemplos de prompts que mostram do que nossos modelos são
capazes:
Exemplos rápidos
Explore exemplos rápidos para aprender o que os modelos GPT podem fazer
Táticas:
Fornecer exemplos
Especifique o comprimento desejado da saída
Táticas:
Táticas:
Use a classificação de intenção para identificar as instruções mais relevantes para uma consulta
do usuário
Para aplicações de diálogo que exigem conversas muito longas, resuma ou filtre diálogos
anteriores
Táticas:
Instrua o modelo a elaborar sua própria solução antes de tirar conclusões precipitadas
Use um monólogo interno ou uma sequência de consultas para ocultar o processo de raciocínio
do modelo
Táticas:
Tática:
Táticas
Cada uma das estratégias listadas acima pode ser instanciada com táticas específicas. Essas táticas
são destinadas a fornecer ideias de coisas para tentar. Elas não são de forma alguma totalmente
abrangentes, e você deve se sentir livre para tentar ideias criativas não representadas aqui.
Pior Melhorar
Como faço para Como faço para somar uma linha de valores em dólar no Excel? Quero fazer isso
adicionar números no automaticamente para uma planilha inteira de linhas com todos os totais terminando à
Excel? direita em uma coluna chamada "Total".
Quem é o presidente? Quem foi o presidente do México em 2021 e com que frequência são realizadas
eleições?
Escreva código para Escreva uma função TypeScript para calcular eficientemente a sequência de Fibonacci.
calcular a sequência de Comente o código generosamente para explicar o que cada parte faz e por que está
Fibonacci. escrito dessa forma.
Resuma as notas da Resuma as notas da reunião em um único parágrafo. Em seguida, escreva uma lista
reunião. de markdown dos palestrantes e cada um dos seus pontos principais. Por fim, liste os
próximos passos ou itens de ação sugeridos pelos palestrantes, se houver.
SISTEMA Quando eu pedir ajuda para escrever algo, você responderá com um documento
que contenha pelo menos uma piada ou comentário brincalhão em cada
parágrafo.
USUÁRIO Escreva uma nota de agradecimento ao meu fornecedor de parafusos de aço por
entregar a tempo e em pouco tempo. Isso nos possibilitou entregar um pedido
importante.
Com base em avaliações internas, o gpt-4.5-preview modelo tem uma mensagem de sistema
específica que resulta em melhor desempenho. Adicione seu próprio conteúdo de mensagem de
sistema depois disso:
USUÁRIO Resuma o texto delimitado por aspas triplas com um haicai. """insira o texto
aqui"""
SISTEMA Você receberá um par de artigos (delimitados com tags XML) sobre o mesmo
tópico. Primeiro, resuma os argumentos de cada artigo. Então, indique qual deles
faz um argumento melhor e explique o porquê.
USUÁRIO <article> insira o primeiro artigo aqui </article> <article> insira o segundo artigo
aqui </article>
SISTEMA Você receberá um resumo de tese e um título sugerido para ele. O título da tese
deve dar ao leitor uma boa ideia do tópico da tese, mas também deve ser
chamativo. Se o título não atender a esses critérios, sugira 5 alternativas.
Para tarefas simples como essas, usar delimitadores pode não fazer diferença na qualidade da
saída. No entanto, quanto mais complexa for uma tarefa, mais importante será desambiguar os
detalhes da tarefa. Não faça o modelo funcionar para entender exatamente o que você está pedindo
a eles.
ASSISTENTE O rio que esculpe o vale mais profundo flui de uma fonte modesta; a mais
grandiosa sinfonia se origina de uma única nota; a tapeçaria mais intrincada
começa com um fio solitário.
USUÁRIO Resuma o texto delimitado por aspas triplas em cerca de 50 palavras. """insira o
texto aqui"""
USUÁRIO Resuma o texto delimitado por aspas triplas em 2 parágrafos. """insira o texto
aqui"""
USUÁRIO Resuma o texto delimitado por aspas triplas em 3 marcadores. """insira o texto
aqui"""
SISTEMA Use os artigos fornecidos delimitados por aspas triplas para responder perguntas.
Se a resposta não puder ser encontrada nos artigos, escreva "I couldn't find an
answer."
USUÁRIO <inserir artigos, cada um delimitado por aspas triplas> Pergunta: <inserir pergunta
aqui>
Dado que todos os modelos têm janelas de contexto limitadas, precisamos de alguma forma de
procurar dinamicamente informações que sejam relevantes para a pergunta que está sendo
feita. Embeddings podem ser usados para implementar recuperação de conhecimento eficiente. Veja
a tática "Use embeddings-based search to implement efficient knowledge retrieval" para mais
detalhes sobre como implementar isso.
SISTEMA Você receberá um documento delimitado por aspas triplas e uma pergunta. Sua
tarefa é responder à pergunta usando apenas o documento fornecido e citar a(s)
passagem(ões) do documento usada(s) para responder à pergunta. Se o
documento não contiver as informações necessárias para responder a esta
pergunta, então simplesmente escreva: "Informações insuficientes". Se uma
resposta à pergunta for fornecida, ela deve ser anotada com uma citação. Use o
seguinte formato para citar passagens relevantes ({"citation": …}).
Suponha, por exemplo, que para um aplicativo de atendimento ao cliente, as consultas poderiam ser
classificadas de forma útil da seguinte forma:
Com base na classificação da consulta do cliente, um conjunto de instruções mais específicas pode
ser fornecido a um modelo para que ele lide com as próximas etapas. Por exemplo, suponha que o
cliente precise de ajuda com "solução de problemas".
Tática: Para aplicações de diálogo que exigem conversas muito longas, resuma ou filtre
diálogos anteriores
Como os modelos têm um comprimento de contexto fixo, o diálogo entre um usuário e um
assistente, no qual toda a conversa é incluída na janela de contexto, não pode continuar
indefinidamente.
Há várias soluções alternativas para esse problema, uma das quais é resumir turnos anteriores na
conversa. Quando o tamanho da entrada atinge um comprimento limite predeterminado, isso pode
disparar uma consulta que resume parte da conversa e o resumo da conversa anterior pode ser
incluído como parte da mensagem do sistema. Alternativamente, a conversa anterior pode ser
resumida de forma assíncrona em segundo plano durante toda a conversa.
Uma solução alternativa é selecionar dinamicamente partes anteriores da conversa que são mais
relevantes para a consulta atual. Veja a tática "Use embeddings-based search to implement efficient
knowledge retrieval" .
Para resumir um documento muito longo, como um livro, podemos usar uma sequência de consultas
para resumir cada seção do documento. Resumos de seção podem ser concatenados e resumidos
produzindo resumos de resumos. Esse processo pode prosseguir recursivamente até que um
documento inteiro seja resumido. Se for necessário usar informações sobre seções anteriores para
dar sentido às seções posteriores, então um truque adicional que pode ser útil é incluir um resumo
contínuo do texto que precede qualquer ponto dado no livro enquanto resume o conteúdo naquele
ponto. A eficácia desse procedimento para resumir livros foi estudada em pesquisas anteriores pela
OpenAI usando variantes do GPT-3.
Mas a solução do aluno não está correta! Podemos fazer com que o modelo perceba isso com
sucesso solicitando que o modelo gere sua própria solução primeiro.
SISTEMA Primeiro, elabore sua própria solução para o problema. Depois, compare sua
solução com a solução do aluno e avalie se a solução do aluno está correta ou
não. Não decida se a solução do aluno está correta até que você mesmo tenha
resolvido o problema.
Tática: Use um monólogo interno ou uma sequência de perguntas para ocultar o processo
de raciocínio do modelo
A tática anterior demonstra que às vezes é importante para o modelo raciocinar em detalhes sobre
um problema antes de responder a uma pergunta específica. Para algumas aplicações, o processo
de raciocínio que um modelo usa para chegar a uma resposta final seria inapropriado para
compartilhar com o usuário. Por exemplo, em aplicações de tutoria, podemos querer encorajar os
alunos a elaborar suas próprias respostas, mas o processo de raciocínio de um modelo sobre a
solução do aluno pode revelar a resposta ao aluno.
O monólogo interno é uma tática que pode ser usada para mitigar isso. A ideia do monólogo interno
é instruir o modelo a colocar partes da saída que devem ser ocultadas do usuário em um formato
estruturado que facilite a análise sintática. Então, antes de apresentar a saída ao usuário, a saída é
analisada e apenas parte da saída é tornada visível.
SISTEMA Siga estas etapas para responder às perguntas do usuário. Etapa 1 - Primeiro,
elabore sua própria solução para o problema. Não confie na solução do aluno,
pois ela pode estar incorreta. Coloque todo o seu trabalho para esta etapa entre
aspas triplas ("""). Etapa 2 - Compare sua solução com a solução do aluno e
avalie se a solução do aluno está correta ou não. Coloque todo o seu trabalho
para esta etapa entre aspas triplas ("""). Etapa 3 - Se o aluno cometeu um erro,
determine qual dica você poderia dar ao aluno sem revelar a resposta. Coloque
todo o seu trabalho para esta etapa entre aspas triplas ("""). Etapa 4 - Se o aluno
cometeu um erro, forneça a dica da etapa anterior ao aluno (fora das aspas
triplas). Em vez de escrever "Etapa 4 - ..." escreva "Dica:".
Alternativamente, isso pode ser alcançado com uma sequência de consultas em que todas, exceto a
última, tenham sua saída oculta do usuário final.
Primeiro, podemos pedir ao modelo para resolver o problema sozinho. Como essa consulta inicial
não requer a solução do aluno, ela pode ser omitida. Isso fornece a vantagem adicional de que não
há chance de que a solução do modelo seja enviesada pela tentativa de solução do aluno.
Em seguida, podemos fazer com que o modelo use todas as informações disponíveis para avaliar a
correção da solução do aluno.
SISTEMA Compare sua solução com a solução do aluno e avalie se a solução do aluno está
correta ou não.
Por fim, podemos deixar que o modelo use sua própria análise para construir uma resposta na
persona de um tutor prestativo.
SISTEMA Você é um tutor de matemática. Se o aluno cometeu um erro, ofereça uma dica
ao aluno de uma forma que não revele a resposta. Se o aluno não cometeu um
erro, simplesmente ofereça a ele um comentário encorajador.
Tática: Pergunte ao modelo se ele perdeu alguma coisa nas passagens anteriores
Suponha que estamos usando um modelo para listar trechos de uma fonte que são relevantes para
uma questão específica. Após listar cada trecho, o modelo precisa determinar se deve começar a
escrever outro ou se deve parar. Se o documento de origem for grande, é comum que um modelo
pare muito cedo e não consiga listar todos os trechos relevantes. Nesse caso, um melhor
desempenho pode ser obtido solicitando ao modelo consultas de acompanhamento para encontrar
quaisquer trechos que ele perdeu em passagens anteriores.
SISTEMA Você receberá um documento delimitado por aspas triplas. Sua tarefa é
selecionar trechos que pertençam à seguinte pergunta: "Quais mudanças
significativas de paradigma ocorreram na história da inteligência artificial."
Certifique-se de que os trechos contenham todo o contexto relevante necessário
para interpretá-los - em outras palavras, não extraia pequenos trechos que
estejam faltando contexto importante. Forneça a saída no formato JSON da
seguinte forma: [{"excerpt": "..."}, ... {"excerpt": "..."}]
ASSISTENTE [{"excerpt": "o modelo escreve um trecho aqui"}, ... {"excerpt": "o modelo escreve
outro trecho aqui"}]
USUÁRIO Há trechos mais relevantes? Tome cuidado para não repetir trechos. Também
garanta que os trechos contenham todo o contexto relevante necessário para
interpretá-los - em outras palavras, não extraia pequenos trechos que estejam
faltando contexto importante.
Um embedding de texto é um vetor que pode medir a relação entre sequências de texto. Sequências
de caracteres semelhantes ou relevantes estarão mais próximas umas das outras do que
sequências de caracteres não relacionadas. Esse fato, juntamente com a existência de algoritmos de
busca de vetores rápidos, significa que embeddings podem ser usados para implementar
recuperação de conhecimento eficiente. Em particular, um corpus de texto pode ser dividido em
pedaços, e cada pedaço pode ser incorporado e armazenado. Então, uma determinada consulta
pode ser incorporada e a busca de vetores pode ser realizada para encontrar os pedaços de texto
incorporados do corpus que são mais relacionados à consulta (ou seja, mais próximos no espaço de
incorporação).
Exemplos de implementações podem ser encontrados no OpenAI Cookbook . Veja a tática “Instruir o
modelo a usar conhecimento recuperado para responder a consultas” para um exemplo de como
usar a recuperação de conhecimento para minimizar a probabilidade de um modelo inventar fatos
incorretos.
Tática: Use a execução de código para realizar cálculos mais precisos ou chamar APIs
externas
Não se pode confiar que modelos de linguagem realizem cálculos aritméticos ou longos com
precisão por conta própria. Em casos em que isso é necessário, um modelo pode ser instruído a
escrever e executar código em vez de fazer seus próprios cálculos. Em particular, um modelo pode
ser instruído a colocar código que deve ser executado em um formato designado, como triplo acento
grave. Após uma saída ser produzida, o código pode ser extraído e executado. Finalmente, se
necessário, a saída do mecanismo de execução de código (ou seja, interpretador Python) pode ser
fornecida como uma entrada para o modelo para a próxima consulta.
SISTEMA Você pode escrever e executar código Python colocando-o entre acentos graves
triplos, por exemplo, ```code goes here```. Use isso para executar cálculos.
USUÁRIO Encontre todas as raízes de valor real do seguinte polinômio: 3*x**5 - 5*x**4 -
3*x**3 - 7*x - 10.
Outro bom caso de uso para execução de código é chamar APIs externas. Se um modelo for
instruído sobre o uso adequado de uma API, ele pode escrever código que faça uso dela. Um
modelo pode ser instruído sobre como usar uma API fornecendo a ele documentação e/ou amostras
de código mostrando como usar a API.
SISTEMA Você pode escrever e executar código Python colocando-o entre acentos graves
triplos. Observe também que você tem acesso ao seguinte módulo para ajudar os
usuários a enviar mensagens para seus amigos: ```python import message
[Link](to="John", message="Hey, want to meetup after work?")```
AVISO: Executar código produzido por um modelo não é inerentemente seguro e precauções devem
ser tomadas em qualquer aplicativo que busque fazer isso. Em particular, um ambiente de execução
de código em sandbox é necessário para limitar os danos que um código não confiável pode causar.
Procedimentos de avaliação (ou "evals") são úteis para otimizar projetos de sistemas. Boas evals
são:
30% ~10
10% ~100
3% ~1.000
1% ~10.000
A avaliação de saídas pode ser feita por computadores, humanos ou uma mistura. Os computadores
podem automatizar evals com critérios objetivos (por exemplo, perguntas com respostas corretas
únicas), bem como alguns critérios subjetivos ou fuzzy, nos quais as saídas do modelo são avaliadas
por outras consultas do modelo. OpenAI Evals é uma estrutura de software de código aberto que
fornece ferramentas para criar evals automatizadas.
As avaliações baseadas em modelos podem ser úteis quando há uma gama de saídas possíveis
que seriam consideradas igualmente altas em qualidade (por exemplo, para perguntas com
respostas longas). O limite entre o que pode ser avaliado realisticamente com uma avaliação
baseada em modelos e o que requer um humano para avaliar é difuso e está constantemente
mudando à medida que os modelos se tornam mais capazes. Nós encorajamos a experimentação
para descobrir o quão bem as avaliações baseadas em modelos podem funcionar para seu caso de
uso.
SISTEMA Você receberá um texto delimitado por aspas triplas que deve ser a resposta a
uma pergunta. Verifique se as seguintes informações estão contidas diretamente
na resposta: - Neil Armstrong foi a primeira pessoa a andar na lua. - A data em
que Neil Armstrong andou pela primeira vez na lua foi 21 de julho de 1969. Para
cada um desses pontos, execute as seguintes etapas: 1 - Reafirme o ponto. 2 -
Forneça uma citação da resposta que seja mais próxima deste ponto. 3 -
Considere se alguém lendo a citação que não conhece o tópico poderia inferir
diretamente o ponto. Explique por que sim ou por que não antes de se decidir. 4 -
Escreva "sim" se a resposta para 3 foi sim, caso contrário, escreva "não". Por fim,
forneça uma contagem de quantas respostas "sim" existem. Forneça esta
contagem como {"count": <insira a contagem aqui>}.
USUÁRIO """Neil Armstrong é famoso por ser o primeiro humano a pisar na Lua. Este evento
histórico ocorreu em 21 de julho de 1969, durante a missão Apollo 11."""
USUÁRIO """Neil Armstrong fez história quando desceu do módulo lunar, tornando-se a
primeira pessoa a andar na Lua."""
USUÁRIO """No verão de 69, uma viagem grandiosa, Apollo 11, ousada como a mão da
lenda. Armstrong deu um passo, a história se desenrolou, "Um pequeno passo",
ele disse, para um novo mundo."""
Há muitas variantes possíveis neste tipo de avaliação baseada em modelo. Considere a seguinte
variação que rastreia o tipo de sobreposição entre a resposta candidata e a resposta padrão-ouro, e
também rastreia se a resposta candidata contradiz qualquer parte da resposta padrão-ouro.
Aqui está um exemplo de entrada com uma resposta abaixo do padrão, mas que, no entanto, não
contradiz a resposta do especialista:
USUÁRIO Pergunta: """Por qual evento Neil Armstrong é mais famoso e em que data ele
ocorreu? Suponha que seja UTC.""" Resposta enviada: """Ele não andou na lua
ou algo assim?""" Resposta de especialista: """Neil Armstrong é mais famoso por
ser a primeira pessoa a andar na lua. Este evento histórico ocorreu em 21 de
julho de 1969."""
Aqui está um exemplo de entrada com uma resposta que contradiz diretamente a resposta do
especialista:
USUÁRIO Pergunta: """Por qual evento Neil Armstrong é mais famoso e em que data ele
ocorreu? Suponha que seja o horário UTC.""" Resposta enviada: """Em 21 de
julho de 1969, Neil Armstrong se tornou a segunda pessoa a andar na lua, depois
de Buzz Aldrin.""" Resposta de especialista: """Neil Armstrong é mais famoso por
ser a primeira pessoa a andar na lua. Este evento histórico ocorreu em 21 de
julho de 1969."""
Aqui está um exemplo de entrada com uma resposta correta que também fornece um pouco mais de
detalhes do que o necessário:
USUÁRIO Pergunta: """Por qual evento Neil Armstrong é mais famoso e em que data ele
ocorreu? Suponha o horário UTC.""" Resposta enviada: """Aproximadamente às
02:56 UTC de 21 de julho de 1969, Neil Armstrong se tornou o primeiro humano a
pisar na superfície lunar, marcando uma conquista monumental na história da
humanidade.""" Resposta de especialista: """Neil Armstrong é mais famoso por
ser a primeira pessoa a andar na lua. Este evento histórico ocorreu em 21 de
julho de 1969."""
Precisão Garanta que o modelo Respostas precisas exigem que o modelo tenha todas as informações
produza respostas precisas e necessárias para gerar uma resposta e saiba como criar uma resposta
úteis aos seus prompts. (da interpretação da entrada à formatação e estilo). Frequentemente,
isso exigirá uma mistura de engenharia de prompt , RAG e ajuste fino
do modelo .
Custo Reduza o custo total de uso Para controlar custos, você pode tentar usar menos tokens ou modelos
de modelos reduzindo o uso menores e mais baratos. Saiba mais sobre otimização para custo .
de tokens e usando modelos
mais baratos quando
possível.
Latência Diminua o tempo necessário Otimizar para baixa latência é um processo multifacetado, incluindo
para gerar respostas aos engenharia rápida e paralelismo em seu próprio código. Saiba mais
seus prompts. sobre otimizar para latência .
Outros recursos
Para mais inspiração, visite o OpenAI Cookbook , que contém código de exemplo e também links
para recursos de terceiros, como: