Блог • AI / JSON Schema

Структура данных за ИИ iPhone 18: как Apple Intelligence, App Actions и JSON Schema соединяются

Действие ИИ на iPhone 18 доходит до приложения через JSON Schema, выровненный с параметрами Intent, а не через абзац о продукте. Системная модель предлагает поля. @Parameter объявляет, что приложение может принять. Схема между ними: объект, который не совпал, в действие не входит.

Продуктовый рассказ — в почему iPhone 18 больше, чем железо. Как одна команда идёт от фразы к API — в пути данных App Actions. Здесь только поля: как типы соответствуют и какие значения нужно отклонить.

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

Как соединяются три стороны

Значения, которые принимает приложение, записаны как параметры Intent. См. Добавление параметров к app intent. Модель может предложить JSON-объект. Список полей она переписать не может.

  1. 1
    Система предлагает кандидата

    Модель на устройстве или команда заполняет объект: имя действия, количество, способ получения, id товара. Это кандидат, а не уже выполненный вызов.

  2. 2
    Приложение объявляет типы

    Каждый параметр — строка, целое, фиксированное перечисление или сущность, которую нужно разрешить. Необязательные параметры не входят в required.

  3. 3
    Схема решает, пропускать ли дальше

    Кандидат проходит вашу схему до записи в Intent. При ошибке он останавливается на проверке. Действие не выполняется, API не вызывается.

Как типы совпадают

App IntentJSON SchemaЧто вы храните
Строка, целоеstring / integerКоличество и заметку оставляйте в исходных типах. Не превращайте всё в строки
AppEnumenumТолько значения времени компиляции, например pickup и delivery. Текст показа — не значение enum.
AppEntitystring + minLengthПринимайте только непустой id. Имя остаётся в интерфейсе и не является ключом проверки.
Необязательный параметрНе включайте в required. Если его нет, это всё ещё верно. Отсутствие обязательного поля — ошибка.

Ключи вне списка полей отклоняет additionalProperties: false. Лишние note или user от модели всё равно не входят в действие.

Схема, которую можно вставить в проверку

Схема ниже соответствует одному действию заказа: фиксированное имя intent плюс id товара, количество и способ получения. Это ваш контракт, а не сетевой формат Apple.

JSON Schema параметров действия. intent закреплён через const.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": ["intent", "parameters"],
  "properties": {
    "intent": { "const": "StartOrder" },
    "parameters": {
      "type": "object",
      "additionalProperties": false,
      "required": ["item_id", "quantity", "fulfillment"],
      "properties": {
        "item_id": { "type": "string", "minLength": 1 },
        "quantity": { "type": "integer", "minimum": 1 },
        "fulfillment": { "enum": ["pickup", "delivery"] }
      }
    }
  }
}
Один кандидат, который проходит схему выше. fulfillment должен быть значением из enum.
{
  "intent": "StartOrder",
  "parameters": {
    "item_id": "sku_42",
    "quantity": 1,
    "fulfillment": "pickup"
  }
}

Способ получения естественным языком или пустой item_id не проходят. Только прошедший объект идёт по пути выполнения из предыдущей статьи.

Четыре формы, которые должны не пройти

Что появилось в кандидатеПочему это ошибка
Лишние note или raw_textБлокирует additionalProperties
fulfillment написан прозойНет в enum
item_id — пустая строкаНе проходит minLength
quantity равен 0 или дробиНиже minimum

Почему выходу модели сначала нужна схема, написано в зачем ИИ нужен JSON Schema. Эта статья присоединяет тот список к параметрам действия приложения.

Чем это отличается от двух других статей

Продуктовый рассказ про iPhone 18Путь одной командыЭта статья
ВопросПочему функции больше, чем железоКак фраза доходит до APIКакие поля могут войти в это действие
Не ищите здесьЕщё один анонсЕщё раз пять шагов от речи к серверуОтображаемое имя вместо id сущности

Сверить список полей в JSONNote

  1. 1
    Вставить схему

    Вставьте схему выше в JSON Schema. Убедитесь, что intent — const, а fulfillment — enum.

  2. 2
    Прогнать одного кандидата

    Через проверку JSON вставьте кандидата. Пустой id, лишнее поле и неверный enum должны не пройти.

  3. 3
    Сравнить после правки полей

    Через JSON Diff посмотрите, не пропал ли item_id из required. Потеря одного обязательного поля опаснее, чем правка фразы.

Вопросы

JSON Schema — это формат запроса Apple?

Нет. Apple описывает действие типами параметров App Intent. Схема — ваша проверка между выходом модели и perform(). Если не совпало, действие не вызывайте.

Почему поле сущности не может быть названием товара?

Названия меняются и совпадают. Ключ AppEntity — стабильный id. Схема требует для него непустую строку. Название только для показа.

Нужно ли писать необязательный параметр в схему?

В properties — да. В required — нет. Если его нет, это всё ещё верно. Если он есть, он должен совпасть с типом.

Можно ли выполнять действие, как только проверка прошла?

Ещё нет. Схема доказывает только форму. id сущности всё ещё должен разрешиться. Верная форма без объекта — не заказ.

Это та же статья, что и зачем ИИ нужен JSON Schema?

Нет. Та объясняет, зачем выходу модели нужна форма. Эта выравнивает форму с параметрами действия приложения. Лишний ключ или неверный enum — отказ.

Итог

Apple Intelligence и действие приложения встречаются на одних полях: имя действия, типы, перечисления и id сущности. JSON Schema превращает этот список в проверку, которая может не пройти.

Прямой вывод: сначала выровняйте типы параметров со схемой. Лишние ключи отклоняйте. Для сущности принимайте только id. Непрошедшая проверка в действие не входит.

Дальше: добейтесь, чтобы схема параметров действия проходила, затем подключите её к Intent.

Назад в блог