import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
DEFAULT_MODEL = "gpt-3.5-turbo"
DEFAULT_TEMPERATURE = 0.7
PROMPT_TEMPLATE = 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 e didático.",
),
("placeholder", "{historico}"),
("human", "{query}"),
]
)
def build_model() -> ChatOpenAI:
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise RuntimeError(
"OPENAI_API_KEY no está configurada. Agrégala a tu archivo .env."
)
model_name = os.getenv("OPENAI_MODEL", DEFAULT_MODEL)
temperature = float(os.getenv("OPENAI_TEMPERATURE", str(DEFAULT_TEMPERATURE)))
return ChatOpenAI(
api_key=api_key,
model=model_name,
temperature=temperature,
)
def chat(pergunta: str) -> None:
llm = build_model()
chain = PROMPT_TEMPLATE | llm | StrOutputParser()
print(f"Usuario: {pergunta}\n")
if pergunta:
response = chain.invoke({"historico": [], "query": pergunta})
print(f"Mentor: {response}\n")
else:
print("Chat mentor listo. Escribe 'salir' para terminar.")
while True:
user_message = input("Usuario: ").strip()
if not user_message:
continue
if user_message.lower() in {"salir", "exit", "quit"}:
print("Fin.")
break
response = chain.invoke({"historico": [], "query": user_message})
print(f"Mentor: {response}\n")
# pra executar o chat interativo, basta rodar o script sem argumentos. Para perguntas rápidas, passe a pergunta como argumento.
if __name__ == "__main__":
perguntas = [
"Eu sou geofísico e quero migrar para a área de dados. Qual linguagem de programação devo aprender primeiro?",
"E que tipo de projeto de portfólio eu poderia criar usando essa linguagem?",
]
try:
for pergunta in perguntas:
try:
chat(pergunta)
except Exception as e:
print(f"Erro ao processar pergunta: {e}\n")
except RuntimeError as e:
print(f"Erro de configuração: {e}")
except Exception as e:
print(f"Erro inesperado: {e}")