image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Quintino Faustino
Quintino Faustino15/08/2024 08:25
Compartilhe

Como utilizar engenharia de prompt para melhorar seus resultados

  • #Engenharia de Prompt

De onde vieram Chat-GPT, Gemini, Copilot e congêneres? São elas confiáveis ou algum dia irão dominar o mundo?

Em 1950, Alan Turing publicou um artigo que levantou uma questão que desde então ronda o imaginário popular: ‘Can machines think?’, em tradução livre, ‘As máquinas podem pensar?’.

Esse questionamento, que à época parecia coisa de ficção científica, foi superado com os avanços recentes. Hoje, a questão não é se os computadores conseguirão superar as capacidades humanas, mas sim quando isso acontecerá e se teremos uma superinteligência computacional capaz de resolver qualquer problema.

Durante esses mais de 70 anos, muito se discutiu sobre o impacto da tecnologia na vida das pessoas, e não é incomum ouvir pesquisadores alertando sobre a necessidade de uma reflexão profunda sobre o desenvolvimento da inteligência artificial (IA). A pergunta formulada por Turing deixou de ser a mais importante sobre o tema. Agora, a questão central é: esses sistemas inteligentes substituirão os humanos?

Nick Bostrom (2002), traz uma reflexão interessante ao afirmar que a superinteligência será a última invenção humana, capaz de promover avanços tecnológicos de maneira autônoma que sequer temos a capacidade de prever, além de gerar respostas éticas e de planejamento de políticas mais eficazes que as dos humanos. Contudo, ele alerta que essa capacidade superior dará a essas supermáquinas a habilidade de alcançar quaisquer objetivos a que se propuserem.

Por essa razão, Bostrom defende que esses sistemas devem ter uma base de valores filantrópicos, garantindo que todos sejam de alguma maneira beneficiados por seus resultados. Caso contrário, há o risco de que eles sejam utilizados para atender a objetivos de um grupo restrito que os controle ou que tenham objetivos definidos de maneira inadequada. Por isso, essas IAs devem ser desenvolvidas para serem amigas da humanidade.

Apesar de sua postura reticente, é interessante notar que ele afirma que essas tecnologias são inevitáveis. Retardar seu desenvolvimento pode, na verdade, ser um risco, especialmente porque elas não só trazem ganhos significativos para a humanidade, mas também podem ser usadas para lidar com outras tecnologias que representam uma ameaça à existência humana.

Atualmente, vivemos em um cenário em que essas tecnologias estão em pleno desenvolvimento, sem espaço para retrocessos ou negação de sua aplicabilidade. Podemos até extrapolar e afirmar que a discussão sobre a substituição dos humanos pelos computadores já foi superada, pois não há como detê-las. O que cabe a nós é aproveitar ao máximo suas capacidades para o progresso da humanidade.

Dentre essas novas tecnologias que empregam inteligência artificial para permitir a realização de tarefas com apoio de sistemas altamente especializados, podemos destacar os modelos de processamento de linguagem natural - PLN. Segundo, Khurana e cols (2022), esses modelos permitem que as pessoas interajam com os computadores usando a linguagem humana, sem a necessidade de qualquer conhecimento de linguagem de máquina para obter os resultados desejados. As máquinas inteligentes passaram a entender as solicitações e a gerar as respostas em linguagem natural.

O sucesso dos modelos de linguagem natural é inegável. De acordo com uma reportagem da revista Forbes (2023), dois meses após o lançamento do Chat-GPT, a plataforma havia alcançado 100 milhões de usuários. Como comparação, o TikTok levou nove meses para atingir essa marca e o Instagram, dois anos e meio. Ou seja, a possibilidade de utilizar recursos computacionais avançados sem precisar conhecer código levou milhões de pessoas a interagir com essas máquinas inteligentes em uma velocidade nunca antes vista nos 20 anos de internet.

Com a relevância dessa tecnologia já estabelecida, voltamos à questão ética relacionada ao seu uso: os modelos de PLN não têm o objetivo de substituir a capacidade humana produtiva e criativa; pelo contrário, eles servem para potencializá-las, eliminando tarefas repetitivas ou que exigem uma busca manual por informações. Dessa forma, esses modelos liberam a capacidade produtiva das pessoas para que possam imprimir seus traços e habilidades únicos em seu trabalho.

