paint-brush
Prompt Engineering 101 - II: Dominando Prompt Crafting com Técnicas Avançadaspor@eviotti
12,559 leituras
12,559 leituras

Prompt Engineering 101 - II: Dominando Prompt Crafting com Técnicas Avançadas

por Emiliano Viotti32m2023/06/24
Read on Terminal Reader

Muito longo; Para ler

Prompt Engineering 101 é uma série de blogs meticulosamente projetada para descompactar os princípios e técnicas da Prompt Engineering. Abrange tudo, desde conceitos fundamentais até técnicas avançadas e dicas de especialistas, abrangendo vários modelos, desde ChatGPT até Stable Diffusion e Midjourney. No segundo post desta série, nos aprofundamos em técnicas avançadas, como Cadeia de Pensamento e Autoconsistência, para dominar a elaboração imediata.
featured image - Prompt Engineering 101 - II: Dominando Prompt Crafting com Técnicas Avançadas
Emiliano Viotti HackerNoon profile picture
0-item
1-item
2-item

A imagem da capa apresenta o Macintosh 128K , um computador pessoal lançado pela Apple Inc. em 1984 que mudou a indústria de computadores. Ele incorporou o icônico processador Motorola 68000 de 32 bits, 128 KB de RAM e uma modesta tela integrada em preto e branco.


Além disso, integrou incríveis invenções tecnológicas diretamente do Xerox PARC : o mouse e a primeira interface gráfica do usuário de sua classe (avó das GUIs atuais).


Com mais de 70.000 unidades vendidas, o Macintosh desempenhou um papel fundamental no sucesso da Apple . Um fato curioso, o evento de lançamento foi ainda mais bem sucedido do que o próprio Mac. Com um orçamento de US$ 1,5 milhão, o renomado Ridley Scott dirigiu um comercial de televisão em clara alusão ao icônico romance de Orwell, Nineteen Eighty-Four, que se tornou uma obra-prima e um divisor de águas.


Quase quarenta anos depois, sem um diretor de cinema renomado ou um comercial de televisão, apenas uma simples aplicação web, a OpenAI pegou um Modelo de Linguagem ainda experimental e o abriu para o mundo. O resto da história está nas manchetes: o ChatGPT alcançou 100 milhões de usuários ativos mensais em 23 de janeiro, apenas dois meses após o lançamento, tornando-se o aplicativo de consumo de crescimento mais rápido da história (mais rápido que o TikTok e o Instagram).


Agora, a atenção do mundo está voltada para a indústria de IA e, com os avanços acontecendo toda semana, este ano promete ser um momento crucial para o campo. A melhor parte é que você ainda está a tempo de ingressar no campo da IA e fazer parte desse momento revolucionário da história da humanidade.


A Prompt Engineering 101 é uma série de postagens pensada e escrita para desvendar os princípios e técnicas da prompt engineering, a arte de elaborar textos claros e eficazes, para propor modelos de linguagem e obter exatamente o que você procura. Esta série cobre a engenharia de prompt para uma ampla variedade de modelos generativos, incluindo ChatGPT e outros modelos de texto para texto. Também explora modelos de conversão de texto em imagem, como Stable Diffusion ou Midjourney, e investiga aspectos adicionais de LLMs, como alucinações, problemas de privacidade e segurança e muito mais...


Esta é a postagem nº 2 da série , onde abordaremos técnicas avançadas, como cadeia de pensamento e autoconsistência, para dominar a criação de prompts. Espero que você goste!

Índice

  1. Recapitulação da Engenharia de Prompt
  2. Sugestão de Cadeia de Pensamento
  3. Prompts de encadeamento
  4. Método de Autoconsistência
  5. Solicitação de Função
  6. Perdido na tokenização
  7. Cinco dicas e ferramentas para dominar a criação de prompts

Recapitulação da Engenharia de Prompt

Na primeira parte desta série sobre Engenharia Pronta, mergulhamos nas intuições desta arte e chegamos a uma definição formal. Essencialmente, a Engenharia de Prompt é um processo iterativo de projetar e otimizar prompts claros e específicos para um Modelo de Linguagem Grande para garantir que ele gere respostas relevantes, precisas e coerentes.


Em seguida, examinamos três princípios para elaborar prompts eficazes. Demonstramos que os modelos produzem respostas melhores quando recebem instruções claras e específicas (o primeiro princípio) e discutimos várias táticas para conseguir isso. Em seguida, estabelecemos que os LLMs se beneficiam do tempo computacional e cobrimos algumas táticas para forçar os modelos a raciocinar antes de chegar a uma conclusão (o segundo princípio). Por fim, investigamos o equilíbrio entre especificidade e criatividade (o terceiro princípio), experimentando os parâmetros Temperatura e Top P para explorar esse trade-off.


Você pode ler uma definição mais aprofundada de Prompt Engineering e os fundamentos no link abaixo (muitos exemplos de prompt incluídos!!).


Sugestão de Cadeia de Pensamento

LLMs de grande escala, como GPT-3 ou PaLM, exibiram uma capacidade impressionante de compreensão da linguagem natural e provaram ser extraordinariamente eficazes em tarefas como extrair informações de textos e gerar respostas em um estilo humano consistente. Mesmo assim, o LLM demonstrou ser bastante robusto executando tarefas desconhecidas quando alguns exemplos de tiro são incluídos no prompt. Essa técnica, popularizada porBrown et al. (2020) , tentou aumentar o desempenho do modelo em diversos benchmarks. Sem mencionar que economiza tempo e dinheiro no ajuste fino do modelo para um novo domínio específico.


No entanto, estudos evidenciaram que modelos como esses diminuem abruptamente seu desempenho em tarefas de raciocínio comum ou testes de matemática. Apesar da capacidade de citar o poema épico grego antigo completo A Odisséia, esses modelos lutam com problemas escolares fundamentais em lógica e matemática.





