Kalli
RAG Agent

Vue d'ensemble

Rôle du RAG Agent, ses deux services et leur lancement en local.

RAG Agent

Le RAG Agent répond aux questions à partir des documents du bot. Il est fourni par apps/rag-agent et tourne en deux services, construits depuis le même arbre de sources :

ServiceModule ASGIPortRôle
rag-agentrag_agent.interfaces.agent.app:app8000 (AGENT_PORT)POST /chat : réponse en flux SSE
Index APIsrc.rag_agent.interfaces.index.index_api:app8502 (INDEX_API_PORT)POST /regenerate-index : reconstruit les index FAISS

Place dans la plateforme

  • Chat : l'interface de discussion est ia/chainlit-base, un dépôt séparé. Elle envoie chaque message à rag-agent (POST /chat) avec l'historique de la conversation, l'identifiant du thread et les métadonnées de l'utilisateur (dont ses rôles). Elle lit le flux SSE et l'affiche.
  • Back-office : apps/server appelle l'Index API après une régénération demandée depuis l'interface d'administration.
  • Base de données : PostgreSQL principal. Le RAG Agent lit les chunks, les paires question/réponse, les tags, les rôles et les index sérialisés (tables indexes et index_chunks). Il y écrit aussi les embeddings calculés à la volée.
  • Modèles : embeddings et génération passent par LiteLLM (voir Configuration). Le reranker CrossEncoder tourne en local, sur CPU.

Le détail du traitement d'une question est dans Pipeline RAG.

Lancer en local

Prérequis : Python 3.13, uv, une base PostgreSQL avec le schéma à jour (migrations du serveur) et une clé LiteLLM.

cd apps/rag-agent
uv sync

# Terminal 1 : service de chat
uv run uvicorn rag_agent.interfaces.agent.app:app --host 0.0.0.0 --port 8000

# Terminal 2 : Index API
uv run uvicorn src.rag_agent.interfaces.index.index_api:app --host 0.0.0.0 --port 8502

Les variables (DATABASE_URL, LITELLM_API_BASE, LITELLM_API_KEY, BOT_SYSTEM_PROMPT, etc.) sont lues depuis l'environnement ou un fichier .env. La liste complète est dans Configuration.

Au démarrage, rag-agent précharge le reranker. Au premier message, il charge l'index du rôle de l'utilisateur. Si aucun index n'existe encore, lancez une régénération depuis le back-office (ou POST http://localhost:8502/regenerate-index).

Tests du service :

cd apps/rag-agent
uv run pytest

Les tests de visibilité par rôle sur PostgreSQL demandent RUN_POSTGRES_TESTS=1 et DATABASE_URL.

Contrôles de santé

  • rag-agent : GET /healthz (sondes Kubernetes et HEALTHCHECK de l'image).
  • Index API : GET /.