Графы знаний вместо гигабайтов эмбеддингов для анализа кода в монорепозиториях

04 авг 2026
5,059
661
42
4 недели

Знакомая ситуация: скармливаешь AI-помощнику крупный монорепозиторий, а он начинает путать вызовы функций из соседних сервисов, терять связи между модулями и придумывать несуществующие аргументы. Обычный векторный поиск неплохо находит похожие фрагменты текста. Однако векторные представления плохо справляются с пониманием жесткой структуры кода, где одна переименованная переменная или неявный импорт меняет логику всего приложения.

Разработчик Виталий создал проект code-graph-rag, чтобы решить эту проблему системно. Вместо того чтобы полагаться только на векторные эмбеддинги, инструмент строит граф знаний кодовой базы.

demo

Как это устроено внутри

В основе системы лежит связка из трех компонентов: парсера Tree-sitter, графовой базы данных Memgraph и векторной базы Qdrant.

Схема работы выглядит так:

Реклама
  1. Tree-sitter разбирает файлы исходного кода на синтаксические деревья (AST).
  2. Анализатор вытаскивает узлы: функции, классы, методы, модули и связи между ними.
  3. Данные записываются в Memgraph под единой языково-независимой схемой.
  4. Поверх этой структуры работает CLI-утилита cgr, которая переводит вопросы пользователя на естественном языке в точные Cypher-запросы к графовой базе.

В итоге, когда вы спрашиваете «где используется функция X и куда дальше передаются её данные?», система не пытается угадать ответ по близости векторов в пространстве. Она выполняет точечный запрос к графу и возвращает реальный путь вызовов.

Исходный код -> Tree-sitter -> AST-анализ -> Граф знаний Memgraph
                                                  |
Запрос пользователя -> AI-модель (Cypher) -> Запрос Cypher -> Результаты

Что умеет инструмент

Проект поддерживает 13 языков, среди которых Python, TypeScript, Go, Rust, Java, C++, C# и PHP. Поддержка Scala пока находится в разработке, а для Ruby используется разбор через паттерны ast-grep.

Вот основные задачи, которые решает cgr:

  • Навигация и ответы на вопросы по коду. Вы можете запрашивать исходники функций не только по имени, но и по смыслу или роли в архитектуре.
  • Поиск мёртвого кода. Утилита проходит по графу связей от входных точек приложения и находит функции или модули, до которых невозможно дойти по цепочке вызовов.
  • Структурный поиск и замена. Вместо классических регулярных выражений используется ast-grep. Инструмент ищет паттерны в синтаксическом дереве и аккуратно переписывает код с сохранением структуры.
  • Отслеживание потоков данных. Фича FLOWS_TO прослеживает, как значение переменной проходит через цепочку присваиваний, вызовов функций и попадает в операторы ввода-вывода. Сейчас трассировка работает для C#, Java, C и Go.

Отдельный плюс — поддержка Model Context Protocol (MCP). Это означает, что code-graph-rag можно запустить как MCP-сервер и подключить напрямую к Claude Code или любому другому клиенту с поддержкой MCP. AI-агенты смогут сами запрашивать точную структуру проекта и предлагать правки в виде готовых диффов.

Быстрый запуск и системные требования

Инструмент распространяется в виде Python-пакета code-graph-rag. Для полноценной работы потребуется установить Docker (он нужен для контейнеров Memgraph и Qdrant), а также системные утилиты cmake и ripgrep.

Установить CLI-утилиту удобнее всего через uv или pipx:

uv tool install "code-graph-rag[treesitter-full,semantic]"

После установки нужно поднять локальное окружение и запустить индексацию репозитория:

# Запуск контейнеров базы данных
cgr daemon up

# Индексация кодовой базы в новый граф
cgr start --repo-path /path/to/repo --update-graph --clean

# Интерактивный режим работы
cgr start --repo-path /path/to/repo

Если вы планируете использовать утилиту в составе CI/CD или подключать к агенту через MCP, в документации есть подробный раздел по настройке конфигурации и экспорту графа.

Стоит ли внедрять в работу

Проект выглядит перспективно для команд, которые работают с многоязычными монорепозиториями. Обычные AI-помощники часто пасуют, когда кодовая база переваливает за сотню тысяч строк, а связи между сервисами завязаны на вызовы функций из разных папок. Графовый подход решает эту проблему радикально, подмешивая строгую топологию кода к гибкости языковых моделей.

Конечно, стоит учитывать порог входа. Нам потребуется запустить Docker-контейнер с Memgraph, выделить ресурсы на построение графа при первом сканировании и настроить ключи к LLM. Но если вам надоели галлюцинации нейросетей при рефакторинге сложного проекта, потратить полчаса на знакомство с code-graph-rag точно имеет смысл.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.