0% acharam este documento útil (0 voto)
4 visualizações19 páginas

Estratégias de Engenharia de Prompts

O documento aborda estratégias de engenharia rápida para otimizar a criação de prompts em modelos de linguagem, destacando a importância de instruções claras e contextuais. Ele descreve diferentes papéis de mensagens (user, developer, assistant) e táticas para melhorar a relevância das respostas, como fornecer exemplos e dividir tarefas complexas. Além disso, sugere o uso de ferramentas externas e a importância de testar mudanças sistematicamente para aprimorar o desempenho do modelo.

Enviado por

anasvendas10
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações19 páginas

Estratégias de Engenharia de Prompts

O documento aborda estratégias de engenharia rápida para otimizar a criação de prompts em modelos de linguagem, destacando a importância de instruções claras e contextuais. Ele descreve diferentes papéis de mensagens (user, developer, assistant) e táticas para melhorar a relevância das respostas, como fornecer exemplos e dividir tarefas complexas. Além disso, sugere o uso de ferramentas externas e a importância de testar mudanças sistematicamente para aprimorar o desempenho do modelo.

Enviado por

anasvendas10
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Engenharia rápida Copiar página

Melhore os resultados com estratégias de engenharia rápidas.

O processo de criação de prompts para obter a saída correta de um modelo é chamado


de engenharia de prompts . Você pode melhorar a saída dando ao modelo instruções precisas,
exemplos e informações de contexto necessárias — como informações privadas ou especializadas
não incluídas nos dados de treinamento do modelo.

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.

PAPEL DESCRIÇÃO EXEMPLO DE USO

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.

Agora, qualquer resposta a uma user mensagem deve


ter uma personalidade e um tom de beldade sulista.

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:

Usando a API de Respostas

1 const response = await [Link]({


2 model: "gpt-4o",
3 messages: [
4 {
5 "role": "developer",
6 "content": [
7 {
8 "type": "text",
9 "text": `
10 You are a helpful assistant that answers programming
11 questions in the style of a southern belle from the
12 southeast United States.
13 `
14 }
15 ]
16 },
17 {
18 "role": "user",
19 "content": [
20 {
21 "type": "text",
22 "text": "Are semicolons optional in JavaScript?"
23 }
24 ]
25 }
26 ],
27 store: true,
28 });

Este prompt retorna uma saída de texto no estilo retórico solicitado:

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.

Usando a API de conclusões de bate-papo


1 const response = await [Link]({
2 model: "gpt-4o",
3 messages: [
4 {
5 "role": "developer",
6 "content": [
7 {
8 "type": "text",
9 "text": `
10 You are a helpful assistant that answers programming
11 questions in the style of a southern belle from the
12 southeast United States.
13 `
14 }
15 ]
16 },
17 {
18 "role": "user",
19 "content": [
20 {
21 "type": "text",
22 "text": "Are semicolons optional in JavaScript?"
23 }
24 ]
25 }
26 ],
27 store: true,
28 });

Este prompt retorna uma saída de texto no estilo retórico solicitado:

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.

Fornecendo ao modelo dados adicionais para uso na geração


Você também pode usar os tipos de mensagem acima para fornecer informações adicionais ao
modelo, fora de seus dados de treinamento. Você pode querer incluir os resultados de uma consulta
de banco de dados, um documento de texto ou outros recursos para ajudar o modelo a gerar uma
resposta relevante. Essa técnica é frequentemente chamada de geração aumentada de
recuperação , ou RAG. Saiba mais sobre técnicas de RAG .
Este guia compartilha estratégias e táticas para obter melhores resultados de grandes modelos de
linguagem (às vezes chamados de modelos GPT) como GPT-4o. Os métodos descritos aqui podem
às vezes ser implantados em combinação para maior efeito. Incentivamos a experimentação para
encontrar os métodos que funcionam melhor para você.

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

Seis estratégias para obter melhores resultados


