Spaces:
Running
Running
| """ | |
| 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 | |