3,583 papers
arXiv:2610.23317 81 16 окт. 2026 г. FREE

AgentOnto: словарь бизнес-понятий вместо угадывания, чтобы агент-аналитик не врал в цифрах

КЛЮЧЕВАЯ СУТЬ
Проблема: запрос к базе выполнился без ошибок, а цифра в отчёте неверная. Агент не знал, что у вас «выручка» считается без возвратов и без НДС. Метод AgentOnto позволяет получать от агента-аналитика цифры по вашим правилам, а не по его догадкам, и честно слышать «этого по данным не узнать». Перед работой агенту выдают явный словарь бизнес-понятий (онтологию): сущности, определения метрик и привязку к таблицам. Агент сначала составляет план со ссылками на словарь, потом сверяет план, и только после этого пишет запрос. Фишка: у агента три хода, а не один. Выполнить, уточнить или отказаться. Вопрос без нужных данных не заканчивается красивой выдумкой.
Адаптировать под запрос
⚡

TL;DR

AgentOnto — это агент для анализа данных, которому перед работой собирают явный словарь бизнес-знаний (онтологию). В нём три части: сущности (клиент, заказ), определения метрик («выручка» = что считаем и что исключаем) и привязка к таблицам и столбцам базы. Агент не пишет SQL сразу. Он сначала составляет план со ссылками на словарь, затем проверяет план по словарю и только после этого выполняет запрос.

Главная боль: SQL-запрос выполнился без ошибок, но цифра неверная. Агент не знал, что «выручка» у вас считается без возвратов, а «активный клиент» — это покупка за 90 дней. В схеме базы этого нет. Эти правила живут в документах и в головах аналитиков. Агент их угадывает и тихо ошибается. Авторы называют это тихой смысловой ошибкой. Ещё хуже, когда агент отвечает на вопрос, на который по данным вообще нельзя ответить.

Метод решает это так. Знания из базы, документов и старых примеров задач сводятся в один словарь, где у каждой записи указан источник и статус подтверждения. Агент всегда выбирает одно из трёх действий: выполнить, уточнить или отказаться. Словарь потом обновляют по подтверждённым замечаниям. Каждое изменение проверяют двумя наборами вопросов: что должно измениться и что обязано остаться как было. Перед боевой работой словарь прогоняют на самосочинённых задачах.

🔬

Схема метода

ШАГ 1. СБОРКА СЛОВАРЯ: база + документы + примеры задач
        → сущности / метрики / привязка к таблицам
        (у каждой записи: источник + статус «подтверждено»)
        Подтверждение — отдельным проходом модели.

ШАГ 2. ПОДГОТОВКА (2 раунда × 4 задачи): модель сама придумывает вопросы,
        решает их по словарю, отдельный проход проверяет ответы
        → найденные дыры вносятся в словарь

ШАГ 3. РАБОТА С ЗАПРОСОМ:
        запрос → решение: выполнить / уточнить / «не поддерживается»
        → план со ссылками на словарь
        → проверка плана по словарю (сущности есть? метрика по правилам? маппинг есть?)
        → SQL по маппингу → выполнение

ШАГ 4. ОБНОВЛЕНИЕ по подтверждённой обратной связи:
        правка одной записи
        → проверки «должно измениться» + проверки «должно остаться»
        → принять правку, только если прошли обе группы; иначе откат

В оригинале это система на коде. Шаги 1–4 выполняются автоматически, а на каждом шаге вызывается модель.

🚀

Пример применения

Метод сильнее всего там, где у данных есть неочевидные бизнес-правила, которых нет в названиях столбцов. Бессмысленно применять его к разовой простой выгрузке.

Задача: Вы селлер на Ozon и Wildberries. Выгрузка продаж лежит в Google Sheets или в базе, а на неё смотрит агент (Claude Code, Cursor или кастомный GPT). Собственник спрашивает: «Какая у нас выручка по категории „Дом“ за апрель и сколько активных покупателей?» В таблицах есть статусы «доставлен», «возврат», «отменён» и цены с НДС. Агент не знает, что у вас выручка считается по доставленным, за вычетом возвратов, без НДС.

Промпт (кладём в системную инструкцию или CLAUDE.md):


  
    Заказ(orders): order_id, status ∈ {доставлен, возврат, отменён}, price_gross, vat_rate, sku_id, buyer_id, delivered_at
    SKU(skus): sku_id, category
    Покупатель: buyer_id (только внутри orders; персональных данных нет)
  
  
    Выручка = SUM(price_gross / (1 + vat_rate)) по заказам status='доставлен' МИНУС такая же сумма по status='возврат'.
      Источник: «Регламент отчётности v3», п.2. Статус: подтверждено.
    Активный покупатель = buyer_id с ≥1 доставленным заказом за последние 90 дней от даты отчёта.
      Источник: пример задачи №14. Статус: НЕ подтверждено (нужна проверка).
  
  
    Выручка → orders.price_gross, orders.vat_rate, orders.status; категория → JOIN skus ON orders.sku_id = skus.sku_id
  



