Neste tutorial, seguiremos as instruções passo a passo para executar uma técnica de engenharia de prompts chamada prompt de função. Usaremos um modelo IBM Granite para atribuir personas para saídas de modelo com nuances.
O prompt de função é uma técnica de engenharia de prompts que instrui um modelo de inteligência artificial (IA) a assumir uma função ou persona específica ao gerar uma resposta. Essa técnica pode ser usada para orientar o tom, o estilo e o comportamento do modelo, o que pode levar a saídas mais envolventes.
A engenharia de prompts consiste em otimizar a entrada do modelo, para que ele responda com respostas apropriadas e significativas. Prompts zero-shot e few-shot são duas técnicas populares usadas para conversar com grandes modelos de linguagem (LLMs). Os LLMs têm uma capacidade natural de executar tarefas de processamento de linguagem natural (NLP) devido à sua capacidade de processar e interpretar a linguagem humana. Os recursos de linguagem dos modelos de IA são valiosos para tarefas que vão desde conversas de chatbots e interações multiagentes até redação criativa aberta.
A IA generativa (IA gen) fica mais pessoal quando um LLM é instruído a agir como uma persona específica para atender às necessidades específicas de uma função. As respostas da IA podem ser mais precisas e relevantes quando estimuladas pela primeira vez com uma função atribuída. Os modelos de IA aproveitam enormes conjuntos de dados, de modo que uma função atribuída pode ser qualquer coisa, desde professor, figura histórica, vendedor ou outros, limitada apenas àquilo em que a imaginação pode pensar. Essa capacidade é o que torna o prompt de função, também conhecido como prompting de persona, uma técnica tão poderosa. A adaptabilidade de um modelo de IA o torna um mestre do disfarce, capaz de gerar respostas adaptadas às necessidades específicas de um usuário ou sistema.
O prompt de função pode ser usado para dar a um chatbot uma persona para interagir melhor com os usuários ou um agente de IA para interagir melhor com outros agentes. Se você conhece os modelos de prompt, talvez já tenha visto o prompt de função em ação. Por exemplo, muitos frameworks agênticos usam agentes de desempenho de função para realizar tarefas e colaborar de forma eficaz. O ChatDev usa uma técnica de engenharia de prompts chamada mecanismo de autoatenção. Esse mecanismo define claramente o papel do agente que atua como uma diretriz para as saídas geradas.
Para seguir este tutorial, é preciso ter uma conta do IBM Cloud para criar um projeto do watsonx.ai .
Embora você possa escolher entre várias ferramentas, este tutorial explica como configurar uma conta da IBM para usar um Jupyter Notebook. Os Jupyter Notebooks são amplamente usados na ciência de dados para combinar código, texto, imagens e visualizações de dados para formular uma análise bem formada.
Anote o ID do projeto em projeto > Gerenciar > Geral > ID do projeto.
Você precisará desse ID para este tutorial.
3. Crie um Jupyter Notebook.
Esta etapa abre um ambiente do Notebook, onde você pode copiar o código deste tutorial para realizar a classificação zero-shot por conta própria. Ou então, você pode baixar esse Notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Este Jupyter Notebook está disponível no GitHub.
Nesta etapa, você associa seu projeto ao serviço do watsonx.ai.
Crie uma instância do watsonx.ai Runtime (escolha o plano Lite, que é uma instância gratuita).
Gere uma chave de API no watsonx.ai.
Associe o watsonx.ai Runtime ao projeto que você criou no watsonx.ai.
Precisaremos de algumas bibliotecas e módulos para este tutorial. Certifique-se de importar o seguinte e, se não estiverem instalados, uma instalação rápida de pip resolverá o problema.
Execute o seguinte comando para inserir e salvar sua chave de API do watsonx.ai Runtime e o ID do projeto:
Em seguida, configuraremos o Granite-3.1-8B-Instruct da IBM para executar o prompt de função.
Para dar um exemplo simples e divertido do prompt de função, vamos pedir ao modelo que assuma a persona de uma figura famosa, William Shakespeare. Solicitaremos ao modelo, com seu papel recém-atribuído, que reescreva algumas letras de músicas no estilo dos famosos sonetos de Shakesperes.
O bloco de código abaixo configura e define o prompt ao qual o modelo responderá. Sinta-se à vontade para alterar a música para o que você quiser, mas observe que o Granite não foi treinado em conteúdo protegido por direitos autorais. Se você escolher uma música que não faça parte do domínio público, por exemplo, "Espresso", de Sabrina Carpenter, terá que colar a letra com o prompt também.
Para um prompt que simplesmente funciona, este exemplo usará a clássica música de ninar infantil "Brilha, brilha, estrelinha", de Jane Taylor (1806). Execute o bloco de código para definir seu prompt de usuário com algum texto de entrada de exemplo.
Depois que o prompt for definido, podemos executar o próximo bloco de código para permitir que o modelo gere uma saída. Esperamos que esteja de acordo com nossos padrões shakesperianos.
Esta é a saída do modelo com formatação legível:
"Brilha, brilha, estrelinha, como eu me lembro do que você é;
Acima do mundo, tão alto, como um diamante no céu.
No manto de veludo da noite, você brilha tão brilhante,
Guiando os marinheiros pela noite mais escura.
Seus feixes de luz, uma arte celeste,
Ilumine a tela do coração.
Em profundos soluços, segredos você compartilha,
Das galáxias distantes e das constelações raras.
No entanto, olhos humanos nunca poderão alcançar sua forma,
Além de nosso domínio, em domínios além da tempestade.
Ó, estrela! Ó, estrela! Sua luz penetra em minha alma,
Uma dança cósmica, um papel atemporal.
Em sonhos, eu persigo você, enquanto seguro o sono,
Seu mistério, como um pergaminho encantado.
Mas o despertar me reivindica, a luz do dia rouba seu disfarce,
Deixando para trás mas uma memória de sua surpresa.
Assim, estrela brilhante, no reino tranquilo do sono,
Eu me despeço de você, até que a manhã traga novamente."
O modelo foi capaz de produzir uma resposta ao prompt baseado em função para reescrever a música como um soneto de Shakespeare. O modelo foi capaz de obedecer às regras e ao estilo esperados de seu prompt de função. *Observe que, devido à natureza criativa do prompt, sua saída pode parecer diferente deste exemplo.
No próximo exemplo, comparamos um prompt de sistema simples a um prompt de sistema baseado em função. Digamos que o consultório de um veterinário tenha implementado recentemente um assistente virtual em sua página da web. Para fornecer o melhor suporte ao cliente, esse escritório quer que os donos de animais de estimação se sintam ouvidos e apoiados, mesmo em suas interações virtuais, um objetivo identificável para muitas empresas. Um visitante pode fazer uma pergunta como: "Meu gato de estimação tem espirrado muito ultimamente e está lambendo as patas. O que devo fazer?" Nesse cenário, o modelo não recebeu uma função em seu prompt. Estamos apenas usando o modelo pronto para uso, sem orientação de entrada.
O modelo responde de forma adequada com conselhos e informações; no entanto, não há um toque pessoal e não é muito diferente do que você veria em uma página de resultados de mecanismos de pesquisa. A saída do modelo é bruta e carece de criatividade. Essa solução pode ser aceitável, mas não diferencia o assistente virtual desse consultório veterinário dos demais. Vamos tentar a mesma pergunta novamente, desta vez atribuindo-lhe o papel de "veterinário compassivo, profissional e experiente".
A linguagem na resposta do modelo é mais humanizada porque fala sobre uma consciência emocional do contexto que faltava ao prompt direto do sistema. O modelo foi capaz de alcançar esse tom e, ao mesmo tempo, fornecer uma resposta completa e relevante, provando que é uma resposta mais sutil. Esse tipo de interação humana com inteligência artificial é uma forma de atender às expectativas subjetivas das organizações e aplicações.
Se você é um desenvolvedor ou empresa que deseja adicionar mais personalização e interações significativas às suas aplicações de IA generativa, considere a possibilidade de entender como o prompt de função pode causar impacto. A maioria dos modelos de linguagem modernos é capaz do prompt de função. Alguns modelos básicos podem não entender as nuances da função ou manter a consistência nas respostas, enquanto outros podem ser ajustados para responder de uma determinada maneira. Modelos de base, como a Granite da IBM, são treinados em grandes quantidades de dados específicos da empresa, o que aumenta a capacidade dos modelos de assumir funções para produzir respostas personalizadas com base nas necessidades de negócios.
Os prompts de função incentivam o modelo a ter um desempenho constante, dadas as expectativas de sua persona atribuída. Realizamos um exemplo simples, atribuindo ao LLM o papel de uma figura histórica em nosso prompt para transformar letras de músicas em sonetos. Em seguida, comparamos a saída de um modelo não solicitado que não é de prompt de função com um modelo de prompt de função para respostas de chatbot. Concluímos lidando com que a resposta fornecida pelo prompt de função é mais sutil e de apoio em sua linguagem, proporcionando atenção ao cliente elevada.