Como a Engenharia de Prompt permite conversar com computadores inteligentes para obter resultados melhores?

O avanço recente dos modelos de PLN, segundo Vatsal & Dubey (2024), decorrente do incremento de seu aprendizado gerado pelo treinamento com quantidades cada vez maiores de dados, permitiu sua aplicabilidade em diferentes áreas e atividades produtivas. Isso intensificou fortemente as pesquisas na área de engenharia de prompt.

 Segundo os autores, a engenharia de prompt “é o processo de criação de instruções em linguagem natural, ou prompts, para extrair conhecimento de LLMs de forma organizada”. Com isso, exclusivamente a partir do conhecimento incorporado ao modelo é possível obter o que se deseja do sistema computacional através de uma solicitação em linguagem natural e receber como resposta algo também em linguagem natural, como um texto, uma imagem, um vídeo, um poema, uma animação etc.

Segundo o Prompt Engineering Guide - PEG (2024), um prompt é composto dos seguintes elementos:

  • instrução: tarefa ou instrução específica que se deseja que o modelo execute;
  • contexto: envolve informações externas ou contexto adicional para direcionar o modelo para melhores respostas;
  • dados de entrada: entrada ou pergunta para a qual busca-se a resposta;
  • indicador de saída: indica o tipo ou formato da saída.

Por exemplo, podemos elaborar o seguinte prompt: “Crie uma tabela para criação de um e-mail para os advogados de um escritório com os feriados judiciais para o Tribunal de Justiça do estado do Acre no ano de 2024 no formato microsoft excel”.

Veja que no exemplo acima, temos uma tarefa a ser executada pelo sistema - criar uma tabela. Poderíamos ter pedido que fosse no formato de uma lista ou simplesmente que ele pesquisasse e nos apresentasse. Mas, como dito por Sanders (2022), o princípio fundamental da criação de um prompt é a clareza, ou seja, quanto mais objetiva e precisa for a tarefa, melhor o resultado alcançado.

Aqui vale um adendo: objetividade não é sinônimo de poucas palavras, mas de precisão. Por exemplo, colocar "pesquise" as datas, em vez de "crie uma tabela", não implica maior objetividade; ao contrário, a clareza implica em ir direto ao ponto, ou seja, descrever com precisão qual é o seu objetivo.

A definição do contexto reforça essa ideia, pois acrescenta as informações adicionais para que ele possa buscar uma resposta que esteja realmente relacionada com a necessidade apresentada. No caso, pediu-se as informações para a “criação de um e-mail para os advogados de um escritório”. Isso permite que na hora de buscar e elaborar a informação ele busque uma maneira que possa ser incorporada ao e-mail.

O prompt traz como dados de entrada “feriados judiciais para o Tribunal de Justiça do estado do Acre no ano de 2024”, ou seja, apresentou-se a ele, para aquela tarefa e contexto, o que ele deve buscar, ou seja, a necessidade específica.

Por fim, apresentamos a ele como a resposta deve ser entregue: “no formato microsoft excel”. Com as Inteligências Artificiais Generativas gradativamente incorporando diferentes possibilidades tanto de entrada quanto de saída, a engenharia de prompt torna-se cada vez mais crucial para garantir que a resposta gerada atenda às expectativas do usuário, especialmente em formatos multimídia.

Carraro (2024), apresenta que o foco da engenharia de prompt é o “design estratégico de instruções ou ‘prompts’ para maximizar” a resposta dos modelos de PLN. Nessa definição, três conceitos importantes emergem: design, que se refere ao processo de planejamento da interação; estratégico, indicando que o que está sendo desenhado deve ter uma relação direta com o resultado desejado; e instruções, ressaltando a importância de clareza na apresentação da resposta esperada.

image

Ou seja, no atual estado da arte desses modelos, qualquer pessoa pode através de uma frase em seu idioma nativo, obter o resumo de um livro, a tradução de um arquivo, um logotipo para sua empresa, um vídeo curto de apresentação com um avatar e diversas outras possibilidades, sem precisar escrever sequer uma linha de código em uma linguagem de programação de alto nível, mais próxima à natural, ou em uma linguagem de baixo nível, próxima à linguagem de máquina.

