|
Professor Seleznov
|
 Хабр, привет! Меня зовут Андрей Вихров, я создавал аналитические системы и внедрял data governance (DG) в крупных компаниях больше 15 лет, а сейчас занимаюсь метаданными в Data Office МТС. Тема порядка в данных для меня не нова, а какие выгоды можно извлечь из нее сегодня — стоит отдельного рассказа. В компании накоплен огромный массив данных — только в дата-каталоге зарегистрировано более 500 тысяч таблиц. С ними ежедневно работают сотни специалистов: от продуктовых аналитиков до инженеров данных, строящих витрины для ML-моделей. Но в каталоге описаны в основном таблицы — их назначение, поля, владельцы, а вот терминов и тем более их связей на порядок меньше. И это объяснимо: формировать термины сложнее, в производственный процесс они вписываются с трудом, а польза от них неочевидна. Поэтому каталог чаще всего помогает находить описания по уже известной таблице, но не ответы на конкретные бизнес-запросы. С ними аналитику всё равно приходится разбираться самому, изучая материалы и консультируясь с коллегами, что отнимает много времени. Логичный выход — автоматизировать процесс. Но если опытный аналитик справляется (рано или поздно) с задачей в существующих условиях, то ИИ-агент этого сделать уже не сможет, поскольку опирается только на метаданные. В нашем случае сложились два фактора. За годы работы над DG мы накопили экспертизу в описании и структурировании метаданных. А появление LLM дало возможность создавать семантические слои на промышленной основе и использовать их для ответа на вопросы пользователей. Объединив одно с другим, мы создали и пилотируем систему Метан (метаданные + аналитика). Метан состоит из двух компонентов:
- Метан-тулкита, полуавтоматически строящего AI-ready метаданные.
- Метан-чата, который на их основе основе работает как интеллектуальный интерфейс к данным: понимает вопросы, подбирает источники, генерирует SQL и объясняет свои решения.
По сути, с его помощью метаданные становятся новыми данными — активом, приносящим осязаемую выгоду. Дальше расскажу, как устроен основанный на них Метан и что уже получилось. Архитектура — знания поверх данных Основа концепции Метана — разделение семантического слоя описания данных на два уровня:
- уровень знаний (онтология): сущности, их дата-элементы и связи. «Количество уникальных абонентов», «название приложения», «дата начала периода» — элементы с определениями, типами, синонимами, примерами значений. Мы называем их «объектами онтологии» или «терминами», далее в тексте используются оба варианта.
- уровень данных (физика): таблицы и поля. Один дата-элемент может быть реализован в нескольких таблицах с разной гранулярностью и глубиной хранения.
Разделение логического и физического уровней описания данных — идея не новая. Метан развивает её, используя сильные стороны каждого уровня как при создании метаданных, так и при навигации по ним. Механика поиска — что, где, как Поскольку пользователь мыслит объектами онтологии, агент следует той же логике: сначала находит нужные термины, затем подбирает лучшую физическую реализацию. В метан-чате это происходит в интерактивном диалоге, состоящем из трех этапов: «Что?», «Где?», «Как?».

Работа Метан-чата на основе двухуровневого семантического слоя Рассмотрим на примере поиска данных по Kion: 1. «Что?». Агент анализирует запрос и определяет, какие объекты онтологии упоминаются. В нашем случае он находит три термина и предлагает подтвердить понимание сути запроса:

Шаг 1. Поиск терминов На этом этапе пользователь может задать дополнительные вопросы про предложенные термины (он же находится на уровне знаний), и на основе ответов попросить другие варианты. 2. «Где?». Зная нужные термины, агент подбирает соответствующие таблицы и ранжирует их:

Шаг 2. Выбор таблиц (имена таблиц заменены) Можно согласиться или попросить подробнее рассказать об альтернативах и выбрать одну из них. 3. «Как?». Ориентируясь на выбранную таблицу агент генерирует SQL с комментариями: какие допущения сделаны, какие фильтры добавлены и почему.

