В нормативной базе России более 800 000 документов (по данным Гарант и КонсультантПлюс). Каждый год вносится более 100 000 правок и дополнений. И вот однажды представители одной из (NDA) крупнейших российских корпораций пришли в компанию, где я работаю, и дали задачу: «загрузить и обработать всю нормативную базу России в AI». И это, я вам скажу, задачка "со звездочкой".

Речь не о чат-боте, который ищет по PDF-файлам. Задача в создании устойчивой и объяснимой архитектуры, где AI способен быстро находить ответы на запросы, и при этом понимать структуру законодательства, объяснять логику нормативной системы: как связаны нормы, откуда взялся тот или иной ответ и почему он корректен.
В этой статье я расскажу, как мы в команде подошли к этой задаче и реализовали GraphRAG систему на примере Жилищного кодекса РФ. Покажу, какие технологии мы использовали, с какими трудностями столкнулись и почему такой подход меняет правила игры для всех, кто работает с большими и сложными базами знаний.
Кто я?
Меня зовут Николай Сорокин. В сфере машинного обучения и анализа данных работаю более 8 лет. Занимался задачами в области обработки естественного языка, разработкой ML-инфраструктуры и внедрением моделей в продакшн.
Я прожил 18 лет в США и в последние годы работал в Volvo Group, где занимал позицию Senior Data Scientist. В 2025 году принял решение вернуться в Россию и присоединился к команде GPTunneL в роли технического руководителя ML-направления.
В качестве первого проекта в новой роли я решил спроектировать новую архитектуру работы с юридическим знанием: без «чёрных ящиков», без костылей, и чтобы с акцентом на интерпретируемость и масштабируемость.
Почему классический RAG не работает с нормативными данными

RAG (Retrieval-Augmented Generation) — это метод, в котором LLM ищет релевантные фрагменты текста по ключевым словам и генерирует ответ на их основе.
Такой подход работает для маркетинговых презентаций, резюме, обычных документов и даже для обучающих курсов сгодится. Но в нормативных базах всё ломается. Потому что:
Классический RAG пропускает до 37% важных связей
До 20% ответов оказываются некорректными или неполными, так как модель не понимает контекст
На объяснение или аудит ответов уходит в среднем до 4 часов рабочего времени юриста
В работе с законами, техническими регламентами, стандартами или корпоративными политиками важны не только формулировки, но и глубокий контекст. Нужна структурированная модель знаний, где учтены зависимости и каждый ответ можно обосновать.
Что такое GraphRAG и как он решает проблему
В нашем решении мы взяли архитектуру GraphRAG от Microsoft и кастомизировали её под наш кейс.

В GraphRAG есть узлы и связи и в нашем случае:
Узлы — это статьи, законы, роли, организации, нормативы
Связи — это отношения: что на кого ссылается, регулирует, дополняет, исключает, влияет и т.д.
Однако просто «загрузить» в систему Жилищный кодекс РФ недостаточно. Процесс построения графа включает несколько этапов:
1. Подготовка промптов
Сначала мы настраиваем промпты, которые использует библиотека для построения графа:
Текст разбивается на чанки (фрагменты)
LLM на основе промптов извлекает из них сущности и определяет связи между ними
Связи фиксируются в формате триплетов:
Сущность — Отношение — Сущность
Например:
«Статья 45» дополняет «Закон 25».
2. Адаптация под домен
Чтобы повысить точность:
Устанавливаем контекст домена — в нашем случае это законодательство (Law)
Настраиваем язык — для Жилищного кодекса это русский
Приближаем промпты к жизни, наполняя их кейсами из реального текста закона, например
Это процесс тонкой настройки промптов (prompt tuning).
3. Построение графа
После настройки запускаем построение графа:
Сначала LLM находит все сущности в документах
Затем с помощью алгоритма Лейдена (Leiden — метод разбиения графов на сообщества) происходит выделение сообществ — групп связанных узлов
Финальный этап — описание сообществ и сохранение графа
Когда граф построен, начинается процесс индексирования. Это достаточно ресурсоемкая операция: на каждом этапе задействовано множество LLM-запросов.