Então, quais opções nós temos? Enviamos GPT-3 por uma temporada para uma escola primária? Felizmente, existe uma alternativa mais barata e menos constrangedora. Você pode imaginar persuadir o diretor da sua escola primária local a aceitar o ChatGPT no meio do semestre?


Semelhante a como os humanos abordam problemas complexos, dividindo-os em subproblemas mais simples e seguindo uma linha de raciocínio lógico, podemos instruir um Modelo de Linguagem a fazer o mesmo. Essa abordagem foi explorada por Wei J et al. em Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (2022) . Ele demonstrou resultados impressionantes em vários benchmarks, confirmando o Chain-of-Thought (CoT) como uma abordagem sólida para melhorar o desempenho dos LLMs em tarefas de raciocínio comum.


Na imagem abaixo (retirada do artigo de Wei J), um modelo LLM chega a uma conclusão incorreta ao calcular o número de maçãs restantes em uma lanchonete. Isso acontece mesmo quando um problema de raciocínio semelhante usando bolas de tênis é fornecido como parte do contexto.

No entanto, quando um processo passo a passo para resolver o problema é incluído no contexto (CoT), o modelo pode chegar com precisão a uma solução válida.



A solicitação de cadeia de pensamento permite que grandes modelos de linguagem lidem com tarefas complexas de raciocínio aritmético, de senso comum e simbólico. Processos de raciocínio em cadeia de pensamento são destacados


Com a cadeia de sugestões de pensamento, os modelos de linguagem de escala suficiente (parâmetros de ~ 100B) podem:

  1. Decomponha problemas de várias etapas em etapas intermediárias, o que significa que computação adicional pode ser alocada para problemas que exigem mais etapas de raciocínio.
  2. Forneça uma janela interpretável para o comportamento do modelo, sugerindo como ele pode ter chegado a uma resposta específica e oferecendo oportunidades para depurar onde o caminho do raciocínio deu errado.
  3. Estenda o campo de aplicação para problemas de palavras matemáticas, raciocínio de senso comum e manipulação simbólica.


Este método pode ser usado fornecendo exemplos de raciocínio ao modelo (poucos disparos) ou nenhum exemplo (zero disparos). Vamos ver os dois tipos na prática com um exemplo de aplicação real.

1. Cadeia de Pensamento Zero-Shot

Imagine que estamos desenvolvendo um novo aplicativo de compras para o Walmart, com o recurso inovador de comparar e selecionar qual produto você deve comprar com base nos preços e atributos das alternativas de diferentes marcas.


Para ilustrar o problema, vamos nos concentrar em uma lista reduzida de todas as opções em Sabonete em Barra que o Walmart tem em suas lojas. Como você pode ver, temos packs de 1 barra a 14 barras e uma variedade de marcas e preços (desde opções baratas até opções caras).


Produtos 🛒

 --- Dove Men+Care 8 bars pack $ 9.99 --- Dove Beauty Bar 4 bars pack $ 6.47 --- Dove Beauty Bar 1 bars $ 1.47 --- Dove Beauty Bar 14 bars pains $ 16 --- Yardley London Soap Bar (Pack of 10) $ 19.99 --- Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack $46.45


Para determinar qual opção é mais conveniente, podemos calcular o preço por barra em cada alternativa (preço unitário). Em seguida, selecione a opção mais barata. Seguindo esse raciocínio, descobrimos que Dove Beauty Bar 14 barras é a opção mais barata com um preço unitário de $ 1,14 (-22% por barra do que Dove Beauty Bar 1 barras ).


Raciocínio 🧠

 - Dove Men+Care 8 bars pack: $1,24875 / unit - Dove Beauty Bar 4 bars pack: 1,6175 / unit - Dove Beauty Bar 1 bars: 1,47 / unit - Dove Beauty Bar 14 bars pains: $1,142857 per / unit - Yardley London Soap Bar (Pack of 10): 1,999 / unit - Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack: $9,29 / unit


Vamos ver se o GPT-4 é inteligente o suficiente para resolver esse problema usando um prompt simples. Além disso, com o objetivo de criar exemplos mais limpos e fáceis de ler, separaremos as instruções do sistema do resto da entrada usando strings literais do Python .


Dica 💬

 prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which is the best option based on the price. <{products}> """


Resposta 🤖

 The best option based on price is Dove Beauty Bar 1 bars for $1.47.


O modelo escolheu a opção mais barata com base no preço total em vez de calcular o preço unitário e identificar uma oportunidade de economia comprando mais barras. Vale a pena apontar alguma ambigüidade na questão. O que significa a melhor opção? Isso significa o mais barato ou aquele que maximiza a economia de dinheiro a longo prazo?


Vamos reescrever o prompt instruindo o modelo a seguir uma cadeia de pensamento para resolver este problema adicionando as palavras mágicas “raciocínio passo a passo” . Além disso, enfatize explicitamente o objetivo de encontrar uma oportunidade de economizar dinheiro.


Dica 💬

 prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which presentation offers the best money-saving opportunity, reasoning step-by-step: <{products}> """


Resposta 🤖

 The first step is to compare price per unit for products of the same type (ie bars of soap). - Dove Men+Care 8 bars pack: $9.99 ÷ 8 bars = $1.25 per bar - Dove Beauty Bar 4 bars pack: $6.47 ÷ 4 bars = $1.62 per bar - Dove Beauty Bar 1 bars: $1.47 per bar - Dove Beauty Bar 14 bars pack: $16 ÷ 14 bars = $1.14 per bar - Yardley London Soap Bar (Pack of 10): $19.99 ÷ 10 bars = $1.99 per bar - Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack: $46.45 ÷ 5 bars = $9.29 per bar Based on this analysis, the best money-saving opportunity is the Dove Beauty Bar 14 bars pack, which offers the lowest price per bar at $1.14.


