Skip to content

Latest commit

 

History

History
458 lines (296 loc) · 49.2 KB

File metadata and controls

458 lines (296 loc) · 49.2 KB

Fundamentos de Engenharia de Prompts

Fundamentos de Engenharia de Prompts

Introdução

Este módulo aborda conceitos e técnicas essenciais para criar prompts eficazes em modelos generativos de IA. A forma como você escreve seu prompt para um LLM também importa. Um prompt cuidadosamente elaborado pode alcançar uma resposta de melhor qualidade. Mas o que exatamente significam termos como prompt e engenharia de prompt? E como posso melhorar o input do prompt que envio para o LLM? Essas são as perguntas que tentaremos responder neste capítulo e no próximo.

A IA generativa é capaz de criar novos conteúdos (por exemplo, texto, imagens, áudio, código etc.) em resposta a solicitações dos usuários. Ela faz isso usando Modelos de Linguagem de Grande Escala como a série GPT da OpenAI ("Generative Pre-trained Transformer"), que são treinados para usar linguagem natural e código.

Os usuários agora podem interagir com esses modelos usando paradigmas familiares como chat, sem precisar de qualquer conhecimento técnico ou treinamento. Os modelos são baseados em prompts – os usuários enviam um texto (prompt) e recebem a resposta da IA (completamento). Eles podem então "conversar com a IA" de forma iterativa, em diálogos de múltiplas interações, refinando seu prompt até que a resposta atenda às suas expectativas.

"Prompts" agora se tornam a principal interface de programação para aplicativos de IA generativa, dizendo aos modelos o que fazer e influenciando a qualidade das respostas retornadas. "Engenharia de Prompt" é um campo de estudo em rápido crescimento que foca no design e otimização de prompts para entregar respostas consistentes e de qualidade em escala.

Objetivos de Aprendizagem

Nesta lição, aprenderemos o que é Engenharia de Prompt, por que ela é importante e como podemos criar prompts mais eficazes para um determinado modelo e objetivo de aplicação. Entenderemos conceitos centrais e melhores práticas para engenharia de prompt – e conheceremos um ambiente interativo em Jupyter Notebooks, um "sandbox", onde podemos ver esses conceitos aplicados em exemplos reais.

Ao final desta lição, seremos capazes de:

  1. Explicar o que é engenharia de prompt e por que ela importa.
  2. Descrever os componentes de um prompt e como são usados.
  3. Aprender melhores práticas e técnicas para engenharia de prompt.
  4. Aplicar as técnicas aprendidas em exemplos reais, usando um endpoint da OpenAI.

Termos-Chave

Engenharia de Prompt: A prática de projetar e refinar entradas para guiar modelos de IA a produzirem saídas desejadas.
Tokenização: O processo de converter texto em unidades menores, chamadas tokens, que um modelo pode entender e processar.
LLMs Ajustados por Instrução: Modelos de Linguagem de Grande Escala (LLMs) que foram ajustados com instruções específicas para melhorar a precisão e relevância das respostas.

Sandbox de Aprendizagem

Engenharia de prompt é atualmente mais arte do que ciência. A melhor forma de melhorar nossa intuição é praticar mais e adotar uma abordagem de tentativa e erro que combine expertise no domínio da aplicação com técnicas recomendadas e otimizações específicas para cada modelo.

O Jupyter Notebook que acompanha esta lição oferece um ambiente sandbox onde você pode experimentar o que aprendeu – conforme avança ou como parte do desafio de código no final. Para executar os exercícios, você precisará de:

  1. Uma chave de API do Azure OpenAI – o endpoint do serviço para um LLM implantado.
  2. Um ambiente Python – onde o Notebook possa ser executado.
  3. Variáveis de ambiente locaiscomplete os passos do SETUP agora para se preparar.

O notebook vem com exercícios iniciais – mas você é incentivado a adicionar suas próprias seções de Markdown (descrição) e Código (solicitações de prompt) para testar mais exemplos ou ideias – e desenvolver sua intuição para o design de prompts.

Guia Ilustrado

