1
resposta

[Projeto] 08 Faça como eu fiz: encadeando cadeias LangChain

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

1 resposta

Olá! Como vai?

Parabéns pela resolução das atividades!

E para compartilhar códigos de maneira ainda mais organizada aqui no fórum, você pode utilizar a opção abaixo:

Opção inserir bloco de código, da caixa de perguntas do fórum da alura

Após clicar, irá aparecer uma estrutura da seguinte maneira:

Opção de bloco de código sendo illustrada
O resultado será o seguinte:

Copie o seu código aqui

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!