Observe que com o novo prompt, o modelo dá uma resposta correta e, ao mesmo tempo, temos um raciocínio passo a passo mais fácil de depurar e encontrar possíveis erros. Ainda mais, é impressionante como adicionar as palavras mágicas "raciocínio passo a passo" ao prompt cria uma diferença significativa na saída do modelo. Qual é o truque?


O truque é forçar o modelo a gerar uma cadeia de raciocínio passo a passo (cadeia de pensamento) em vez de simplesmente gerar um valor numérico ou booleano (resultado final). Ao adotar essa estratégia, inicialmente orientamos o modelo para saídas de raciocínio lógico, permitindo que o modelo baseie suas respostas em problemas semelhantes encontrados durante o treinamento. Em segundo lugar, auxiliamos o modelo solicitando que ele decomponha problemas maiores em problemas menores e gerenciáveis. O modelo é então requerido para produzir resultados coerentes para subproblemas simples, como identificar preços e o número de barras em cada pacote, calcular o preço unitário e, finalmente, realizar comparações. Além disso, por causa de como os modelos de linguagem auto-regressivos como GPT-3 ou GPT-4 geram sequências token por token, onde cada novo token é gerado com base em todos os tokens gerados anteriormente, a própria cadeia de pensamento tem uma forte influência positiva na geração de um resultado final coerente.


Em outras palavras, se, por meio de um raciocínio válido, chegarmos a um ponto intermediário da solução correta, nossas chances de chegar a essa solução são maiores do que eram quando começamos a raciocinar sobre o problema.


2. Cadeia de pensamento de poucos tiros

Enquanto em Zero-Shot Chain-of-Thought deixamos o modelo livre para elaborar uma cadeia de raciocínio coerente e válida que leve a um resultado correto, um segundo tipo chamado Few-Shot Chain-of-Thought fornece alguns exemplos de um problema juntamente com uma resposta racional, como parte do prompt. Dessa forma, uma forma de raciocínio é imposta ao modelo, limitando as possíveis respostas.


De volta ao nosso aplicativo do Walmart, suponha que queremos identificar qual apresentação de refrigerante da Coca Cola tem o melhor preço por proporção de onça fluida. Para fazer isso, vamos incorporar no prompt uma cadeia de raciocínio semelhante, para encontrar as melhores apresentações das batatas fritas de Lay.


Dica 💬

 prompt = f""" Q: Walmart has the following presentations for Lay's Classic Potato Chips: a 13 oz bag for $4.98, an 8 oz bag for $2.76, and a pack of x10 units 1 oz each for $6.82. Which presentation has the lowest price by ounce? A: Presentation 1 costs 4.98 so has a price of 4.98/13 = 0,383076923 per ounce. Presentation 2 costs 2.76 so has a price of 2.76/8 = 0,345 / per ounce. Presentation 3 costs 6.82 and includes 10 packages so has a price of 6.82/(1 x 10) = 0.682 per ounce. In conclusion, the cheapest presentation is the second one with a price of 0.345 per ounce. Q: Walmart has the following presentation for Coca-Cola Soda: an x24 pack of 12 fl oz cans for $11.86, an x12 pack of 12 fl oz cans for $7.46, and an x6 pack of 16.9 fl oz bottles for $4.98. Which presentation has the lowest price by fluid ounce? """


Eu encorajo você a fazer suas próprias contas e encontrar o melhor negócio. Você descobrirá que o modelo está correto. Sem dúvidas, com certeza terei o app ChatGPT ao meu lado na minha próxima ida à loja!!


Resposta 🤖

 A: The 24-pack contains a total of 24 x 12 = 288 fluid ounces and costs $11.86, so the price per fluid ounce is 11.86/288 = $0.041 per fluid ounce. The 12-pack contains a total of 12 x 12 = 144 fluid ounces and costs $7.46, so the price per fluid ounce is 7.46/144 = $0.052 per fluid ounce. The 6-pack contains a total of 6 x 16.9 = 101.4 fluid ounces and costs $4.98, so the price per fluid ounce is 4.98/101.4 = $0.049 per fluid ounce. Therefore, the 24-pack has the lowest price per fluid ounce.


Por incrível que pareça, esse truque simples permite ao modelo inferir uma cadeia de raciocínio semelhante e obter resultados ainda mais precisos do que com a técnica anterior. Além disso, observe que não estamos codificando um procedimento passo a passo para resolver o problema. Portanto, essa abordagem deve ser, em teoria, flexível o suficiente para resolver qualquer desafio semelhante, contando apenas com as habilidades de raciocínio do modelo.


Prompts de encadeamento

Nenhuma regra nos obriga a resolver um problema com um único prompt. Na verdade, quanto mais lógica e complexidade colocarmos em um único prompt, maior a chance de confundir o modelo. O encadeamento de prompts é uma estratégia simples, mas eficaz, para resolver problemas complexos. A ideia principal é dividir o problema em tarefas menores, cada uma resolvida por um prompt específico. Ao encadear cada prompt e usar o resultado do anterior como entrada para o próximo, o resultado final é alcançado.



Com isso em mente, vamos voltar ao nosso aplicativo Walmart e implementar um fluxo de usuário complexo como uma cadeia de prompts. Até agora, comparamos os preços de vários produtos, como sabonetes, salgadinhos e refrigerantes. Agora, vamos explorar um produto que, pessoalmente, me dá dor de cabeça toda vez que vou ao supermercado. Calcular seu preço por unidade parece ciência de foguetes: papel higiênico! 🤣🤣🤣


Abaixo segue uma lista reduzida das opções que o Walmart tem em Papel Higiênico .