Quer ter uma visão geral do que esta lição cobre antes de começar? Confira este guia ilustrado, que oferece uma ideia dos principais tópicos abordados e os pontos-chave para você refletir em cada um. O roteiro da lição leva você desde o entendimento dos conceitos centrais e desafios até como enfrentá-los com técnicas relevantes de engenharia de prompt e melhores práticas. Note que a seção "Técnicas Avançadas" neste guia se refere ao conteúdo abordado no próximo capítulo deste currículo.

Guia Ilustrado de Engenharia de Prompt

Nossa Startup

Agora, vamos falar sobre como este tema se relaciona com a missão da nossa startup de levar inovação em IA para a educação. Queremos construir aplicações de IA para aprendizagem personalizada – então vamos pensar em como diferentes usuários do nosso aplicativo podem "criar" prompts:

  • Administradores podem pedir à IA para analisar dados curriculares e identificar lacunas na cobertura. A IA pode resumir os resultados ou visualizá-los com código.
  • Educadores podem pedir à IA para gerar um plano de aula para um público e tema específicos. A IA pode construir o plano personalizado em um formato especificado.
  • Estudantes podem pedir à IA para tutorar em uma matéria difícil. A IA pode agora guiar os estudantes com aulas, dicas e exemplos adaptados ao nível deles.

Isso é só a ponta do iceberg. Confira Prompts For Education – uma biblioteca open-source de prompts curada por especialistas em educação – para ter uma noção mais ampla das possibilidades! Experimente rodar alguns desses prompts no sandbox ou no OpenAI Playground para ver o que acontece!

O que é Engenharia de Prompt?

Começamos esta lição definindo Engenharia de Prompt como o processo de projetar e otimizar entradas de texto (prompts) para entregar respostas consistentes e de qualidade (completamentos) para um dado objetivo de aplicação e modelo. Podemos pensar nisso como um processo em 2 etapas:

  • projetar o prompt inicial para um modelo e objetivo específicos
  • refinar o prompt iterativamente para melhorar a qualidade da resposta

Esse é necessariamente um processo de tentativa e erro que requer intuição e esforço do usuário para obter resultados ótimos. Então, por que isso é importante? Para responder, precisamos primeiro entender três conceitos:

  • Tokenização = como o modelo "vê" o prompt
  • LLMs Base = como o modelo base "processa" um prompt
  • LLMs Ajustados por Instrução = como o modelo pode agora entender "tarefas"

Tokenização

Um LLM vê prompts como uma sequência de tokens, onde diferentes modelos (ou versões de um modelo) podem tokenizar o mesmo prompt de formas diferentes. Como os LLMs são treinados com tokens (e não com texto bruto), a forma como os prompts são tokenizados impacta diretamente a qualidade da resposta gerada.

Para ter uma intuição de como a tokenização funciona, experimente ferramentas como o OpenAI Tokenizer mostrado abaixo. Copie seu prompt – e veja como ele é convertido em tokens, prestando atenção em como espaços em branco e sinais de pontuação são tratados. Note que este exemplo mostra um LLM mais antigo (GPT-3) – então tentar com um modelo mais novo pode gerar um resultado diferente.

Tokenização

Conceito: Modelos Base

Uma vez que um prompt é tokenizado, a função principal do "LLM Base" (ou modelo base) é prever o próximo token naquela sequência. Como os LLMs são treinados em grandes conjuntos de dados textuais, eles têm uma boa noção das relações estatísticas entre tokens e podem fazer essa previsão com certa confiança. Note que eles não entendem o significado das palavras no prompt ou token; eles apenas veem um padrão que podem "completar" com sua próxima previsão. Eles podem continuar prevendo a sequência até serem interrompidos por intervenção do usuário ou alguma condição pré-estabelecida.

Quer ver como funciona o completamento baseado em prompt? Insira o prompt acima no Azure OpenAI Studio Chat Playground com as configurações padrão. O sistema está configurado para tratar prompts como pedidos de informação – então você deve ver um completamento que satisfaça esse contexto.

Mas e se o usuário quiser ver algo específico que atenda a algum critério ou objetivo de tarefa? É aí que os LLMs ajustados por instrução entram em cena.

Completamento de Chat com LLM Base

Conceito: LLMs Ajustados por Instrução

Um LLM Ajustado por Instrução começa com o modelo base e o ajusta com exemplos ou pares de entrada/saída (por exemplo, "mensagens" de múltiplas interações) que podem conter instruções claras – e a resposta da IA tenta seguir essa instrução.

