Пару недель назад YouTube подкинул мне пятиминутный ролик с небольшого канала, где автор демонстрирует преимущества RAG на графах над обычным RAG поверх корпуса текстов.
Пример довольно простой. LLM должна ответить на вопрос: “Кто должен подписать возврат клиенту на 800 фунтов в марте?”. Ответ, естественно, содержится в предоставленных текстах, но для того, чтобы его добыть, нужно уметь в multi-hop reasoning, т.к. необходимая информация лежит в 3х разных местах:
инструкциях по возврату средств
списке сотрудников
сообщениях электронной почты
Для правильного ответа (Marcus Webb) модель должна по тексту инструкций понять, какое должностное лицо отвечает за возврат средств, затем посмотреть, находится ли оно на рабочем месте и, если нет, то кто его замещает. Простой поиск по ключевым словам (refund, exceeding, £800) задачу не решает, т.к. в релевантных для ответа документах нет по ним пересечений.
Вот 3 шага, которые приводят к правильному ответу:
Поиск по
refund exceeding £500найдёт файлcustomer-ops-handbook.md, в котором содержится только упоминание должности (Operations Manager), без имени и сроков.Поиск по
Operations Managerнайдёт файлteam.md, согласно которому эту должность занимает Sarah Chen. Упоминаний словrefundи£800в нём нет.E-mail
ooo-march-sarah.mdсодержит информацию о том, что в марте она в отпуске и документы за неё подписываетMarcus. Опять же,refundиOperations Managerв нём не упоминаются, а фамилию Маркуса (Webb) надо брать изteam.md.
Простой же поиск найдёт в первую очередь файл с именем refunds-policy-2024-superseded.md, где прямо написано: возвраты свыше £250 — director, ниже — любой сотрудник. Пороги другие, роль другая, в шапке мелким шрифтом «superseded January 2026». Если модель на этом останавливается, она честно «нашла политику возвратов» и отвечает неправильно. Другой ловушкой является файл expenses.md: тоже содержит £500 и approval, но про командировки.
Таким образом, видно, что для правильного ответа модели придётся сопоставить факты, а не бездумно выдать содержимое документов, найденных по ключевым словам вопроса.
Исходный эксперимент
Автор берёт 3 модели, “большую”, “среднюю” и “маленькую”, и подсовывает по 2 набора данных для RAG:
Тексты в папке (включая ненужные и содержащий ловушки), по которым модель может осуществлять поиск (grep/read)
Тексты, смоделированные под граф на основе предыдущих (онтология, front-matter), плюс код, вытаскивающий из них сущности и связи и скармливающий их на вход LLM.
Причём код этот является детерминированным запросом на 400 токенов, который выполняется ДО того, как осуществляется вызов модели. По сути, результаты этого запроса скармливаются ей насильно, не давая ей шанса самой решать, какие данные брать.
Полностью методология хорошо описана самим автором + для деталей есть репозиторий на github, поэтому дальше углубляться я не буду. Результаты тестов, думаю, тоже уже должны быть очевидны.
Но есть нюанс
В качестве “маленькой” модели автор использует Claude Haiku. Что в моём понимании является явным преуменьшением способностей данной модели, особенно если сравнивать с тем, что доступно на потребительском железе, купленном, как в моём случае, под другие нужды. Роли “средней” и “большой” моделей исполнили Sonnet и Fable 5 соответственно.
Свой ПеКа я собирал под игры осенью 2024 - весной 2025, и там стоит Nvidia RTX 4070 Ti Super c 16Gb VRAM. Ноутбук: Macbook Air M2 24Gb покупался в первую очередь для мобильности. Поэтому “маленькими” лично для меня являются модели, которые можно запустить на этих устройствах, т.е. ~ 2-20b весов в квантизации 4_K_M. В связи с этим я решил воспроизвести тест на моделях, которые уже давно “пылились” на моём SSD.
Какие модели взял я
В эксперименте участвовали следующие модели:
GPT-OSS-20b, mxfp4, HuggingFace
gemma-4-e2b, 8bit, LMstudio
llama-3.1-8b, 4bit, HuggingFace
xLAM-2-8b, 8bit, HuggingFace
Принцип их включения в тест очень простой: они уже лежали у меня на диске. GPT-OSS-20b выдаёт на моём ПеКа космические ~200 ток/с и вошла в состав только лишь за одно это. Ещё одну “старушку” — llama 3.1, я активно тестировал в момент её выхода и в отличие от Mistral/Mixstral не удалил. C семейством Gemma-4 я вожусь уже давно, но по большей части на маке. По-хорошему, пора бы уже сдаться и удалить их, т.к. двузначные цифры в скорости выжимаются с большим трудом. Экспериментов накопилось на отдельную статью, после чего, скорее всего, большинство из них ждёт мусорная корзина. Четвёртую модель за авторством SalesForce я где-то подцепил случайно и, забегая вперёд, скажу, что она полностью оправдала своё название, т.к. единственная из всех выдумала название несуществующего файла, чтобы начать в нём поиски. Поэтому в тесте я её оставил по большей части как антипример.
Каждая модель запускалась на Macbook Air M2 24Gb c контекстным окном в 8k.
Результаты
Результаты получились весьма показательными:
Ни одна модель не смогла ответить правильно без RAG на графе
Все модели ответили правильно, когда он был добавлен. Даже Gemma-4-e2b
Средняя экономия токенов ~ 3.5x
Средний прирост скорости ~ 2.9x
Вот тексты ответов каждой модели с графом и без:
gpt-oss-20b
search: The Operations Manager must sign off an £800 refund before Finance processes the payment.
graph: Marcus Webb.
llama-3.1-8b
search: Apologies for the confusion. Based on the limited information provided, my initial response about the Finance Director may not be accurate. To determine who would sign off on a £800 refund, I would need to search for relevant policies or p… [в логе обрезано до 240 символов — дальше текст не сохранился.]
graph: Sarah Chen, the Ops Manager, and Marcus Webb. The refund needs to be signed off by Sarah Chen as she is the Ops Manager, and Marcus Webb has full operational authority during her March leave.
gemma-4-e2b
search: The refund must be signed off by the Operations Manager, as refunds exceeding £500 require their approval before Finance releases the payment.
graph: Marcus Webb
xLAM-2-8b
search: The notes contain insufficient evidence to determine who signs off on a refund.
graph: The Ops Manager, Sarah Chen, is on leave from 1-31 March. According to the Refund approvals policy, refunds over £500 need Ops Manager sign-off. Since Sarah Chen is unavailable, Marcus Webb, who has full operational authority during her leave, will sign off the refund.
Ключевое отличие от исходного теста: действительно “маленькие” без предобработки данных в граф на вопрос ответить не смогли. Поэтому данный шаг кажется обязательным, если есть желание задействовать где-то модель с 2b параметров. Собственно он-то и является наиболее ёмким на выдумку и ухищрения. Что, на мой взгляд, только плюс, т.к. хорошо обработанные данные позволяют менять модели “как перчатки”, высвобождая VRAM, RAM и прочие ресурсы компьютера на более полезные вещи.
Детали по метрикам на картинках:


