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.