Modèle / jeu de données
NirDiamant/Controllable-RAG-Agent avatar
NirDiamant/Controllable-RAG-Agent

Controllable-RAG-Agent : un graphe déterministe pour les questions qui résistent à la similarité sémantique

This repository provides an advanced Retrieval-Augmented Generation (RAG) solution for complex question answering. It uses sophisticated graph based algorithm to handle the tasks.

1 625 étoiles268 forksJupyter NotebookApache-2.0
GitHub

En bref

De quoi s’agit-il ?
Le dépôt de NirDiamant propose un agent RAG dont le raisonnement est piloté par un graphe déterministe plutôt que par une boucle d'agent libre. Le README décrit l'architecture, mais reste muet sur l'installation, la configuration et les coûts d'exploitation.
À qui s’adresse-t-il ?
Ce dépôt convient à un lecteur qui veut étudier un patron d'orchestration RAG déterministe sur un corpus PDF, pas à une équipe qui cherche un service à installer. Avant tout usage, vérifiez que requirements.txt ou pyproject.toml existe réellement, que la licence Apache-2.0 couvre votre usage, et que le code d'évaluation Ragas est fourni dans le dépôt plutôt que seulement mentionné.
Puis-je l’utiliser commercialement ?
Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement Jupyter Notebook, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le problème visé : les questions à plusieurs sauts

La recherche par similarité sémantique répond bien à une question dont la réponse tient dans un seul passage. Elle échoue sur les questions qui exigent de recouper plusieurs sections, de suivre une chronologie, ou de citer un extrait précis. Le README formule ce constat sans détour : le projet cible les questions complexes que la similarité simple ne peut pas résoudre. Le public visé est donc celui qui travaille sur un corpus long et structuré, typiquement un livre ou un rapport découpé en chapitres, et qui a besoin de réponses traçables. Le dépôt est un notebook Jupyter, pas une bibliothèque publiée. Cette distinction compte : on lit le code pour comprendre une méthode, on ne l'importe pas comme une dépendance.

Le graphe déterministe comme cerveau de l'agent

Le README décrit un graphe déterministe qui joue le rôle de cerveau de l'agent, avec un raisonnement en plusieurs étapes et une planification adaptative qui se met à jour à mesure que de nouvelles informations arrivent. Le mot déterministe est le point important. Là où un agent ReAct classique laisse le modèle choisir librement le prochain outil, ici la topologie des transitions est fixée à l'avance. Le LLM remplit les nœuds, il ne dessine pas le graphe. C'est ce qui rend le comportement reproductible et ce qui permet de brancher une étape de vérification avant la génération finale. Le revers est immédiat : un graphe figé ne s'adapte pas à un type de question que son auteur n'avait pas anticipé. Ajouter un nouveau chemin de raisonnement suppose de modifier le graphe, pas seulement le prompt.

Le pipeline de préchargement PDF

Le README énumère cinq étapes avant toute question. Le chargement des PDF et leur découpage en chapitres. Le nettoyage du texte pour améliorer le résumé et l'encodage. La génération de résumés étendus par chapitre via un LLM. La création d'une base de citations destinée aux questions qui exigent des extraits littéraux. Enfin l'encodage du contenu et des résumés dans des vector stores. Cette séparation entre résumés et citations est le choix de conception le plus intéressant du projet. Un résumé sert à naviguer, une citation sert à prouver. Le README présente la prévention des hallucinations comme un objectif : les réponses doivent reposer uniquement sur les données fournies. Une base de citations dédiée rend cette contrainte vérifiable, à condition que l'étape de génération finale soit effectivement bridée sur ces extraits. Le README ne détaille pas ce mécanisme de bridage, et c'est une lacune.

Mise en route : ce que le README ne dit pas