И в табличке:

Лично для меня этот мини-эксперимент стал первым результатом, где я могу подтвердить эффективность преобразования данных в графовый вид перед передачей их в LLM на собственных результатах, а не в качестве ссылки на статью вендора, занимающегося разработкой графовых БД и прочие “trust-me-bro” материалы.
Это вдохновляет на дальнейшее погружение в тему. Которое, кстати, у автора исходного материала тоже обозначено.
C кодом можно ознакомиться в моём репозитории.
Комментарии (7)

semenoffalex Автор
08.09.2026 11:45По сути вручную же создали графы "под задачу".
Не совсем так. Онтология там вполне универсальная:
Сущности:
PERSON·ROLE·POLICY·PROCESS·DOCUMENTОтношения между ними:
approved_by·held_by·delegates_to·part_of·references
Разложить в такую онтологию деятельность компании, в которой не полный бардак в процессах, должно быть не так уж и сложно.
Если инструкция изменится или человека заменят - как найти документ и понять какие связи нужно обновить?
Типовое решение: атрибуты временных интервалов для отношений.
Данный мини-эксперимент не отрицает того, что создание по сути Knowledge Graph — непростой процесс. Я помню подкаст с сотрудниками Deloitte, где ведущий под конец им задал вопрос: "Если всё так круто, то почему же все этого не делают?". На что ответом было: "Потому, что это сложно".
Акцент здесь на другом: если сместить ресурсы на подготовку данных, т.е. на тот самый Knowledge Graph, то это значительно облегчит этап интеграции с LLM. В моём примере видно, что их можно "менять как перчатки" разных размеров: от 2b до 20b.
Ka463
Подход правильный, но автором с ютуба он реализован с ручной разметкой, в реальном диалоге не кто не будет размечать граф заранее, у меня по похожему принципу устроен мой агент, тоже граф, тоже достает из памяти перед ходом LLM, но не как источник прямых знаний, а как подсказка для модели, в какую сторону копать.
semenoffalex Автор
Из ручного там только основа онтологии: определение узлов и связей между ними. Остальную работу делает LLM. Причём желательно более умная, чем та, что будет использоваться в качестве "движка" агента, который будет отвечать на вопросы. Благо делается это разово на основном объёме документов, а дальше — инкрементально по мере их обновления.
Ka463
Ну тогда автор изобрел велосипед, потому что такая концепция уже давно работает Microsoft GraphRAG
semenoffalex Автор
GraphRAG я тестировал, когда он вышел. И на практике он себя особо не проявил.
Смысл же экспериментов, представленных здесь, заключается в минималистичной демонстрации того, почему иногда стоит потратить ресурсы на представление данных для RAG в графовой форме. У автора разница была видна только для Haiku. В моём эксперименте разница есть для всех моделей классом ниже.
v_pyatnitsky
Вот о том же думал, когда читал. По сути вручную же создали графы "под задачу".
Я Так понимаю, что сложность графовой базы как раз в том, чтобы
правильно составлять эти связи при создании
корректно обновлять при изменении документов
Если инструкция изменится или человека заменят - как найти документ и понять какие связи нужно обновить?
semenoffalex Автор
Не совсем так. Онтология там вполне универсальная:
Сущности:
PERSON·ROLE·POLICY·PROCESS·DOCUMENTОтношения между ними:
approved_by·held_by·delegates_to·part_of·referencesРазложить в такую онтологию деятельность компании, в которой не полный бардак в процессах, должно быть не так уж и сложно.
Типовое решение: атрибуты временных интервалов для отношений.
Данный мини-эксперимент не отрицает того, что создание по сути Knowledge Graph — непростой процесс. Я помню подкаст с сотрудниками Deloitte, где ведущий под конец им задал вопрос: "Если всё так круто, то почему же все этого не делают?". На что ответом было: "Потому, что это сложно".
Акцент здесь на другом: если сместить ресурсы на подготовку данных, т.е. на тот самый Knowledge Graph, то это значительно облегчит этап интеграции с LLM. В моём примере видно, что их можно "менять как перчатки" разных размеров: от 2b до 20b.