ИИ-генерация схемы — документация Entity Enricher

ИИ-генерация схемы

Генерируйте структурированные JSON-схемы из образца данных с помощью ИИ, с автоматической самокоррекцией и интеллектуальной постобработкой.

Как это работает

Генерация схемы превращает необработанные данные сущности в типизированную аннотированную JSON-схему, которая точно определяет, какую информацию извлекать в ходе обогащения. Вместо того чтобы писать схемы вручную, вы вставляете образец JSON и позволяете ИИ проанализировать структуру, определить типы, назначить области экспертизы и предложить улучшения.

Конвейер генерации

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

  1. Канонизация образца (без LLM) — значение с собственной единицей измерения превращается в число с единицей в имени ("8.275 h" становится half_life_seconds: 29790), а дата, которую не вмещает ни один встроенный тип, — в целочисленный год. Каждое встреченное значение должно подтвердить это, иначе свойство остаётся текстом. Сохраняется именно переписанный образец.
  2. Разграничение идентичности — один вызов, выполняемый раньше всех остальных, потому что он последний, кому разрешено менять ваш образец. Если элемент связанного массива смешивает факты о самой сущности с фактами о её связи с родителем, элемент перестраивается: факты о связи остаются на месте, а собственные факты сущности вкладываются в именованный подобъект. Без этого оба вида фактов делят одну идентичность.
  3. Построение каркаса (без LLM) — дерево свойств, типы JSON и допустимость null берутся прямо из образца (или образцов); повторяющиеся структуры и элементы массивов, похожие на сущности, становятся переиспользуемыми определениями. Локализованные объекты (например, {"en": "...", "fr": "..."}) сворачиваются в одно многоязычное значение.
  4. Задайте параллельные вопросы — отдельные одновременные запросы определяют идентичность и наименование сущности, поведенческие флаги (ключ, сохранение, многоязычность, допустимость null, а также предложения по формату), действительно ли целочисленные поля дискретны, какие строки берутся из закрытого словаря и как свойства распределяются по областям экспертизы.
  5. Написание документации — по одному вызову на экспертную область, в роли специалиста этой области, с описанием и примерами для каждого свойства — а также с собственным вторым мнением о том, может ли значение действительно отсутствовать.
  6. Сборка, проверка, сохранение (без LLM) — фрагменты объединяются, 8 правил валидации срабатывают как страховка, детерминированная постобработка устраняет конфликты флагов, и схема сохраняется — с дедупликацией по хешу содержимого, поэтому одинаковые схемы не дублируются.

Каждый шаг повторяется самостоятельно (3 попытки), и его ответы накапливаются между попытками, поэтому модель, отвечающая фрагментами, всё равно сходится к результату. После этого шаг принимает то, что получил, а пропуски заполняются детерминированно — слабая модель ухудшает описания, но не срывает генерацию. Прервать весь запуск могут только идентификация и маршрутизация по домену экспертизы. Каждый вызов тарифицируется и логируется как отдельный промпт, поэтому запись показывает, на что именно и сколько было потрачено.

Вместо одного образца вы можете передать несколько образцов сущности одного типа — тогда схема охватывает объединение их полей, всё, что отсутствует в каком-либо образце, становится допускающим null, а встречающиеся в них значения превращаются в реальные примеры. Имена полей должны совпадать: образцы, описывающие сущности разных типов, отклоняются, как и объекты внутри массива, не имеющие ни одного общего поля, поскольку тогда не останется ничего, что позволяло бы идентифицировать их строки. Редактор образцов укажет на любое такое расхождение до того, как вы потратите генерацию.

Значения, содержащие собственную единицу измерения, преобразуются в числа до вывода схемы, поскольку столбец из "8.275 h" и "85 ms" нельзя отсортировать, отфильтровать по диапазону или агрегировать. Единица измерения переносится в имя свойства (half_life_seconds), нечисловая замена вроде "stable" становится null, а даты ранее 1 года превращаются в целочисленный год (отрицательный для дат до н. э.), который не способен хранить ни один тип даты и который текст сортирует неправильно. Панель образца обновляется соответствующим образом, поэтому всегда показывает образец, описываемый схемой. Всё, что преобразование не может прочитать с уверенностью, остаётся точно таким, каким вы его написали.