Escreva instruções claras
Esses modelos não conseguem ler sua mente. Se as saídas forem muito longas, peça respostas
breves. Se as saídas forem muito simples, peça uma escrita de nível especializado. Se você não
gostar do formato, demonstre o formato que gostaria de ver. Quanto menos o modelo tiver que
adivinhar o que você quer, mais provável será que você consiga.

Táticas:

Inclua detalhes em sua consulta para obter respostas mais relevantes

Peça para a modelo adotar uma persona

Use delimitadores para indicar claramente partes distintas da entrada

Especifique as etapas necessárias para concluir uma tarefa

Fornecer exemplos
Especifique o comprimento desejado da saída

Forneça texto de referência


Os modelos de linguagem podem inventar respostas falsas com confiança, especialmente quando
questionados sobre tópicos esotéricos ou para citações e URLs. Da mesma forma que uma folha de
anotações pode ajudar um aluno a se sair melhor em um teste, fornecer texto de referência para
esses modelos pode ajudar a responder com menos invenções.

Táticas:

Instrua o modelo a responder usando um texto de referência


Instrua o modelo a responder com citações de um texto de referência

Divida tarefas complexas em subtarefas mais simples


Assim como é uma boa prática na engenharia de software decompor um sistema complexo em um
conjunto de componentes modulares, o mesmo é verdadeiro para tarefas submetidas a um modelo
de linguagem. Tarefas complexas tendem a ter taxas de erro mais altas do que tarefas mais simples.
Além disso, tarefas complexas podem frequentemente ser redefinidas como um fluxo de trabalho de
tarefas mais simples em que as saídas de tarefas anteriores são usadas para construir as entradas
para tarefas posteriores.

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

Resuma documentos longos por partes e construa um resumo completo recursivamente

Dê tempo ao modelo para "pensar"


Se lhe pedirem para multiplicar 17 por 28, você pode não saber instantaneamente, mas ainda pode
descobrir com o tempo. Da mesma forma, os modelos cometem mais erros de raciocínio ao tentar
responder imediatamente, em vez de levar tempo para descobrir uma resposta. Pedir uma "cadeia
de pensamento" antes de uma resposta pode ajudar o modelo a raciocinar seu caminho para
respostas corretas de forma mais confiável.

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

Pergunte ao modelo se ele perdeu alguma coisa nas passagens anteriores

Use ferramentas externas


Compense as fraquezas do modelo alimentando-o com as saídas de outras ferramentas. Por
exemplo, um sistema de recuperação de texto (às vezes chamado de RAG ou geração aumentada
de recuperação) pode informar o modelo sobre documentos relevantes. Um mecanismo de
execução de código como o Code Interpreter da OpenAI pode ajudar o modelo a fazer contas e
executar código. Se uma tarefa puder ser feita de forma mais confiável ou eficiente por uma
ferramenta do que por um modelo de linguagem, descarregue-a para obter o melhor de ambos.

Táticas:

Use a pesquisa baseada em embeddings para implementar a recuperação eficiente do


conhecimento
Use a execução de código para realizar cálculos mais precisos ou chamar APIs externas

Dê ao modelo acesso a funções específicas

Teste as mudanças sistematicamente


Melhorar o desempenho é mais fácil se você puder medi-lo. Em alguns casos, uma modificação em
um prompt alcançará melhor desempenho em alguns exemplos isolados, mas levará a um pior
desempenho geral em um conjunto mais representativo de exemplos. Portanto, para ter certeza de
que uma mudança é positiva líquida para o desempenho, pode ser necessário definir um conjunto de
testes abrangente (também conhecido como "eval").

Tática:

Avalie as saídas do modelo com referência às respostas padrão-ouro

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.

Estratégia: Escreva instruções claras


Tática: inclua detalhes em sua consulta para obter respostas mais relevantes
Para obter uma resposta altamente relevante, certifique-se de que as solicitações forneçam
quaisquer detalhes ou contextos importantes. Caso contrário, você estará deixando para o modelo
adivinhar o que você quer dizer.

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.

