oc_mlops_projet_3 / utils /sql_tool.py
CedM's picture
Déploiement automatique depuis GitLab CI
7cb1544 verified
"""
Agent SQL ReAct pour le projet NBA Analyst AI.
- Connexion PostgreSQL via SQLDatabaseToolkit
- Agent ReAct (LangGraph prebuilt) pour raisonner sur les données tabulaires NBA
"""
import sys, os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from langgraph.prebuilt import create_react_agent
from langchain_mistralai import ChatMistralAI
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from utils.config import (
MISTRAL_API_KEY, MODEL_NAME, TEMPERATURE, TOP_P, PG_URL_READONLY, SQL_SYSTEM_PROMPT
)
def build_sql_agent():
"""
Crée et retourne l'agent SQL ReAct.
La connexion PostgreSQL n'est établie qu'à l'appel de cette fonction
(connexion paresseuse, évite les erreurs à l'import si la BDD est éteinte).
"""
# -----------------------------
# LLM dédié aux requêtes SQL
# -----------------------------
sql_llm = ChatMistralAI(
api_key=MISTRAL_API_KEY,
model=MODEL_NAME,
#top_p=TOP_P,
temperature=TEMPERATURE,
)
# -----------------------------
# Connexion PostgreSQL + outillage
# -----------------------------
db = SQLDatabase.from_uri(PG_URL_READONLY)
sql_toolkit = SQLDatabaseToolkit(db=db, llm=sql_llm)
sql_tools = sql_toolkit.get_tools()
# -----------------------------
# Prompt système de l'agent SQL
# -----------------------------
sql_system_prompt = SQL_SYSTEM_PROMPT.format(dialect=db.dialect)
# -----------------------------
# Agent ReAct SQL
# -----------------------------
# Raisonne en plusieurs étapes (ReAct) pour répondre aux questions tabulaires
sql_agent = create_react_agent(
sql_llm,
sql_tools,
prompt=sql_system_prompt,
)
return sql_agent