Самокоррекция, шаг за шагом

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

Пример: этап флагов на 30 свойствах

Попытка 1Модель отвечает по 22 из них и разбивает ответ на несколько вызовов инструментов — частый сбой у небольших моделей. Все 22 сохраняются.
ПовторитьПовторный запрос касается только 8 оставшихся свойств — вопрос короче, и на него с большей вероятностью ответят целиком.
Попытка 2Приходят ещё 6. Последние 2 откатываются к детерминированным значениям по умолчанию, а нехватка фиксируется в записи о генерации, а не приводит к её сбою.

Восемь правил валидации по-прежнему применяются к собранной схеме как финальная проверка: корректность типов, назначение областей экспертизы, целостность ссылок, полнота. На этом этапе они служат страховкой, а не механизмом исправления. Подробнее о каждом правиле — в руководстве Правила валидации.

Что содержит схема

Сгенерированная схема — это больше, чем простое определение типов. Каждое свойство включает метаданные, которые направляют процесс обогащения:

Тип

Тип схемы JSON (string, number, integer, boolean, array, object)

Описание

Контекстное описание, которое указывает ИИ, какую информацию искать

Экспертиза

Какая экспертная область (финансовая, нормативная и т. д.) предоставляет это значение

Ключ

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

Закрытый словарь

Если значения строки берутся из небольшого, полностью перечислимого набора (статусы, оценки, коды классификации), генерация предлагает его элементы — в том написании, которое используется в ваших образцах, — чтобы обогащение не соскользнуло к синониму

Допускает null

Может ли поле быть null — поля, не допускающие null, обязательны для внесения в базу данных

Многоязычный

Должно ли поле обогащаться на нескольких языках

Сохранить

Оставить ли исходное значение без изменений во время обогащения

Примеры

Реалистичные примеры значений, которые направляют ИИ к правильному формату

Формат / Шаблон

Машинно проверяемая форма строковых значений: некорректные ответы отклоняются и запрашиваются заново, а сохранённые значения приводятся к канонической форме. Генерация назначает только тот именованный формат (date, time, date-time, uuid, email, uri, ipv4, ipv6), который подтверждён образцами: регулярное выражение — это предсказание о значениях, которых ещё никто не видел, и ошибочное выражение сломает каждое обогащение поля, поэтому его вы добавляете сами в редакторе

Определение области экспертизы

ИИ группирует свойства схемы по областям экспертизы на основе их семантического значения. Например, схема фармацевтической компании может иметь такие области, как «Финансовый аналитик», «Эксперт по нормативным вопросам» и «Корпоративная информация». Эти области используются стратегией мульти-экспертизы для выполнения параллельных специализированных вызовов LLM ради более глубоких результатов.

Ограничения на количество областей

Количество областей экспертизы автоматически ограничивается на основе числа свойств ваших данных, чтобы предотвратить чрезмерное дробление:

5 свойств
1 домен
12 свойств
2 области
30 свойств
5 областей
60 свойств
10 доменов

Постобработка

После сборки фрагментов детерминированные шаги решают всё, что не следует оставлять модели, — опираясь на ваши фактические входные данные:

Расширение типа до nullable

Поле, отсутствующее или равное null хотя бы в одном образце, становится обнуляемым независимо от ответа модели, поэтому неизвестное значение — это допустимый ответ, а не сбой качества данных. Образцы могут только расширять: несколько образцов доказывают наличие поля лишь для этих экземпляров, но никогда — для всех экземпляров типа; поэтому модель тоже голосует, и оба результата объединяются по ИЛИ.

Разрешение конфликтов флагов

Несовместимые атрибуты согласуются по правилам, а не повторным запросом: preserve побеждает multilingual и nullable, сохранившийся закрытый словарь снимает multilingual, а ключевое свойство никогда не сохраняет enum.