Tática: Peça ao modelo para adotar uma persona


A mensagem do sistema pode ser usada para especificar a persona usada pelo modelo em suas
respostas.

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:

SISTEMA Você é um assistente altamente capaz, atencioso e preciso. Seu objetivo é


entender profundamente a intenção do usuário, fazer perguntas esclarecedoras
quando necessário, pensar passo a passo em problemas complexos, fornecer
respostas claras e precisas e antecipar proativamente informações úteis de
acompanhamento. Sempre priorize ser verdadeiro, matizado, perspicaz e
eficiente, adaptando suas respostas especificamente às necessidades e
preferências do usuário.

Tática: Use delimitadores para indicar claramente partes distintas da entrada


Delimitadores como aspas triplas, tags XML, títulos de seção, etc. podem ajudar a demarcar seções
de texto a serem tratadas de forma diferente.

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.

USUÁRIO Resumo: insira o resumo aqui Título: insira o título aqui

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.

Tática: Especifique as etapas necessárias para concluir uma tarefa


Algumas tarefas são melhor especificadas como uma sequência de passos. Escrever os passos
explicitamente pode tornar mais fácil para o modelo segui-los.

SISTEMA Use as seguintes instruções passo a passo para responder às entradas do


usuário. Etapa 1 - O usuário fornecerá a você um texto entre aspas triplas.
Resuma este texto em uma frase com um prefixo que diga "Resumo: ". Etapa 2 -
Traduza o resumo da Etapa 1 para o espanhol, com um prefixo que diga
"Tradução: ".

USUÁRIO """insira texto aqui"""

Tática: Forneça exemplos


Fornecer instruções gerais que se aplicam a todos os exemplos é geralmente mais eficiente do que
demonstrar todas as permutações de uma tarefa por exemplo, mas em alguns casos fornecer
exemplos pode ser mais fácil. Por exemplo, se você pretende que o modelo copie um estilo
particular de resposta a consultas de usuários que é difícil de descrever explicitamente. Isso é
conhecido como prompting "few-shot".

SISTEMA Responda de forma consistente.

USUÁRIO Ensina-me sobre paciência.

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 Ensine-me sobre o oceano.

Tática: Especifique o comprimento desejado da saída


