Graphify: когда код превращается в knowledge graph

#ai coding#knowledge graph#claude code#cursor#codex

Последние полгода в AI coding тренд очевиден: все хотят засунуть код в RAG pipeline, но векторные базы часто дают хрупкие и непрозрачные результаты. Graphify предлагает альтернативу — deterministic AST parsing с явными связями между сущностями. Я потестил его на mid-size TypeScript codebase и вот что выяснил.

Как это работает (без магии)

Graphify — это не очередной wrapper над OpenAI API. Под капотом:

  1. AST-first подход: парсит код в синтаксические деревья через tree-sitter (поддерживает 40+ языков)
  2. Извлечение отношений: находит imports, function calls, type references без эвристик
  3. Объединение контекста: связывает код с документацией через точные анкоры, а не эмбеддинги

Пример вывода для запроса “show me all components using AuthService”:

{
  "edges": [
    {
      "source": "components/UserProfile.tsx",
      "target": "services/AuthService.ts",
      "relation": "imports",
      "evidence": "Line 12: import { AuthService } from '../../services'"
    }
  ]
}

Главное отличие от vector-based подходов — здесь каждое соединение между нодами можно проверить в исходниках. В работе это напоминает гибрид ESLint и GraphQL.

Сценарии, где это реально полезно

1. Onboarding в legacy проект
Вместо “поищи в коде X” получаешь интерактивную карту зависимостей. Для TypeScript с barrel-imports это спасение — Graphify видит сквозные связи даже через 5 уровней реэкспортов.

2. Refactoring с гарантиями
Перед тем как выносить хелпер в отдельный пакет, можно одним запросом проверить:

/graphify impact --target=src/utils/helpers.ts --depth=3

Инструмент покажет все callers и зависимости, включая тесты и docs.

3. Документирование “на лету”
Интеграция с Claude Code позволяет генерировать архитектурные диаграммы, где стрелки соответствуют реальным импортам, а не предположениям LLM.

Ограничения, которые стоит учесть

  1. Не заменяет semantic search
    Если ищешь “как у нас работает OAuth”, вектора всё ещё лучше справляются с fuzzy matching. Graphify — про структуру, а не про смысл.

  2. Требует точных запросов
    Запросы вида “где тут баг” не сработают — нужны конкретные entity names или relation types.

  3. Нагрузка на CPU
    Первичный парсинг 100к LOC проекта занимает 3-5 минут (но потом работает с snapshot).

Интеграция в agentic workflow

Интереснее всего Graphify выглядит в связке с AI-агентами. Пример пайплайна:

  1. Agent 1 (анализирует ошибку в логах):
    “В стектрейсе упоминается AuthMiddleware, но нет контекста”

  2. Agent 2 (через Graphify):
    “AuthMiddleware используется в routes/api.ts, зависит от AuthService, который…”

  3. Agent 3 (генерирует fix):
    Учитывает граф зависимостей при предложении изменений

Такая связка даёт меньше hallucination, чем чистый RAG, но требует тонкой настройки.

Что попробовать на этой неделе

  1. Поставить локально через npm install -g @graphify/cli и прогнать на своём монорепо
  2. Сравнить вывод /graphify relations --entity=UserModel с тем, что даёт grep -r "UserModel"
  3. Запустить в Cursor с плагином — там есть визуализация графа через D3

Лично мне подход кажется перспективным, особенно для кодовых баз с высокой связностью. Но это не silver bullet — скорее, ещё один инструмент в pipeline, который снижает когнитивную нагрузку при работе с чужим кодом.


Попробуй сам: Cursor — AI-редактор для разработчиков.


Источник: https://github.com/Graphify-Labs/graphify