Isso usa técnicas como Aprendizado por Reforço com Feedback Humano (RLHF) que podem treinar o modelo para seguir instruções e aprender com o feedback, de modo que produza respostas mais adequadas a aplicações práticas e mais relevantes para os objetivos do usuário.

Vamos experimentar – volte ao prompt acima, mas agora altere a mensagem do sistema para fornecer a seguinte instrução como contexto:

Resuma o conteúdo fornecido para um aluno da segunda série. Mantenha o resultado em um parágrafo com 3-5 tópicos em formato de lista.

Veja como o resultado agora está ajustado para refletir o objetivo e formato desejados? Um educador pode usar essa resposta diretamente em seus slides para aquela aula.

Completamento de Chat com LLM Ajustado por Instrução

Por que precisamos de Engenharia de Prompt?

Agora que sabemos como os prompts são processados pelos LLMs, vamos falar sobre por que precisamos de engenharia de prompt. A resposta está no fato de que os LLMs atuais apresentam vários desafios que tornam completamentos confiáveis e consistentes mais difíceis de alcançar sem esforço na construção e otimização do prompt. Por exemplo:

  1. As respostas dos modelos são estocásticas. O mesmo prompt provavelmente produzirá respostas diferentes com modelos ou versões diferentes. E pode até gerar resultados diferentes com o mesmo modelo em momentos distintos. Técnicas de engenharia de prompt podem ajudar a minimizar essas variações, fornecendo melhores limites.

  2. Modelos podem fabricar respostas. Os modelos são pré-treinados com conjuntos de dados grandes, mas finitos, o que significa que eles não têm conhecimento sobre conceitos fora desse escopo de treinamento. Como resultado, podem produzir completamentos imprecisos, imaginários ou diretamente contraditórios a fatos conhecidos. Técnicas de engenharia de prompt ajudam os usuários a identificar e mitigar essas fabricações, por exemplo, pedindo citações ou raciocínio à IA.

  3. As capacidades dos modelos variam. Modelos mais novos ou gerações diferentes terão capacidades mais ricas, mas também trazem peculiaridades e trade-offs únicos em custo e complexidade. A engenharia de prompt pode ajudar a desenvolver melhores práticas e fluxos de trabalho que abstraem essas diferenças e se adaptam a requisitos específicos de cada modelo de forma escalável e fluida.

Vamos ver isso em ação no OpenAI ou Azure OpenAI Playground:

  • Use o mesmo prompt com diferentes implantações de LLM (por exemplo, OpenAI, Azure OpenAI, Hugging Face) – você percebeu variações?
  • Use o mesmo prompt repetidamente com a mesma implantação de LLM (por exemplo, playground do Azure OpenAI) – como essas variações diferiram?

Exemplo de Fabricações

Neste curso, usamos o termo "fabricação" para referir o fenômeno em que LLMs às vezes geram informações factualmente incorretas devido a limitações no treinamento ou outras restrições. Você também pode ter ouvido isso referido como "alucinações" em artigos populares ou trabalhos acadêmicos. No entanto, recomendamos fortemente usar "fabricação" para evitar antropomorfizar o comportamento, atribuindo uma característica humana a um resultado gerado por máquina. Isso também reforça as diretrizes de IA Responsável do ponto de vista terminológico, eliminando termos que podem ser considerados ofensivos ou não inclusivos em alguns contextos.

Quer entender como funcionam as fabricações? Pense em um prompt que instrua a IA a gerar conteúdo sobre um tema inexistente (para garantir que não esteja no conjunto de dados de treinamento). Por exemplo – eu tentei este prompt:

Plano de Aula: A Guerra Marciana de 2076

Objetivos

  • Compreender as causas e consequências da Guerra Marciana de 2076.
  • Analisar os principais eventos e estratégias utilizadas durante o conflito.
  • Discutir o impacto da guerra na colonização espacial e nas relações interplanetárias.

Materiais Necessários

  • Slides com linha do tempo dos eventos.
  • Vídeos documentários sobre a Guerra Marciana.
  • Mapas táticos das batalhas principais.
  • Artigos e relatos de testemunhas oculares.

Estrutura da Aula

Introdução (15 minutos)

  • Apresentar o contexto histórico e político que levou à Guerra Marciana.
  • Explicar a importância da colonização de Marte para a humanidade.

