Les graphes de connaissances plutôt que des gigaoctets d'embedding pour l'analyse de code dans les monorepos
Une situation familière : vous donnez un grand monorepo à un assistant IA, et il commence à mélanger les appels de fonctions de services voisins, à perdre les connexions entre les modules et à inventer des arguments inexistants. La recherche vectorielle classique est assez bonne pour trouver des fragments de texte similaires. Cependant, les représentations vectorielles peinent à comprendre la structure rigide du code, où un simple changement de nom de variable ou un import implicite modifie la logique de toute l'application.
Le développeur Vitaliy a créé le projet code-graph-rag pour résoudre ce problème de manière systématique. Au lieu de s'appuyer uniquement sur les embeddings vectoriels, l'outil construit un graphe de connaissances de la base de code.
Comment ça fonctionne en interne
Le système repose sur trois composants principaux : le parser Tree-sitter, la base de données graphe Memgraph et la base de données vectorielle Qdrant.
Voici comment cela fonctionne :
- Tree-sitter analyse les fichiers de code source en arbres de syntaxe abstraite (AST).
- L'analyseur extrait les nœuds : fonctions, classes, méthodes, modules et les relations entre eux.
- Les données sont écrites dans Memgraph sous un schéma unifié et indépendant du langage.
- Au-dessus de cette structure, un utilitaire CLI
cgrtraduit les questions en langage naturel en requêtes Cypher précises vers la base de données graphe.
En conséquence, lorsque vous demandez « où la fonction X est-elle utilisée et vers où ses données circulent ensuite ? », le système ne cherche pas à deviner la réponse en se basant sur la proximité vectorielle dans l'espace. Il exécute une requête ciblée sur le graphe et retourne le chemin d'appel réel.
Исходный код -> Tree-sitter -> AST-анализ -> Граф знаний Memgraph
|
Запрос пользователя -> AI-модель (Cypher) -> Запрос Cypher -> Результаты
Ce que l'outil peut faire
Le projet supporte 13 langages, incluant Python, TypeScript, Go, Rust, Java, C++, C# et PHP. Le support de Scala est encore en développement, et Ruby utilise la correspondance de motifs ast-grep pour l'analyse.
Voici les principales tâches cgr résout :
- Navigation et questions-réponses sur le code. Vous pouvez interroger les sources de fonctions non seulement par nom, mais aussi par signification ou rôle dans l'architecture.
- Détection de code mort. L'utilitaire traverse le graphe de relations depuis les points d'entrée de l'application et trouve les fonctions ou modules inaccessibles via n'importe quelle chaîne d'appels.
- Recherche et remplacement structurel. Au lieu d'expressions régulières classiques, il utilise ast-grep. L'outil recherche des motifs dans l'arbre de syntaxe et réécrit soigneusement le code tout en préservant la structure.
- Suivi du flux de données. La fonctionnalité
FLOWS_TOtrace comment une valeur de variable traverse une chaîne d'affectations, d'appels de fonctions et finit dans des opérations d'E/S. Actuellement, le traçage fonctionne pour C#, Java, C et Go.
Un bonus supplémentaire est le support du Model Context Protocol (MCP). Cela signifie que code-graph-rag peut être exécuté comme un serveur MCP et connecté directement à Claude Code ou tout autre client compatible MCP. Les agents IA pourront interroger la structure exacte du projet de manière autonome et suggérer des modifications sous forme de diffs prêtes à l'emploi.
Démarrage rapide et exigences système
L'outil est distribué sous forme de package Python code-graph-rag. Pour une fonctionnalité complète, vous devrez installer Docker (requis pour les conteneurs Memgraph et Qdrant), ainsi que les utilitaires système cmake et ripgrep.
Le moyen le plus simple d'installer l'utilitaire CLI est via uv ou pipx :
uv tool install "code-graph-rag[treesitter-full,semantic]"
Après l'installation, vous devez configurer l'environnement local et commencer à indexer le dépôt :
# Запуск контейнеров базы данных
cgr daemon up
# Индексация кодовой базы в новый граф
cgr start --repo-path /path/to/repo --update-graph --clean
# Интерактивный режим работы
cgr start --repo-path /path/to/repo
Si vous prévoyez d'utiliser l'utilitaire dans le cadre de CI/CD ou de le connecter à un agent via MCP, la documentation contient une section détaillée sur la configuration et l'export du graphe.
Cela vaut-il la peine d'être adopté ?
Le projet semble prometteur pour les équipes travaillant avec des monorepos multilingues. Les assistants IA classiques sont souvent insuffisants lorsque la base de code dépasse cent mille lignes et que les connexions service-à-service reposent sur des appels de fonctions à travers différents dossiers. L'approche par graphe résout ce problème radicalement, en mélangeant la topologie stricte du code avec la flexibilité des modèles de langage.
Bien sûr, il faut prendre en compte la courbe d'apprentissage. Vous devrez exécuter un conteneur Docker avec Memgraph, allouer des ressources pour la construction du graphe lors du scan initial et configurer les clés API LLM. Mais si vous êtes fatigué des hallucinations des réseaux de neurones lors du refactoring d'un projet complexe, consacrer une demi-heure pour se familiariser avec code-graph-rag en vaut définitivement la peine.
Projets similaires