AI-инжиниринг
Knowledge Graphs + LLM: GraphRAG, structured knowledge, Neo4j + embeddings
Цели урока
- Понять ограничения vector search и когда нужен Knowledge Graph
- Реализовать entity extraction и entity resolution через LLM
- Интегрировать Neo4j с vector embeddings для гибридного поиска
- Разобрать полную архитектуру Microsoft GraphRAG (indexing + query phases)
Google Knowledge Graph содержит 500 миллиардов фактов. Каждый раз когда поиск отвечает «Эйнштейн родился в 1879» без ссылки - это knowledge graph, не LLM. RAG с графом даёт точность которую векторный поиск не может: Microsoft GraphRAG 2024 показал +20-40% accuracy vs naive RAG на multi-hop вопросах. Разница между «найти похожий текст» и «понять структуру знания» - именно здесь.
- Microsoft GraphRAG (2024) - +20-40% accuracy vs naive RAG на multi-hop вопросах, используется в Azure для анализа корпоративных документов
- LinkedIn Knowledge Graph: 1B+ entities, поиск + рекомендации + skill matching - всё поверх одного графа
- Amazon Product Graph: товары, бренды, категории, отзывы связаны в граф - основа рекомендательной системы с выручкой 400B+
- NASA: Knowledge Graphs для связывания научных публикаций, миссий, технологий - поиск по межмодульным связям, недоступный вектору
От Google Knowledge Graph до GraphRAG
16 мая 2012 года Google запустил Knowledge Graph под слоганом things, not strings: поиск начал понимать сущности и связи между ними, а не только текст. На старте граф покрывал более 500 миллионов сущностей и около 3,5 миллиардов фактов, и за семь месяцев данные выросли втрое - до примерно 570 миллионов сущностей и 18 миллиардов фактов. Это сделало graph-структуру знаний массовой технологией: ответы вроде даты рождения или столицы стали приходить из графа, а не из ранжирования ссылок. Идея структурированных знаний жила в академии и раньше, в проектах вроде Cyc и DBpedia, но именно Google показал её в продакшене на миллиардах запросов. В 2024 году Microsoft Research опубликовала GraphRAG: подход, где из текста сначала извлекаются сущности и связи, строится граф, затем по сообществам графа делаются суммаризации, и уже на этом LLM отвечает. В статье From Local to Global команда показала, что GraphRAG даёт более полные и разнообразные ответы на вопросы по большим корпусам, чем обычный RAG по векторному поиску. Код выложили на GitHub в июле 2024. Так замкнулся круг: knowledge graphs из эпохи поиска вернулись как способ дать LLM структурированную память.
Предварительные знания
Пределы vector search и зачем нужны Knowledge Graphs
Google Knowledge Graph содержит 500 миллиардов фактов. Каждый раз когда поиск отвечает «Эйнштейн родился в 1879» без ссылки на источник - это knowledge graph, не LLM. Вопрос не в том, зачем он нужен. Вопрос в том, почему vector RAG до сих пор не может его заменить.
Vector search находит чанки, **похожие по смыслу**. Но он слеп к **связям между сущностями**. Спросить «кто из клиентов компании X также инвестировал в Y?» - и система ломается: ответ не лежит в одном чанке, его нужно собирать из нескольких узлов графа. Embeddings для этого не созданы.
Knowledge Graph (KG) - граф, где **узлы** = сущности (люди, компании, концепции), **рёбра** = отношения между ними. В отличие от vector store, KG хранит **структуру знания** - не просто текстовое сходство, а саму семантику связей. Поэтому Google может ответить на «Кто жена брата Эйнштейна?» за 10 мс - без LLM.
| Характеристика | Vector Search | Knowledge Graph | GraphRAG (гибрид) |
|---|---|---|---|
| Тип запроса | Семантическая похожесть | Структурные связи | Оба |
| Multi-hop reasoning | Нет | Да | Да |
| Скорость построения | Быстро (embed chunks) | Медленно (extract entities) | Медленно |
| Обновление | Просто (re-embed) | Сложнее (re-extract) | Сложнее |
| Лучший для | Q&A по документам | Аналитика связей | Сложные вопросы по корпусу |
**Microsoft GraphRAG** (2024) показал +20-40% accuracy vs naive RAG на multi-hop вопросах. На задачах типа «назовите основные темы во всех документах» разрыв достигает 70%. Это не академия - это production-результат на реальных корпоративных корпусах.
В каком случае Knowledge Graph имеет преимущество над чистым vector search?
Entity Extraction: извлечение сущностей и связей из текста
Прежде чем строить граф - нужно его заселить. Каждый документ корпуса проходит через LLM, который выдаёт не пересказ, а структуру: тройки **(Subject, Predicate, Object)**. Anthropic, founded_by, Dario Amodei. Dario Amodei, worked_at, OpenAI. Каждая тройка - ребро в будущем графе.
Сразу возникает **Entity Resolution** - одна и та же компания может быть названа «OpenAI», «open ai», «Open AI Inc.». Граф засорится дублями, если не склеивать их заранее. Подходы - от грубых к точным:
- **Embedding similarity** - если embeddings двух entity names близки (cosine > 0.92), считаем их одним entity
- **LLM-based** - спросить LLM «являются ли X и Y одной сущностью?» (дорого, но точно)
- **Rule-based** - нормализация (lowercase, remove Inc./Ltd.), fuzzy matching (Levenshtein < 3)
- **Гибрид** - rule-based для простых случаев + LLM для сложных
**Entity extraction через LLM стоит дорого при большом корпусе.** 10 000 документов, средняя длина 2000 токенов - это ~20M input tokens. При USD 3 per 1M tokens (Claude Sonnet) = USD 60 только на индексацию. Microsoft GraphRAG рекомендует батчить документы и извлекать incrementally. Дельта-обновления дешевле полного переиндекса.
Что такое «тройка» (triple) в контексте Knowledge Graph?
Neo4j + Embeddings: гибридный поиск по графу
Neo4j - графовая база данных, де-факто стандарт индустрии для Knowledge Graphs. С версии 5.x в неё добавили **vector indexes** - теперь граф и embeddings живут в одном месте. Не нужно синхронизировать Qdrant и отдельный граф. Один запрос - оба типа данных.
Сила гибрида - точка входа через vector search, расширение через граф. Запрос «AI safety research» сначала найдёт ближайшие entities по embedding similarity. Потом пройдёт по рёбрам на 2 hops вглубь - и вытащит контекст, который ни в каком чанке не лежит целиком.
**Альтернативы Neo4j:** Amazon Neptune (managed, дорого), ArangoDB (multi-model), FalkorDB (Redis-based, быстро стартует). Для прототипа - NetworkX (Python) или adjacency list в PostgreSQL с JSONB. Переезд на Neo4j потом, когда граф докажет ценность.
Как работает гибридный поиск в Neo4j с vector index?
GraphRAG Pipeline: полная архитектура от документов до ответа
Microsoft GraphRAG - reference implementation полного пайплайна. Опубликован в 2024, показал +20-40% accuracy на multi-hop вопросах. Архитектурно делится на два этапа: **indexing phase** (строим граф) и **query phase** (отвечаем на вопросы). Индексация дорогая и происходит один раз. Запросы - дешёвые и быстрые.
**Community Detection** - ключевая инновация GraphRAG. Алгоритм Leiden кластеризует связанные entities в «сообщества» и LLM генерирует **summary для каждого кластера**. Это открывает новый класс запросов - **global questions**: «какие основные темы в корпусе?», «что связывает все эти компании?». Без community summaries пришлось бы скармливать LLM весь корпус целиком.
**Стоимость GraphRAG indexing значительно выше обычного RAG.** Для корпуса в 1000 документов: обычный RAG (embed) ≈ USD 0.50, GraphRAG (extract + resolve + summarize) ≈ USD 50-150. Разрыв в 100-300 раз. Оправдано только когда нужен multi-hop reasoning или global summarization - и когда это реально проверено на данных.
**Когда GraphRAG, а когда обычный RAG:**
- **Обычный RAG** - простые вопросы по документам, ответ в одном чанке. Быстро, дёшево, предсказуемо.
- **GraphRAG** - корпоративные базы знаний с перекрёстными ссылками, юридические документы, научные статьи с цитированиями, аналитика связей между сущностями.
- **Гибрид** - vector search для 90% запросов, GraphRAG для сложных analytical queries. Router классифицирует тип запроса и направляет в нужный пайплайн.
**Быстрый старт без Neo4j:** библиотека `graphrag` от Microsoft работает с файловым хранилищем (Parquet). Для прототипа: `pip install graphrag && graphrag init && graphrag index` - и граф строится локально. Переезд на Neo4j потом, когда proof-of-concept готов.
Что такое Community Detection в GraphRAG и зачем оно нужно?
Knowledge graph - устаревшая технология из эпохи до LLM, семантический веб провалился
Microsoft GraphRAG (2024) показал +20-40% accuracy vs naive RAG на multi-hop вопросах. Knowledge graphs переживают второе рождение именно благодаря LLM - теперь их можно строить автоматически из неструктурированного текста
Семантический веб провалился потому что требовал ручной разметки. GraphRAG решил эту проблему: LLM извлекает тройки из любого текста автоматически. Google, LinkedIn, Amazon уже годами используют production knowledge graphs на миллиардах узлов. «Устаревшая» технология - это миф, основанный на памяти о провале RDF/OWL в 2000-х.
Итоги
- Vector search ищет по смыслу - Knowledge Graph по связям. GraphRAG объединяет оба, давая +20-40% accuracy на multi-hop вопросах
- Entity extraction через LLM извлекает тройки (Subject, Predicate, Object) - каждая тройка становится ребром графа
- Entity Resolution - обязательный шаг: без него граф засорится дублями (OpenAI vs open ai vs Open AI Inc.)
- Neo4j 5.x поддерживает vector indexes - граф и embeddings в одной БД, один запрос возвращает оба типа данных
- GraphRAG indexing дорогой (50-150 на 1K документов, в 100-300 раз дороже naive RAG) - оправдан только при реальной потребности в multi-hop reasoning
Что дальше
Knowledge Graphs - один из компонентов большой архитектуры AI-системы. Следующий шаг - научиться проектировать всю систему целиком: от API gateway до LLM orchestrator, vector DB, кеша и мониторинга.
- AI System Design — Полная архитектура production AI-приложения с нуля
- Advanced RAG — Обзор продвинутых RAG-техник, на которых строится GraphRAG
Связанные уроки
- aie-13-advanced-rag — Graph-поиск расширяет продвинутый RAG
- aie-42-ai-system-design — Knowledge graphs заземляют поиск на уровне системы
- aie-09-embeddings — Embeddings связывают сущности с узлами графа
- aie-12-rag-fundamentals — Структурный граф дополняет векторный поиск
- db-29-graph — Та же модель хранения и обхода графа
- qd-01-intro