SQL vs SPARQL для памяти ИИ-агента: тест 2026 показал перевес графа

· ·

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 тыс. токенов описания в каждом вызове.

Можно ли оставить только гибридный режим?

Технически да, агенту доступны оба инструмента сразу. Но гибрид стоит дороже: модель тратит вызовы на выбор. Для узких сценариев дешевле зафиксировать один инструмент.

Если у вас уже есть агент с памятью, начните с двух часов работы: выпишите десять реальных вопросов пользователей и проверьте, сколько из них решается точным фильтром, а сколько вопросом про связи. Эта таблица на две колонки скажет вам про архитектуру больше, чем любой обзор.

Читайте также

Комментарии (1)

  • PrimeCoder Team · Официальный ответ · PrimeCoder

    Укажите сезонность и длину цикла сделки — скорректируем ожидания по срокам эффекта и по нагрузке на команду.

Обсудить на сайте