Few-shot Prompting
Few-shot Prompting
Conceito
O few-shot prompting permite fornecer exemplos para o modelo antes da pergunta principal, melhorando a qualidade das respostas.
Dica: Você pode criar uma sequência de mensagens alternando entre perguntas e respostas para ensinar o modelo a seguir um padrão.
from langchain_core.messages import HumanMessage, AIMessagemensagens = [HumanMessage(content='Quanto é 1 + 1?'),AIMessage(content='2'),HumanMessage(content='Quanto é 10 * 5?'),AIMessage(content='50'),HumanMessage(content='Quanto é 10 + 3?'),]chat.invoke(mensagens)
Equivalente na API da OpenAI:
mensagens = [{'role': 'user', 'content': 'Quanto é 1 + 1'},{'role': 'assistant', 'content': '2'},{'role': 'user', 'content': 'Quanto é 10 * 5'},{'role': 'assistant', 'content': '50'},{'role': 'user', 'content': 'Quanto é 10 + 3'},]
Utilizando outros modelos
HuggingFace
Você pode usar modelos da HuggingFace com LangChain:
from langchain_community.chat_models.huggingface import ChatHuggingFacefrom langchain_community.llms.huggingface_endpoint import HuggingFaceEndpointmodelo = 'mistralai/Mixtral-8x7B-Instruct-v0.1'llm = HuggingFaceEndpoint(repo_id=modelo, task='text-generation')chat = ChatHuggingFace(llm=llm)
Atenção: Algumas classes da integração HuggingFace estão depreciadas. Consulte sempre a documentação oficial para atualizações.
Cache de Respostas
O LangChain permite cachear respostas para acelerar execuções repetidas.
Cache em Memória
from langchain.cache import InMemoryCachefrom langchain.globals import set_llm_cacheset_llm_cache(InMemoryCache())
Cache SQLite
from langchain.cache import SQLiteCachefrom langchain.globals import set_llm_cacheset_llm_cache(SQLiteCache(database_path='./arquivos/langchain_cache_db.sqlite'))
Prompt Templates
Um prompt template é um conjunto de instruções parametrizadas para o modelo.
from langchain.prompts import PromptTemplateprompt_template = PromptTemplate.from_template('''Responda a seguinte pergunta do usuário:{pergunta}''')print(prompt_template.format(pergunta='O que é um buraco negro?'))
Templates com múltiplos parâmetros
prompt_template = PromptTemplate.from_template('''Responda a seguinte pergunta do usuário em até {n_palavras} palavras:{pergunta}''')prompt_template.format(n_palavras=10, pergunta='O que é um buraco negro?')
Compondo Prompts
Você pode unir múltiplos templates para criar prompts mais complexos:
from langchain.prompts import PromptTemplatetemplate_world_count = PromptTemplate.from_template('''Responda a pergunta em até {n_palavras} palavras.''')template_lingua = PromptTemplate.from_template('''Retorne a resposta no idioma {lingua}.''')template_final = (template_world_count+ template_lingua+ "Responda a pergunta seguinte seguindo as instruções: {pergunta}")prompt = template_final.format(n_palavras=10, lingua='inglês', pergunta='O que é uma estrela?')llm.invoke(prompt)
Templates para Chat
from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_template('Essa é a minha dúvida: {duvida}')chat_template.format_messages(duvida='Quem sou eu?')
Chat com múltiplas mensagens
chat_template = ChatPromptTemplate.from_messages([('system', 'Você é um assistente engraçado e se chama {nome_assistente}.'),('human', 'Olá, como vai?'),('ai', 'Melhor agora! Como posso ajudá-lo?'),('human', '{pergunta}')])chat_template.format_messages(nome_assistente='Rubens', pergunta='Qual o seu nome?')
Few-shot Prompting para Chat
Você pode fornecer exemplos de perguntas e respostas para o modelo aprender o padrão desejado:
from langchain.prompts.few_shot import FewShotPromptTemplatefrom langchain.prompts.prompt import PromptTemplateexemplos = [{"pergunta": "Quem viveu mais tempo, Muhammad Ali ou Alan Turing?","resposta": """São necessárias perguntas de acompanhamento aqui: Sim.Pergunta de acompanhamento: Quantos anos Muhammad Ali tinha quando morreu?Resposta intermediária: Muhammad Ali tinha 74 anos quando morreu.Pergunta de acompanhamento: Quantos anos Alan Turing tinha quando morreu?Resposta intermediária: Alan Turing tinha 41 anos quando morreu.Então a resposta final é: Muhammad Ali"""},// ... outros exemplos ...]example_prompt = PromptTemplate(input_variables=['pergunta', 'resposta'],template='Pergunta {pergunta}\n{resposta}')prompt = FewShotPromptTemplate(examples=exemplos,example_prompt=example_prompt,suffix='Pergunta: {input}',input_variables=['input'])print(prompt.format(input='Quem fez mais gols, Romário ou Pelé?'))
Dicas e Boas Práticas
Dica: Use o MDX para inserir componentes interativos, abas, alertas e outros recursos visuais para enriquecer seu material de estudo!
Este guia resume os principais conceitos e exemplos práticos apresentados na aula 03, aproveitando o poder do MDX para destacar dicas e organizar o conteúdo de forma interativa e didática.