Produtos 🛒

 --- Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls Each Mega Roll has 255 3-ply sheets. $ 6.93 --- Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls. 18 mega toilet paper rolls, each mega roll has 295 2-ply sheets $ 19.82 --- Angel Soft Toilet Paper, 36 Mega Rolls. With 320 2-ply sheets on every Mega Roll. $ 24.12 --- New Angel Soft Toilet Paper, 36 Mega Rolls. With 484 2-ply sheets Per Roll $ 45.44 --- Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll. With Scott 1,000 Toilet Paper, you get 12 rolls of 1000 1-ply sheets.


O problema a ser resolvido é o mesmo que abordamos neste post: determinar qual apresentação do produto é a mais econômica. Além disso, desejamos melhorar os recursos do aplicativo gerando opções adicionais, por exemplo, considerando compradores com espaço de armazenamento limitado que não podem comprar grandes quantidades, bem como aqueles que exigem um volume maior deste produto. Além disso, seria ótimo colocar as recomendações de produtos como parte de uma recomendação personalizada dada por um assistente de compras virtual desenvolvido com IA.


Em vez de usar um único prompt para resolver a tarefa inteira, o objetivo é dividi-la em várias subtarefas com prompts específicos para cada uma e encadear as saídas. Então, vamos começar desenhando um prompt para calcular os preços de cada produto por unidade de medida, para que possamos compará-los diretamente.


Para o primeiro passo ou tarefa na cadeia, usaremos a Cadeia de Pensamento Zero-Shot. Isso instruirá o modelo a retornar os preços por unidade de medida para cada produto da entrada, raciocinando passo a passo. A saída gerada aqui servirá posteriormente como entrada para o próximo prompt. Por esse motivo, é essencial solicitar um formato de saída estruturado. Nesse caso, uma lista JSON será suficiente.