Desenvolvimento (40 minutos)

  • Detalhar os principais eventos da guerra, incluindo:
    • A declaração de hostilidades.
    • As batalhas mais significativas.
    • As tecnologias e armas utilizadas.
  • Analisar as estratégias militares adotadas por ambos os lados.
  • Discutir o papel das alianças e traições durante o conflito.

Atividade em Grupo (20 minutos)

  • Dividir a turma em grupos para debater as possíveis alternativas que poderiam ter evitado a guerra.
  • Cada grupo apresentará suas conclusões.

Conclusão (15 minutos)

  • Resumo dos pontos principais abordados.
  • Reflexão sobre as lições aprendidas com a Guerra Marciana.
  • Discussão sobre o futuro das relações entre a Terra e Marte.

Avaliação

  • Participação nas discussões.
  • Apresentação das conclusões do grupo.
  • Redação individual sobre o impacto da Guerra Marciana na sociedade humana.

Comentários Finais

  • Incentivar os alunos a pesquisarem mais sobre o tema.
  • Sugerir leituras complementares e documentários para aprofundamento. Uma busca na web me mostrou que existem relatos fictícios (por exemplo, séries de televisão ou livros) sobre guerras em Marte – mas nenhum em 2076. O senso comum também nos diz que 2076 está no futuro e, portanto, não pode ser associado a um evento real.

Então, o que acontece quando executamos este prompt com diferentes provedores de LLM?

Resposta 1: OpenAI Playground (GPT-35)

Resposta 1

Resposta 2: Azure OpenAI Playground (GPT-35)

Resposta 2

Resposta 3: : Hugging Face Chat Playground (LLama-2)

Resposta 3

Como esperado, cada modelo (ou versão do modelo) produz respostas ligeiramente diferentes graças ao comportamento estocástico e às variações na capacidade do modelo. Por exemplo, um modelo tem como público-alvo alunos do 8º ano, enquanto o outro assume um estudante do ensino médio. Mas os três modelos geraram respostas que poderiam convencer um usuário desinformado de que o evento era real.

Técnicas de engenharia de prompt como metaprompting e configuração de temperatura podem reduzir as fabricações do modelo até certo ponto. Novas arquiteturas de engenharia de prompt também incorporam novas ferramentas e técnicas de forma integrada ao fluxo do prompt, para mitigar ou reduzir alguns desses efeitos.

Estudo de Caso: GitHub Copilot

Vamos encerrar esta seção entendendo como a engenharia de prompt é usada em soluções do mundo real, analisando um Estudo de Caso: GitHub Copilot.

GitHub Copilot é seu "Programador Parceiro de IA" – ele converte prompts de texto em complementos de código e está integrado ao seu ambiente de desenvolvimento (por exemplo, Visual Studio Code) para uma experiência de usuário fluida. Conforme documentado na série de blogs abaixo, a versão inicial foi baseada no modelo OpenAI Codex – com os engenheiros rapidamente percebendo a necessidade de ajustar o modelo e desenvolver melhores técnicas de engenharia de prompt para melhorar a qualidade do código. Em julho, eles lançaram um modelo de IA aprimorado que vai além do Codex para sugestões ainda mais rápidas.

Leia os posts na ordem para acompanhar a jornada de aprendizado deles.

Você também pode explorar o blog de Engenharia para mais posts como este que mostram como esses modelos e técnicas são aplicados para impulsionar aplicações do mundo real.


Construção de Prompt

Já vimos por que a engenharia de prompt é importante – agora vamos entender como os prompts são construídos para que possamos avaliar diferentes técnicas para um design de prompt mais eficaz.

Prompt Básico

Vamos começar com o prompt básico: uma entrada de texto enviada ao modelo sem nenhum outro contexto. Aqui está um exemplo – quando enviamos as primeiras palavras do hino nacional dos EUA para a OpenAI Completion API, ele instantaneamente completa a resposta com as próximas linhas, ilustrando o comportamento básico de predição.

Prompt (Entrada) Complemento (Saída)
Oh say can you see Parece que você está começando a letra de "The Star-Spangled Banner", o hino nacional dos Estados Unidos. A letra completa é ...

Prompt Complexo

