1
resposta

[Projeto] 05 Etapa #3

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)
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!