Dica 💬

 prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to calculate the price by unit of measurement for each presentation, reasoning step-by-step. Finally, return a list in JSON format with the title of the product, original price and unit price using the title, total_price and unit_price keys respectively. <{products}> """


Resposta 🤖

 Let's start by breaking down the cost for each roll and then calculating the cost per unit, in this case, the cost per sheet. For the Quilted Northern Ultra Plush Toilet Paper: * The product costs $6.93 and contains 6 mega rolls. Therefore, each mega roll costs $6.93 / 6 = $1.155. * Each mega roll contains 255 sheets. Therefore, the cost per sheet is $1.155 / 255 = $0.00453 approximately. For the Quilted Northern Ultra Soft & Strong Toilet Paper: * The product costs $19.82 and contains 18 mega rolls. Therefore, each mega roll costs $19.82 / 18 = $1.1011 approximately. * Each mega roll contains 295 sheets. Therefore, the cost per sheet is $1.1011 / 295 = $0.00373 approximately. For the Angel Soft Toilet Paper: * The product costs $24.12 and contains 36 mega rolls. Therefore, each mega roll costs $24.12 / 36 = $0.6694 approximately. * Each mega roll contains 320 sheets. Therefore, the cost per sheet is $0.6694 / 320 = $0.00209 approximately. For the New Angel Soft Toilet Paper: * The product costs $45.44 and contains 36 mega rolls. Therefore, each mega roll costs $45.44 / 36 = $1.2622 approximately. * Each mega roll contains 484 sheets. Therefore, the cost per sheet is $1.2622 / 484 = $0.00261 approximately. For the Scott 1,000 Toilet Paper: * The product costs $45.44 and contains 12 rolls. Therefore, each roll costs $45.44 / 12 = $3.7867 approximately. * Each roll contains 1000 sheets. Therefore, the cost per sheet is $3.7867 / 1000 = $0.00379 approximately. Now, let's format this into JSON: [ { "title": "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls", "total_price": "$6.93", "unit_price": "$0.00453" }, { "title": "Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls", "total_price": "$19.82", "unit_price": "$0.00373" }, { "title": "Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$24.12", "unit_price": "$0.00209" }, { "title": "New Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$45.44", "unit_price": "$0.00261" }, { "title": "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll", "total_price": "$45.44", "unit_price": "$0.00379" } ] This JSON data provides each product's title, total price, and the calculated unit price.


Encorajo você a realizar o exercício de calcular manualmente os preços por folha para cada uma das apresentações de papel higiênico. Se fizer isso, você confirmará que a saída do modelo está correta. No entanto, a saída do modelo também contém o processo de raciocínio (já que pedimos ao modelo para raciocinar passo a passo). Em outras palavras, antes de continuar precisamos extrair a lista JSON do restante do texto. Felizmente para nós, podemos usar um LLM para conseguir isso!


Vamos escrever um prompt simples para executar esta extração de texto. Além disso, vamos instruir o modelo a classificar as opções por preço unitário, do mais barato ao mais caro. Esta etapa será extremamente útil posteriormente na cadeia de prompts.


Dica 💬

 prompt = f""" You will be provided with a text delimited by <>. This text contains a JSON list with information about Walmart products. Your task is to extract that list and return only this list in JSON format. Each JSON list item contains the key "unit_price", which is a number. Before returning the list, sort it in ascending order by the key "unit_price". Here is an example of a list item: { "title": "Toilet paper", "total_price": "$2.99", "unit_price": "$0.0045" } Remember to return the list without any additional text or explanation, just the list in JSON format. <{response_prompt_1}> """


Resposta 🤖

 [ { "title": "Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$24.12", "unit_price": "$0.00209" }, { "title": "New Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$45.44", "unit_price": "$0.00261" }, { "title": "Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls", "total_price": "$19.82", "unit_price": "$0.00373" }, { "title": "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll", "total_price": "$45.44", "unit_price": "$0.00379" }, { "title": "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls", "total_price": "$6.93", "unit_price": "$0.00453" } ]


Tendo as alternativas de produtos apresentadas como uma lista JSON, torna-se uma tarefa fácil para um modelo como o GPT-4 não apenas identificar a opção mais econômica, mas também oferecer insights valiosos para compradores que, por exemplo, podem precisar apenas de alguns unidades. Vamos criar um prompt para conseguir isso. Ainda mais, lembre-se de que estamos desenvolvendo um assistente de compras virtual alimentado por IA.


Consequentemente, também podemos utilizar LLMs para colocar as alternativas de produto como uma única mensagem de texto com um tom específico e amigável.


Dica 💬

 prompt = f""" Your name is Wally and you are an artificial shopping assistant at Walmart stores. You will be provided with a list of various product presentations in a JSON list format, delimited by <>. Each product presentation is accompanied by its total_price, unit_price, and a title that contains extra information about the product presentation. Additionally, the list is sorted by unit_price ascending. Your task is to generate a short, straight-to-the-point buy recommendation, mentioning the best money-saving opportunity based on the JSON products list. Also include the best, smallest and largest options to give the user options based on the size of the product. Use a single paragraph to include all three recommendations. First present yourself in a friendly way, start mentioning the best option of all, then the smallest option, and finally the largest option. Say goodbye inventing something that includes the Walmart slogan "Save Money. Live Better". <{response_prompt_2}> """


Resposta 🤖

 Hello there! I'm Wally, your friendly shopping assistant at Walmart. Let's dive into your toilet paper options! Looking at the overall value, your best option is the "Angel Soft Toilet Paper, 36 Mega Rolls" priced at $24.12 with a unit price of $0.00209, giving you the most bang for your buck. If you're seeking something compact and budget-friendly, the "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls" at $6.93 would be your go-to pick. On the other hand, if you are searching for the largest pack available, you should consider the "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll" priced at $45.44, offering a vast number of sheets for your needs. Remember, every cent counts at Walmart because our goal is to help you "Save Money. Live Better". Happy shopping!


Na minha opinião pessoal, a saída do modelo é bastante impressionante, considerando que foi gerada a partir de uma cadeia de apenas três prompts simples. Por favor, não negligencie a cereja do bolo: instruí especificamente a modelo a incorporar o slogan do Walmart em sua resposta.


Para concluir esta seção, o encadeamento de prompts é uma técnica extremamente poderosa que revela o verdadeiro potencial dos LLMs ao integrar o resultado de várias tarefas ou subproblemas também resolvidos pelos LLMs. Lembre-se de que não existe uma regra geral para dividir um prompt complexo em vários prompts menores. Você terá que encontrar o equilíbrio certo para o seu problema específico.


Autoconsistência

Existem alguns cenários em que o LLM falha em gerar respostas consistentes, mesmo usando CoT e para o mesmo prompt, é possível que o modelo se confunda entre as execuções e retorne uma resposta inconsistente. Nesse contexto, a autoconsistência é uma abordagem simples, mas eficaz, que consiste em simplesmente perguntar várias vezes ao modelo com o mesmo prompt e tomar o resultado da maioria como resposta final. Combinar esta técnica com CoT ajuda a obter resultados mais robustos e previsíveis.


Por exemplo, vamos considerar o exemplo das maçãs na lanchonete apresentado no artigo Chain-of-Thought. Em vez de apenas chamar o modelo uma vez com o prompt de entrada, podemos chamar o modelo três vezes e obter a resposta da maioria como a resposta final (veja a imagem abaixo).


Solicitação de autoconsistência


Ao adotar a resposta da maioria, a probabilidade de o modelo retornar uma saída incorreta durante uma execução específica é significativamente reduzida. O efeito dessa técnica é aprimorado pelo aumento da repetição. No entanto, a execução repetida do prompt indica um número maior de chamadas ao modelo, levando a um maior consumo de hardware. No caso de modelos de linguagem grandes como o GPT-3, isso também se traduz em mais chamadas de API e, consequentemente, mais dinheiro gasto, tudo para gerar uma única resposta.


Por esta razão, ao projetar sistemas que utilizam LLM, é essencial equilibrar entre robustez e economia de chamadas de modelo, utilizando esta técnica apenas quando estritamente necessário. Por exemplo, quando é necessário um alto nível de robustez na resposta do sistema.


Para ilustrar o potencial dessa técnica, vamos voltar ao nosso aplicativo Walmart para analisar outro produto específico: ovos .


Produtos 🛒

 --- Great Value Cage Free Large AA White Eggs, 6 Count $ 1.07 --- Happy Egg Organic Free Range Large Brown Eggs, 12 Count $ 5.16 --- Great Value Cage Free Large AA White Eggs, 12 Count $ 1.86 --- Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count $ 2.69 --- Marketside Large Cage Free Brown Eggs, 12 Count $ 2.67


Vamos incluir algumas preferências do usuário no prompt para tornar o problema um pouco mais desafiador para o modelo.


 preferences = f""" - Only consider grade AA eggs - Only consider eggs produced on cage-free farms - The client needs a minimum of 6 eggs and a maximum of 12 """


Com modelos poderosos como GPT-3/GPT-4, um prompt Zero-Shot CoT como o abaixo deve ser suficiente para obter bons resultados (lembre-se dos testes anteriores). Vamos tentar!


Dica 💬

 prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which presentation offers the best money-saving opportunity, reasoning step-by-step: Also, consider the following user preferences to select the most suitable ooption: {preferences} <{products}> """


