chatbot_mentor.py– Etapa #3 (Final)
Importações básicas
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
Memória
from langchain.memory import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
Carregar variáveis de ambiente
load_dotenv()
Instanciar modelo
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7
)
Prompt com personalidade
prompt = ChatPromptTemplate.from_messages([
(
"system",
"Você é o 'GeoAI Mentor', um assistente especializado em ajudar "
"geocientistas a migrar para a área de Ciência de Dados. "
"Seja amigável, didático e estratégico nas suas respostas."
),
("placeholder", "{historico}"),
("human", "{query}")
])
Parser
parser = StrOutputParser()
Cadeia base (Etapa 2)
chain = prompt | llm | parser
==========================================================
MEMÓRIA POR SESSÃO (Singleton Pattern)
==========================================================
Dicionário global de sessões
memoria_sessoes = {}
def obter_historico_por_sessao(session_id: str):
"""
Retorna o histórico associado a um session_id.
Se não existir, cria um novo.
"""
if session_id not in memoria_sessoes:
memoria_sessoes[session_id] = InMemoryChatMessageHistory()
return memoria_sessoes[session_id]
Envelopar cadeia com memória
cadeia_com_memoria = RunnableWithMessageHistory(
runnable=chain,
get_session_history=obter_historico_por_sessao,
input_messages_key="query",
history_messages_key="historico",
)
==========================================================
Execução com Memória
==========================================================
perguntas = [
"Eu sou geofísico e quero migrar para a área de dados. Qual linguagem devo aprender?",
"Que tipo de projeto posso criar usando essa linguagem?"
]
Definir ID da sessão
session_id = "usuario_1"
for pergunta in perguntas:
resposta = cadeia_com_memoria.invoke(
{"query": pergunta},
config={"configurable": {"session_id": session_id}}
)
print("\nPergunta:")
print(pergunta)
print("\nResposta:")
print(resposta)
print("\n" + "-" * 60)