Шаг 3. Построение SQL. Фильтрregion = 'GLOB' взят из бизнес-правил таблицы На каждом этапе агент объясняет свои решения, а пользователь может его направлять — скорректировать набор терминов, выбрать другую таблицу, уточнить условия. В итоге он получает не просто SQL, а управляет процессом его создания. По обратной связи мы видим что такой UX очень нравится пользователям. А еще на каждом из этапов используется наиболее подходящая технология поиска: семантическое сопоставление для терминов, графовый поиск для навигации по связям, LLM для генерации и ранжирования. Как устроен семантический слой AIMeta AIMeta (семантический слой Метана) описывает предметную область на четырех уровнях: продукт (общие правила), термины (суть данных), таблицы (гранулярность, периодичность, сочетание полей) и поля (маппинг на термины). Структура AIMeta задается с помощью манифеста — YAML-шаблона, который определяет иерархию объектов и правила их описания. Вот выжимка из структуры манифеста:
products: - product_name: "Customer App Tracker" product_descr: "Описание продукта, сущности, особенности данных" terms: - term_name: "Количество уникальных абонентов" term_type: "Measure" parent_term: "Пользовательская сессия" # тип - "Fact" synonyms: [...] term_rules: "Правила использования в SQL-запросах" term_descr: "Определение, использование, сэмплы, особенности" tables: - table_name: "agg_application_sessions_m" granularity: "Время: month | Аналитика: приложение x абонент" table_descr: "Назначение, обновление, глубина, особенности" table_rules: "Правила использования в SQL-запросах" fields: - field_name: "msisdn_count" term_id: "<ссылка на термин>" # Связь слоя данных со слоем знаний
Типизация: встроили правила в структуру Один из ключевых механизмов — типизация. Вот как она работает:
- Каждый объект онтологии имеет тип, который определяет правила работы с ним как при сборке AIMeta, так и при её использовании.
- Сущности делятся на Fact (события), Masterdata (объекты) и Dictionary (классификаторы), а их дата-элементы на Key, Timekey (темпоральный ключ), Title, Measure и Attribute.
- Каждый тип содержит правила, которые агент применяет автоматически. Например, встретив Measure msisdn_count агент понимает, что нужна агрегация через SUM, а встретив Timekey period_start_dt у факта — фильтрует по периоду.
Единожды описав правила работы с типом дата-элемента, мы обеспечиваем их применение во всех таблицах и разных слоях хранилища, где есть этот тип. При подключении новой предметной области достаточно описать онтологию с правильными типами, а детали можно добавить в описание отдельных элементов. Описание: нашли компромисс между AI и каталогом Описание следует структуре MD-шаблона, на примере термина это разделы ## Определение, ## Использование, ## Сэмплы, ## Особенности. Такой чёткий формат LLM парсит без ошибок, причем основное описание умещается в одно текстовое поле, которое можно совместить с существующим дата-каталогом, что важно для актуализации описаний. При этом часть ключевых атрибутов (например, бизнес-правила, синонимы, тип) выносятся в отдельные поля для нативного машинного доступа. Полуавтоматическая генерация AIMeta Создать семантический слой вручную для сотен и тысяч таблиц нереально. Поэтому на помощь приходит полуавтоматическая генерация, которая позволяет Метан-тулкиту переработать разнородные материалы в сжатый и структурированный вид.