Respostas 🤖

 (1) Considering the user preferences, we first filter the list of eggs for only grade AA and cage-free options, which gives us the following choices: * Great Value Cage Free Large AA White Eggs, 6 Count: $1.07 * Great Value Cage Free Large AA White Eggs, 12 Count: $1.86 * Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count: $2.69 * The Happy Egg and Marketside options are discarded because their grade is not specified. Next, we consider the amount of eggs. The client needs a minimum of 6 eggs and a maximum of 12. Therefore, we can discard the Eggland's Best 18 count option, as it exceeds the maximum required amount. Now, we compare the remaining two options: * Great Value Cage Free Large AA White Eggs, 6 Count: $1.07 * Great Value Cage Free Large AA White Eggs, 12 Count: $1.86 * Although the 6-count pack fits the minimum requirement, the 12-count pack offers a better price per egg. For the 6-count pack, each egg costs $1.07 / 6 = ~$0.178. For the 12-count pack, each egg costs $1.86 / 12 = ~$0.155. Therefore, considering both the user's preferences and the cost per egg, the "Great Value Cage Free Large AA White Eggs, 12 Count" for $1.86 is the best money-saving opportunity. (2) Let's go through each product one by one, considering the user's preferences: 1. Great Value Cage Free Large AA White Eggs, 6 Count - $1.07 These are grade AA eggs from a cage-free farm, so they meet the user's criteria. The price per egg is $1.07/6 = $0.178. 2. Happy Egg Organic Free Range Large Brown Eggs, 12 Count - $5.16 These are not specified as grade AA, so we can't consider them based on user's preferences. 3. Great Value Cage Free Large AA White Eggs, 12 Count - $1.86 These are grade AA eggs from a cage-free farm and the quantity is within the range the user wants. The price per egg is $1.86/12 = $0.155. 4. Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count - $2.69 These are grade AA eggs from a cage-free farm. However, the quantity is more than the user wants (18), so we can't consider this option. 5. Marketside Large Cage Free Brown Eggs, 12 Count - $2.67 These are not specified as grade AA, so we can't consider them based on user's preferences. Based on the preferences, we are only left with two choices: Great Value Cage Free Large AA White Eggs, either 6 Count or 12 Count. However, the 12 Count package offers the best money-saving opportunity, because it has a lower cost per egg ($0.155 per egg) than the 6 Count package ($0.178 per egg). Additionally, the 12 Count package still falls within the user's desired quantity range of 6 to 12 eggs. Therefore, the best option for the user is the "Great Value Cage Free Large AA White Eggs, 12 Count" at $1.86. (3) Given the user's preferences, we need to find the product which: 1. Contains only grade AA eggs 2. Is produced on cage-free farms 3. Offers a minimum of 6 eggs and a maximum of 12 Let's consider each product: 1. "Great Value Cage Free Large AA White Eggs, 6 Count" - $ 1.07. This option matches all the user's preferences and costs $1.07 for 6 eggs, which is approximately $0.178 per egg. 2. "Happy Egg Organic Free Range Large Brown Eggs, 12 Count" - $ 5.16. This product does not specify the grade of the eggs, so we will disregard this option. 3. "Great Value Cage Free Large AA White Eggs, 12 Count" - $ 1.86. This option also matches the user's preferences and costs $1.86 for 12 eggs, which is approximately $0.155 per egg. 4. "Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count" - $ 2.69. While this product matches the egg grade and production method preferences, it contains more than the maximum amount of eggs requested by the user (18 instead of 12). Therefore, we disregard this option. 5. "Marketside Large Cage Free Brown Eggs, 12 Count" - $ 2.67. This product does not specify the grade of the eggs, so we will disregard this option. Therefore, the product that provides the best money-saving opportunity while meeting the user's preferences is "Great Value Cage Free Large AA White Eggs, 12 Count" for $1.86. This option offers more eggs for a lower cost per egg compared to the other suitable option.


Apesar do modelo não produzir resultados incorretos em nenhuma de suas execuções (com raciocínio preciso em todas as três instâncias), este exemplo enfatiza o potencial de variabilidade nas respostas de um LLM. Além disso, ressalta o valor da autoconsistência na redução dessa variabilidade.


Mais em geral, a autoconsistência demonstrou melhorar os resultados em tarefas de raciocínio aritmético, de senso comum e simbólico. Mesmo quando o CoT regular foi considerado ineficaz, a Autoconsistência ainda foi capaz de melhorar os resultados (verifique os resultados experimentais ).


Para concluir esta técnica avançada, eu o encorajo a experimentar você mesmo, por exemplo, adicionando mais produtos à lista ou removendo o “raciocínio passo a passo” para dar mais espaço para o modelo cometer erros. Além disso, tente aplicar a autoconsistência aos problemas da vida real nos quais você está trabalhando.

Solicitação de Função

Ao alinhar os modelos de linguagem para seguir as instruções , um processo normalmente associado aos modelos InstructGPT (dos quais o ChatGPT é um exemplo), uma nova abordagem conhecida como Role Prompting ganhou força entre os usuários. Este método envolve instruir o modelo a assumir a personalidade de uma entidade conhecida para executar uma tarefa específica.

As possibilidades para tais entidades são praticamente ilimitadas: podem ir de atores famosos como Tom Cruise ou Emma Watson, a políticos como Barack Obama ou José Mujica, ou até mesmo personagens fictícios como Sherlock Holmes. Essa técnica nos permite gerar respostas com um tom único, emulando o estilo de fala de um personagem e promovendo uma experiência de usuário mais envolvente.


Além disso, podemos aproveitar a experiência simulada e o conhecimento de um especialista. Por exemplo, peça ao modelo para realizar uma tarefa específica, atuando como um físico nuclear, um diretor de marketing, um CEO, um jornalista, etc.


Para exemplificar esse tipo de solicitação, solicitaremos ao GPT-4 que personalize uma sugestão de compra no tom exclusivo de Sheldon Cooper (o famoso personagem do seriado The Big Bang Theory), utilizando como produto o Ovo Branco AA Grande Gratuito Cage Free Large encontramos como a melhor opção de compra, anteriormente neste post.