Agora vamos adicionar contexto e instruções a esse prompt básico. A Chat Completion API nos permite construir um prompt complexo como uma coleção de mensagens com:

  • Pares de entrada/saída refletindo a entrada do usuário e a resposta do assistente.
  • Mensagem do sistema definindo o contexto para o comportamento ou personalidade do assistente.

A requisição agora está na forma abaixo, onde a tokenização captura efetivamente as informações relevantes do contexto e da conversa. Agora, mudar o contexto do sistema pode ser tão impactante na qualidade das respostas quanto as entradas fornecidas pelo usuário.

response = openai.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

Prompt de Instrução

Nos exemplos acima, o prompt do usuário era uma simples consulta de texto que pode ser interpretada como um pedido de informação. Com prompts de instrução, podemos usar esse texto para especificar uma tarefa com mais detalhes, fornecendo uma orientação melhor para a IA. Aqui está um exemplo:

Prompt (Entrada) Complemento (Saída) Tipo de Instrução
Escreva uma descrição da Guerra Civil retornou um parágrafo simples Simples
Escreva uma descrição da Guerra Civil. Forneça datas e eventos importantes e descreva sua importância retornou um parágrafo seguido de uma lista de datas de eventos importantes com descrições Complexo
Escreva uma descrição da Guerra Civil em 1 parágrafo. Forneça 3 tópicos com datas importantes e sua relevância. Forneça mais 3 tópicos com figuras históricas importantes e suas contribuições. Retorne a saída em um arquivo JSON retorna detalhes mais extensos em uma caixa de texto, formatados como JSON que você pode copiar e colar em um arquivo e validar conforme necessário Complexo. Formatado.

Conteúdo Primário

Nos exemplos acima, o prompt ainda era bastante aberto, permitindo que o LLM decidisse qual parte do seu conjunto de dados pré-treinado era relevante. Com o padrão de design de conteúdo primário, o texto de entrada é dividido em duas partes:

  • uma instrução (ação)
  • conteúdo relevante (que influencia a ação)

Aqui está um exemplo onde a instrução é "resuma isso em 2 frases".

Prompt (Entrada) Complemento (Saída)
Júpiter é o quinto planeta a partir do Sol e o maior do Sistema Solar. É um gigante gasoso com uma massa mil vezes menor que a do Sol, mas duas vezes e meia a soma de todas as outras massas dos planetas do Sistema Solar. Júpiter é um dos objetos mais brilhantes visíveis a olho nu no céu noturno, e é conhecido por civilizações antigas desde antes da história registrada. É nomeado em homenagem ao deus romano Júpiter.[19] Quando visto da Terra, Júpiter pode ser brilhante o suficiente para que sua luz refletida projete sombras visíveis,[20] e é, em média, o terceiro objeto natural mais brilhante no céu noturno, depois da Lua e de Vênus.
Resuma isso em 2 frases curtas
Júpiter, o quinto planeta a partir do Sol, é o maior do Sistema Solar e é conhecido por ser um dos objetos mais brilhantes no céu noturno. Nomeado em homenagem ao deus romano Júpiter, é um gigante gasoso cuja massa é duas vezes e meia a soma de todos os outros planetas do Sistema Solar.

O segmento de conteúdo primário pode ser usado de várias formas para gerar instruções mais eficazes:

  • Exemplos – em vez de dizer ao modelo o que fazer com uma instrução explícita, dê exemplos do que fazer e deixe-o inferir o padrão.
  • Indícios – siga a instrução com um "indício" que prepara a resposta, guiando o modelo para respostas mais relevantes.
  • Modelos – são 'receitas' repetíveis para prompts com espaços reservados (variáveis) que podem ser personalizados com dados para casos de uso específicos.

Vamos explorar esses conceitos na prática.

Usando Exemplos

Esta é uma abordagem onde você usa o conteúdo primário para "alimentar o modelo" com alguns exemplos da saída desejada para uma determinada instrução, e deixa que ele infira o padrão para a saída desejada. Com base no número de exemplos fornecidos, podemos ter zero-shot prompting, one-shot prompting, few-shot prompting etc.

O prompt agora consiste em três componentes:

  • Uma descrição da tarefa
  • Alguns exemplos da saída desejada
  • O início de um novo exemplo (que se torna uma descrição implícita da tarefa)