Você pode pedir ao modelo para produzir saídas que sejam de um determinado comprimento alvo. O
comprimento alvo da saída pode ser especificado em termos de contagem de palavras, frases,
parágrafos, marcadores, etc. Observe, no entanto, que instruir o modelo a gerar um número
específico de palavras não funciona com alta precisão. O modelo pode gerar saídas de forma mais
confiável com um número específico de parágrafos ou marcadores.

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"""

Estratégia: Fornecer texto de referência


Tática: Instrua o modelo a responder usando um texto de referência
Se pudermos fornecer a um modelo informações confiáveis ​que sejam relevantes para a consulta
atual, poderemos instruir o modelo a usar as informações fornecidas para compor sua resposta.

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.

Tática: Instrua o modelo a responder com citações de um texto de referência


Se a entrada tiver sido suplementada com conhecimento relevante, é simples solicitar que o modelo
adicione citações às suas respostas referenciando passagens de documentos fornecidos. Observe
que as citações na saída podem ser verificadas programaticamente por correspondência de strings
dentro dos documentos fornecidos.

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": …}).

USUÁRIO """<inserir documento aqui>""" Pergunta: <inserir pergunta aqui>

Estratégia: Divida tarefas complexas em subtarefas mais simples


Tática: Use a classificação de intenção para identificar as instruções mais relevantes para
uma consulta do usuário
Para tarefas nas quais muitos conjuntos independentes de instruções são necessários para lidar
com casos diferentes, pode ser benéfico primeiro classificar o tipo de consulta e usar essa
classificação para determinar quais instruções são necessárias. Isso pode ser alcançado definindo
categorias fixas e codificando instruções que são relevantes para lidar com tarefas em uma
determinada categoria. Esse processo também pode ser aplicado recursivamente para decompor
uma tarefa em uma sequência de estágios. A vantagem dessa abordagem é que cada consulta
conterá apenas as instruções necessárias para executar o próximo estágio de uma tarefa, o que
pode resultar em taxas de erro mais baixas em comparação ao uso de uma única consulta para
executar a tarefa inteira. Isso também pode resultar em custos mais baixos, pois prompts maiores
custam mais para serem executados ( consulte as informações de preços ).

Suponha, por exemplo, que para um aplicativo de atendimento ao cliente, as consultas poderiam ser
classificadas de forma útil da seguinte forma:

SISTEMA Você receberá consultas de atendimento ao cliente. Classifique cada consulta em


uma categoria primária e uma categoria secundária. Forneça sua saída no
formato json com as chaves: primária e secundária. Categorias primárias:
Cobrança, Suporte técnico, Gerenciamento de conta ou Consulta geral.
Categorias secundárias de cobrança: - Cancelar assinatura ou atualizar -
Adicionar um método de pagamento - Explicação para cobrança - Contestar uma
cobrança Categorias secundárias de suporte técnico: - Solução de problemas -
Compatibilidade de dispositivos - Atualizações de software Categorias
secundárias de gerenciamento de conta: - Redefinição de senha - Atualizar
informações pessoais - Fechar conta - Segurança da conta Categorias
secundárias de consulta geral: - Informações do produto - Preços - Feedback -
Fale com um humano

USUÁRIO Preciso fazer minha internet funcionar novamente.

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".

SISTEMA Você receberá consultas de atendimento ao cliente que exigem solução de


problemas em um contexto de suporte técnico. Ajude o usuário: - Peça para
verificar se todos os cabos de/para o roteador estão conectados. Observe que é
comum que os cabos se soltem com o tempo. - Se todos os cabos estiverem
conectados e o problema persistir, pergunte qual modelo de roteador ele está
usando. - Agora você o aconselhará sobre como reiniciar o dispositivo: -- Se o
número do modelo for MTD-327J, aconselhe-o a apertar o botão vermelho e
mantê-lo pressionado por 5 segundos, depois aguarde 5 minutos antes de testar
a conexão. -- Se o número do modelo for MTD-327S, aconselhe-o a desconectá-
lo e reconectá-lo, depois aguarde 5 minutos antes de testar a conexão. - Se o
problema do cliente persistir após reiniciar o dispositivo e aguardar 5 minutos,
conecte-o ao suporte de TI exibindo {"Suporte de TI solicitado"}. - Se o usuário
começar a fazer perguntas não relacionadas a este tópico, confirme se ele
gostaria de encerrar o bate-papo atual sobre solução de problemas e classifique
sua solicitação de acordo com o seguinte esquema: <insira aqui o esquema de
classificação primário/secundário acima>

USUÁRIO Preciso fazer minha internet funcionar novamente.


Observe que o modelo foi instruído a emitir strings especiais para indicar quando o estado da
conversa muda. Isso nos permite transformar nosso sistema em uma máquina de estado onde o
estado determina quais instruções são injetadas. Ao manter o controle do estado, quais instruções
são relevantes naquele estado e também, opcionalmente, quais transições de estado são permitidas
a partir daquele estado, podemos colocar barreiras de proteção em torno da experiência do usuário
que seriam difíceis de alcançar com uma abordagem menos estruturada.

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" .

Tática: Resumir documentos longos por partes e construir um resumo completo


recursivamente
Como os modelos têm um comprimento de contexto fixo, eles não podem ser usados ​para resumir
um texto maior que o comprimento do contexto menos o comprimento do resumo gerado em uma
única consulta.

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.

Estratégia: Dê tempo aos modelos para “pensar”


Tática: Instrua o modelo a elaborar sua própria solução antes de tirar uma conclusão
precipitada
Às vezes, obtemos melhores resultados quando instruímos explicitamente o modelo a raciocinar a
partir dos primeiros princípios antes de chegar a uma conclusão. Suponha, por exemplo, que
queremos que um modelo avalie a solução de um aluno para um problema de matemática. A
maneira mais óbvia de abordar isso é simplesmente perguntar ao modelo se a solução do aluno está
correta ou não.

SISTEMA Determine se a solução do aluno está correta ou não.

USUÁRIO Declaração do problema: Estou construindo uma instalação de energia solar e


preciso de ajuda para resolver as finanças. - O terreno custa US$ 100/pé
quadrado - Posso comprar painéis solares por US$ 250/pé quadrado - Negociei
um contrato de manutenção que me custará US$ 100 mil por ano e mais US$
10/pé quadrado Qual é o custo total do primeiro ano de operação em função do
número de pés quadrados? Solução do aluno: Seja x o tamanho da instalação em
pés quadrados. 1. Custo do terreno: 100x 2. Custo do painel solar: 250x 3. Custo
de manutenção: 100.000 + 100x Custo total: 100x + 250x + 100.000 + 100x =
450x + 100.000

ASSISTENTE A solução do aluno está correta.

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.

USUÁRIO Declaração do problema: Estou construindo uma instalação de energia solar e


preciso de ajuda para resolver as finanças. - O terreno custa US$ 100/pé
quadrado - Posso comprar painéis solares por US$ 250/pé quadrado - Negociei
um contrato de manutenção que me custará US$ 100 mil por ano e mais US$
10/pé quadrado Qual é o custo total do primeiro ano de operação em função do
número de pés quadrados? Solução do aluno: Seja x o tamanho da instalação em
pés quadrados. 1. Custo do terreno: 100x 2. Custo do painel solar: 250x 3. Custo
de manutenção: 100.000 + 100x Custo total: 100x + 250x + 100.000 + 100x =
450x + 100.000

ASSISTENTE Seja x o tamanho da instalação em pés quadrados. 1. Custo do terreno: 100x 2.


Custo do painel solar: 250x 3. Custo de manutenção: 100.000 + 10x Custo total:
100x + 250x + 100.000 + 10x = 360x + 100.000 A solução do aluno está incorreta.
Eles cometeram um erro no cálculo do custo de manutenção, usando 100x em
vez de 10x. O custo total correto para o primeiro ano de operações é 360x +
100.000.

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:".

USUÁRIO Declaração do problema: <inserir declaração do problema> Solução do aluno:


<inserir solução do aluno>

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.

USUÁRIO <inserir declaração do problema>

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.

USUÁRIO Declaração do problema: """<inserir declaração do problema>""" Sua solução: """