Для каждого запроса:
1. Реши действие: EXECUTE / CLARIFY / UNSUPPORTED.
   CLARIFY — если в запросе не хватает данных (период, канал).
   UNSUPPORTED — если запрос требует данных, которых нет в словаре (например, маржа: себестоимости нет).
2. Составь ПЛАН: какие записи Ontology используешь, какие выборы сделал сам (период, фильтры).
3. ПРОВЕРЬ ПЛАН: все сущности есть в Entities? Метрика посчитана ровно по определению? Для каждого поля есть Mapping?
   Если нет — исправь план или смени действие.
4. Только после проверки напиши запрос и выполни.
5. В ответе покажи: действие, план, какие записи Ontology применены, итог. Метрики со статусом «не подтверждено» помечай как предварительные.

Результат: Агент сначала напишет решение («выполнить» или «уточнить») и план со ссылками на определения. Затем покажет проверку плана: что учтены возвраты и НДС. Только после этого придёт запрос и итоговая цифра. Если спросить про маржу, агент должен ответить «не поддерживается: нет себестоимости». Показатель «активные покупатели» он пометит как предварительный, потому что определение не подтверждено.

🧠

Почему это работает

Слабость. LLM пишет правдоподобный запрос по названиям столбцов и угадывает бизнес-смысл. Если запрос выполнился, никто не видит, что цифра посчитана «не по-вашему». К тому же «доступный ответ» ≠ «верный ответ»: высокий процент ответов не гарантирует правильных ответов.

Сильная сторона. Модель хорошо следует явно записанным определениям и умеет сверять план с чек-листом. Она также умеет придумывать тестовые вопросы по документам и разбирать расхождения.

Как метод это использует. Знания выносятся из головы аналитика в один проверяемый документ, а план проходит сверку до выполнения. Правки проверяются на «регрессии»: исправили метрику «активный покупатель», но не сломали «выручку».

Рычаги управления: - Статус подтверждения → оставь только подтверждённые определения как «жёсткие», а остальные помечай как предварительные. - Число раундов и задач подготовки (в статье 2×4) → увеличь для большой базы, уменьши для маленькой. - Три действия (выполнить / уточнить / отказаться) → добавь свои, например «передать человеку». - Проверки «изменится» и «останется» → накапливай набор вопросов с известными ответами, он станет вашим тестом.

📋

Шаблон промпта

Авторы не публикуют промпты, а описывают систему на коде. Ниже перенос идеи в текстовую инструкцию по её структуре. Это не дословный промпт из статьи.


Ты аналитик данных. Ты не пишешь запрос, пока не сверился с Ontology.



  
    {сущности: таблицы, ключевые поля, допустимые значения}
  
  
    {метрика} = {формула и условия применения}. Источник: {документ/пример}. Статус: {подтверждено / не подтверждено}.
  
  
    {понятие} → {таблица.столбец, связи JOIN}
  



Для каждого запроса {запрос}:
1. action = EXECUTE | CLARIFY | UNSUPPORTED.
2. plan: какие записи Ontology используются; какие допущения сделаны сверх неё.
3. check(plan): сущности из Entities? метрики по определению? для каждого поля есть Mapping?
   Если check не пройден — исправь plan или смени action.
4. compile: запрос строй строго по Mappings.
5. Выведи: action, plan, результат check, применённые записи Ontology, итог.



Когда я присылаю подтверждённое замечание {замечание}:
1. Найди ОДНУ запись Ontology, к которой оно относится.
2. Предложи точечную правку.
3. Составь corr_checks: вопросы, ответ на которые ДОЛЖЕН измениться.
4. Составь ret_checks: вопросы, ответ на которые ДОЛЖЕН остаться прежним.
5. Прогони обе группы по правилам .
   Принимай правку только если обе группы пройдены. Иначе откати и объясни почему.

Что подставлять: в {сущности} — схему базы и допустимые значения полей. В {метрика} — определения из регламентов. В {замечание} — ваши подтверждённые исправления, например «выручка должна быть без НДС».

🚀 Быстрый старт — вставь в чат:

Вот шаблон ontology-guided аналитика. Адаптируй под мою задачу: [твоя задача и данные]. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про таблицы и поля, определения метрик и откуда они взяты, какие вопросы нельзя решать по этим данным. Это нужно, потому что метод держится на трёх частях словаря: сущности, метрики, привязка к таблицам. Без метрик и границ данных агент вернётся к угадыванию.

⚠️

Ограничения

⚠️ Нужна инженерная реализация: в оригинале всё автоматизировано (сборка словаря из базы, документов и примеров, подтверждающий проход, цикл подготовки, откат правок). В чате вы повторите идею, но не автоматику. Словарь придётся вести вручную или собрать скрипт.

⚠️ Результаты получены на данных, подготовленных самими авторами: базы, документы и примеры задач они собирали сами, на открытых данных. Сравнение с другими методами проводилось на одной и той же модели, поэтому на вашей модели и данных эффект может быть иным.

⚠️ Словарь стареет и может ошибаться: если определение в нём неверное, агент будет уверенно считать неверно. Статус «подтверждено» не заменяет проверки человеком.

⚠️ Не для простых запросов: если в базе нет скрытых бизнес-правил, словарь не даст выигрыша, а добавит поддержки.

⚠️ Не все результаты вошли в разбор: предоставленный текст статьи обрывается на первом разделе экспериментов. Результаты по построению словаря, по анализу и по обновлению, а также описание реального внедрения здесь не рассмотрены.

🔍

Как исследовали

Исследователи взяли две открытые базы из разных областей: World Development Indicators (экономика стран) и данные о качестве воздуха EPA. Для каждой они собрали «корпоративную» среду: базу, бизнес-документы и примеры задач. Получилось 606 запросов (282 и 324) и 44 подтверждённых замечания с 174 запросами после правок. Анализ розничного набора показал: для запросов нужно 46 бизнес-понятий, которых нет в схеме базы. Это и есть та самая пропасть, которую закрывает словарь.

Сравнивали с четырьмя методами: DIN-SQL, ReFoRCE, MAC-SQL (многоэтапная генерация SQL) и Vanna (агент с инструментами). Во всех случаях подставляли ту же модель, что и у AgentOnto, поэтому разница идёт от метода, а не от силы модели. Запрос считался верным, только если правильно решено действие (выполнить, уточнить, отказать) и, где нужно, верен результат.

Итог: у AgentOnto 87,5% точности в среднем (79,1% и 96,0% по двум областям), у лучшего конкурента 55,0%. Прирост составил 32,6 и 30,3 процентного пункта. Инсайт для практики: запись бизнес-смысла в явном виде даёт больше, чем более хитрая генерация SQL. Две проверки при обновлении словаря, «должно измениться» и «должно остаться», защищают от ситуации, когда исправление одного ломает другое.

💡

Адаптации и экстраполяции

🔧 Техника: добавить «набор эталонных вопросов» → правка не ломает старое

Ведите отдельный список из 10–20 вопросов с известными верными ответами. Перед тем как принять любое изменение в определениях, просите агента прогнать этот список:

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

Это переносит идею проверок «должно остаться» в обычный чат. Оригинал строит такие проверки автоматически.

Экстраполяция: самопроверка словаря перед стартом. Перед боевой работой попросите: «Придумай 4 вопроса, которые проверят слабые места этого словаря. Реши их по правилам. Покажи, где словарь неоднозначен или пуст, и предложи правки». Это урезанная версия подготовки на самосочинённых задачах: один раунд, без отдельной модели-проверяющего. Для надёжности второй проход лучше делать в новом чате.

🔗

Ресурсы

  • AgentOnto: Ontology-Guided LLM Agents for Enterprise Data Analytics — Dayan Pan, Bincheng Zuo, Xiaojian Wang, Daogang Zhang, Jingyuan Wang. Beihang University (Пекин) и Omaha AIGC (Шанхай). KDD '27.
  • Упоминаемые в статье системы и методы: DIN-SQL, ReFoRCE, MAC-SQL, Vanna, SiriusBI, CoeusBI, SODA, ATHENA.
  • Данные: World Development Indicators, U.S. EPA Air Quality System.

📋 Дайджест исследования

Ключевая суть

Проблема: запрос к базе выполнился без ошибок, а цифра в отчёте неверная. Агент не знал, что у вас «выручка» считается без возвратов и без НДС. Метод AgentOnto позволяет получать от агента-аналитика цифры по вашим правилам, а не по его догадкам, и честно слышать «этого по данным не узнать». Перед работой агенту выдают явный словарь бизнес-понятий (онтологию): сущности, определения метрик и привязку к таблицам. Агент сначала составляет план со ссылками на словарь, потом сверяет план, и только после этого пишет запрос. Фишка: у агента три хода, а не один. Выполнить, уточнить или отказаться. Вопрос без нужных данных не заканчивается красивой выдумкой.

Принцип работы

Правила бизнеса живут в регламентах и в головах аналитиков. В схеме базы их нет. Поэтому агент гадает по названиям столбцов. Метод выносит эти правила в один документ. У каждой записи есть источник и статус: подтверждено или нет. Дальше порядок такой: решение → план со ссылками на словарь → проверка плана → запрос. Агент не пишет запрос, пока не сверил план со словарём. Это как бухгалтер, который сначала открывает учётную политику, а потом считает. Не наоборот. Словарь потом правят по подтверждённым замечаниям. Каждую правку проверяют двумя наборами вопросов. Что должно измениться. И что обязано остаться прежним. Починили «активного покупателя» и сломали «выручку»? Правку откатывают.

Почему работает

LLM пишет правдоподобный запрос по названиям столбцов и достраивает смысл сама. Запрос выполнился, ошибки нет, никто не видит, что цифра посчитана «не по-вашему». Авторы называют это тихой смысловой ошибкой. Модель при этом хорошо следует явно записанным определениям. Она умеет сверять план с чек-листом. Она умеет придумывать тестовые вопросы по документам. Метод ставит всё это на место слабого звена. Высокий процент «ответов» не гарантирует правильных ответов, поэтому агенту разрешён отказ и уточнение. Агент, который обязан отвечать всегда, будет отвечать и на то, чего в данных нет. Честно: в предоставленном тексте статьи нет итоговых цифр. Мы видим дизайн системы, а не измеренный выигрыш. Авторы собирали данные сами и сравнивали методы на одной модели.

Когда применять

Аналитика по базам и таблицам → отчёты, где у метрик есть скрытые правила (возвраты, НДС, окно «активности»), особенно когда цифры идут собственнику или в планирование. Не подходит для разовой простой выгрузки. Если скрытых правил нет, словарь даст только лишнюю поддержку. Ещё одно «не»: словарь стареет. Неверное определение в нём заставит агента уверенно считать неверно.

Мини-рецепт

1. Выпиши словарь: сущности (таблицы, ключевые поля, допустимые значения), метрики с формулами, привязка понятий к столбцам и связям.
2. Подпиши каждое определение: откуда оно взято и подтверждено ли. Неподтверждённое агент обязан называть предварительным.
3. Дай три хода: выполнить, уточнить, «не поддерживается». Добавь свой, например «передать человеку».
4. Требуй порядок: сначала план со ссылками на словарь, потом проверка плана, потом запрос. В ответе пусть покажет все три шага.
5. Прогони тренировку: пусть модель сама придумает 4 вопроса и решит их по словарю. Отдельным проходом проверь ответы. Повтори 2 раза. Найденные дыры внеси в словарь.
6. Правь по одной записи: на каждое замечание составь два набора вопросов. Один «ответ должен измениться», другой «ответ должен остаться». Не прошли оба набора? Откат.
7. Копи тесты: вопросы с известными ответами со временем станут вашим набором проверок.

В оригинале всё это автоматизировано кодом. В чате вы повторите идею, а словарь придётся вести руками.

Примеры

[ПЛОХО] : Какая у нас выручка по категории Дом за апрель и сколько активных покупателей? Агент посчитает по цене из таблицы. Отменённые заказы, возвраты и НДС попадут в сумму. Цифра выглядит прилично и неверна.
[ХОРОШО] : Выручка = SUM(price_gross / (1 + vat_rate)) по заказам status='доставлен' МИНУС такая же сумма по status='возврат'. Источник: Регламент отчётности v3, п.2. Статус: подтверждено. Активный покупатель = buyer_id с минимум одним доставленным заказом за 90 дней от даты отчёта. Статус: НЕ подтверждено. Категория берётся через JOIN skus ON orders.sku_id = skus.sku_id. Для каждого запроса сначала выбери действие: EXECUTE, CLARIFY или UNSUPPORTED. Составь план со ссылками на эти записи. Проверь, что метрика посчитана ровно по определению и для каждого поля есть привязка. Только потом пиши запрос. Неподтверждённые метрики помечай как предварительные. Что получите: план с возвратами и НДС до выполнения запроса. «Активные покупатели» придут с пометкой «предварительно». На вопрос Какая маржа по категории Дом? агент ответит «не поддерживается: нет себестоимости». Он не станет выдумывать.
Источник: AgentOnto: Ontology-Guided LLM Agents for Enterprise Data Analytics
ArXiv ID: 2610.23317 | Сгенерировано: 2026-10-19 08:20

Проблемы LLM