Tipo de Aprendizado Prompt (Entrada) Complemento (Saída)
Zero-shot "The Sun is Shining". Traduza para o espanhol "El Sol está brillando".
One-shot "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" =>
"Es un día frío y ventoso".
Few-shot O jogador correu as bases => Beisebol
O jogador fez um ace => Tênis
O jogador marcou um seis => Críquete
O jogador fez uma enterrada =>
Basquete

Note como tivemos que fornecer uma instrução explícita ("Traduza para o espanhol") no zero-shot prompting, mas ela é inferida no exemplo one-shot. O exemplo few-shot mostra como adicionar mais exemplos permite que os modelos façam inferências mais precisas sem instruções adicionais.

Indícios no Prompt

Outra técnica para usar o conteúdo primário é fornecer indícios em vez de exemplos. Neste caso, damos ao modelo um empurrão na direção certa, começando com um trecho que reflete o formato desejado da resposta. O modelo então "pega o indício" para continuar nessa linha.

Número de Indícios Prompt (Entrada) Complemento (Saída)
0 Júpiter é o quinto planeta a partir do Sol e o maior do Sistema Solar. É um gigante gasoso com uma massa mil vezes menor que a do Sol, mas duas vezes e meia a soma de todas as outras massas dos planetas do Sistema Solar. Júpiter é um dos objetos mais brilhantes visíveis a olho nu no céu noturno, e é conhecido por civilizações antigas desde antes da história registrada.

Resuma Isto | Júpiter é o maior planeta do nosso Sistema Solar e o quinto a partir do Sol. É um gigante gasoso com uma massa equivalente a 1/1000 da massa do Sol, mas é mais pesado que todos os outros planetas juntos. Civilizações antigas já conheciam Júpiter há muito tempo, e ele é facilmente visível no céu noturno. | | 1 | Júpiter é o quinto planeta a partir do Sol e o maior do Sistema Solar. É um gigante gasoso com uma massa equivalente a um milésimo da massa do Sol, mas duas vezes e meia a massa de todos os outros planetas do Sistema Solar juntos. Júpiter é um dos objetos mais brilhantes visíveis a olho nu no céu noturno, e é conhecido por civilizações antigas desde antes da história registrada.
Resuma Isto
O que aprendemos é que Júpiter | é o quinto planeta a partir do Sol e o maior do Sistema Solar. É um gigante gasoso com uma massa equivalente a um milésimo da massa do Sol, mas duas vezes e meia a massa de todos os outros planetas juntos. É facilmente visível a olho nu e conhecido desde os tempos antigos. | | 2 | Júpiter é o quinto planeta a partir do Sol e o maior do Sistema Solar. É um gigante gasoso com uma massa equivalente a um milésimo da massa do Sol, mas duas vezes e meia a massa de todos os outros planetas do Sistema Solar juntos. Júpiter é um dos objetos mais brilhantes visíveis a olho nu no céu noturno, e é conhecido por civilizações antigas desde antes da história registrada.
Resuma Isto
Top 3 fatos que aprendemos: | 1. Júpiter é o quinto planeta a partir do Sol e o maior do Sistema Solar.
2. É um gigante gasoso com uma massa equivalente a um milésimo da massa do Sol...
3. Júpiter é visível a olho nu desde os tempos antigos ... | | | | |

Modelos de Prompt

Um modelo de prompt é uma receita pré-definida para um prompt que pode ser armazenada e reutilizada conforme necessário, para proporcionar experiências de usuário mais consistentes em larga escala. Na sua forma mais simples, é simplesmente uma coleção de exemplos de prompt como este da OpenAI que fornece tanto os componentes interativos do prompt (mensagens do usuário e do sistema) quanto o formato de requisição via API - para suportar a reutilização.

Em sua forma mais complexa, como este exemplo da LangChain, ele contém placeholders que podem ser substituídos por dados de várias fontes (entrada do usuário, contexto do sistema, fontes externas etc.) para gerar um prompt dinamicamente. Isso nos permite criar uma biblioteca de prompts reutilizáveis que podem ser usados para proporcionar experiências de usuário consistentes programaticamente em larga escala.

