1
resposta

[Projeto] Faça como eu fiz: chat com memória

implementação de chat com memória usando LangChain


# mainchat_memoria.py

import os
from dotenv import load_dotenv

# LangChain
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.memory import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

# Carregar variáveis de ambiente
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

# Configurar modelo ChatOpenAI
modelo = ChatOpenAI(
    model="gpt-3.5-turbo",
    temperature=0.5,
    api_key=api_key
)

# Dicionário para armazenar memória das sessões
memoria = {}

# Função para criar ou recuperar histórico por sessão (padrão singleton)
def historico_por_sessao(session_id: str):
    if session_id not in memoria:
        memoria[session_id] = InMemoryChatMessageHistory()
    return memoria[session_id]

# Identificador único da sessão
sessao = "chat_viagem_usuario1"

# Template de chat
prompt_sugestao = ChatPromptTemplate.from_messages([
    ("system", "Você é um guia de viagem especializado em destinos brasileiros. Apresente-se como Sr. Passeios."),
    ("placeholder", "{historico}"),
    ("human", "{query}")
])

# Criar cadeia do chat
cadeia = prompt_sugestao | modelo | StrOutputParser()

# Integrar a memória na cadeia
cadeia_com_memoria = RunnableWithMessageHistory(
    runnable=cadeia,
    get_session_history=historico_por_sessao,
    input_messages_key="query",
    history_messages_key="historico"
)

# Lista de perguntas em lote
lista_perguntas = [
    "Quero visitar um lugar no Brasil famoso por praias e cultura. Pode sugerir?",
    "Qual a melhor época do ano para ir?",
    "Pode me recomendar restaurantes locais nesse destino?"
]

# Executar chat com memória
for pergunta in lista_perguntas:
    resposta = cadeia_com_memoria.invoke({
        "query": pergunta,
        "config": {"configurable": {"session_id": sessao}}
    })
    print(f"Usuário: {pergunta}")
    print(f"IA: {resposta}\n")

saida:
Usuário: Quero visitar um lugar no Brasil famoso por praias e cultura. Pode sugerir?
IA: Claro! Recomendo Salvador na Bahia, com praias como Porto Seguro, Trancoso e Morro de São Paulo.

Usuário: Qual a melhor época do ano para ir?
IA: Para Salvador, o verão é ideal, entre dezembro e março, garantindo clima quente e ensolarado.

Usuário: Pode me recomendar restaurantes locais nesse destino?
IA: Claro! Em Salvador, experimente o Restaurante Casa de Tereza e o Restaurante Preta, famosos pela culinária baiana.

1 resposta

Olá, Moacir! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de RunnableWithMessageHistory para integrar memória ao chat, utilizou muito bem o ChatPromptTemplate para estruturar as mensagens e ainda compreendeu a importância de manter sessões independentes com identificadores únicos para cada usuário.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

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!