Генерация семантического слоя AIMeta в Метан-тулкит Готовим материалы Для создания AIMeta мы собираем все, что содержит знания о данных: Confluence-страницы продуктов, дата-каталог, справочники значений, lineage, логи SQL-запросов и задачи аналитиков. Для разных продуктов доступны разные источники. Отдельный этап подготовки — обработка логов запросов по скоупу таблиц. На выходе получается:
- Дистиллят запросов —полезная метаинформация, извлеченная из всего массива SQL: алиасы, джойны, литералы (текстовые условия), востребованность полей.
- Golden set — топ-30 популярных типов SQL-запросов и созданные на их основе запросы на естественном языке. Для создания такого сета запросы предварительно типизируются.
Из материалов создаем AIMeta Разнородные источники пропускаются через LLM-агент, который, руководствуясь манифестом, извлекает нужные фрагменты и располагает их в целевой структуре. Подготовка проходит в пять шагов:
- Создание онтологии — LLM-агент формирует сущности, дата-элементы и связи.
- Маппинг на слой данных — термины привязываются к полям таблиц, создаются недостающие термины.
- Описание —генерируется базовое описание терминов и таблиц.
- Обогащение — добавляются синонимы, примеры значений, правила использования. На этом шаге активно активно используется подготовленный ранее дистиллят запросов.
- Проверка — прогоняется набор базовых тестов с автофиксами: на полноту, синтаксис и тому подобное.
Результат визуализируется для ревью инженером. На каждом шаге человек также может вмешиваться, но только для точечных корректировок, что принципиально проще написания всего с нуля. Результат тестируем и тюним на основе тестов Качество тестируется на golden set. Агент генерирует свой SQL для каждого вопроса, после чего сравнивает результат с эталоном. Основная метрика — доля полей в сгенерированном SQL (разделы SELECT и WHERE), совпавших с эталонным запросом, аналог метрики "recall". Сейчас на пилотных областях ее уровень составляет порядка 90%. Не менее важна детальная аналитика отклонений. Мы анализируем ошибки на двух уровнях и соответственно формируем реестр доработок описания онтологии или описание данных. Такие доработки также в значительной степени генерируются автоматически и добавляются в пайплайн создания AIMeta. Есть ли подводные камни? Когда мы рассказываем о Метане, слушатели часто высказывают естественные опасения. Они отражают реальные подводные камни, но для каждого мы нашли решение, подробнее ниже.
| Проблема |
Решение |
| LM это дорого |
> Разные модели для разных задач. Фронтирные модели используются для формирования онтологии и установления связей, лёгкие - для обогащения описаний и извлечения фактов, средние - для работы чата с пользователем. В результате сложилась ставка описания "один рубль за поле таблицы". |
| LLM галлюцинирует |
> Ограничение на работу только с AIMeta и нулевая температура Сейчас большинство остающихся ошибок связано с неточным описанием, галлюцинации единичны. |
| LLM утонет в потоке информации |
> Порционное приготовление. Мы готовим AIMeta порциями по продуктам, а у крупных продуктов - по функциональным областям. Это позволяет помещать всю необходимую информацию в контекстное окно и иметь возможность оценить результат. |
| На Сonfluence много мусора |
> Структурирование, лимитирование размера, механизм корректировок. Грубые ошибки корректируются тюнингом по golden set, более тонкие - экспертной корректировкой на описаниях через UI. Достигнутая точность ответов показывает что проблема в основном решена, но здесь еще есть куда расти. |
| Термины привяжутся не туда |
> Фокус на точность привязки в ущерб дедупликации. Стратегия работает потому что ложная привязка искажает SQL, а дубль термина - нет. Плюс дубли терминов можно постепенно мёрджить в рамках процедур дедупликации. |
При дальнейшем расширении могут появиться и другие сложности, например кросс-доменные запросы, обработка обновлений - но в рамках нашего подхода мы оцениваем их как вполне решаемые. Как Метан меняет работу людей У дата-стюардов функционал сдвигается к контекст-инжинирингу Автоматизация не убирает человека из процесса подготовки метаданных, но сдвигает фокус с создания описаний с нуля к управлению тем, как понимает данные ИИ. Такую роль можно назвать «контекст-инженер» или «инженер по семантике». Он подбирает и комбинирует источники знаний для генерации AIMeta, оценивает результаты автотестов и направляет доработку, решает нестандартные задачи на стыке предметных областей. Если дата-стюард отвечает за корректность метаданных, то контекст-инженер — за то, чтобы агент на основе этих метаданных принимал верные решения, причем количественно измеряемые на тестах. У аналитиков появляется прозрачность процесса Помимо удобной функциональности превращения вопроса в SQL, аналитики получают прозрачность процесса с двойным контролем:
- Результат запроса контролируется через трехшаговый процесс, с возможностью корректировки на каждом шаге и пояснениями со стороны агента
- Контекст контролируется через знакомую структуру описания объектов онтологии (терминов), с возможностью точечно уточнять описания
Вместо заключения В индустрии продолжается дискуссия: заменит ли ИИ традиционный data governance? Не станут ли ненужными каталоги и глоссарии, если модель может разобраться сама? На нашем примере можно убедиться в обратном. LLM не заменит data governance, а сделает его работу еще полезнее. Полуавтоматическая генерация позволит создавать описания в разы быстрее, а агент будет подсказывать, где их не хватает, — через ошибки в тестах и уточняющие вопросы пользователей. Чем точнее описания, тем лучше будет работать агент. А чем лучше работает агент, тем выше будет мотивация поддерживать эти описания. Кажется, именно этого сейчас не хватает классическому data governance. Буду рад вопросам и обсуждению в комментариях. Особенно интересен опыт коллег, которые строят семантические слои для Text2SQL — с какими проблемами столкнулись, какие подходы сработали?
Что взяли из существующих решений
При поиске готовых решений мы не встречали вариантов с аналогичной архитектурой, но идея семантической навигации по данным развивается активно. Существующие подходы решают свои задачи, но сложно применимы к нашей реальности - сотни широких денормализованных витрин в legacy-хранилище, где одни и те же дата-элементы переиспользуются в разных слоях и разных продуктах.
Мы поделили существующие решения на три основных класса, в каждом из них нашлись идеи, которые мы смогли применить у себя:
- Text2SQL (Vanna.ai, DAIL-SQL) работают с DDL и few-shot примерами. На компактных схемах они показывают хорошие результаты, но на широких витринах страдают от комбинаторного взрыва, а примеры приходится поддерживать вручную. Мы взяли идею примеров, но используем их не как few-shot для модели, а как сырье для обогащения онтологии и формирования golden set тестов.
- Метрические слои (MetricFlow, Cube) строятся вокруг ручного проектирования метрик и измерений поверх таблиц. Требуют хорошо структурированных данных и значительных ресурсов на поддержку. Мы взяли идею состава объектов семантического слоя и структуризации сущностей.
- Онтологические платформы (Palantir Foundry, MS Fabric IQ) идеологически ближе всего — в них онтология используется как первоклассная сущность для AI-агентов. Но это экосистемы полного цикла, требующие миграции, а также предполагающие ручное моделирование. Мы взяли фокус на сущностях, но строим онтологию полуавтоматически поверх существующего хранилища.
-Источник
|