Ce projet DynamicAgentRANPGE a été conçu comme un backend unifié pour des cas d’usage pédagogiques avancés : tutorat conversationnel, évaluation automatisée, révisions guidées et recherche contextuelle dans les documents de cours. L’objectif était de personnaliser l’apprentissage tout en automatisant les tâches répétitives (notation, génération de questions) et en centralisant les services derrière une API claire et maintenable.
Technologies Utilisées
- Backend : FastAPI (Python)
- LLM : Azure OpenAI (chat/completions)
- RAG : LlamaIndex (VectorStoreIndex, retrieval)
- Base de Données : MongoDB (persistance conversations/users)
- Cache/État : Redis
- Auth : JWT (access/refresh)
Endpoints Principaux
POST /api/auth/login
: Authentification (JWT)GET /api/users/me
: Informations de l’utilisateur courantPOST /api/chat
: Message → réponse LLM + mémoire conversationnelle (MongoDB)POST /api/evaluation/grade
: Évaluation/notation automatique d’une réponse d’étudiantPOST /api/evaluation/generate-questions
: Génération de questions d’entraînementGET /api/admin/index/rebuild
: Reconstruction de l’index documentaire (LlamaIndex)
Administration
- Gestion du contenu : reconstruction de l’index, contrôle des modules/ressources
- Suivi : consultation des conversations et des journaux d’évaluations
- Sécurité : rôles/permissions via JWT + dépendances FastAPI
Config / Services
app/config.py
: variables d’environnement (Azure OpenAI, MongoDB, Redis, JWT)app/services/chat/
: ChatService (mémoire, RAG, prompts)app/services/evaluation/
: EvaluationService (grading, feedback, progression)app/services/index/
: IndexService (LlamaIndex)app/services/external/
: clients (Azure OpenAI, auth), Redisapp/repositories/
: DAO MongoDB (conversations, messages, users)app/models/
: Pydantic + modèles stockés
Base de Données
- Collections :
users
,conversations
,messages
,grades
,progress
- Conversation : historique tronqué (fenêtre récente) + contexte documentaire attaché
Assets
- Image de couverture :
/assets/dynamicagentrangep-cover.png
(fournie) - Captures (optionnel) : écrans Swagger
/docs
et exemples de payloads
Fonctionnalités Clés
- Chat intelligent avec mémoire par utilisateur (persistance MongoDB)
- Évaluation automatique (score + feedback + pistes d’amélioration)
- Génération de questions de révision
- Indexation & recherche dans les documents (LlamaIndex) pour réponses sourcées
- Administration et sécurisation via JWT
Démonstration
Lancer le serveur puis visiter /docs
(Swagger) pour tester les endpoints en direct.
Exemples d’appels fournis dans la section code ci-dessous.
Conclusion
DynamicAgentRANPGE montre un backend IA modulaire et scalable pour l’éducation, connectant LLM, mémoire, évaluation et recherche documentaire au sein d’une API propre et extensible.
app/api/chat_routes.py (extrait “comme celui-là”, adapté au projet)
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from typing import Optional, Dict, Any
from app.services.chat.chat_service import get_chat_service
from app.services.external.auth_service import auth_service
router = APIRouter(prefix="/api/chat", tags=["chat"])
class ChatRequest(BaseModel):
message: str
conversation_id: Optional[str] = None # pour reprendre la même conversation
@router.post("")
async def chat_endpoint(payload: ChatRequest, user: Dict[str, Any] = Depends(auth_service.require_user)):
"""
Reçoit un message utilisateur, appelle l’agent LLM (Azure OpenAI) avec mémoire + RAG,
persiste l’historique en MongoDB, puis renvoie la réponse et l’ID de conversation.
"""
try:
result = await get_chat_service().process_chat_message(
user_id=user["id"],
message=payload.message,
conversation_id=payload.conversation_id
)
return {"ok": True, "data": result}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))