O senhor usou ChatGPTe o senhor entende o potencial de usar um modelo de linguagem grande (LLM) para ajudá-lo em suas tarefas. Talvez o senhor já esteja trabalhando em um aplicativo compatível com LLM e tenha lido sobre engenharia imediatamas o senhor não tem certeza de como traduzir os conceitos teóricos em um exemplo prático.
Seu prompt de texto instrui as respostas do LLM, portanto, ajustá-lo pode gerar resultados muito diferentes. Neste tutorial, o senhor aplicará vários técnicas de engenharia de prompt a um exemplo do mundo real. O senhor experimentará a engenharia de prompt como um processo iterativo, verá os efeitos da aplicação de várias técnicas e aprenderá sobre conceitos relacionados de aprendizado de máquina e engenharia de dados.
O senhor trabalhará com um script Python que o senhor pode adaptar à sua própria tarefa assistida por LLM. Portanto, se quiser usar exemplos práticos para descobrir como usar a engenharia de prompt para obter melhores resultados com um LLM, o senhor encontrou o tutorial certo!
Entenda a finalidade do Prompt Engineering
A engenharia de prompts é mais do que uma palavra da moda. O senhor pode obter resultados muito diferentes de um LLM ao usar prompts diferentes. Isso pode parecer óbvio quando o senhor considera que obtém resultados diferentes ao fazer perguntas diferentes, mas também se aplica ao formular a mesma pergunta conceitual de forma diferente. Engenharia de prompts significa construir sua entrada de texto para o LLM usando abordagens específicas.
É possível pensar nos prompts como argumentos e no LLM como a função para a qual o senhor passa esses argumentos. Entradas diferentes significam resultados diferentes:
Embora um LLM seja muito mais complexo do que a função de brinquedo acima, a ideia fundamental é verdadeira. Para que uma chamada de função seja bem-sucedida, o senhor precisará saber exatamente qual argumento produzirá o resultado desejado. No caso de um LLM, esse argumento é um texto que consiste em vários tokensou pedaços de palavras.
Nota: A analogia de uma função e seus argumentos tem uma ressalva ao lidar com os LLMs da OpenAI. Embora o hello()
acima sempre retornará o mesmo resultado com a mesma entrada, os resultados de suas interações com o LLM não serão 100% determinísticos. Atualmente, isso é inerente à forma como esses modelos operam.
O campo da engenharia de prompt ainda está mudando rapidamente e há muitas pesquisas ativas nessa área. À medida que os LLMs continuam a evoluir, o mesmo acontece com as abordagens de prompting que ajudarão o senhor a obter os melhores resultados.
Neste tutorial, o senhor abordará algumas técnicas de engenharia de prompts, juntamente com abordagens para o desenvolvimento iterativo de prompts, que podem ser usadas para obter melhores conclusões de texto para seus próprios projetos assistidos por LLM:
Há mais técnicas a serem descobertas, e o senhor também encontrará links para recursos adicionais no tutorial. A aplicação das técnicas mencionadas em um exemplo prático lhe dará um ótimo ponto de partida para melhorar seus programas apoiados pelo LLM. Se o senhor nunca trabalhou com um LLM antes, talvez queira dar uma olhada em a documentação do GPT da OpenAI antes de começar, mas o senhor deve ser capaz de acompanhar de qualquer maneira.
Conheça o Projeto de Engenharia do Practical Prompt
O senhor explorará várias técnicas de prompt engineering a serviço de um exemplo prático: higienização conversas de bate-papo com clientes. Ao praticar diferentes técnicas de engenharia de prompt em um único projeto do mundo real, o senhor terá uma boa ideia de por que pode querer usar uma técnica em vez de outra e como aplicá-las na prática.
Imagine que o senhor é o desenvolvedor Python residente em uma empresa que lida com milhares de chats de suporte ao cliente diariamente. Seu trabalho é formatar e higienizar essas conversas. O senhor também ajuda a decidir quais delas precisam de mais atenção.
Colete suas tarefas
Sua tarefa geral é ajudar sua empresa a ficar em dia com o tratamento das conversas de bate-papo com clientes. As conversas com as quais o senhor trabalha podem ser parecidas com a mostrada abaixo:
O senhor deve tornar essas conversas de texto mais acessíveis para processamento posterior pelo departamento de suporte ao cliente de algumas maneiras diferentes:
- Remover informações de identificação pessoal.
- Remover palavrões.
- Limpar as informações de data e hora para mostrar apenas a data.
Os palavrões que o senhor encontrará neste tutorial não serão nada picantes, mas pode considerá-los como substitutos de frases mais explícitas que poderá encontrar na natureza. Depois de higienizar a conversa do chat, o senhor espera que ela tenha a seguinte aparência:
Claro, o senhor pode lidar com isso usando a função str.replace()
ou exibir o senhor expressão regular . Mas a tarefa é mais complexa do que parece à primeira vista.
Seu gerente de projeto não é uma pessoa técnica e colocou outra tarefa no final dessa lista. O senhor pode pensar que a tarefa é uma continuação normal das tarefas anteriores. Mas o senhor sabe que ela exige uma abordagem e um conjunto de tecnologias totalmente diferentes:
Marque as conversas como “positivas” ou “negativas”.
Essa tarefa está no domínio da aprendizado de máquina, a saber classificação de textose, mais especificamente análise de sentimentos. Até mesmo habilidades avançadas de regex não o levarão longe neste desafio.
Além disso, o senhor sabe que a equipe de suporte ao cliente para a qual está preparando os dados desejará continuar trabalhando neles de forma programática. O texto simples não é necessariamente o melhor formato para fazer isso. O senhor quer fazer um trabalho que seja útil para outras pessoas e, por isso, acrescenta mais uma meta ambiciosa à sua crescente lista de tarefas:
Formatar a saída como JSON.
Essa lista de tarefas está ficando rapidamente desproporcional! Felizmente, o senhor tem acesso ao API da OpenAIe o senhor contará com a ajuda do LLM deles para resolver todos esses desafios.
Observação: O exemplo deste tutorial tem como objetivo fornecer um cenário realista em que a utilização de um LLM poderia ajudar o senhor a trabalhar como desenvolvedor Python. No entanto, é importante mencionar que a higienização de informações pessoalmente identificáveis é um trabalho delicado! O senhor deve certificar-se de que não está vazando informações acidentalmente.
Há também possíveis riscos do uso de serviços baseados em nuvem como a API da OpenAI. Sua empresa pode não querer enviar dados para a API OpenAI para evitar o vazamento de informações confidenciais, como segredos comerciais.
Por fim, lembre-se de que o O uso da API não é gratuito e que o senhor pagará por cada solicitação com base no número de tokens que o modelo processa.
Um dos recursos impressionantes dos LLMs é a amplitude de tarefas para as quais o senhor pode usá-los. Portanto, o senhor cobrirá uma grande quantidade de terreno e diferentes áreas de uso. E o senhor aprenderá a lidar com todas elas com técnicas de engenharia imediata.
Prepare suas ferramentas
Para acompanhar este tutorial, o senhor precisará saber como executar um script Python a partir de sua interface de linha de comando (CLI), e o senhor precisará de um chave de API da OpenAI.
Nota: Se o senhor não tiver uma chave de API da OpenAI ou não tiver experiência em executar scripts Python, ainda poderá acompanhar o processo copiando e colando os prompts na interface da Web do ChatGPT. O texto que o senhor receberá será um pouco diferente, mas ainda assim poderá ver como as respostas mudam com base nas diferentes técnicas de engenharia de prompt.
O foco do senhor será a engenharia de prompt, portanto, usará o aplicativo CLI apenas como uma ferramenta para demonstrar as diferentes técnicas. No entanto, se quiser entender o código que o senhor usará, será útil ter alguma experiência com Classes Python, Definindo suas próprias funções Python, o nome – principal idiomae usando Python para interagir com APIs da Web.
Para começar, faça o download do script Python de exemplo com o qual o senhor trabalhará ao longo do tutorial:
A base de código representa uma camada de abstração leve na parte superior da API do OpenAI e expõe uma função chamada get_chat_completion()
que será de interesse primário para o tutorial. A função interage com a API do OpenAI /chat/completions
endpoint da OpenAI para gerar respostas usando diferentes modelos, como GPT-3.5-Turbo e GPT-4. O senhor explorará os dois modelos, começando com o GPT-3.5-Turbo e, por fim, passará para o modelo GPT-4, mais potente.
A maior parte do código em app.py
gira em torno da configuração e da obtenção das configurações do settings.toml
.
O script também analisa um argumento de linha de comando para permitir que o senhor especifique convenientemente um arquivo de entrada.
Os arquivos de entrada com os quais o senhor trabalhará principalmente contêm Conversas de bate-papo de suporte ao cliente geradas pelo LLMmas fique à vontade para reutilizar o script e fornecer seus próprios arquivos de texto de entrada para praticar mais.
Observação: Se o senhor estiver curioso, reserve um momento para ler o código e se familiarizar com ele. Compreender o script não é um requisito para entender os conceitos que serão abordados neste tutorial, mas é sempre melhor conhecer o código que você está executando.
O coração da base de código é o settings.toml
. Esse Arquivo de configurações do TOML hospeda os prompts que o senhor usará para aprimorar suas habilidades de engenharia de prompts. Ele contém diferentes prompts formatados no formato de configurações TOML legível por humanos.
Manter seus prompts em um arquivo de configurações dedicado pode ajudar a colocá-los sob controle de versãoo que significa que o senhor pode acompanhar as diferentes versões dos seus prompts, que inevitavelmente mudarão durante o desenvolvimento.
Observação: O senhor pode encontrar todas as versões de todos os prompts que usará neste tutorial na seção README.md
.
Seu script Python lerá os prompts de settings.toml
, reuni-los de forma significativa e enviar uma solicitação de API para a OpenAI.
Como alternativa, o senhor também pode executar todos os prompts de texto diretamente no playground do OpenAIque fornecerá ao senhor a mesma funcionalidade do script. O senhor pode até mesmo colar os prompts no arquivo ChatGPT interface. No entanto, os resultados serão diferentes porque o senhor estará interagindo com um modelo diferente e não terá a oportunidade de alterar determinadas configurações.
Configurar a base de código
Certifique-se de que o senhor está no Python 3.11 ou superior, para que o senhor possa interagir com os arquivos TOML usando a biblioteca padrão. Se o senhor ainda não fez o download da base de código, clique no link abaixo:
Descompacte a pasta e use a CLI para navegar até a pasta. O senhor verá um punhado de arquivos. Os mais importantes são app.py
e settings.toml
:
./
├── LICENSE
├── README.md
├── app.py
├── chats.txt
├── requirements.txt
├── sanitized-chats.txt
├── sanitized-testing-chats.txt
├── settings.toml
├── settings-final.toml
└── testing-chats.txt
O arquivo settings.toml
contém espaços reservados para todos os prompts que o senhor usará para explorar as diferentes técnicas de engenharia de prompts. Esse é o arquivo com o qual o senhor trabalhará principalmente, portanto, abra-o. O senhor o usará para desenvolver iterativamente os prompts para o seu aplicativo.
O arquivo app.py
contém o código Python que une a base de código. O senhor executará esse script várias vezes ao longo do tutorial, e ele se encarregará de extrair os prompts de settings.toml
.
Depois de fazer o download e descompactar a base de código, crie e ative um novo ambiente virtual. Em seguida, use pip
para instalar as dependências necessárias:
Observe que este tutorial usa openai
versão 1.13.3. A OpenAI pode introduzir alterações significativas entre as versões da API, portanto, certifique-se de instalar as dependências fixadas no arquivo de requisitos. Assim, o senhor poderá trabalhar com o tutorial sem nenhum problema.
Para executar o script com êxito, o senhor precisará de um chave de API da OpenAI para autenticar suas solicitações de API. Certifique-se de manter essa chave privada e nunca a envie para o controle de versão! Se o uso de chaves de API for novo para o senhor, leia sobre práticas recomendadas para segurança de chaves de API.
Para integrar sua chave de API ao script e evitar divulgá-la publicamente, o senhor pode exportar a chave de API como uma variável de ambiente:
Depois de adicionar sua chave de API como uma variável de ambiente chamada OPENAI_API_KEY
o script a pegará automaticamente durante cada execução.
Neste ponto, o senhor concluiu as etapas de configuração necessárias. Agora, o senhor pode executar o script usando a linha de comando e fornecer a ele um arquivo como texto de entrada adicional:
O comando mostrado acima combina as conversas de bate-papo do suporte ao cliente em chats.txt
com prompts e parâmetros de chamada de API que são salvos em settings.toml
e, em seguida, envia uma solicitação para a API do OpenAI. Por fim, ele imprime o preenchimento de texto resultante em seu terminal.
Observação: Usando um settings.toml
para parâmetros e prompts de chamadas de API é apenas uma opção. Não é necessário seguir essa estrutura se o senhor tiver uma organização de projeto diferente.
Para obter mais informações sobre como fazer chamadas para a API da OpenAI por meio dos bindings oficiais do Python, consulte o referência oficial da API.
De agora em diante, o senhor fará alterações principalmente em settings.toml
. O código em app.py
está aqui apenas para sua conveniência, e o senhor não precisará editar esse arquivo. As alterações na saída do LLM virão da alteração dos prompts e de alguns argumentos da chamada da API.
Congelar respostas definindo a temperatura como zero
Quando o senhor planeja integrar um LLM a um produto ou a um fluxo de trabalho, geralmente deseja respostas determinísticas. A mesma entrada deve dar ao senhor a mesma saída. Caso contrário, fica difícil fornecer um serviço consistente ou depurar o programa se algo der errado.
Por esse motivo, o senhor deve definir o parâmetro temperature
argumento de suas chamadas de API para 0
. Esse valor significará que o senhor obterá principalmente resultados determinísticos.
Os LLMs completam o texto prevendo o próximo token com base na probabilidade de que ele siga os tokens anteriores. Mais alto temperature
introduzirão mais aleatoriedade nos resultados, permitindo que o LLM escolha tokens com probabilidades menores. Como há muitas seleções de tokens encadeadas uma após a outra, escolher um token diferente pode, às vezes, levar a resultados muito diferentes.
Se o senhor usar o LLM para gerar ideias ou implementações alternativas de uma tarefa de programação, então valores mais altos para temperature
podem ser interessantes. No entanto, eles geralmente são indesejáveis quando o senhor constrói um produto.
Na base de código de exemplo, o senhor pode ajustar temperature
diretamente no seu settings.toml
arquivo:
O valor inicial é definido como 0
. Todos os exemplos deste tutorial pressupõem que o senhor deixe o temperature
em 0
para que o senhor obtenha resultados determinísticos. Se o senhor quiser experimentar como uma temperatura mais alta altera a saída, fique à vontade para brincar com ela alterando o valor de temperature
nesse arquivo de configurações.
É importante ter em mente que o senhor não conseguirá atingir o verdadeiro determinismo com os modelos LLM atuais oferecidos pela OpenAI, mesmo se mantiver temperature
em 0
:
Um caso extremo no GPT-3 com grandes implicações: A inferência não é determinística (mesmo na temperatura = 0) quando as probabilidades dos dois tokens principais são <1% diferentes. Portanto, a saída com temperatura = 0 é muito próximo a determinístico, mas na verdade não é. Vale a pena lembrar. (Fonte)
Portanto, embora não seja possível garantir totalmente que o modelo sempre retornará o mesmo resultado, o senhor pode chegar muito mais perto definindo temperature
para 0
.
Nota: A OpenAI opera com atualizações contínuas de modelos portanto, ao executar os exemplos, o senhor provavelmente interagirá com um LLM diferente daquele em que este tutorial foi escrito. Portanto, as respostas que o senhor obterá podem ser significativamente diferente do resultado que o senhor verá neste tutorial.
No entanto, todas as técnicas apresentadas no tutorial são técnicas válidas de engenharia de prompt que o senhor pode misturar e combinar para melhorar as respostas que obterá de um LLM em seus projetos pessoais.
Outra abordagem que melhora o determinismo dos resultados é definir um valor para o seed
parâmetro. O código fornecido define a semente como 12345
. No entanto, isso só tem efeito em alguns dos modelos.
Comece a criar seus prompts
Agora que o senhor já conhece a engenharia de prompts e o projeto prático com o qual trabalhará, é hora de mergulhar em algumas técnicas de engenharia de prompts. Nesta seção, o senhor aprenderá a aplicar as seguintes técnicas aos seus prompts para obter o resultado desejado do modelo de linguagem:
- Promptos de disparo zero: Dar instruções normais ao modelo de linguagem sem nenhum contexto adicional
- Solicitação de poucos disparos: Condicionar o modelo a alguns exemplos para aumentar seu desempenho
- Uso de delimitadores: Adição de tokens ou frases especiais para fornecer estrutura e instruções ao modelo
- Etapas detalhadas e numeradas: Dividir uma solicitação complexa em uma série de etapas pequenas e específicas
Ao praticar essas técnicas com o exemplo da conversa de bate-papo com o cliente, o senhor terá uma compreensão mais profunda de como a engenharia de prompts pode aprimorar os recursos dos modelos de linguagem e melhorar sua utilidade em aplicações do mundo real.
Descreva sua tarefa
O senhor iniciará sua jornada de engenharia de prompt com um conceito chamado prompting de disparo zeroque é apenas uma maneira elegante de dizer que o senhor está fazendo uma pergunta ou descrevendo uma tarefa:
Remova as informações de identificação pessoal, mostre apenas a data e substitua todos os palavrões por “😤”
Essa descrição de tarefa se concentra nas etapas solicitadas para higienizar a conversa de bate-papo com o cliente e as explicita literalmente. Este é o prompt que está salvo atualmente como instruction_prompt
no settings.toml
arquivo:
Se o senhor executar o script Python e fornecer o arquivo do chat de suporte como argumento, ele enviará esse prompt juntamente com o conteúdo de chats.txt
para a API de conclusão de texto da OpenAI:
Se o senhor instalou corretamente as dependências e adicionou sua chave de API da OpenAI como uma variável de ambiente, tudo o que precisa fazer é esperar até ver a resposta da API aparecer no terminal:
Na saída do exemplo, é possível ver que o prompt que o senhor forneceu não fez um bom trabalho ao lidar com as tarefas. E isso é dizer com delicadeza! Ele percebeu que deveria fazer algo com o emoji bufando e reduzir o data-hora ISO para apenas uma data. Seus resultados podem não ter abordado tudo isso. Em geral, quase todo o trabalho é deixado de lado e o resultado é inútil.
Observação: O texto acima representa um exemplo de resposta. Lembre-se de que os modelos LLM da OpenAI não são totalmente determinísticos, mesmo com temperature
definido como 0
e o seed
conjunto de parâmetros. Além disso, o OpenAI opera com atualizações contínuas de modelos portanto, quando o senhor executar o exemplo, provavelmente interagirá com um LLM diferente daquele em que este tutorial foi escrito.
Se o senhor não tem experiência em interagir com LLMs, então esta pode ter sido a primeira tentativa de terceirizar seu trabalho de desenvolvimento para o modelo de conclusão de texto. Mas esses resultados iniciais não são exatamente animadores.
Então, o senhor descreveu a tarefa em linguagem natural e obteve um resultado ruim. Mas não se preocupe – ao longo do tutorial, o senhor aprenderá como obter respostas mais úteis para a sua tarefa.
Uma maneira de fazer isso é aumentar o número de disparosou exemplos, que o senhor dá ao modelo. Quando o senhor dá zero fotos ao modelo, o único caminho a seguir é para cima! É por isso que o senhor melhorará seus resultados por meio de estímulo de poucos disparos na próxima seção.
Use Few-Shot Prompting para melhorar a produção
O prompting de poucos disparos é uma técnica de engenharia de prompt em que o senhor fornece exemplos de tarefas e suas soluções esperadas em seu prompt. Portanto, em vez de apenas descrever a tarefa como fez antes, o senhor agora adicionará um exemplo de uma conversa de bate-papo e sua versão higienizada.
Abrir settings.toml
e altere seu instruction_prompt
adicionando esse exemplo:
Depois de aplicar a alteração, dê ao LLM outra chance de limpar as conversas de bate-papo para o senhor, executando o script novamente:
O senhor terá de esperar que o LLM preveja todos os tokens. Quando isso for feito, o senhor verá uma nova resposta aparecer no terminal:
Muito bem, ótimo! Desta vez, pelo menos, o LLM não consumiu todas as informações que o senhor passou para ele sem devolver nada de útil!
Observação: Em geral, o senhor verá exemplos de respostas truncadas ao longo deste tutorial para ilustrar os pontos. A saída truncada é marcada com um reticências (...
). Quando o senhor executar o script, obterá um resultado mais longo. Devido à mudança de modelos e ao não determinismo, o resultado provavelmente será um pouco ou significativamente diferente.
Dessa vez, o modelo resolveu algumas das tarefas. Por exemplo, ele higienizou os nomes entre colchetes. No entanto, os nomes dos clientes ainda estão visíveis nas conversas reais. Ele também não censurou os números dos pedidos nem o endereço de e-mail.
Provavelmente, o modelo não higienizou nenhum dos nomes nas conversas nem os números dos pedidos porque o chat que o senhor forneceu não continha nenhum nome ou número de pedido. Em outras palavras, a saída que o senhor forneceu não mostrava um exemplo de redigitação de nomes, números de pedidos ou endereços de e-mail no texto da conversa.
Aqui o senhor pode ver como é importante escolher bons exemplos que representem claramente o resultado que deseja.
Até agora, o senhor forneceu um exemplo em seu prompt. Para cobrir mais áreas, o senhor adicionará outro exemplo para que essa parte do seu prompt realmente coloque o poucos em uma solicitação de poucos disparos:
O senhor adicionou um segundo exemplo que contém um nome de cliente e um número de pedido no corpo do texto do chat. O exemplo de um chat higienizado mostra os dois tipos de dados confidenciais substituídos por uma sequência de asteriscos (****
). Agora o senhor deu ao LLM um bom exemplo para modelo.
Após a edição instruction_prompt
em settings.toml
Execute o script novamente e aguarde a resposta ser impressa no terminal:
O senhor provavelmente esperava ver resultados melhores, mas parece que desta vez o senhor está recebendo apenas duas das conversas de volta! O senhor provavelmente esperava ver resultados melhores, mas parece que está recebendo apenas duas das conversas de volta desta vez!
O senhor adicionou mais texto ao seu prompt. A essa altura, as instruções da tarefa provavelmente compõem proporcionalmente muito poucos tokens para que o modelo os considere de forma significativa. O modelo perdeu a noção do que deveria fazer com o texto que o senhor forneceu.
Acrescentar mais exemplos deve tornar suas respostas mais fortes, em vez de consumi-las, então qual é o problema? O senhor pode confiar que a solicitação de poucos exemplos funciona – é uma técnica de engenharia de solicitação amplamente usada e muito eficaz. Para ajudar o modelo a distinguir qual parte do seu prompt contém as instruções que ele deve seguir, o senhor pode usar delimitadores.
Use Delimitadores para marcar claramente as seções do seu prompt
Se estiver trabalhando com conteúdo que precisa de entradas específicas ou se fornecer exemplos, como fez na seção anterior, pode ser muito útil marcar claramente seções específicas do prompt. Lembre-se de que tudo o que o senhor escreve chega a um LLM como um único prompt – uma longa sequência de tokens.
O senhor pode melhorar o resultado usando delimitadores para cercar e rotular partes específicas do seu prompt. Na verdade, se o senhor executou o código de exemplo, já usou delimitadores para delimitar o conteúdo que está lendo do arquivo.
O script adiciona os delimitadores ao montar o prompt em app.py
:
Na linha 13, o senhor envolve o conteúdo do chat entre >>>>>
e <<<<<
delimitadores. A marcação de partes do seu prompt com delimitadores pode ajudar o modelo a controlar quais tokens ele deve considerar como uma única unidade de significado.
Na seção anterior, o senhor viu que a falta de delimitadores pode levar a resultados inesperados. O senhor pode receber menos resultados do que o esperado, como no exemplo anterior, ou uma resposta vazia. Mas também pode receber um resultado bem diferente do que o senhor deseja! Por exemplo, imagine que o conteúdo do chat que o senhor está reformatando contenha uma pergunta no final, como:
O senhor pode me dar o número do seu pedido?
Se essa pergunta for a última linha do seu prompt sem delimitadores, o LLM poderá continuar a conversa imaginária no chat respondendo à pergunta com um número de pedido imaginário. Experimente adicionar essa frase ao final de seu prompt atual!
Os delimitadores podem ajudar a separar o conteúdo e os exemplos da descrição da tarefa. Eles também podem possibilitar a referência a partes específicas do seu prompt em um ponto posterior do prompt.
Um delimitador pode ser qualquer sequência de caracteres que geralmente não apareceriam juntos, por exemplo:
O número de caracteres usados não importa muito, desde que o senhor se certifique de que a sequência seja relativamente exclusiva. Além disso, o senhor pode adicionar rótulos logo antes ou depois dos delimitadores:
START CONTENT>>>>>
conteúdo<<<<<END CONTENT
==== START
conteúdoEND ====
#### START EXAMPLES
exemplos#### END EXAMPLES
A formatação exata também não importa muito. Desde que o senhor marque as seções de forma que um leitor casual possa entender onde uma unidade de significado começa e termina, então o senhor aplicou corretamente os delimitadores.
Edite seu prompt em settings.toml
para adicionar uma referência clara ao seu conteúdo delimitado e também incluir um delimitador para os exemplos que o senhor adicionou:
Com essas adaptações ao seu instruction_prompt
o senhor agora faz referência específica ao conteúdo como >>>>>CONTENT<<<<<
na descrição de sua tarefa. Esses delimitadores correspondem aos delimitadores que o código em app.py
adiciona ao montar o prompt.
O senhor também delimitou os exemplos que está fornecendo com #### START EXAMPLES
e #### END EXAMPLES
e o senhor diferencia as entradas e as saídas esperadas usando vários traços (------
) como delimitadores.
Embora os delimitadores possam ajudar o senhor a obter melhores resultados, nesse caso o resultado é bastante semelhante ao anterior:
É perceptível que o modelo mostra apenas os dois dados de exemplo que o senhor passou como exemplos. Será que o seu prompt leva a algo semelhante a sobreajuste? Usar os dados reais que deseja higienizar como dados de treinamento não é, de qualquer forma, uma boa ideia, portanto, na próxima seção, o senhor se certificará de mudar isso.
Nesta seção, o senhor aprendeu como esclarecer as diferentes partes do seu prompt usando delimitadores. O senhor marcou qual parte do prompt é a descrição da tarefa e qual parte contém as conversas de bate-papo do suporte ao cliente, bem como os exemplos de entrada original e saída sanitizada esperada.
Teste seu prompt em diferentes dados
Até agora, o senhor criou seus exemplos de poucos disparos a partir dos mesmos dados em que também executou o saneamento. Isso significa que o senhor está usando efetivamente os dados de teste para fornecer contexto ao modelo. Misturar dados de treinamento, validação e teste é uma prática ruim no aprendizado de máquina. O senhor pode se perguntar se o seu prompt generaliza para diferentes entradas.
Para testar isso, execute o script outra vez com o mesmo prompt usando o segundo arquivo que contém as conversas de bate-papo, testing-chats.txt
. As conversas nesse arquivo contêm nomes diferentes e palavras de baixo calão diferentes:
O senhor continuará a executar seu script usando testing-chats.txt
daqui para frente, a menos que seja indicado de outra forma.
Depois de esperar que o LLM gere e retorne a resposta, o senhor perceberá que o resultado não é muito satisfatório:
O modelo agora entende que o senhor quis dizer os exemplos como exemplos a serem seguidos ao aplicar as edições e devolve todos os novos dados de entrada. Entretanto, ele não fez um bom trabalho ao seguir as instruções.
O modelo não identificou novos palavrões e não os substituiu. O modelo também não redigiu os números dos pedidos, nem tornou os nomes anônimos. Parece que ele só conseguiu reformatar as cadeias de datas.
Portanto, seu prompt projetado atualmente não funciona bem e generaliza ainda pior. Se o senhor criasse um pipeline com base nesse prompt, em que os novos chats pudessem conter novos nomes de clientes, o aplicativo provavelmente continuaria a ter um desempenho ruim. Como o senhor pode corrigir isso?
O senhor aumentou significativamente seu prompt fornecendo mais exemplos, mas a descrição da tarefa ainda é, em grande parte, apenas a pergunta que escreveu logo no início. Para obter melhores resultados, o senhor precisará fazer uma engenharia de prompt na descrição da tarefa também.
Descreva sua solicitação em etapas numeradas
Se as instruções da tarefa forem divididas em uma sequência numerada de pequenas etapas, é muito mais provável que o modelo produza os resultados que o senhor deseja.
Volte para o prompt em settings.toml
e divida sua descrição inicial da tarefa em subetapas mais granulares e específicas:
Com essas instruções passo a passo em vigor, o senhor está pronto para executar novamente o script e inspecionar a saída recém-gerada:
Essa é uma melhoria significativa! O modelo conseguiu seguir o padrão de substituir os nomes entre colchetes por [Agent]
e [Customer]
, respectivamente. Ele identificou corretamente alguns novos palavrões e os substituiu pelo emoji huffing. O modelo também redigiu os números dos pedidos e tornou anônimos os nomes nos textos das conversas.
Muitas vezes, uma das melhores abordagens para obter melhores resultados de um LLM é tornar suas instruções mais específicas.
Enquadrar suas tarefas em etapas ainda menores e mais específicas geralmente lhe trará melhores resultados. Não tenha medo de de alguma repetição:
Nota: O senhor pode ter recebido resultados diferentes. Lembre-se de que os resultados não são totalmente determinísticos. No entanto, com melhores prompts e maior especificidade, o senhor se aproximará de resultados mais determinísticos.
O aumento da especificidade das instruções e a introdução de etapas numeradas ajudaram o senhor a criar um prompt com bom desempenho. Seu prompt remove com sucesso as informações de identificação pessoal das conversas, elimina palavrões e reformata o carimbo de data e hora ISO, bem como os nomes de usuário.
O senhor poderia considerar sua tarefa inicial como concluída, mas há mais coisas que deseja fazer e mais técnicas de engenharia de prompt para explorar. O senhor também sabe que há modelos mais novos com os quais poderia trabalhar e seu sucesso despertou ainda mais sua curiosidade. É hora de mudar para um LLM diferente, ver como isso influencia seu resultado e, em seguida, continuar explorando outras técnicas.
Realizar conclusões de bate-papo com GPT-4
O senhor decidiu mudar para um LLM ainda mais avançado, o GPT-4. No restante deste tutorial, o senhor usará o GPT-4 para continuar explorando outras técnicas importantes de engenharia de prompt:
- Prompting de função: Uso de uma mensagem do sistema para definir o tom da conversa e uso de diferentes funções para dar contexto por meio da rotulagem
- Solicitação de cadeia de pensamento (CoT): Dar ao modelo tempo para pensar, solicitando que ele raciocine sobre uma tarefa e, em seguida, incluindo o raciocínio no prompt
O senhor também usará o GPT-4 para classificar o sentimento de cada conversa de bate-papo e estruturar o formato de saída como JSON.
Mudança para um modelo diferente
Se estiver trabalhando com o script fornecido, tudo o que o senhor precisa fazer é escolher um modelo de bate-papo em chat_models
em settings.toml
e usá-lo como o novo valor para model
:
A alteração dessas configurações enviará sua solicitação para um modelo diferente. Como antes, ele montará seu prompt da maneira necessária para um /chat/completions
fará essa solicitação para o senhor e imprimirá a resposta no seu terminal.
No restante deste tutorial, o senhor trabalhará com a versão mais recente do modelo GPT-4 da OpenAI. Se o senhor não tiver acesso a esse modelo, poderá continuar trabalhando com o modelo com o qual tem trabalhado até agora.
Se o senhor tem usado o ChatGPT, então está preso ao modelo que o alimenta atualmente. A menos que o senhor seja um ChatGPT Plus o senhor pode alterar o modelo para GPT-4 no site.
Observação: As técnicas de engenharia de prompt que o senhor aprenderá nesta seção não são exclusivas dos modelos mais novos. O senhor também pode usá-las sem trocar de modelo, mas provavelmente obterá resultados de conclusão mais diferentes.
Sem alterar o prompt, execute o script outra vez para ver os diferentes resultados do preenchimento de texto com base apenas no uso de um LLM diferente:
Algumas respostas podem ser relativamente semelhantes às do modelo mais antigo. No entanto, o senhor também pode esperar receber resultados como o mostrado acima, em que a maioria dos palavrões ainda está presente.
É importante ter em mente que o desenvolvimento de um modelo específico levará a resultados específicos, e a troca do modelo pode melhorar ou piorar as respostas que o senhor obtém. Portanto, a troca para um modelo mais novo e mais potente não necessariamente lhe dará melhores resultados de imediato.
Observação: Em geral, os modelos maiores irão lhe dará melhores resultados, especialmente para os prompts que o senhor não projetou com afinco. Se quiser, o senhor pode voltar para seu prompt inicial e tente executá-lo usando o GPT-4. O senhor perceberá que os resultados são um pouco melhores, embora diferentes, dos resultados iniciais que obteve usando o GPT-3.5-Turbo.
Além disso, também é útil ter em mente que as chamadas de API para modelos maiores geralmente custam mais dinheiro por solicitação. Embora possa ser divertido usar sempre o LLM mais recente e melhor, talvez valha a pena considerar se o senhor realmente precisa fazer o upgrade para realizar a tarefa que está tentando resolver.
Adicione um prompt de função para definir o tom
Há algumas possibilidades adicionais ao interagir com o endpoint da API que o senhor usou apenas implicitamente, mas ainda não explorou, como adicionar rótulos de função em uma parte do prompt. Nesta seção, você usará o "system"
para criar uma mensagem do sistema e revisitará o conceito mais tarde, quando for adicionar mais funções para melhorar o resultado.
Solicitação de função geralmente se refere à adição de mensagens do sistema, que representam informações que ajudam a definir o contexto das próximas conclusões que o modelo produzirá. As mensagens do sistema geralmente não são visíveis para o usuário final. Lembre-se de que o /chat/completions
foram inicialmente projetados para interações de conversação.
O senhor também pode usar as mensagens do sistema para definir um contexto para sua tarefa de conclusão. O senhor criará um prompt de função personalizado daqui a pouco. Entretanto, para essa tarefa específica, o prompt de função provavelmente é menos importante do que para outras tarefas. Para explorar a possível influência de um prompt de função, o senhor fará um pequeno desvio e pedirá ao seu modelo que desempenhe uma função:
O senhor mantém instruction_prompt
da mesma forma que o senhor o projetou anteriormente no tutorial. Além disso, o senhor agora adiciona texto ao role_prompt
. O prompt de função mostrado acima serve como exemplo do impacto que um prompt mal orientado pode ter em seu aplicativo.
Liberte, o senhor deve, o código do pergaminho e contemple as maravilhas inesperadas, pois os resultados podem causar espanto e admiração:
Como o senhor pode ver, um prompt de função pode ter um grande impacto sobre a linguagem que o LLM usa para construir a resposta. Isso é ótimo se o senhor estiver criando um agente de conversação que deve falar em um determinado tom ou idioma. E o senhor também pode usar mensagens do sistema para manter presentes informações específicas de configuração.
Para tarefas de conclusão, como aquela em que o senhor está trabalhando atualmente, talvez não seja necessário esse tipo de prompt de função. Por enquanto, o senhor poderia dar a ele uma frase comum, como O senhor é um assistente útil.
Para praticar a escrita de um prompt de função – e para ver se o senhor pode liberar suas conversas de bate-papo com clientes do reinado daquele poeta vilão do século XVI -, o senhor criará um prompt de função mais apropriado:
Esse prompt de função é mais adequado ao seu caso de uso. O senhor não quer que o modelo introduza aleatoriedade ou altere qualquer linguagem usada nas conversas. Em vez disso, deseja apenas que ele execute as tarefas que o senhor descreve. Execute o script outra vez e dê uma olhada nos resultados:
Ficou muito melhor novamente! Permaneça escondido em uma era passada, seu poeta vilão!
Como o senhor pode ver nesses exemplos, os prompts de função podem ser uma maneira poderosa de alterar o resultado. Especialmente se o senhor estiver usando o LLM para criar uma interface de conversação, eles são uma força a ser considerada.
Por alguma razão, o GPT-4 parece escolher consistentemente [Client]
em vez de [Customer]
, mesmo que o senhor esteja especificando [Customer]
nos poucos exemplos. O senhor acabará se livrando desses nomes detalhados, portanto, isso não importa para o seu caso de uso.
No entanto, se o senhor for determinado e curioso – e conseguir solicitar [Client]
compartilhe nos comentários o prompt que funcionou para o senhor.
Na seção final deste tutorial, você revisitará o uso de funções e verá como pode empregar o poder da conversa para melhorar seu resultado, mesmo em uma tarefa de conclusão sem conversa como a que o senhor está trabalhando.
Classifique o sentimento das conversas de bate-papo
Neste ponto, o senhor criou um prompt decente que parece ter um bom desempenho na limpeza e reformatação das conversas de bate-papo dos clientes. Para compreender totalmente o poder dos fluxos de trabalho assistidos pelo LLM, o senhor vai lidar com a solicitação adicional do seu gerente para também classificar as conversas como positivas ou negativas.
Comece salvando os dois arquivos de conversa higienizados em novos arquivos que constituirão as novas entradas para sua tarefa de classificação de sentimentos:
O senhor poderia continuar a construir sobre o prompt anterior, mas acabará atingindo um obstáculo quando pedir ao modelo que faça muitas edições ao mesmo tempo. A etapa de classificação é conceitualmente distinta da higienização do texto, portanto, é um bom ponto de corte para iniciar um novo pipeline.
Os arquivos de conversa de bate-papo higienizados também estão incluídos na base de código de exemplo:
Novamente, o senhor quer que o modelo faça o trabalho por você. Tudo o que o senhor precisa fazer é criar um prompt que explique a tarefa em questão e forneça exemplos. O senhor também pode editar o prompt da função para definir o contexto dessa nova tarefa que o modelo deve executar:
Agora o senhor pode executar o script e fornecer a ele as conversas higienizadas em sanitized-testing-chats.txt
que foram a saída de seu prompt projetado anteriormente:
O senhor adicionou mais uma etapa à descrição da tarefa e modificou ligeiramente os exemplos de poucos disparos em seu prompt. Não é muito trabalho extra para uma tarefa que teria exigido muito mais trabalho sem a ajuda de um LLM. Mas será que isso é realmente suficiente? Dê uma olhada no resultado quando o script terminar de ser executado:
O resultado é bastante promissor! O modelo rotulou corretamente as conversas com clientes irritados com o emoji de fogo. No entanto, a primeira conversa provavelmente não se encaixa totalmente no mesmo grupo que as demais porque o cliente não demonstra um sentimento negativo em relação à empresa.
Suponha que todas essas conversas tenham sido resolvidas de forma positiva pelos agentes de atendimento ao cliente e que sua empresa queira apenas fazer um acompanhamento com os clientes que pareceram visivelmente irritados com a situação. Nesse caso, talvez o senhor precise ajustar um pouco mais o seu prompt para obter o resultado desejado.
O senhor poderia adicionar mais exemploso que geralmente é uma boa ideia, pois cria mais contexto para o modelo ser aplicado. Escrever um descrição mais detalhada de sua tarefa também ajuda, como o senhor já viu antes. Entretanto, para realizar essa tarefa, o senhor aprenderá sobre outra técnica útil de engenharia de prompt chamada cadeia de pensamento prompting.
Acompanhe o modelo através do prompting de cadeia de pensamento
Uma abordagem de engenharia de prompt amplamente bem-sucedida pode ser resumida com o seguinte antropomorfismo do dar tempo para o modelo pensar. O senhor pode fazer isso com algumas técnicas específicas diferentes. Essencialmente, isso significa que o senhor solicita ao LLM que produza resultados intermediários que se tornam entradas adicionais. Dessa forma, o raciocínio não precisa dar saltos distantes, mas apenas pular de um nenúfar para o outro.
Uma dessas abordagens é usar o cadeia de raciocínio (CoT) técnicas de solicitação. Para aplicar a CoT, o senhor solicita que o modelo gere resultados intermediários que, em seguida, tornam-se parte do prompt em uma segunda solicitação. O contexto ampliado torna mais provável que o modelo chegue a um resultado útil.
A menor forma de solicitação de CoT é CoT de disparo zeroem que o senhor literalmente pede ao modelo para pensar passo a passo. Essa abordagem produz resultados impressionantes para tarefas matemáticas que, de outra forma, os LLMs costumam resolver incorretamente.
As operações de cadeia de raciocínio são tecnicamente divididas em dois estágios:
- Extração de raciocínio, em que o modelo gera o contexto ampliado
- Extração de respostasonde o modelo usa o contexto ampliado para gerar a resposta
A extração de raciocínio é útil em uma variedade de contextos de CoT. O senhor pode gerar exemplos de poucos disparos a partir da entrada, os quais podem ser usados em uma etapa separada de extração de respostas usando um prompt de cadeia de raciocínio mais detalhado.
O senhor pode experimentar o CoT de disparo zero nas conversas de bate-papo higienizadas para embelezar os exemplos de disparo reduzido que usará para classificar as conversas de bate-papo de forma mais robusta. Remova os exemplos e substitua as instruções que descrevem o raciocínio sobre como o senhor classificaria as conversas com mais detalhes:
O senhor explicou os critérios que deseja que o modelo use para avaliar e classificar o sentimento. Em seguida, o senhor acrescentou a frase Vamos pensar passo a passo até o final do seu prompt.
O senhor deseja usar essa abordagem de CoT com zero disparos para gerar exemplos com poucos disparos que serão incorporados ao prompt final. Portanto, o senhor deve executar o script usando os dados em sanitized-chats.txt
desta vez:
O senhor receberá de volta uma referência às conversas, com o raciocínio explicado passo a passo para chegar à conclusão final:
O raciocínio é direto e segue as instruções do senhor. Se as instruções representarem com precisão os critérios para marcar uma conversa como positiva ou negativa, então o senhor tem um bom manual em mãos.
Agora, o senhor pode usar essas informações para melhorar os exemplos de poucos disparos para sua tarefa de classificação de sentimentos:
O senhor está usando os mesmos exemplos de antes, mas aprimorou cada um deles com uma pequena cadeia de pensamento que gerou na chamada anterior. Dê mais uma volta em seu script usando sanitized-testing-chats.txt
como arquivo de entrada e veja se os resultados melhoraram:
Ótimo! Agora a primeira conversa, que inicialmente foi classificada como negativa, também recebeu a marca de verificação verde.
Observação: As conversas de bate-papo de entrada que o senhor fornece por meio dos exemplos de poucas fotos agora contêm texto adicional que a entrada em sanitized-chats-testing.txt
não inclui. Usando suas habilidades de engenharia de prompt, o senhor efetivamente solicitou que o LLM criasse etapas de raciocínio internamente e, em seguida, usasse essas informações para ajudar na tarefa de classificação de sentimentos.
Nesta seção, o senhor apoiou seus exemplos com um raciocínio que explica por que uma conversa deve ser rotulada como positiva ou negativa. O senhor gerou esse raciocínio com outra chamada ao LLM.
A esta altura, parece que o seu prompt generaliza bem os dados disponíveis e classifica as conversas como pretendido. E o senhor só precisou elaborar cuidadosamente suas palavras para que isso acontecesse!
Estruture seu formato de saída como JSON
Como uma demonstração final da eficácia do prompting ao incorporar um LLM ao seu fluxo de trabalho, você abordará a última tarefa, que você mesmo adicionou à lista: transmitir os dados em um formato estruturado que facilitará o processamento pela equipe de suporte ao cliente.
O senhor já especificou um formato a ser seguido no prompt anterior e o LLM retornou o que o senhor pediu. Portanto, pode ser apenas uma questão de solicitar um formato diferente e mais estruturado, por exemplo JSON:
Em sua atualização instruction_prompt
o senhor solicitou explicitamente que o modelo retornasse a saída como JSON válido. Em seguida, o senhor também adaptou seus exemplos de poucos disparos para representar a saída JSON que deseja receber. Observe que o senhor também aplicou formatação adicional, removendo a data de cada linha de conversa e truncando o [Agent]
e [Customer]
para letras únicas, A
e C
.
O senhor ainda está usando exemplos de conversas de bate-papo de seus dados de bate-papo higienizados em sanitized-chats.txt
e o senhor envia os dados de teste sanitizados de sanitized-testing-chats.txt
para o modelo para processamento.
Nesse caso, o senhor recebe um JSON válido, conforme solicitado. A classificação ainda funciona como antes e o resultado censura as informações de identificação pessoal, substitui os palavrões e aplica toda a formatação adicional solicitada:
Sua saída pode ser diferente e apresentar alguns pequenos problemas, mas, no geral, essa saída é bastante impressionante e útil! O senhor poderia passar essa estrutura JSON para a equipe de suporte ao cliente e ela poderia integrá-la rapidamente ao seu fluxo de trabalho para acompanhar os clientes que demonstraram um sentimento negativo na conversa de bate-papo.
O senhor poderia parar por aqui, mas seu engenheiro ainda não está satisfeito. Todas as instruções em um único prompt? Sua premonição o chama e conta histórias sobre manutenção. Na próxima seção, o senhor refatorará os prompts para aplicar rótulos de função antes de configurar o pipeline assistido por LLM e encerrar o dia.
Melhore sua produção com o poder da conversação
O senhor adicionou um prompt de função anteriormente, mas, caso contrário, o senhor não aproveitou o poder do conversas ainda.
Observação: Uma conversa pode ser uma interação real de ida e volta, como quando o senhor está interagindo com o ChatGPT, mas não precisa ser assim. Neste tutorial, a conversa consiste em uma série de mensagens que o senhor envia ao modelo de uma só vez.
Portanto, pode parecer que o senhor está tendo uma conversa consigo mesmo, mas é uma maneira eficaz de fornecer mais informações ao modelo e orientar suas respostas.
Nesta última seção, o senhor aprenderá como fornecer contexto adicional ao modelo dividindo o prompt em várias mensagens separadas com rótulos diferentes.
Nas chamadas para o /chat/completions
um prompt é dividido em vários mensagens. Cada mensagem tem seu conteúdo, que representa o texto do prompt. Além disso, ela também tem um função. Existem diferentes funções que uma mensagem pode ter, e o senhor trabalhará com três delas:
"system"
fornece contexto para a conversa e ajuda a definir o tom geral."user"
representa a entrada que um usuário do seu aplicativo pode fornecer."assistant"
representa a saída que o modelo responderia.
Até agora, o senhor forneceu contexto para diferentes partes do seu prompt, todas misturadas em um único prompt, mais ou menos bem separadas usando delimitadores. Quando se usa um modelo otimizado para chat, como o GPT-4, é possível usar funções para informar ao LLM o tipo de mensagem que está sendo enviada.
Por exemplo, o senhor pode criar algumas variáveis para seus exemplos de poucos disparos e variáveis separadas para o raciocínio e os resultados de CoT associados:
O senhor desmontou seu instruction_prompt
em sete prompts separados, com base na função que as mensagens têm em sua conversa com o LLM.
A função auxiliar que cria uma carga útil de mensagens, _assemble_chat_messages()
, já está configurada para incluir todos esses prompts na solicitação da API. Dê uma olhada no app.py
para verificar as mensagens separadas, com suas funções adequadas, que compõem seu prompt geral:
Seu prompt agora está dividido em partes distintas, cada uma delas com um determinado rótulo de função:
- Exemplo de entrada tem o
"user"
papel. - Raciocínio que o modelo criado tem a
"system"
função. - Exemplo de saída tem o
"assistant"
papel.
Agora, o senhor está fornecendo contexto para a aparência da entrada do usuário, como o modelo pode raciocinar sobre a classificação da entrada e como deve ser o resultado esperado. O senhor removeu os delimitadores que usou anteriormente para rotular as seções de exemplo. Eles não são necessários agora que o senhor está fornecendo contexto para as partes do seu prompt por meio de mensagens separadas.
Faça uma execução final do script para ver se o poder da conversação conseguiu melhorar o resultado:
Essa estrutura JSON está realmente ótima! A formatação que o senhor queria agora aparece por toda parte, e as conversas estão rotuladas corretamente.
Além disso, o senhor melhorou a capacidade de manutenção dos seus prompts ao dividi-los em rótulos separados. O senhor pode se sentir orgulhoso de passar para seus colegas de trabalho uma edição tão útil dos dados de conversa do chat do cliente!
Principais conclusões
Você abordou técnicas comuns de engenharia de prompt e, aqui, encontrará algumas perguntas e respostas que resumem os conceitos mais importantes abordados neste tutorial.
O senhor pode usar essas perguntas para verificar sua compreensão ou para recapitular e solidificar o que acabou de aprender. Após cada pergunta, o senhor encontrará uma breve explicação oculta em uma seção recolhível. Clique na seção Exibir/Ocultar para revelar a resposta. Hora de mergulhar!
O conhecimento sobre engenharia de prompts é fundamental quando se trabalha com modelos de linguagem grandes (LLMs), pois o senhor pode receber resultados muito melhores com prompts cuidadosamente elaborados.
O temperature
controla a configuração do quantidade de aleatoriedade em sua saída. Definir a temperature
das chamadas de API para 0
aumentará a consistência das respostas do LLM. Observe que os LLMs da OpenAI são apenas principalmente determinística, mesmo com a temperatura definida para 0
.
Solicitação de poucos disparos é uma técnica comum de engenharia de prompt em que o senhor adiciona exemplos de entrada esperada e saída desejada ao seu prompt.
Uso de delimitadores pode ser útil ao lidar com prompts mais complexos. Os delimitadores ajudam a separar e rotular as seções do prompt, auxiliando o LLM a compreender melhor suas tarefas.
Testando seu prompt com dados separados dos dados de treinamento é importante para ver como o modelo se generaliza para novas condições.
Sim, geralmente adicionar mais contexto levará a resultados mais precisos. Entretanto, também é importante como o senhor acrescenta o contexto adicional. Apenas adicionando mais texto pode levar a resultados piores.
Em estímulo de cadeia de pensamento (CoT)o senhor solicita ao LLM que produza etapas intermediárias de raciocínio. Em seguida, o senhor pode incluir essas etapas na etapa de extração da resposta para obter melhores resultados.
Próximas etapas
Neste tutorial, o senhor aprendeu sobre várias técnicas de engenharia de prompt e construiu um aplicativo Python assistido por LLM ao longo do processo. Se quiser saber mais sobre prompt engineering, confira abaixo algumas perguntas relacionadas, bem como alguns recursos para estudos adicionais:
Sim, o engenheiro de prompt pode ser um trabalho real, especialmente no contexto de IA e aprendizado de máquina. Como engenheiro de prompts, o senhor projeta e otimiza prompts para que modelos de IA como o GPT-4 produzam as respostas desejadas. No entanto, esse pode não ser um cargo autônomo em todos os lugares. Ele pode fazer parte de funções mais amplas, como aprendizado de máquina engenheiro ou cientista de dados.
A engenharia imediata, como qualquer outra habilidade técnica, exige tempo, esforço e prática para ser aprendida. Não é necessariamente fácil, mas certamente é possível para alguém com a mentalidade e os recursos certos aprender. Se o senhor gostou da abordagem iterativa e baseada em texto que aprendeu sobre neste tutorialentão a engenharia de prompt pode ser uma boa opção para o senhor.
O campo da engenharia imediata é bastante novo, e os LLMs também continuam se desenvolvendo rapidamente. Portanto, o cenário, as práticas recomendadas e as abordagens mais eficazes estão mudando rapidamente. Para continuar aprendendo sobre prompt engineering usando recursos gratuitos e de código aberto, o senhor pode conferir Aprenda sobre Prompting e o Guia do Prompt Engineering.
O senhor encontrou alguma maneira interessante de incorporar um LLM em seu fluxo de trabalho? Compartilhe suas ideias e experiências nos comentários abaixo.
Faça o teste: Teste seus conhecimentos com nosso questionário interativo “Practical Prompt Engineering”. Após a conclusão, o senhor receberá uma pontuação para que possa acompanhar o progresso do seu aprendizado ao longo do tempo: