Пару недель назад 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 кодом можно ознакомиться в моём репозитории.