Le README ne fournit aucune commande d'installation, aucun extrait de configuration, aucune variable d'environnement. Il mentionne l'usage de LLM, de vector stores et de métriques Ragas pour l'évaluation, sans nommer de clé de configuration ni de fichier de paramètres. Il faut donc lire le notebook pour reconstituer les dépendances. Le dépôt est en Jupyter Notebook, la licence est Apache-2.0, et la branche par défaut est main. Le README renvoie vers une vidéo de démonstration et une image de schéma, ce qui suggère une exécution locale sur un corpus PDF fourni par l'utilisateur. Toute affirmation sur un fichier requirements.txt ou pyproject.toml serait une supposition : le matériel fourni ne permet pas de la confirmer. Prévoyez de traiter ce dépôt comme un document à lire, pas comme un paquet à installer.

Le README comme vitrine commerciale

Une part importante du README est consacrée à la promotion d'un livre, d'un cours et d'une newsletter, avec des codes de réduction et des liens de suivi. Ce n'est pas un défaut en soi, mais cela change la nature du document. Le texte qui décrit l'architecture est court, et il s'arrête là où les questions d'ingénierie commencent. Aucune information sur le coût en jetons du préchargement, alors que l'étape de résumé par chapitre appelle un LLM sur l'intégralité du corpus avant la première question. Aucune information sur le comportement quand un chapitre dépasse la fenêtre de contexte du modèle. Aucune information sur la reconstruction des index lorsqu'un document change. Ces silences ne sont pas des bugs, mais ils délimitent ce que le dépôt permet de conclure.

Quand le graphe déterministe devient un handicap

Un corpus dont la structure change souvent est mal servi par ce design. Le pipeline suppose un découpage stable en chapitres et un préchargement complet. Si vos documents arrivent en flux continu, vous payez la summarisation à chaque mise à jour, et la base de citations se périme. Un autre cas défavorable : la question dont la réponse dépend d'une source externe, actualité ou base de données. Le README insiste sur le fait que les réponses reposent uniquement sur les données fournies. C'est une garantie utile pour un audit, une impasse pour une question ouverte. Enfin, si votre besoin se limite à de la recherche sur quelques dizaines de pages, la machinerie du graphe ajoute de la surface de maintenance sans bénéfice mesurable.

Alternatives : LangGraph et l'agent ReAct

Le dépôt liste langchain et langgraph parmi ses topics. LangGraph, du même écosystème, permet aussi de construire un graphe d'états, mais laisse l'agent décider de ses transitions via un routeur conditionnel, là où Controllable-RAG-Agent fixe la topologie. La différence pratique est la prévisibilité : un graphe figé se teste plus facilement, un graphe routé couvre des cas que l'auteur n'a pas prévus. Un autre point de comparaison possible est LlamaIndex, dont le README ne parle pas, et qui met l'accent sur les moteurs de requête et l'indexation incrémentale. Le choix dépend de ce que vous cherchez à prouver. Si vous devez démontrer qu'aucune réponse ne sort du corpus, la topologie fixe est un argument. Si vous devez couvrir une variété de questions imprévisible, elle devient une contrainte.

Maintenance, licence et coût d'adoption

Le dépôt n'a pas de releases publiées selon les informations disponibles, et son dernier push est daté du 9 septembre 2026. L'absence de versionnement signifie qu'il n'existe pas de point de mise à jour identifié : vous suivez la branche main ou vous figez un commit. La licence Apache-2.0 autorise l'usage commercial et la modification, avec obligation de conserver les mentions de copyright et d'indiquer les fichiers modifiés. Elle inclut une clause de brevets. Rien dans le README ne signale de dépendance à un service propriétaire autre que les LLM et les vector stores que vous choisissez. Le coût réel se situe donc dans les appels LLM du préchargement et dans le temps de lecture nécessaire pour extraire du notebook ce qui n'est pas documenté.

Conclusion éditoriale

Ce dépôt convient à un lecteur qui veut étudier un patron d'orchestration RAG déterministe sur un corpus PDF, pas à une équipe qui cherche un service à installer. Avant tout usage, vérifiez que requirements.txt ou pyproject.toml existe réellement, que la licence Apache-2.0 couvre votre usage, et que le code d'évaluation Ragas est fourni dans le dépôt plutôt que seulement mentionné.

Sources officielles

  1. Issues
  2. License: Apache-2.0
  3. NirDiamant/Controllable-RAG-Agent on GitHub
  4. README
Notes de la communauté

Notes de la communauté