Блог • AI / JSON Schema
Структура данных за ИИ iPhone 18: как Apple Intelligence, App Actions и JSON Schema соединяются
Действие ИИ на iPhone 18 доходит до приложения через JSON Schema, выровненный с параметрами Intent, а не через абзац о продукте. Системная модель предлагает поля. @Parameter объявляет, что приложение может принять. Схема между ними: объект, который не совпал, в действие не входит.
Продуктовый рассказ — в почему iPhone 18 больше, чем железо. Как одна команда идёт от фразы к API — в пути данных App Actions. Здесь только поля: как типы соответствуют и какие значения нужно отклонить.
- Параметры Intent — типовой контракт приложения
- JSON Schema — тот же список полей, чтобы остановить выход модели
- AppEnum соответствует enum. AppEntity принимает id, а не отображаемое имя
- При additionalProperties false лишний ключ сразу не проходит
Сначала запомните: Схема — не ещё одно описание фразы. Она отвечает только, можно ли отдать этот объект этому действию. Дальше: кто объявляет поля, соответствие типов, одна схема, четыре отказа.
Как соединяются три стороны
Значения, которые принимает приложение, записаны как параметры Intent. См. Добавление параметров к app intent. Модель может предложить JSON-объект. Список полей она переписать не может.
- 1Система предлагает кандидата
Модель на устройстве или команда заполняет объект: имя действия, количество, способ получения, id товара. Это кандидат, а не уже выполненный вызов.
- 2Приложение объявляет типы
Каждый параметр — строка, целое, фиксированное перечисление или сущность, которую нужно разрешить. Необязательные параметры не входят в required.
- 3Схема решает, пропускать ли дальше
Кандидат проходит вашу схему до записи в Intent. При ошибке он останавливается на проверке. Действие не выполняется, API не вызывается.
Как типы совпадают
| App Intent | JSON Schema | Что вы храните |
|---|---|---|
| Строка, целое | string / integer | Количество и заметку оставляйте в исходных типах. Не превращайте всё в строки |
AppEnum | enum | Только значения времени компиляции, например pickup и delivery. Текст показа — не значение enum. |
AppEntity | string + minLength | Принимайте только непустой id. Имя остаётся в интерфейсе и не является ключом проверки. |
| Необязательный параметр | Не включайте в required | . Если его нет, это всё ещё верно. Отсутствие обязательного поля — ошибка. |
Ключи вне списка полей отклоняет additionalProperties: false. Лишние note или user от модели всё равно не входят в действие.
Схема, которую можно вставить в проверку
Схема ниже соответствует одному действию заказа: фиксированное имя intent плюс id товара, количество и способ получения. Это ваш контракт, а не сетевой формат Apple.
{
"$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"] }
}
}
}
}
{
"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Вставить схему
Вставьте схему выше в JSON Schema. Убедитесь, что intent — const, а fulfillment — enum.
- 2Прогнать одного кандидата
Через проверку JSON вставьте кандидата. Пустой id, лишнее поле и неверный enum должны не пройти.
- 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.