0
respostas

Etapa 2

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}")