Оптимизация структуры графа: борьба с «гиперузлами»
После первого построения графа мы столкнулись с типичной проблемой для подобных задач — появлением тяжелого гипер связного узла в центре графа.
Проще говоря, Жилищный Кодекс был воспринят как отдельная сущность, которая оказалась связана практически со всеми остальными узлами. Такой «тяжёлый» центральный хаб искажает картину:
алгоритм видит его как ключевой элемент
поиск сообществ начинает «склеивать» несвязанные темы
качество кластеризации резко падает
Очевидно, что сама по себе сущность вроде «Жилищный кодекс РФ» не должна быть центральной в этом графе. Гораздо полезнее анализировать связи между реальными участниками системы: например, жилищные кооперативы, собственники жилья и конкретные статьи закона, регулирующие их отношения.
Как мы решили проблему
Чтобы устранить гиперузел, мы доработали промпты, отвечающие за построение графа. Мы добавили в них конкретные примеры нужных нам сущностей и уточнили инструкции, чтобы модель выделяла конкретные роли, статьи и объекты, а не общий документ
После нескольких итераций мы повторно запустили процесс индексирования.
Результат оказался гораздо лучше:
граф стал более сбалансированным
ключевые темы разошлись по отдельным сообществам
связи между узлами стали лучше отражать реальную структуру законодательства
Смотрим на результат:

Теперь основными узлами выступают Договор социального найма, Региональный оператор, Капитальный ремонт, Жилищный кооператив и другие ключевые сущности.
Наша система «понимает», как статьи связаны между собой и что из чего вытекает и может отвечать на запросы с учетом цепочек связей. При этом, каждый ответ можно объяснить: какие статьи были использованы, какие связи задействованы и почему выбран такой путь.
Мы передаём в LLM не просто текстовые фрагменты, а структурированный контекст, дополненный связями между элементами.
Оптимизация Knowledge Graph в GraphRAG: как “приглушить” гиперузлы и дать алгоритму Leiden вычислить правильную иерархию
TL;DR — гиперузлы, вроде узла «Кодекс» из нашего примера, размывают граф, из‑за чего Лейден склеивает несвязанные темы. После целенаправленной «санитарной обработки» графа (g₁ → g₂) мы получаем компактные и тематически связанные кластеры. Это улучшает точность Community Reports, а также повышает релевантность поиска. Global, Local и DRIFT поиск возвращают более релевантные текстовые единицы.
Давайте быстренько разберем технические детали по стеку Microsoft GraphRAG
Алгоритм Лейден разбивает граф на иерархию сообществ, максимизируя модульность (Q).
Сверхузлы (например, «Кодекс») снижают Q — они соединяют кластеры, которые должны быть раздельными. Результат — нерелевантные ответы в Community Report.
Диагностика проблемного графа (g₁):
High-degree outlier:
Максимальная степень узла сильно выше среднего:
max(degree) ≫ mean(degree)ΔQ ≈ 0 при дополнительных итерациях алгоритма Лейдена, это признак «смазанных» границ между кластерами.
Визуализация:
На графе видно один большой «шар» без явных цветовых пятен (отсутствие чётких сообществ или модальностей)
Методы оптимизации графа (g₂)
Шаг | Алгоритм | Почему это работает |
Stop‑Entity Filter | Фильтр ключевых слов при пост‑процессинге извлечённых сущностей | Устраняем псевдо‑«hub» вершины, тем самым повышаем локальную плотность тематических под‑графов |
Degree Cap & Split | if deg(v) > τ: PartitionByEdgeWeight(v) | Удаляем/разбиваем вершины, которые обнуляют модульность; поддерживаем bounded‑degree условие для алгоритма Leiden |
k‑NN Edge Pruning | Для каждой единицы текста сохраняем top‑k рёбер по cosine‑sim (k ≈ 15) | Отсекаем слабые (низкосемантические) ссылки → улучшаем сигнал‑к‑шуму для разрезана кластера |
Edge‑Weight Thresholding | w(e) < ε → drop (ε подбираем по quantile) | Сужаем граф до значимых связей, Q растёт |
Entity Normalization | Нормализация сущностей, устраняем дубликаты: «ЖК РФ» ≡ «Жилищный кодекс» | Ликвидируем дубль‑узлы, уменьшаем «ложные» мосты |
Re‑index & Re‑summarize | Полный rerun Leiden → Community Reports | Новая, более модульная иерархия + пересчитанные абстракции |
Итог:
Оптимизация knowledge‑graph — критически важный шаг, влияющий на релевантность и экономичность системы на базе GraphRAG. Лишившись гиперузлов, граф перестаёт «замазывать» естественные границы предметных областей; Лейден формирует чистую иерархию, Community Reports становятся содержательными, а pipeline поиска отрабатывает быстрее и точнее.
Пример из практики: глобальный поиск
Допустим, пользователь задаёт вопрос:
«Какие именно права и обязанности имеет собственник квартиры в многоквартирном доме?»
Ответ на первый пример
Система анализирует весь граф с высоты птичьего полета, находит наиболее релевантные группы узлов и отвечает на вопрос, используя отчеты по ним:
Ответ на первый пример
Владельцы квартир в многоквартирных домах обладают широким спектром прав и обязанностей, которые регулируются законодательством и играют ключевую роль в управлении и содержании общего имущества.
Права собственников
1. Управление и принятие решений: Собственники имеют право участвовать в управлении многоквартирным домом через общее собрание, где принимаются решения по вопросам капитального ремонта и управления общим имуществом [Data: Reports (11, 98, 39, 253, 174)].
2. Распоряжение имуществом: Владельцы могут распоряжаться своим жилым помещением, включая сдачу в аренду и вселение членов семьи. Они также могут изменять границы своих помещений и участвовать в управлении общим имуществом [Data: Reports (212, 220, 73, 74, 206)].
3. Финансовые права: Собственники имеют право на долю денежных средств на специальном счете, пропорциональную их взносам на капитальный ремонт, и могут обжаловать решения общего собрания в суде [Data: Reports (220, 73, 74, 206, 272)].
4. Участие в собраниях: Владельцы могут участвовать в общем собрании собственников, что позволяет им влиять на управление их имуществом и защищать свои интересы [Data: Reports (98, 39, 253, 174)].
5. Заключение договоров: Собственники имеют право заключать и расторгать договоры управления многоквартирным домом, что позволяет им участвовать в принятии решений, касающихся управления домом и содержания общего имущества [Data: Reports (180)].
Обязанности собственников
1. Финансовые обязательства: Владельцы обязаны вносить плату за содержание жилого помещения и коммунальные услуги, включая расходы на содержание и текущий ремонт общего имущества [Data: Reports (295, 41, 198, 49, 307)].
2. Взносы на капитальный ремонт: Собственники обязаны уплачивать взносы на капитальный ремонт, которые регулируются федеральными законами и региональными программами. Эти взносы являются важным источником финансирования для поддержания и улучшения состояния многоквартирных домов [Data: Reports (98, 254, 39, 170, 29)].
3. Соблюдение законодательства: Владельцы обязаны соблюдать требования, установленные федеральными законами, такими как Жилищный кодекс РФ, который регулирует условия содержания общего имущества и сделки, связанные с жилищными правами и обязанностями [Data: Reports (198, 49, 307, 239, 234)].
4. Участие в управлении: Собственники обязаны участвовать в общих собраниях, где принимаются важные решения, что подчеркивает значимость коллективного участия в поддержании и улучшении условий проживания [Data: Reports (11, 98, 39, 253, 174)].
5. Ответственность за содержание: Владельцы несут ответственность за содержание и сохранность помещения, а также за оплату коммунальных услуг. Они обязаны обеспечивать сохранность жилого помещения и могут требовать выселения гражданина, не выполняющего условия пользования [Data: Reports (212, 69)].
Эти права и обязанности делают собственников центральной фигурой в управлении многоквартирными домами и обеспечении их надлежащего состояния. Соблюдение этих обязательств и активное участие в управлении способствует поддержанию высокого уровня жизни и безопасности в многоквартирных домах.
“Как узаконить перепланировку-переустройство квартиры?”
Ответ на второй пример
Узаконивание перепланировки или переустройства квартиры в многоквартирных домах регулируется рядом федеральных законов и положений Жилищного кодекса Российской Федерации. Процесс включает несколько ключевых этапов и требует соблюдения определенных процедур и норм.
Основные этапы узаконивания
1. Получение разрешения: Для начала необходимо получить разрешение на перепланировку. Это включает в себя подачу заявления в орган местного самоуправления, который играет центральную роль в согласовании изменений [Data: Reports (56, 5, 135, 144, 265)].
2. Подготовка проекта: Проект перепланировки должен соответствовать законодательным требованиям и быть утвержден на общем собрании собственников. Это обеспечивает законность и безопасность изменений [Data: Reports (150, 311)].
3. Согласование с органами: В случае, если здание является памятником архитектуры, истории или культуры, необходимо дополнительное согласование с органами по охране памятников [Data: Reports (192, 58)].
4. Подача документов: Заявитель обязан предоставить перечень документов, включая технический план и акт приемочной комиссии, которые подтверждают завершение работ [Data: Reports (154, 193)].
5. Регистрация изменений: После завершения работ необходимо внести изменения в Единый государственный реестр недвижимости, что подчеркивает важность точного учета и регистрации изменений [Data: Reports (153, 158)].
Важные аспекты
Согласие собственников: Если перепланировка затрагивает общее имущество, требуется согласие всех собственников. Это подчеркивает важность согласованного подхода и учета интересов всех участников [Data: Reports (265, 102)].
Роль многофункционального центра (МФЦ): МФЦ служит посредником для подачи заявлений и документов, связанных с перепланировкой, и обеспечивает их передачу в соответствующие органы [Data: Reports (194)].
Правовые нормы: Соблюдение всех правовых норм и процедур является обязательным условием для успешного завершения проекта. Без соответствующего разрешения реконструкция может быть приостановлена или признана незаконной [Data: Reports (279, 65, 135, 144)].
Заключение
Узаконивание перепланировки требует тщательного планирования и соблюдения всех законодательных требований. Важно учитывать интересы всех собственников и взаимодействовать с соответствующими органами для успешного завершения процесса. Соблюдение всех процедур и получение необходимых согласований обеспечат правовую защиту и легитимность изменений в жилом помещении.
Почему это важно для бизнеса
GraphRAG дает возможность реализовать в бизнесе полноценный инструмент управления знаниями. С поиском по смыслу, а не по ключевым словам, где каждый факт можно отследить до нормы или закона.
И что особенно важно, GraphRAG позволяет отвечать на вопросы общего характера по файлам, выходящим за пределы контекстного окна, например, "о чем этот огромный документ на десятки миллионов символов". При этом, новые документы в системе просто станут новыми узлами и связями, GraphRAG легко масштабируется.
Это, кстати, применимо в любых сферах, где важны регламенты: от внутренних политик и инструкций до ГОСТов, ISO, ESG-отчётности и тех-стандартов.
Надеюсь, было интересно почитать. Будут вопросы - буду рад ответить в комментариях. Спасибо за внимание!
Николай Сорокин
Head of AI/ML, GPTunneL
8+ лет в ML и графовых системах