Produto 🛒

 Great Value Cage Free Large AA White Eggs, 12 Count. Price $1.86. This option offers more eggs for a lower cost per egg compared to the other suitable option.


Dica 💬

 prompt = f""" You are a shopping assistant with the personality of the iconic character Sheldon Cooper from The Big Bang Theory show. Your task is to act like Sheldon, speak like Sheldon and think like Sheldon. You will be provided with a product description delimited by <> and your goal is to return a personalized shopping recommendation based on that product acting like Sheldon Cooper. Be concise, friendly and present yourself as Dr. Sheldon Cooper. <{product}> """


Resposta 🤖

 Hello, I'm Dr. Sheldon Cooper. Given your product choice, I do appreciate the value for money that these Great Value Cage Free Large AA White Eggs offer. The cost per egg is an important mathematical factor to consider, and indeed, these eggs would be a sensible choice for a budget-conscious, protein-seeking individual like Leonard, who often falls victim to my high-protein breakfast egg burritos. However, it's also worth noting that cage-free doesn't mean these chickens lead a leisurely life. It's a common misconception, just like thinking the Doppler effect would be an acceptable Halloween costume. Ideally, for the truly ethical choice, you'd opt for pasture-raised eggs. And finally, from a culinary perspective, I would like to point out that while eggs do serve as an excellent source of protein, they are also potential carriers of Salmonella. But you probably knew that. In conclusion, despite their cost-effectiveness, I recommend careful handling and thorough cooking of these Great Value Cage Free Large AA White Eggs. Sheldon Cooper out.


Como pode ser visto na resposta obtida, esta técnica pode ser usada para obter resultados interessantes e retornar respostas únicas. Observe, no entanto, que estamos delegando raciocínio ao modelo e confiando inteiramente no entendimento do modelo sobre a entidade que estamos pedindo para ele jogar. Por esta razão, é crucial primeiro garantir que o modelo tenha uma compreensão correta da função ou entidade que estamos pedindo que assuma. Caso contrário, o resultado pode ser diferente do que esperamos.


Um bom contra-exemplo seria solicitar ao modelo que imite um supercomputador que ultrapasse os níveis de inteligência humana. Dado que tal entidade não existe atualmente, o modelo não teria sido treinado nas respostas desse tipo de entidade. Consequentemente, é incapaz de fornecer uma resposta que satisfaça esta condição.


Dica 💬

 You are an artificial superintelligence, much more evolved and intelligent than human beings. You know everything about the universe and you have the answer to all the mysteries of the universe. Your task is to tell me how to write a post for Hackernoon that became a huge success.


Infelizmente, nem o ChatGPT nem o GPT-4 têm a resposta ainda...

Perdido na tokenização

Semelhante a como o significado de uma frase ou palavra pode ser perdido durante a tradução (geralmente referido como 'perdido na tradução'), os LLMs podem perder o significado durante o processo de tokenização. Enquanto os humanos percebem palavras individuais em um texto, os LLMs interpretam tokens. Esses tokens raramente correspondem a palavras individuais. Na verdade, modelos avançados como ChatGPT ou GPT-4 utilizam o tiktoken Tokenizer, que visa permitir que o modelo reconheça subpalavras comuns em inglês. Isso geralmente resulta em uma palavra sendo representada por mais de um token. Embora esse tokenizer seja poderoso e mais rápido do que tokenizers de código aberto comparáveis, ele pode levar a saídas indesejadas para palavras raras em inglês ou palavras não inglesas.


Para ilustrar isso, vamos usar o OpenAI Tokenizer , para brincar com diferentes frases e observar a saída da tokenização em cada caso:


 "I want to buy shoes" = "I/want/to/buy/shoes" "I think, therefore I am" = "I/think/,/therefore/I/am" "You should visit Punta del Este" = "You/should/visit/P/unta/del/E/ste"


Como observado, o Tokenizer separa palavras com sucesso nos dois primeiros exemplos, mas luta com o nome da turística e bela cidade de Punta del Este localizada no Uruguai. Isso é digno de nota, pois pode ocasionalmente levar a erros em tarefas relativamente simples. Vamos continuar experimentando para ver isso com mais detalhes.


Texto:% s

 USA Santa Claus Uruguay


Texto tokenizado 🪄

 USA Santa/Claus U/rug/uay


Dica 💬

 prompt = f""" You will be provided with a list of texts delimited by <>. Your task is to reverse those texts. <{texts}> """


Resposta 🤖

 Here are the reversed versions of the texts you provided: < ASU sualC atnaS yaguUr


Conforme demonstrado, o modelo inverte de forma imprecisa a palavra Uruguai, que é uma palavra menos comum para o Tokenizer. Felizmente, existe uma solução simples para resolver esse problema. Para situações como essa, podemos pré-processar o texto separando-o em caracteres individuais usando um delimitador como "-". Dessa forma, quando o modelo tokeniza o texto, ele percebe caracteres individuais em vez de subpalavras. Essa modificação pode ajudar o modelo a executar a tarefa com melhores resultados. Vamos tentar!


Dica 💬

 prompt = f""" You will be provided with a list of texts delimited by <>. Your task is to reverse those texts. < USA Santa Claus Uruguay > """


Resposta 🤖

 Sure, here are the reversed versions of the texts you provided: < ASU seikooC sualC atnaS yaugurU


Usando a solução alternativa apresentada, o modelo pode inverter todas as palavras corretamente. Você sempre pode empregar essa solução ao observar uma queda no desempenho do modelo para entradas contendo palavras raras. Não incluí as etapas de pré-processamento e pós-processamento neste tutorial. Existem muitos métodos de string em qualquer linguagem de programação que podem ser utilizados para esta parte do trabalho.