Mas, para tanto, nem sempre é suficiente incluir um prompt básico, como definido por Vatsal & Dubey (2024). O prompt precisa, conforme pontuado por Carraro (2024), ser desenhado de maneira estratégica e com elementos suficientes para que a resposta atenda a necessidade do usuário e seja apresentada da forma desejada.

Além disso, Sanders (2022) indica como primeiro princípio para a criação de um bom prompt a necessidade de que ele contenha instruções claras. Outro ponto destacado pelo autor é a utilidade de pedir ao modelo que explique sua resposta. Isso permite avaliar a veracidade do resultado apresentado e identificar possíveis falhas na lógica empregada para gerar a resposta. Ao solicitar que o sistema "pense em voz alta", aumenta-se a chance de obter uma resposta mais correta.

PEG (2024) sugere para a criação de um prompt “simples”, que inicialmente indique-se através de um verbo o que se deseja alcançar - “Escrever”, “Classificar”, “Resumir”, “Traduzir”, “Ordenar” etc. Além disso, enfatiza que esse é um processo incremental, onde a experimentação é fundamental para encontrar a melhor abordagem.

Outra dica valiosa que é apresentada é que a instrução, ou seja, aquilo que se deseja que o sistema faça, deve ser apresentada no início do prompt e preferencialmente com algum separador claro que a delimite, por exemplo, como sugerem, criando um título para a instrução entre cerquilhas triplas - ### e apresentando os dados na sequência. Essa estratégia pode ser empregada para dividir os diversos conteúdos do pedido em seções, facilitando a compreensão do modelo. 

Por exemplo, na análise de um erro de código, podemos ter instrução, código, retorno do terminal e forma de apresentação da resposta como seções do prompt, deixando bem claro para o modelo a que cada parte do conteúdo se refere.

