estudo de caso exemplo: gerar sugestões de cidades, restaurantes e atividades
1️ Importando bibliotecas
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from pydantic import BaseModel, Field
from langchain.globals import set_debug
Ativar debug para monitorar o fluxo das cadeias
set_debug(True)
2️ Definindo modelos Pydantic
Modelo de saída para a cidade
class Destino(BaseModel):
cidade: str = Field("A cidade recomendada para visitar")
motivo: str = Field("Motivo pelo qual é interessante visitar essa cidade")
Modelo de saída para restaurantes
class Restaurantes(BaseModel):
cidade: str = Field("A cidade recomendada para visitar")
restaurantes: str = Field("Restaurantes recomendados na cidade")
3️ Configurando analisadores de saída
Parser para o destino
parseador_destino = JsonOutputParser(pydantic_object=Destino)
Parser para restaurantes
parseador_restaurantes = JsonOutputParser(pydantic_object=Restaurantes)
Parser para respostas simples de atividades culturais
parseador_cultural = StrOutputParser()
4️ Criando modelos de prompts
Prompt para sugerir a cidade
prompt_cidade = PromptTemplate(
template="""
Sugira uma cidade dado o meu interesse por {interesse}.
{formato_de_saida}
""",
input_variables=["interesse"],
partial_variables={"formato_de_saida": parseador_destino.get_format_instructions()}
)
Prompt para sugerir restaurantes, dependerá da cidade obtida
prompt_restaurantes = PromptTemplate(
template="""
Sugira restaurantes populares entre locais em {cidade}
{formato_de_saida}
""",
input_variables=["cidade"],
partial_variables={"formato_de_saida": parseador_restaurantes.get_format_instructions()}
)
Prompt para atividades culturais, também depende da cidade
prompt_cultural = PromptTemplate(
template="Sugira atividades e locais culturais em {cidade}"
)
5️ Encadeando as cade
Supondo que modeloseja um LLM previamente definido (por exemplo, OpenAI GPT):
Cadeia 1: cidade
cadeia_1 = prompt_cidade | modelo | parseador_destino
Cadeia 2: restaurantes
cadeia_2 = prompt_restaurantes | modelo | parseador_restaurantes
Cadeia 3: atividades culturais
cadeia_3 = prompt_cultural | modelo | parseador_cultural
Cadeia final encadeada
cadeia_completa = (cadeia_1 | cadeia_2 | cadeia_3)
6️ Executando a cadeia
Interesse do usuário
entrada = {"interesse": "praias"}
Executa a cadeia completa
resposta_final = cadeia_completa.invoke(entrada)
Exibir resultado final
print(resposta_final)
Resultado esperado
Cadeia 1: Sugere uma cidade (ex.: Rio de Janeiro) com motivo
Cadeia 2:Sugere restaurantes populares na cidade localizados pela cadeia anterior.
CadeSugira atividades culturais