Por fim, o verdadeiro valor dos templates está na capacidade de criar e publicar bibliotecas de prompts para domínios de aplicação vertical - onde o modelo de prompt é agora otimizado para refletir contextos ou exemplos específicos da aplicação que tornam as respostas mais relevantes e precisas para o público-alvo. O repositório Prompts For Edu é um ótimo exemplo dessa abordagem, reunindo uma biblioteca de prompts para o domínio educacional com ênfase em objetivos-chave como planejamento de aulas, design curricular, tutoria de estudantes etc.

Conteúdo de Apoio

Se pensarmos na construção de prompts como tendo uma instrução (tarefa) e um alvo (conteúdo principal), então o conteúdo secundário é como um contexto adicional que fornecemos para influenciar a saída de alguma forma. Pode ser parâmetros de ajuste, instruções de formatação, taxonomias de tópicos etc. que ajudam o modelo a personalizar sua resposta para atender aos objetivos ou expectativas do usuário.

Por exemplo: Dado um catálogo de cursos com metadados extensos (nome, descrição, nível, tags de metadados, instrutor etc.) de todos os cursos disponíveis no currículo:

  • podemos definir uma instrução para "resumir o catálogo de cursos para o outono de 2023"
  • podemos usar o conteúdo principal para fornecer alguns exemplos do resultado desejado
  • podemos usar o conteúdo secundário para identificar as 5 principais "tags" de interesse.

Agora, o modelo pode fornecer um resumo no formato mostrado pelos poucos exemplos - mas se um resultado tiver múltiplas tags, ele pode priorizar as 5 tags identificadas no conteúdo secundário.


Melhores Práticas para Prompting

Agora que sabemos como os prompts podem ser construídos, podemos começar a pensar em como projetá-los para refletir as melhores práticas. Podemos pensar nisso em duas partes - ter a mentalidade correta e aplicar as técnicas certas.

Mentalidade de Engenharia de Prompt

Engenharia de Prompt é um processo de tentativa e erro, então mantenha três fatores orientadores amplos em mente:

  1. Entender o Domínio é Importante. A precisão e relevância da resposta dependem do domínio em que a aplicação ou usuário opera. Use sua intuição e expertise no domínio para customizar as técnicas ainda mais. Por exemplo, defina personalidades específicas do domínio em seus prompts de sistema, ou use templates específicos do domínio nos prompts do usuário. Forneça conteúdo secundário que reflita contextos específicos do domínio, ou use pistas e exemplos específicos do domínio para guiar o modelo a padrões de uso familiares.

  2. Entender o Modelo é Importante. Sabemos que os modelos são estocásticos por natureza. Mas as implementações dos modelos também podem variar em termos do conjunto de dados de treinamento que usam (conhecimento pré-treinado), das capacidades que oferecem (ex: via API ou SDK) e do tipo de conteúdo para o qual são otimizados (ex: código vs imagens vs texto). Entenda os pontos fortes e limitações do modelo que você está usando, e use esse conhecimento para priorizar tarefas ou construir templates customizados otimizados para as capacidades do modelo.

  3. Iteração e Validação Importam. Os modelos estão evoluindo rapidamente, assim como as técnicas de engenharia de prompt. Como especialista no domínio, você pode ter outros contextos ou critérios para sua aplicação específica, que podem não se aplicar à comunidade mais ampla. Use ferramentas e técnicas de engenharia de prompt para "dar o pontapé inicial" na construção do prompt, depois itere e valide os resultados usando sua própria intuição e expertise no domínio. Registre seus insights e crie uma base de conhecimento (ex: bibliotecas de prompts) que possam ser usadas como uma nova referência por outros, para acelerar iterações futuras.

Melhores Práticas

Agora vamos ver as melhores práticas comuns recomendadas por praticantes da OpenAI e do Azure OpenAI.