Vários estudos foram realizados para avaliar técnicas de engenharia de prompt que possam ser empregadas para otimizar as respostas geradas (Carraro, 2024; Sanders, 2022; Prompt Engineering Guide, 2024), também conhecida como Engenharia de Prompt de Inteligência Artificial. Ou seja, são estratégias que visam ajustar o comportamento da IA para gerar respostas mais adequadas:

  • Prompting com poucos exemplos (few-shot prompting): fornecer exemplos de como se deseja que a resposta seja apresentada, por exemplo, indicando qual deve ser a estrutura que um resumo deve ter, ajuda o modelo a gerar uma resposta mais próxima do resultado final, tanto no formato quanto com os elementos necessários.
  • Criação de prompts com cadeia de pensamentos (chain-of-thought prompting): nessa técnica, apresenta-se ao modelo uma sequência de raciocínio ou etapas que ele deve seguir para resolver um problema. Em vez de fornecer uma resposta completa como exemplo, a abordagem típica é descrever o processo de pensamento passo a passo necessário para chegar à solução. Em seguida, apresenta-se a situação-problema para que o modelo aplique esse raciocínio estruturado. Isso orienta o modelo a decompor o problema em subtarefas e seguir um caminho lógico, melhorando a precisão e a eficiência.
  • Criação de prompts com cadeia de pensamento com poucos exemplos (few-shot chain-of-thought): nesta técnica, após apresentar o problema, solicita-se ao modelo que pense na solução passo-a-passo (“Let's think step by step”). Inclusive, a documentação do Chat-GPT recomenda essa prática para resolver problemas complexos. Estudos indicam que essa técnica é especialmente eficaz para problemas aritméticos de várias etapas, raciocínio simbólico e lógico.
  • Prompting do mais fácil para o mais difícil (least-to-most prompting): nesta técnica, o modelo é guiado para resolver um problema complexo de forma gradual, começando pelas partes mais simples e progredindo para as mais complexas. Inicialmente, solicita-se uma solução para a parte mais simples do problema. Em seguida, a solução obtida é usada como base para abordar a próxima parte do problema, e assim por diante. As iterações são realizadas sucessivamente até que se chegue a uma solução completa para o problema complexo.
  • Autoconsistência (self-consistency): nesta técnica, utiliza-se a criação de prompts com poucos exemplos para gerar múltiplas respostas para uma mesma solicitação. Depois, avaliam-se as respostas para escolher a mais adequada. Essa abordagem é particularmente útil para tarefas com um conjunto limitado de respostas possíveis, pois permite comparar e escolher a melhor solução. No entanto, essa técnica pode ser custosa devido ao esforço necessário para analisar todas as respostas geradas.
  • Cadeia de verificação (chain of verification): após gerar uma resposta inicial a um prompt, o modelo é submetido a novas perguntas ou instruções que visam verificar a veracidade e a precisão da resposta inicial. Esse processo pode envolver a solicitação de explicações adicionais ou a aplicação de lógica dedutiva para testar e validar a resposta. O objetivo é incentivar o modelo a revisar e refinar sua resposta inicial, utilizando fontes adicionais e raciocínio crítico para garantir que a solução fornecida seja correta e confiável.

PEG (2024) enfatiza sobremaneira a importância da experimentação na criação de prompts. Como visto acima, existem diversas estratégias que podem ser empregadas para otimizar os resultados, mas cada estratégia pode ser melhor empregada para um determinado tipo de problema. Por isso, é essencial experimentar e reavaliar constantemente tanto os prompts quanto as estratégias utilizadas.

Nesse sentido, como o processo de criação de prompts é uma interação, na qual interlocutor e máquina colaboram em direção à resposta, é essencial que o criador do prompt tenha a capacidade de avaliar tanto a resposta apresentada quanto o prompt que criou. Após avaliar a resposta, é importante refletir sobre a correlação entre o prompt e o resultado obtido. Com isso, é possível identificar o que faltou na resposta e o que faltou no prompt para produzir o resultado desejado. Na iteração seguinte, então, deve-se reescrever o prompt com foco nos elementos que não foram informados no primeiro pedido e que podem ter influenciado na eficácia da resposta do sistema.

Ademais, como toda competência, a Engenharia de Prompt tem um desenvolvimento incremental; por isso, fala-se em Engenharia de Prompts. Devemos buscar entender a lógica de cada assistente e criar um conjunto de consultas e lógicas de solicitação que possam servir a diferentes problemas, aproveitando as experiências anteriores para obter respostas cada vez melhores.

image

PEG (2024) apresenta exemplos da aplicação de prompts para a realização de diferentes tarefas:

  • resumo de texto: os modelos de PLN são especialmente habilidosos no resumo de textos. Portanto, podemos apresentar um texto e solicitar a ele que apresente um resumo que indique título, autor e, em no máximo 100 palavras, os principais assuntos tratados; ou simplesmente, pedir a ele que resuma o trecho em uma frase;
  • extração de informações: os modelos de PLN conseguem retirar informações específicas de uma base de dados. Por exemplo, pode-se pedir que ele traga as referências que foram citadas em um artigo, quais foram os principais resultados apresentados em um balanço orçamentário ou quais são os textos em uma imagem;
  • respostas a perguntas: para obter melhores respostas dos modelos a perguntas, é importante lembrar que um prompt bem elaborado impacta diretamente na resposta gerada. Assim, é importante buscar sempre incluir instruções, contexto, dados de entrada e indicadores de saída claros;
  • classificação de textos: ao treinar os modelos com exemplos específicos, é possível refinar sua capacidade de gerar resultados mais alinhados ao desejado. Por exemplo, ao pedir a ele que avalie se uma mensagem é positiva, neutra ou negativa, podemos apresentar um exemplo de cada uma das situações com o respectivo rótulo, dando a ele um parâmetro para seguir na classificação;
  • conversação: o prompt permite alterar a forma como o modelo se comporta, ajustando as respostas em um tom ou em estilo próximo ao desejado. Pode-se pedir no prompt que ele responda no estilo de um grande autor ou em um tom menos formal ou até brincalhão. Isso tornará a resposta mais adequada à necessidade do usuário.
  • geração de código: os modelos de PLN tem se destacado na geração autônoma de códigos e na correção de códigos defeituosos. Além de apresentar a solução, essa é uma excelente oportunidade de aprendizado, pois pode-se pedir que além de gerar o código, o modelo explique o que fez, permitindo ao desenvolvedor entender sua lógica e aprender.

Em um cenário onde a engenharia de prompts evolui continuamente, é crucial reconhecer sua importância e impacto significativo em diversas áreas, incluindo o desenvolvimento de software. Desenvolvedores frequentemente utilizam técnicas semelhantes para aprimorar a interação com sistemas e ferramentas, ajustando e refinando suas abordagens com base no feedback e nas necessidades dos usuários. Da mesma forma que um desenvolvedor de software ajusta seu código para melhorar a funcionalidade e a eficiência de um sistema, a prática da engenharia de prompts envolve um processo iterativo de teste, ajuste, otimização e documentação para garantir que as respostas geradas sejam cada vez mais precisas e relevantes.

Usando a engenharia de prompt de maneira responsável para melhorar seus resultados

A revolução gerada pelos modelos generativos impactou todas as áreas. Em relação aos desenvolvedores, é importante destacar dois impactos principais.

Primeiramente, surge sempre o fantasma da substituição dos postos de trabalho pela automação de processos. Entretanto, como descrito ao longo do texto, os modelos de IA generativa não buscam substituir os humanos em sua essência. Quando se trata da sintaxe do código, esses modelos podem superar a capacidade humana. Todavia, isso traz o benefício de que os desenvolvedores poderão concentrar-se no que há de mais humano em seu trabalho: o aprimoramento da lógica dos sistemas, melhorando a usabilidade, acessibilidade, qualidade e processamento; e focar no cliente, investindo mais tempo em ouvir e desenvolver soluções que realmente atendam às necessidades dos usuários.

Em segundo lugar, as novas tecnologias de IA generativa, na verdade, irão criar diversas oportunidades, pois a demanda pela incorporação dessas tecnologias em sistemas e equipamentos será crescente. Caberá justamente aos desenvolvedores assegurar que essas soluções inteligentes sejam cada vez mais integradas ao cotidiano das pessoas e organizações de maneira ética e eficiente.

Além disso, há um vasto campo de estudo que a IA abre, como no desenvolvimento de estratégias para prevenir ataques aos modelos de processamento de linguagem natural, conforme alerta PEG (2024). Esses modelos podem sofrer ataques de injeção imediata, vazamento de prompt, jailbreak (apresentando respostas que violam as políticas das ferramentas), e técnicas de DAN (Do Anything Now), que levam os modelos a ignorar suas políticas, sendo necessário desenvolvedores para aprimorá-los e protegê-los.

Portanto, é crucial retomar a questão ética na engenharia de prompt sob duas perspectivas.

Este artigo, por exemplo, poderia ter sido escrito com maestria por assistentes virtuais a partir de algumas iterações baseadas em prompts bem elaborados. No entanto, em vez disso, os modelos foram utilizados para ampliar referências, revisar a lógica do texto e agregar valor ao que está sendo apresentado.

Além disso, deve-se tomar o cuidado de utilizar ferramentas que não apresentem viés em sua base de treinamento ou que sejam treinadas para apresentar respostas que atendam ao que Nick Bostrom (2002) chamou de “valores filantrópicos”: os sistemas inteligentes devem favorecer a todos, não privilegiando grupos de poder ou seus criadores.

Ignorar a onda das Inteligências Artificiais Generativas e não utilizar os recursos dos assistentes virtuais é uma perda de tempo, tanto em termos de melhorar sua produtividade, quanto de ficar atrás de outros profissionais que já fazem bom uso dessas tecnologias. O grande diferencial que se deve buscar é usá-las com inteligência e ética para melhorar os resultados em termos de qualidade, quantidade e personalidade.

Como não há como fugir dessa tendência, para encerrar este artigo, seguem as dicas que o ChatGPT (2024) apresentou para o seguinte prompt: “Como deve ter percebido, estou escrevendo um artigo sobre engenharia de prompt. Quais dicas, você chat-gpt me daria para a criação de prompts que otimizem o resultado das respostas?”:

“Para criar prompts que otimizem os resultados das respostas, considere as seguintes dicas:

  1. Seja Claro e Específico: Quanto mais claro e específico for o prompt, melhor será a resposta. Evite ambiguidades e forneça detalhes precisos sobre o que você deseja. Por exemplo, em vez de pedir "fale sobre a Revolução Francesa", você pode pedir "descreva as principais causas da Revolução Francesa em um parágrafo".
  2. Use Estruturas de Separação: Utilize separadores claros para dividir o prompt em seções, especialmente se o prompt for complexo. Por exemplo, use títulos entre cerquilhas triplas (###) para separar instruções, dados, e perguntas. Isso ajuda o modelo a entender e processar cada parte de forma mais eficiente.
  3. Forneça Exemplos: Inclua exemplos de como a resposta deve ser formatada ou estruturada. Isso ajuda o modelo a entender suas expectativas e a gerar respostas mais alinhadas com o desejado.
  4. Faça Perguntas Diretas e Focadas: Em vez de perguntas abertas, faça perguntas específicas que guiem o modelo para fornecer respostas mais direcionadas e relevantes.
  5. Inclua Contexto Adequado: Se o prompt exige conhecimento prévio ou contexto específico, inclua essas informações. Isso evita respostas fora do tópico ou irrelevantes.
  6. Utilize o Feedback Iterativo: Teste e refine seus prompts com base nas respostas recebidas. Ajuste os prompts para melhorar a precisão e relevância das respostas. Se uma resposta não estiver alinhada com o esperado, reescreva o prompt e tente novamente.
  7. Instruções de Forma e Conteúdo: Dê orientações sobre como o conteúdo deve ser apresentado (e.g., em formato de lista, parágrafo, resumo) e o tipo de informação que deve ser incluída.
  8. Limite a Complexidade: Divida prompts complexos em partes menores e mais manejáveis. Isso facilita a compreensão e a geração de respostas mais precisas.
  9. Forneça Contexto Adicional se Necessário: Se o tópico for técnico ou especializado, forneça o contexto ou definições que possam ajudar o modelo a entender melhor o que está sendo solicitado.
  10. Peça Explicações Adicionais: Em alguns casos, pedir ao modelo para explicar sua resposta pode ajudar a validar a precisão e a lógica da resposta fornecida.

Essas dicas podem ajudar a melhorar a precisão e a relevância das respostas geradas pelos modelos de linguagem, otimizando a interação com assistentes virtuais e outros sistemas baseados em IA.”

Referências

Bostrom, N. (2002). Ethical issues in advanced artificial intelligence. Oxford University. Disponível em https://philarchive.org/rec/BOSEII.Acesso em 13/8/2024.

Carraro, F. (2024). O que é Engenharia de Prompt e quais as suas principais técnicas? Aprenda a escrever um bom comando para IA. Disponível em: https://www.alura.com.br/artigos/engenharia-prompt. Acesso em 13/8/2024.

ChatGPT. (2024). Sugestões para a criação de prompts. Disponível em: https://chat.openai.com. Acesso em 14/8/2024.

Forbes (2023). ChatGPT tem recorde de crescimento da base de usuários. Disponível em https://forbes.com.br/forbes-tech/2023/02/chatgpt-tem-recorde-de-crescimento-da-base-de-usuarios/. Acesso em 13/8/2024.

Khurana, D; Koli, A; Khatter, K. & Singh, S. (2022). Natural language processing: state of the art, current trends and challenges. Multimedia Tools and Aplications, Volume 82, pages 3713–3744. Disponível em https://link.springer.com/article/10.1007/s11042-022-13428-4. Acesso em 13/8/2024.

Prompt Engineering Guide - PEG (2024). Prompt Engineering. Disponível em https://www.promptingguide.ai/pt. Acesso em 13/8/2024.

Sanders, T. (2022). Techniques to improve reliability. Disponível em https://cookbook.openai.com/articles/techniques_to_improve_reliability. Acesso em 13/8/2024.

Touring, A. (1950). Computing Machinery and Intelligence. Mind, Volume LIX, Issue 236, October 1950, Pages 433–460, disponível em https://academic.oup.com/mind/article/LIX/236/433/986238. Acesso em 13/8/2024.

Vatsal, S. & Dubey, H. (2024). A Survey of Prompt Engineering Methods in Large Language Models for Different NLP Tasks. Department of Computer Science New York University, CIMS New York, USA. Disponível em https://arxiv.org/html/2407.12994v1. Acesso em 13/8/2024.

Compartilhe
Comentários (0)