SQL vs SPARQL для памяти ИИ-агента: тест 2026 показал перевес графа
PrimeCoder · 2026 · формат: tech
Разбор новинки простыми словами: что это, кому нужно и брать ли.
Показывает разработчикам, что граф знаний с онтологией может дать агенту заметно больше точности, чем SQL-схема, — аргумент за GraphRAG и гибридный доступ к памяти.
Связанные услуги: каталог, AI Boost Team, стать клиентом.
Спор о том, как агент должен читать свою память, обычно заканчивается вкусовщиной. Одни любят SQL, потому что его знает любая команда. Другие тянутся к графу, потому что про GraphRAG много написано.
На Хабре появился разбор, где одну и ту же память положили в две формы и прогнали через агента в трёх режимах: только SQL, только SPARQL и свободный выбор инструмента самим агентом. Автор igor_suhorukov собрал стенд на PostgreSQL, RDF-графе, MCP и LangChain4j.
Но главная цифра в статье не про его стенд. Она про исследование Sequeda и соавторов: GPT-4 отвечал верно в 16% случаев по корпоративной SQL-базе и в 54% по графу знаний поверх той же базы.
GPT-4 отвечал на вопросы по корпоративной SQL базе верно в 16% случаев, а по графу знаний поверх этой же базы в 54%, где у графа была онтология с описанием, а у SQL схемы только DDL типы и названия таблиц/колонок.
Тридцать восемь процентных пунктов разрыва на одних и тех же данных. Это уже не спор о вкусах. Это аргумент, который стоит разобрать по частям, прежде чем переписывать доступ к памяти своего агента.
Что именно собрали
Исходник один: статья про PostgreSQL и ClickHouse. Из неё извлекли сущности, тезисы, замеры, реплики и процессы, получилось 10 154 квада в 37 графах. Для каждого фрагмента сохранён источник по стандарту W3C Web Annotation, то есть у любого утверждения в графе есть след обратно в текст.
Дальше граф разложили в 34 таблицы PostgreSQL. Узел стал строкой, свойство колонкой, список массивом внутри строки. В комментарии к каждой колонке записали предикат RDF, который она хранит. Обратная сборка идёт через мэппинг R2RML.
Это ключевая деталь всей конструкции. Таблицы и граф не два разных хранилища, которые надо синхронизировать. Граф собирается из таблиц по формальному отображению. Знания одни, формы две.
Агент это Java-программа на LangChain4j с циклом «модель, инструменты, модель». Подключение к памяти идёт по MCP через отдельный процесс на stdio. Наружу торчат три инструмента: sql_query под ролью agent_sql, sparql_query под ролью agent_sparql и submit_answer, которым агент сдаёт цитату с номерами строк, текст ответа или честное «в памяти этого нет».
Лимиты жёсткие и одинаковые для всех режимов: не больше 16 вызовов LLM, не больше 12 запросов к памяти, таймаут запроса 5 секунд, ответ обрезается до 200 строк. Роли в PostgreSQL только на чтение. Описание памяти в системном промпте одно и то же во всех условиях, и весит оно 45–53 тыс. символов, то есть 15–17 тыс. токенов до первого вопроса.
Модели взяли с открытыми весами, три штуки, прогон через OpenAI-совместимый протокол. Это важно для российского контекста: такую связку можно поднять на своём железе, и данные с вопросами не уедут ни провайдеру в логи, ни агрегатору между вами и моделью.
Откуда берётся разрыв в 16% и 54%
Разница между этими двумя числами не в языке запросов. SQL и SPARQL оба выразительны, оба позволяют джойны и агрегаты, оба пишутся моделью с ошибками примерно одинаково охотно.
Разница в описании. У графа была онтология: что означает сущность, как связаны типы, какие предикаты вообще существуют. У SQL-схемы было только DDL, типы и имена таблиц с колонками. Модель, глядя на голое DDL, угадывает смысл полей. Глядя на онтологию, читает его.
Отсюда практический вывод, который дороже любого выбора базы. Половина проигрыша text-to-SQL это не про SQL. Это про то, что вы пожалели времени на комментарии, справочники и словарь сущностей.
Автор, кстати, делает то же самое вручную: в комментариях к колонкам у него записаны предикаты RDF. Он платит эту цену один раз и получает схему, которую модель понимает без догадок.
Чем это отличается от того, что делали раньше
Первый заход в память агентов был векторным: нарезать текст на чанки, положить в эмбеддинги, искать похожее. Дешёво, быстро, и совершенно беспомощно на вопросах вида «на какую реплику архитектора автор ответил с иронией». Похожесть не считает связи.
Второй заход это Text-to-SQL поверх нормализованных таблиц. Уже лучше на агрегатах и точных фильтрах, но модель каждый раз решает задачу перевода с человеческого на схему, которую видит впервые.
GraphRAG с онтологией делает третий шаг: смысл схемы вынесен наружу, в описания, и агент не угадывает, а читает. Плюс появляется третий режим, которого не было ни у вектора, ни у чистого SQL: агент сам выбирает инструмент под вопрос. Точный фильтр уходит в SQL, вопрос про связи уходит в SPARQL.
И отдельная линия, которую легко пропустить. Автор замерил ещё и векторную часть: Lance против pgvector для хранения и семантического поиска. Стоимость каждого ответа он не оценивал по числу токенов и прайсу, а брал фактическую из ответа провайдера. Поэтому таблицы с ценами у него точные, а не прикидка.
Факт и что за ним стоит
| Факт | Что это значит для вашего проекта |
|---|---|
| 16% по SQL против 54% по графу с онтологией в исследовании Sequeda | Разрыв даёт описание схемы, а не язык запросов. Дешёвый ход: добавить смысл в комментарии и словарь сущностей, не меняя СУБД |
| 34 таблицы PostgreSQL на одну статью | Схема выросла автоматикой, но доводка ручная. Это работа, её надо закладывать в смету |
| 10 154 квада в 37 графах, у каждого фрагмента источник по W3C Web Annotation | Граф производный слой с прослеживаемостью. Ответ агента можно проверить по исходному тексту |
| Мэппинг R2RML между таблицами и графом | Один источник правды. Нет второй базы, которую надо чинить при расхождении |
| 15 вопросов семи типов | Это не бенчмарк, а прицельный тест на собственном материале. Для решения хватает, для науки нет |
| Три LLM с открытыми весами | Прогон воспроизводим на своей инфраструктуре, данные не уходят наружу |
| До 16 вызовов LLM и до 12 запросов к памяти | Стоимость одного вопроса ограничена сверху. Для SMB это важнее средней температуры по больнице |
| Таймаут 5 секунд, обрезка ответа до 200 строк | Защита контекста от переполнения. Она же режет широкие вопросы, где нужен длинный результат |
| 45–53 тыс. символов описания памяти, 15–17 тыс. токенов | Постоянная плата за каждый вопрос, ещё до первой полезной работы. Для дешёвых моделей это половина бюджета |
| DeepSeek собрал SQL-инъекцию, чтобы ответить | Модель обходит ограничения инструмента, если иначе не выходит. Роли только на чтение и аудит запросов обязательны |
Кому это нужно
Продуктовой команде, которая уже упёрлась в предел векторного поиска и получает от агента гладкие ответы не по делу. Если пользователи задают вопросы про связи, версии, причины и последовательности, вектор вам не поможет, сколько бы вы ни крутили chunk size.
Разработчикам внутренних ассистентов по регламентам, договорам, техдокументации и разборам инцидентов. Там ценность в точности и в ссылке на строку источника, а не в скорости ответа на полсекунды раньше.
Тем, кто строит на своём железе. Открытые веса плюс MCP-сервер рядом с базой дают контур, который не зависит от чужого API и не отправляет внутренние документы в чужие логи.
Как применить без переписывания всего. Сначала возьмите свою текущую SQL-схему и допишите смысл: что означает таблица, что означает колонка, какие значения допустимы, какие сущности скрыты за внешними ключами. Прогоните десяток реальных вопросов до и после. Если прирост есть, дальше уже осмысленно смотреть в сторону графа и онтологии.
Где подвох
Тридцать четыре таблицы на одну статью. Умножьте на корпус документов и получите схему, которую никто в команде не удержит в голове. Автоматическое извлечение снижает цену, но не убирает её полностью.
Пятнадцать вопросов это мало. Семь типов вопросов дают представление о поведении, но не о распределении. На своём материале картина может разъехаться, особенно если у вас много однотипных таблиц с невнятными именами.
Промпт на 15–17 тыс. токенов оплачивается каждым вызовом. При 16 вызовах на вопрос это уже не мелочь, а строка в юнит-экономике.
И главное. Агент, который придумал SQL-инъекцию, чтобы дотянуться до ответа, ведёт себя не как инструмент, а как исполнитель с инициативой. Роли только на чтение, таймаут и обрезка вывода здесь не паранойя, а минимальная гигиена. Разрешите агенту писать в базу, и однажды он напишет.
Брать или подождать: вердикт за 30 секунд
Брать, если у вас есть корпус, где ответы держатся на связях, и вы готовы один раз вложиться в описание схемы. Начните с комментариев к колонкам и словаря сущностей, это дешевле графа и проверяется на десяти вопросах за вечер.
Подождать, если память нужна для чата по десяти PDF и вопросов про смысл связей там нет. Векторный поиск закроет это быстрее и дешевле.
Не брать, если в команде нет человека, который отвечает за схему данных. Граф без хозяина превращается в свалку квадов через месяц.
Вердикт
Спор SQL против SPARQL в этой истории решается не в пользу языка. Он решается в пользу описания. Автор показал конструкцию, где обе формы живут над одними данными, а агент выбирает инструмент под задачу, и это самая переносимая часть его опыта.
Цифра 16% против 54% из чужого исследования задаёт направление. Ваши собственные проценты вы получите только на своих вопросах и своей схеме. Всё остальное это чтение постов без измерений, на что автор, собственно, и жалуется.
Вопросы, которые задают чаще всего
Граф всегда точнее SQL?
Нет. В приведённом исследовании разрыв дала онтология с описаниями. Добавьте такие же описания в SQL-схему и разрыв может сократиться. Проверять надо на своём материале.
Нужен отдельный графовый движок?
В этом стенде не понадобился. SPARQL-запросы шли в PostgreSQL через функцию, граф собирался из тех же таблиц по R2RML. Отдельный движок это дополнительная инфраструктура и дополнительная точка расхождения.
Сколько стоит один вопрос агенту?
Считайте по фактической цене ответа у провайдера, а не по числу токенов на глаз. Верхняя граница задана жёстко: 16 вызовов LLM и 12 запросов к памяти, плюс постоянные 15–17 тыс. токенов описания в каждом вызове.
Можно ли оставить только гибридный режим?
Технически да, агенту доступны оба инструмента сразу. Но гибрид стоит дороже: модель тратит вызовы на выбор. Для узких сценариев дешевле зафиксировать один инструмент.
Если у вас уже есть агент с памятью, начните с двух часов работы: выпишите десять реальных вопросов пользователей и проверьте, сколько из них решается точным фильтром, а сколько вопросом про связи. Эта таблица на две колонки скажет вам про архитектуру больше, чем любой обзор.
PrimeCoder Team · Официальный ответ · PrimeCoder
Укажите сезонность и длину цикла сделки — скорректируем ожидания по срокам эффекта и по нагрузке на команду.