ПроблемаСутьКак обойти
Модель молча додумывает бизнес-правила и выдаёт правдоподобный результатЗадача требует знания правил, которых нет в самих данных. Например, «выручка» считается без возвратов, а «активный клиент» — это покупка за 90 дней. Модель угадывает смысл по названиям столбцов. Запрос выполняется без ошибок, цифра выглядит нормально, но она неверная. Никто не видит подмены. Так же бывает с вопросами, на которые по данным ответить нельзя. Модель всё равно отвечает. Это касается любых задач, где смысл термина живёт в документах и в головах людейНе жди, что модель сама поймёт терм��н. Запиши определения явно и дай их в запросе. Для каждого определения укажи источник и статус: «подтверждено» или «не подтверждено». Разреши модели три действия: выполнить, уточнить, отказаться. Отказ нужен, когда в записанных определениях и данных нет нужного. Неподтверждённые метрики пусть помечает как предварительные

Методы

МетодСуть
Словарь понятий + план + сверка до выполнения — меньше тихих смысловых ошибокДай модели словарь из трёх частей. Сущности: таблицы, поля, допустимые значения. Определения метрик: формула, условия, источник, статус. Привязка: какое понятие лежит в каком столбце и как соединять таблицы. Потребуй порядок: 1) выбрать действие EXECUTE / CLARIFY / UNSUPPORTED; 2) составить план со ссылками на записи словаря и отметить свои допущения; 3) проверить план: все ли сущности есть, метрика посчитана ровно по определению, у каждого поля есть привязка; 4) только потом писать и выполнять запрос. Почему работает: модель хорошо следует явно записанным определениям и умеет сверять план с чек-листом. Ошибка смысла ловится до выполнения, а не после. Выбор действия даёт модели законный путь вместо выдумывания. Когда да: в данных есть неочевидные правила, цифры идут в отчёты и решения. Когда нет: разовая простая выгрузка, правил нет. Словарь только добавит поддержки. Риск: неверное определение в словаре даст уверенно неверный результат. Статус «подтверждено» не заменяет проверку человеком
Правка правила с двумя наборами проверок — исправил одно, не сломал другоеКогда меняешь определение или промпт, не проверяй только то, что чинил. Составь два набора вопросов с известными ответами. Должно измениться: ответы, которые правка обязана исправить. Должно остаться: ответы по соседним правилам, которые не должны сдвинуться. Прогони оба набора. Прими правку, только если прошли оба. Иначе откати. Почему работает: правка одного правила часто портит соседние. Это видно, только если заранее зафиксировать, что должно остаться прежним. Накопленные вопросы становятся вашим тестом. Как применять: правь одну запись за раз. Храни вопросы с эталонными ответами. Прогоняй их после каждой правки. Когда нет: одноразовый запрос, который вы не будете менять
📖 Простыми словами

AgentOnto: Ontology-GuidedLLMAgentsfor Enterprise Data Analytics

arXiv: 2610.23317

Когда ты просишь обычную нейросеть написать SQL к базе данных, она тупо угадывает бизнес-логику по названиям колонок. Запрос почти всегда отрабатывает без ошибок, выдает красивую цифру, но в девяти случаях из десяти эта цифра — полная туфта. Модель понятия не имеет, что в твоей конторе под термином «выручка» скрывается вычет возвратов, НДС и бонусов. Фреймворк AgentOnto ломает эту практику: он надевает на LLM жесткий поводок из онтологии — явного справочника корпоративных терминов.

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

Архитектура AgentOnto работает в три железных шага и строго запрещает писать SQL с ходу. Сначала собирается карта бизнес-знаний: сущности, точные формулы метрик и их привязка к колонкам. Затем агент строит план со ссылками на словарь, прогоняет его через этап верификации правил и только после подтверждения генерирует финальный код. Никакой отсебятины — модель обязана явно обосновать, какое именно правило она применила к каждой строчке.

Эту систему бессмысленно пихать в разовые выгрузки или мелкие пет-проекты — там и обычный промпт справится. Метод раскрывается в кровавом энтерпрайзе: CRM, ERP и хранилищах на тысячи таблиц, где логика расчётов живёт только в головах старожилов компании. Принцип спасает везде, где скрытые бизнес-правила не прописаны в базе, а цена ошибки в одной цифре стоит квартального бюджета.

Главный вывод: хватит радоваться высокому проценту успешных запросов, ведь половина из них может быть лажей. Если хочешь доверять отчётам нейросети — забудь про «голые промпты» и строй слой онтологий. Либо ты заставишь модель сверяться со словарем бизнеса перед каждым действием, либо будешь принимать стратегические решения на основе уверенно сгенерированного бреда.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с