Como utilizar Prompts e PromptTemplates no LangChain

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Salve salve Pythonista :wave:

Prompts e PromptTemplates são elementos fundamentais no desenvolvimento de aplicações com Inteligência Artificial e Processamento de Linguagem Natural.

No contexto do LangChain, uma poderosa framework em Python para construção de aplicativos de linguagem, entender como utilizar esses conceitos é essencial para criar interações eficientes e precisas com modelos de linguagem.

Neste artigo, exploraremos o conceito de prompts, seus tipos, técnicas avançadas de construção e como implementá-los usando LangChain. Também compartilharemos dicas para otimizar seus prompts e exemplos práticos para diferentes tarefas.

Dominar esses conhecimentos é crucial para desenvolver aplicações robustas e inteligentes que aproveitam ao máximo as capacidades dos modelos de linguagem.

Esse artigo faz parte de uma sequência completa sobre o LangChain. Leia também os outros artigos:

E fique ligado que outros vão aparecer em breve :wink:

Vá Direto ao Assunto…

O que são Prompts e sua importância

Prompts são instruções ou perguntas fornecidas a modelos de linguagem como o GPT-4 para gerar respostas específicas.

Eles são a base para direcionar o comportamento do modelo, determinando a qualidade e a relevância das respostas obtidas.

A importância dos prompts reside na capacidade de controlar e refinar as respostas dos modelos, tornando-os úteis para uma variedade de aplicações, desde chatbots até geração de conteúdo automatizado.

Tipos de Prompts

Prompts Simples

Prompts simples são instruções diretas e concisas que solicitam uma resposta específica do modelo.

Exemplo:

1
Explique o conceito de programação orientada a objetos

E a saída será:

1
2
3
Conceito de Programação Orientada a Objetos: A Programação Orientada a Objetos (POO) é um 
paradigma de programação que utiliza "objetos" para modelar dados e comportamentos através 
de classes, facilitando a organização e reutilização de código.

Prompts Few-shot

Prompts few-shot fornecem ao modelo alguns exemplos de entrada e saída antes da pergunta principal.

Isso ajuda o modelo a entender o contexto, o formato e o tipo de resposta esperado.

1
2
3
4
5
6
7
8
9
10
11
12
Exemplo 1:
Pergunta: O que é herança em POO?
Resposta: Herança é um princípio onde uma classe pode herdar atributos e 
métodos de outra classe.

Exemplo 2:
Pergunta: O que é encapsulamento?
Resposta: Encapsulamento é o conceito de esconder os detalhes internos de uma 
classe e expor apenas o necessário.

Pergunta: O que é polimorfismo?
Resposta:

E a saída será:

1
2
Polimorfismo é a capacidade de diferentes classes responderem ao mesmo método de maneira 
específica, permitindo flexibilidade e reutilização de código.

Técnicas Avançadas de Construção de Prompts

Construir prompts eficazes requer entender nuances e aplicar técnicas que maximizem a qualidade das respostas.

Uso de Instruções Claras

Forneça instruções precisas para evitar ambiguidades.

1
Liste três vantagens da programação funcional em Python.

E a saída será:

1
2
3
1. Imutabilidade dos dados  
2. Facilita a depuração e manutenção  
3. Suporte aprimorado para processamento paralelo

Contextualização

Adicione contexto relevante para guiar o modelo.

1
2
3
Você é um assistente de programação especializado em Python. 

Explique como funciona a função map().

E a saída será:

1
2
3
A função `map()` aplica uma função específica a cada item de um iterável (como listas ou 
tuplas) e retorna um iterador com os resultados. É útil para realizar operações 
repetitivas de forma concisa e eficiente.

Limitação de Respostas

Defina limites para a resposta desejada, como o número de itens ou o comprimento.

1
Resuma o capítulo 1 do livro 'Python para Iniciantes' em até 100 palavras.

E a saída será:

1
2
3
4
O capítulo 1 de 'Python para Iniciantes' introduz os conceitos básicos da programação, 
incluindo sintaxe fundamental, tipos de dados e estruturas de controle. Ele estabelece 
as bases necessárias para o desenvolvimento de habilidades em Python, preparando o 
leitor para tópicos mais avançados nas próximas seções.

Utilizando Prompts no LangChain

O LangChain facilita a integração e gestão de prompts em aplicações Python.

Vamos ver como utilizar prompts simples e few-shot com LangChain.

Instalação do LangChain

Primeiro, instale o LangChain usando pip - de preferência um ambiente virtual:

1
pip install langchain langchain-community langchain-openai

Exemplo de Uso de Prompt Simples

Agora vamos ver como é simples criar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import getpass
import os
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

# Defina e salve a chave de API da OpenAI nas variáveis de ambiente
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")

# Definindo o prompt simples
template = "Explique o conceito de {assunto}."

# Criando o template
prompt = PromptTemplate(
    input_variables=["assunto"],
    template=template,
)

# Inicializando o modelo OpenAI
llm = OpenAI(temperature=0.7)

# Gerando a resposta
resposta = llm.invoke(prompt.format(assunto="programação orientada a objetos"))
print(resposta)

E a saída será:

1
2
3
Conceito de Programação Orientada a Objetos: A Programação Orientada a Objetos (POO) é um 
paradigma de programação que utiliza "objetos" para modelar dados e comportamentos através 
de classes, facilitando a organização e reutilização de código.