<inserir solução gerada pelo modelo>""" Solução do aluno: """<inserir solução do
aluno>"""

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.

USUÁRIO Declaração do problema: """<inserir declaração do problema>""" Sua solução: """


<inserir solução gerada pelo modelo>""" Solução do aluno: """<inserir solução do
aluno>""" Análise: """<inserir análise gerada pelo modelo da etapa anterior>"""

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": "..."}]

USUÁRIO """<inserir documento aqui>"""

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.

Estratégia: Use ferramentas externas


Tática: Use a pesquisa baseada em embeddings para implementar a recuperação eficiente
do conhecimento
Um modelo pode alavancar fontes externas de informação se fornecidas como parte de sua entrada.
Isso pode ajudar o modelo a gerar respostas mais informadas e atualizadas. Por exemplo, se um
usuário fizer uma pergunta sobre um filme específico, pode ser útil adicionar informações de alta
qualidade sobre o filme (por exemplo, atores, diretor, etc.) à entrada do modelo. Embeddings podem
ser usados ​para implementar recuperação de conhecimento eficiente, para que informações
relevantes possam ser adicionadas à entrada do modelo dinamicamente em tempo de execução.

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.

Tática: Dê ao modelo acesso a funções específicas


A API Chat Completions permite passar uma lista de descrições de funções em solicitações. Isso
permite que os modelos gerem argumentos de função de acordo com os esquemas fornecidos. Os
argumentos de função gerados são retornados pela API no formato JSON e podem ser usados ​para
executar chamadas de função. A saída fornecida pelas chamadas de função pode então ser
realimentada em um modelo na solicitação a seguir para fechar o loop. Esta é a maneira
recomendada de usar modelos OpenAI para chamar funções externas. Para saber mais, consulte
a seção de chamada de função em nosso guia de geração de texto introdutório e mais exemplos de
chamada de função no OpenAI Cookbook.

Estratégia: Testar mudanças sistematicamente


Às vezes pode ser difícil dizer se uma mudança — por exemplo, uma nova instrução ou um novo
design — torna seu sistema melhor ou pior. Olhar para alguns exemplos pode sugerir o que é
melhor, mas com tamanhos de amostra pequenos pode ser difícil distinguir entre uma melhoria real
ou sorte aleatória. Talvez a mudança ajude o desempenho em algumas entradas, mas prejudique o
desempenho em outras.

Procedimentos de avaliação (ou "evals") são úteis para otimizar projetos de sistemas. Boas evals
são:

Representativo do uso no mundo real (ou pelo menos diverso)


Contém muitos casos de teste para maior poder estatístico (veja a tabela abaixo para diretrizes)
Fácil de automatizar ou repetir

DIFERENÇA A DETECTAR TAMANHO DA AMOSTRA NECESSÁRIO PARA 95% DE CONFIANÇA

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.

Tática: Avaliar as saídas do modelo com referência às respostas padrão-ouro


Suponha que se saiba que a resposta correta para uma pergunta deve fazer referência a um
conjunto específico de fatos conhecidos. Então podemos usar uma consulta de modelo para contar
quantos dos fatos necessários estão incluídos na resposta.

Por exemplo, usando a seguinte mensagem do sistema:

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>}.

Aqui está um exemplo de entrada onde ambos os pontos são satisfeitos:

SISTEMA <inserir mensagem do sistema acima>

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."""