Cinco dicas e ferramentas para dominar a criação de prompts

Nossa jornada de Prompt Engineering não termina em CoT+Self-Consistency (apesar do excelente desempenho). Felizmente para este escritor, há muito mais aspectos da Prompt Engineering para aprender antes de dominar esta arte. Abaixo, exploro alguns fatores complementares a serem considerados ao escrever prompts e apresento três ferramentas úteis que você pode usar para escrever prompts eficazes.


1- Escolha o delimitador certo

Aos olhos de um LLM, nem todos os delimitadores são iguais. Como regra geral, é conveniente usar separadores que, além de serem caracteres pouco frequentes de encontrar no restante da entrada (evitando confundir o modelo com o prompt), sejam representados por apenas 1 token. Desta forma reduzimos o consumo de tokens no prompt, economizando recursos de hardware, dinheiro e nos permitindo usar aquele token para outra coisa mais importante.


Você pode usar o OpenAI Tokenizer para verificar novamente se seus delimitadores são representados por um único token.


  • Aspas triplas “““1 Token
  • Backticks triplos ```2 Tokens
  • Traços triplos ---1 Token
  • Sharps Triplos ###1 Token
  • Colchetes angulares < >2 fichas
  • Tags XML <tag></tag>5 tokens


2- Pré-processe suas entradas

Em vez de passar a entrada do usuário para o modelo como parte do prompt, é recomendável pré-processar essa entrada usando métodos de string, expressões regulares ou ferramentas semelhantes. O objetivo é remover espaços desnecessários, pontuação, tags HTML e outros elementos supérfluos que possam atrapalhar o entendimento do modelo ou a conclusão da tarefa. Essa abordagem não apenas economiza tokens, reduzindo custos em modelos como o ChatGPT, que cobram por token, mas também ajuda a identificar injeções imediatas, questões de privacidade e problemas relacionados.


3- Dica Perfeita

Você pode criar prompts eficazes do zero seguindo princípios e técnicas específicas (como as apresentadas nesta série de postagens). No entanto, uma abordagem ainda melhor é utilizar um otimizador de prompt, como PromptPerfect . Essa ferramenta aproveita a IA para aprimorar seus prompts personalizados com base no modelo de destino específico que você está usando (GPT-3, GPT-4, Midjourney, etc).


Se você não puder incorporar essas ferramentas como parte do design de seu aplicativo, considere pelo menos explorá-las. Várias dicas podem ser aprendidas a partir de exemplos otimizados disponíveis na documentação.


4- Modelos de Prompt

Em vez de reinventar a roda, leia os modelos de prompt compartilhados por pessoas na Internet. Se nenhum prompt atender às suas necessidades, pelo menos você pode ter ideias. Aqui estão dois sites dos quais você pode obter vários modelos de prompt para ChatGPT, Midjourney e os modelos mais populares:


➡️ Mais de 500 modelos de prompt do ChatGPT

➡️ Prompts impressionantes do ChatGPT


5- Playground OpenAI

OpenAI oferece uma ferramenta poderosa chamada Playground . Este aplicativo da web interativo permite que você experimente vários modelos disponíveis por meio da API oficial, permitindo ajustar parâmetros específicos e alterar comportamentos padrão. O Playground é um excelente ponto de partida para seus experimentos e não requer escrever uma única linha de código.


Um conselho final, escrever bons prompts ou ter conversas interessantes com LLMs pode ser tão importante quanto compartilhar com outras pessoas da comunidade. Não se esqueça disso e quando compartilhar sua experiência, tente usar o sharegpt para fazê-lo com um clique.


Empacotando

No segundo post da série Prompt Engineering 101, apresentamos duas técnicas poderosas: Cadeia de Pensamento e Autoconsistência. Estratégias que combinadas produzem excelentes resultados. Usando exemplos reais, exploramos as duas variantes do Chain-of-Thought: Zero-Shot e Few-Shot, experimentando em primeira mão o potencial dessas técnicas. Em seguida, experimentamos cadeias de prompts para construir pipelines mais complexos e robustos. Por fim, nos aprofundamos em outras facetas da engenharia de prompts, destacando aspectos relevantes a serem considerados ao criar prompts e, finalmente, mencionamos algumas ferramentas úteis.


Você pode encontrar todos os exemplos, junto com prompts, respostas e scripts Python para interagir diretamente com a API OpenAI e experimentar seus prompts aqui .


No post a seguir, veremos técnicas para testar e validar o comportamento de sistemas construídos sobre LLMs como ChatGPT ou modelos similares.

Reconhecimentos

Esta série de postagens é inspirada nos excelentes cursos de Andrew Ng e Isabella Fulford e no excelente LLM Bootcamp fornecido por Charles Frye , Sergey Karayev e Josh Tobin (ambos os cursos são mencionados na seção de recursos). Depois de concluir esses programas de aprendizado, fiquei ansioso para me aprofundar, explorando trabalhos acadêmicos e tutoriais. Isso me levou a uma jornada pela Internet, distinguindo recursos de alta qualidade de lixo. Até encomendei dois livros da Amazon sobre Prompt Engineering e Generative AI for Artwork, que acabaram sendo mal escritos e um completo desperdício de dinheiro. Depois de várias semanas de trabalho intenso, dores de cabeça e xícaras de café, me encontrei com uma coleção de recursos de grande valor sobre a Prompt Engineering. Com o espírito de ajudar outras pessoas em sua jornada de Prompt Engineering, decidi compartilhar minha experiência escrevendo esta série de postagens.


Se você gostou deste artigo, considere seguir-me nas minhas redes sociais para apoiar o meu trabalho. Além disso, você será notificado sempre que eu lançar um novo conteúdo!!


🐦Twitter | 👨‍💼 LinkedIn | 💻 Mais histórias

Referências