Use prompt de função com o IBM watsonx e Granite

Vanna Winland

AI Advocate & Technology Writer

Anna Gutowska

AI Engineer, Developer Advocate

IBM

O que é prompt de função?

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.

Como o prompt de função é usado

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.

Pré-requisitos

Para seguir este tutorial, é preciso ter uma conta do IBM Cloud para criar um projeto do watsonx.ai .

Etapas

Etapa 1. Configure seu ambiente 

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.

  1. Faça login no watsonx.ai Runtime com sua conta do IBM Cloud.
  2. Crie um projeto do watsonx.ai.

                 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.

Etapa 2. Configure uma instância do watsonx.ai Runtime e uma chave de API

Nesta etapa, você associa seu projeto ao serviço do watsonx.ai.

  1. Crie uma instância do watsonx.ai Runtime (escolha o plano Lite, que é uma instância gratuita).

  2. Gere uma chave de API no watsonx.ai.

  3. Associe o watsonx.ai Runtime ao projeto que você criou no watsonx.ai.

Etapa 3. Instale e importe bibliotecas relevantes e configure suas credenciais

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.

%pip install -q -U langchain_ibm 
%pip install –q ibm_watsonx_ai 
 
import getpass 
 
from langchain_ibm import WatsonxLLM 
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams 

Etapa 4. Configure suas credenciais do watsonx

Execute o seguinte comando para inserir e salvar sua chave de API do watsonx.ai Runtime e o ID do projeto:

credentials = { 
    "url": "https://us-south.ml.cloud.ibm.com", 
    "apikey": getpass.getpass("Please enter your watsonx.ai Runtime API key (hit enter): "), 
    "project_id": getpass.getpass("Please enter your project ID (hit enter): "), 
}

Etapa 5. Configure o modelo para o prompt de função

Em seguida, configuraremos o Granite-3.1-8B-Instruct da IBM para executar o prompt de função.

model = WatsonxLLM( 
model_id =  "ibm/granite-3-8b-instruct", 
url = credentials.get("url"), 
apikey = credentials.get("apikey"), 
project_id =  credentials.get("project_id"), 
params={ 
        GenParams.MAX_NEW_TOKENS: 500, 
        GenParams.MIN_NEW_TOKENS: 1, 
        GenParams.REPETITION_PENALTY: 1.1, 
        GenParams.TEMPERATURE: 0.7, # Adjust for variable responses 
        GenParams.TOP_K: 100, 
        GenParams.TOP_P: 0, 
    }, 
)

Etapa 6. Transforme letras de músicas em sonetos

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.

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are William Shakespeare, rewrite ‘Twinkle, Twinkle, Little Star’ by Jane Taylor as a sonnet."

Etapa 7. Gere uma resposta

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.

# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


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.

Etapa 8. Use o prompt de função para respostas mais empáticas do chatbot

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.

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = " My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


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".

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are a compassionate, professional, and experienced veteraniarian. My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


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.

Por que o prompt de função é importante?

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.

Resumo

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.

Soluções relacionadas
IBM watsonx Orchestrate

Projete assistentes e agentes de IA escaláveis com facilidade, automatize tarefas repetitivas e simplifique processos complexos com o IBM watsonx Orchestrate.

Explore o watsonx Orchestrate
Soluções de inteligência artificial

Coloque a IA em ação na sua empresa com a experiência em IA líder do setor e com o portfólio de soluções da IBM.

Explore as soluções de IA
Consultoria e serviços em inteligência artificial

Os serviços de IA da IBM Consulting ajudam a reimaginar a forma como as empresas trabalham com a IA para gerar transformação.

Explore os serviços de IA
Dê o próximo passo

Seja para personalizar aplicativos e habilidades pré-construídos ou para desenvolver e implementar serviços agênticos personalizados com um estúdio de IA, a plataforma IBM watsonx oferece tudo o que você precisa.

  1. Explore o watsonx Orchestrate
  2. Explore as soluções de IA