Восстановление ключей элементов массива

Для каждого объекта внутри массива гарантируется хотя бы одно ключевое свойство — именно по нему слияние выполняет дедупликацию, поэтому элемент массива без ключа сделал бы объединение ответов двух моделей невозможным.

Коллекция экспертиз

Все уникальные области экспертизы собираются из схемы для метрик и настройки стратегии.

Язык, на котором написана схема

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

Генерация самих примеров

Чтобы начать, примеры данных не нужны. Опишите тип сущности — при желании приложите документы как основу или включите веб-поиск для сверки с реальностью, — и платформа сама составит примеры. Запросите несколько — и получите несколько разных экземпляров, а не один и тот же в других формулировках.

Все экземпляры выбираются сразу

Первый образец в том же запросе определяет и то, о ком будут остальные. Если N раз независимо просить «пример», вы стабильно получите один и тот же известный экземпляр N раз; именно перечисление всего состава заранее делает образцы разными.

Первый образец задаёт структуру

Остальные образцы генерируются параллельно по структуре образца 1 как по контракту, а не просто с просьбой ей соответствовать, — поэтому вариант не может переименовать, добавить или убрать поле. Те, что всё же вернулись дублирующимися или некорректными, запрашиваются заново в ограниченной волне повторов, и если полное количество не достигнуто, вам об этом сообщат, а не молча выдадут меньше.

Язык и ваши собственные инструкции

По умолчанию язык — auto: он определяется по словам вашего запроса, а затем по приложенному документу. Добавленные вами дополнительные инструкции обязательны к исполнению: они либо выполняются, либо ответ сообщает, что именно и почему выполнить не удалось, — но никогда не отбрасываются молча.

Проверка неоднозначности

Прочитайте имя свойства в контексте родительского объекта и сосчитайте, сколько разных вещей оно может запрашивать. Одна — значит, всё ясно. Две или больше — и каждая модель остановится на своей, так что в колонке смешаются ответы на разные вопросы: annual_revenue у компании может относиться к группе или к самой сущности, быть валовой или чистой, в одной из нескольких валют. Ни одной — имя того, чего у этого родителя попросту нет, — ещё хуже: искать нечего, и модель выдумывает значение.

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

Отмеченные свойства получают значок «неоднозначно» в редакторе рабочих процессов со списком прочтений, которые допускает имя. Как только схема запущена, средством исправления становится переписанное описание: оно закрепляет одно значение, не нарушая контракт данных. Полный набор критериев и способов исправления см. в руководстве Проверка неоднозначности.

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

ИИ-редактирование схемы

После генерации вы можете изменять схемы с помощью инструкций на естественном языке. Введите команду, и ИИ применит изменение, сохраняя существующую структуру схемы. Каждое редактирование также создаёт 5 рекомендаций по дальнейшим улучшениям.

Примеры команд редактирования

Добавить целочисленное поле employee_count
Создать вложенный объект адреса с городом и страной
Добавить французские описания ко всем текстовым полям
Определите ссылку на материнскую компанию с помощью $defs
Отметьте поле веб-сайта как допускающее null

Правки ИИ проверяются с помощью части правил генерации (проверка типов, целостность ссылок, согласованность экспертизы) без сравнения с входными данными, поскольку вы можете намеренно добавлять или удалять поля.

Предложения ИИ

И генерация схемы, и редактирование с помощью ИИ дают 5 целевых предложений, охватывающих разные категории улучшений:

Полнота данныхОтсутствующие поля, которые могли бы обогатить вашу сущность
Качество данныхЗакрытые словари, допустимость null, исправления типов
СвязиВложенные структуры, ссылки на сущности через $defs
ИнтернационализацияМногоязычные переводы, поддержка локалей
Бизнес-контекстПоля, специфичные для области, и группировки по экспертным областям

Предложения появляются в виде кликабельных чипов в Workflow Editor — нажмите на один из них, чтобы автоматически заполнить поле AI-правки и применить её.

Дальнейшие шаги