Explicação do código:

  1. Importações: Importamos OpenAI e PromptTemplate do LangChain.
  2. Definição da Chave de API da OpenAI: Inserimos a chave de API da OpenAI nas variáveis de ambiente (clique aqui para aprender a gerar as suas próprias chaves).
  3. Definição do Template: Criamos um template que inclui uma variável {assunto}.
  4. Criação do Prompt: Passamos as variáveis de entrada e o template para PromptTemplate.
  5. Inicialização do Modelo: Configuramos o modelo OpenAI com uma temperatura para controle de criatividade.
  6. Geração da Resposta: Preenchemos o template com o assunto desejado e invocamos a resposta do modelo.

Utilizando PromptTemplates no LangChain

PromptTemplates permitem criar prompts parametrizados, tornando-os reutilizáveis e flexíveis para diferentes entradas.

Exemplo de PromptTemplate com Vários Exemplos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import os
import getpass
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

# Defina e salve a chave de API da OpenAI nas variáveis de ambiente
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")

# Definindo o prompt com exemplos few-shot
template = """
Exemplo 1:
Pergunta: O que é herança em POO?
Resposta: Herança é um princípio onde uma classe pode herdar atributos e 
métodos de outra classe.

Exemplo 2:
Pergunta: O que é encapsulamento?
Resposta: Encapsulamento é o conceito de esconder os detalhes internos de 
uma classe e expor apenas o necessário.

Pergunta: {pergunta}
Resposta:
"""

# Criando o template
prompt = PromptTemplate(
    input_variables=["pergunta"],
    template=template,
)

# Inicializando o modelo OpenAI
llm = OpenAI(temperature=0.7)

# Gerando a resposta
resposta = llm.invoke(prompt.format(pergunta="O que é polimorfismo?"))
print(resposta)

E a saída será:

1
2
Polimorfismo é a capacidade de diferentes classes responderem ao mesmo método 
de maneira específica, permitindo flexibilidade e reutilização de código.

Explicação do código:

  1. Definição do Template: Incluímos exemplos de perguntas e respostas para guiar o modelo.
  2. Criação do Prompt: Usamos PromptTemplate com a variável {pergunta}.
  3. Geração da Resposta: Preenchemos o template com a nova pergunta e obtemos a resposta.

Dicas e Truques para Otimizar seus Prompts

Seja Claro e Conciso

Evite ambiguidades e mantenha o prompt direto ao ponto.

Use Formatação Adequada

Utilize listas, negrito e itálico para destacar informações importantes.

Experimente com Parâmetros

Ajuste parâmetros como temperature e max_tokens para controlar a criatividade e o tamanho da resposta.

Teste e Itere

Teste diferentes versões dos prompts e itere com base nas respostas obtidas para aprimorar a eficácia.

Antes de continuar… Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Exemplos de Prompts para Diferentes Tarefas

Geração de Resumo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os
import getpass
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")

template = "Resuma o seguinte texto em uma frase: {texto}"

prompt = PromptTemplate(
    input_variables=["texto"],
    template=template,
)

llm = OpenAI(temperature=0.5)

resumo = llm.invoke(
    prompt.format(
        texto="""
        O LangChain é uma biblioteca em Python projetada para facilitar a criação 
        de aplicações que utilizam modelos de linguagem de grande porte (LLMs), 
        como o GPT-4, o DeepSeek ou o Grok.

        Sua importância reside na capacidade de integrar e orquestrar diferentes 
        componentes necessários para desenvolver funcionalidades avançadas, como 
        chatbots inteligentes, sistemas de perguntas e respostas (Q&A) e 
        ferramentas de sumarização de texto.
        """
    )
)
print(resumo)

E a saída será:

1
2
LangChain é uma framework poderosa que utiliza modelos de linguagem avançados 
para criar aplicações de linguagem eficientes.

Tradução de Texto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import getpass
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")

template = "Traduza o seguinte texto para inglês: {texto}"

prompt = PromptTemplate(
    input_variables=["texto"],
    template=template,
)

llm = OpenAI(temperature=0.3)

traducao = llm.invoke(prompt.format(texto="Olá, como você está?"))
print(traducao)

E a saída será:

1
Hello, how are you?

Geração de Código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import getpass
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")

template = "Crie uma função em Python que {descricao}."

prompt = PromptTemplate(
    input_variables=["descricao"],
    template=template,
)

llm = OpenAI(temperature=0.2)

codigo = llm.invoke(prompt.format(descricao="verifique se um número é primo"))
print(codigo)

E a saída será:

1
2
3
4
5
6
7
def eh_primo(numero):
    if numero < 2:
        return False
    for i in range(2, int(numero ** 0.5) + 1):
        if numero % i == 0:
            return False
    return True

Explicação do código:

  1. Resumir Texto: Cria um prompt para resumir um texto específico.
  2. Tradução: Define um prompt para traduzir texto do português para o inglês.
  3. Geração de Código: Configura um prompt para gerar uma função Python com base em uma descrição.

Antes de continuar… Está curtindo esse conteúdo? :thumbsup:

Então faça parte da Jornada Python e aprimore ainda mais suas habilidades de Programação!

Jornada Python Jornada Python

Conclusão

Neste artigo, exploramos como utilizar Prompts e PromptTemplates no LangChain para desenvolver aplicações inteligentes em Python.

Abordamos o conceito de prompts, seus diferentes tipos como simples e few-shot, e técnicas avançadas para construir prompts eficazes.

Aprendemos a implementar esses prompts utilizando o LangChain, além de compartilhar dicas valiosas para otimização e exemplos práticos para diversas tarefas.

Com essas ferramentas e conhecimentos, você está preparado para criar aplicações robustas que tiram o máximo proveito dos modelos de linguagem, oferecendo interações precisas e eficientes.

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.