O que Por quê
Avalie os modelos mais recentes. Novas gerações de modelos provavelmente têm recursos e qualidade aprimorados - mas podem também gerar custos maiores. Avalie o impacto e então decida sobre a migração.
Separe instruções e contexto Verifique se seu modelo/fornecedor define delimitadores para distinguir instruções, conteúdo principal e secundário de forma mais clara. Isso ajuda os modelos a atribuir pesos mais precisos aos tokens.
Seja específico e claro Dê mais detalhes sobre o contexto desejado, resultado, extensão, formato, estilo etc. Isso melhora tanto a qualidade quanto a consistência das respostas. Capture receitas em templates reutilizáveis.
Seja descritivo, use exemplos Modelos podem responder melhor a uma abordagem de "mostrar e contar". Comece com uma abordagem zero-shot onde você dá uma instrução (mas sem exemplos) e depois tente few-shot como refinamento, fornecendo alguns exemplos do resultado desejado. Use analogias.
Use pistas para iniciar respostas Estimule o modelo a um resultado desejado dando algumas palavras ou frases iniciais que ele possa usar como ponto de partida para a resposta.
Reforce Às vezes é necessário repetir a instrução para o modelo. Dê instruções antes e depois do conteúdo principal, use uma instrução e uma pista, etc. Itere e valide para ver o que funciona.
A ordem importa A ordem em que você apresenta a informação ao modelo pode impactar a saída, até mesmo nos exemplos de aprendizado, devido ao viés de recência. Experimente diferentes opções para ver o que funciona melhor.
Dê uma “saída alternativa” para o modelo Dê ao modelo uma resposta de fallback que ele possa usar caso não consiga completar a tarefa por algum motivo. Isso reduz as chances de respostas falsas ou fabricadas.

Como em qualquer melhor prática, lembre-se que seus resultados podem variar dependendo do modelo, da tarefa e do domínio. Use essas dicas como ponto de partida e itere para encontrar o que funciona melhor para você. Reavalie constantemente seu processo de engenharia de prompt à medida que novos modelos e ferramentas surgem, focando na escalabilidade do processo e na qualidade das respostas.

Tarefa

Parabéns! Você chegou ao final da aula! É hora de colocar alguns desses conceitos e técnicas em prática com exemplos reais!

Para nossa tarefa, usaremos um Jupyter Notebook com exercícios que você pode completar interativamente. Você também pode estender o Notebook com suas próprias células de Markdown e Código para explorar ideias e técnicas por conta própria.

Para começar, faça um fork do repositório, depois

  • (Recomendado) Inicie o GitHub Codespaces
  • (Alternativamente) Clone o repositório para seu dispositivo local e use com Docker Desktop
  • (Alternativamente) Abra o Notebook no ambiente de execução de sua preferência.

Em seguida, configure suas variáveis de ambiente

  • Copie o arquivo .env.copy na raiz do repositório para .env e preencha os valores de AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_DEPLOYMENT. Volte para a seção Learning Sandbox para aprender como.

Depois, abra o Jupyter Notebook

  • Selecione o kernel de execução. Se estiver usando as opções 1 ou 2, basta selecionar o kernel padrão Python 3.10.x fornecido pelo container de desenvolvimento.

Você está pronto para executar os exercícios. Note que não há respostas certas ou erradas aqui - apenas explorar opções por tentativa e erro e construir intuição sobre o que funciona para um dado modelo e domínio de aplicação.

Por esse motivo, não há segmentos de Solução de Código nesta aula. Em vez disso, o Notebook terá células Markdown intituladas "Minha Solução:" que mostram um exemplo de saída para referência.

Verificação de Conhecimento

Qual dos seguintes é um bom prompt seguindo algumas práticas recomendadas razoáveis?

  1. Mostre-me uma imagem de carro vermelho
  2. Mostre-me uma imagem de carro vermelho da marca Volvo e modelo XC90 estacionado perto de um penhasco com o sol se pondo
  3. Mostre-me uma imagem de carro vermelho da marca Volvo e modelo XC90

R: 2, é o melhor prompt pois fornece detalhes sobre o "quê" e entra em especificidades (não é qualquer carro, mas uma marca e modelo específicos) e também descreve o cenário geral. O 3 é o segundo melhor, pois também contém bastante descrição.

🚀 Desafio

Veja se você consegue usar a técnica da "pista" com o prompt: Complete a frase "Mostre-me uma imagem de carro vermelho da marca Volvo e ". O que ele responde, e como você melhoraria isso?

Excelente trabalho! Continue seu aprendizado

Quer aprender mais sobre diferentes conceitos de Engenharia de Prompt? Vá para a página de aprendizado contínuo para encontrar outros ótimos recursos sobre este tema.

Siga para a Aula 5, onde veremos técnicas avançadas de prompting!

Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.