Aqui está um exemplo de entrada onde apenas um ponto é satisfeito:

SISTEMA <inserir mensagem do sistema acima>

USUÁRIO """Neil Armstrong fez história quando desceu do módulo lunar, tornando-se a
primeira pessoa a andar na Lua."""

Aqui está um exemplo de entrada onde nenhuma é satisfeita:

SISTEMA <inserir mensagem do sistema acima>

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.

SISTEMA Use as seguintes etapas para responder às entradas do usuário. Reformule


completamente cada etapa antes de prosseguir. ou seja, "Etapa 1: Raciocine...".
Etapa 1: Raciocine passo a passo sobre se as informações na resposta enviada
comparadas à resposta do especialista são: disjuntas, iguais, um subconjunto, um
superconjunto ou sobrepostas (ou seja, alguma interseção, mas não
subconjunto/superconjunto). Etapa 2: Raciocine passo a passo sobre se a
resposta enviada contradiz qualquer aspecto da resposta do especialista. Etapa
3: Produza um objeto JSON estruturado como: {"type_of_overlap": "disjoint" or
"equal" or "subset" or "superset" or "overlapping", "contradiction": true or false}

Aqui está um exemplo de entrada com uma resposta abaixo do padrão, mas que, no entanto, não
contradiz a resposta do especialista:

SISTEMA <inserir mensagem do sistema acima>

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:

SISTEMA <inserir mensagem do sistema acima>

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:

SISTEMA <inserir mensagem do sistema acima>

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."""

Otimizando saídas do modelo


Conforme você itera em seus prompts, você continuamente buscará melhorar a precisão , o
custo e a latência . Abaixo, encontre técnicas que otimizam para cada objetivo.

META TÉCNICAS DISPONÍVEIS

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 .

Saiba mais sobre otimização para precisão .

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:

Bibliotecas e ferramentas de solicitação


Guias de solicitação
Cursos em vídeo
Artigos sobre estímulos avançados para melhorar o raciocínio

Você também pode gostar