AI-разработка

Как Siri AI в iOS 27 вызывает приложения? App Intents, агенты, JSON и автоматизация

Около 15 мин

Пользователь говорит «найди A-1042». Тому, кто пишет JSON, вопрос не в том, умеет ли Siri болтать, а в том, станет ли фраза законным параметром Intent и выполнит ли ваше приложение побочный эффект в perform(). Этот текст разделяет App Intents, AI-агента, данные JSON и автоматическое выполнение.

Перед чтением

Понятие Одной строкой Где живёт
App Intents Действие, которое приложение регистрирует в системе perform() + объект параметров
Siri AI Диспетчер, который заполняет Intent из фразы Только диспетчеризация — без побочных эффектов
AI Agent Многошаговый цикл инструментов: предложить, выполнить, прочитать LanguageModelSession + Intents
JSON Schema Диаметр выполнения для параметров и состояния Исходный файл в репозитории, не сноска Swift

Сначала разделение: Siri доставляет объект, App Intents — дверь, агент — цикл, Schema — ворота перед execute. Сплющить четвёрку в «Siri открыла приложение» — и следующий шаг будет парсить прозу.

Сначала правильно спросить про «вызов приложения»

Сентябрь 2026. iOS 27 уже идёт с линейкой iPhone 18. Программный диаметр задан на WWDC 2026: Siri пересобрана на LLM, SiriKit устарел, вход для третьих сторон — только App Intents. насколько силён ИИ iPhone 18 спрашивал, насколько силён стек. Этот текст спрашивает одно — как Siri вызывает ваше приложение.

Если «вызвать приложение» значит «открыть интерфейс и прочитать абзац», вы спроектируете не то. Система слышит фразу, выбирает имя Intent, заполняет объект параметров и отдаёт его хост-perform(). Интерфейс может остаться закрытым.

  • Пользователь говорит на естественном языке. Система должна отдать объект.
  • Siri — диспетчер. Поиск заказа, возврат и почта по-прежнему в вашем приложении.
  • Многошаговая автоматизация — не ещё одно окно чата. Это несколько законных вызовов Intent.

Поэтому гид идёт по пути выполнения: дверь → параметры → цикл агента → ворота Schema → Shortcuts / Spotlight. На каждом шаге один вопрос: объект законен?

Цепочка вызова: как фраза становится perform()

Старая Siri сопоставляла фразы и SiriKit. Новая Siri заполняет слоты: «A-1042», «верни это», «верни, если оплачено» становятся полями и попадают в уже зарегистрированный Intent.

Успешный вызов проходит минимум четыре шага:

  1. Услышать. На устройстве или в Private Cloud Compute речь / текст становятся намерением — не журналом чата.
  2. Выбрать кого. Система берёт имя из видимых App Intents. Нет регистрации — нет очереди.
  3. Заполнить. Сущности, виды на экране и индекс Spotlight сжимаются в объект параметров.
  4. Хост выполняет. Ваш perform() делает побочный эффект и возвращает структурированный результат.

В JSON шаг LookupOrder выглядит примерно так:

{
  "intent": "LookupOrder",
  "app": "com.example.shop",
  "source": "siri",
  "parameters": {
    "order_id": "A-1042"
  }
}

source может быть siri, shortcut, spotlight или agent. Разные двери — одна форма объекта. Открыть UI — это представление, не сам вызов.

App Intents: единственная дверь, которую видит новая Siri

После WWDC 2026 новая Siri не видит приложение, которое не говорит на App Intents. У SiriKit есть окно миграции на два-три года, но новые возможности садятся только на Intents. Фразы пробуждения, свой словарь и старые файлы intent definition больше не главный путь.

Для системы Intent — диспетчеризуемый инструмент: имя, типы параметров, нужна ли подтверждение, открывается ли UI, к какой области относится. Siri, Shortcuts, Spotlight и агент на устройстве делят один каталог.

  • Intent Schema: системные области (задачи, фото, связь, коммерция). Совпасть с областью — и Siri не нужна ваша замороженная фраза.
  • Entity Schema: заказы, контакты и файлы попадают в семантический индекс Spotlight; личный контекст возвращается с атрибуцией.
  • View Annotations: пометить видимый View как сущность, чтобы у «верни вот это» было к чему привязаться — без второго вопроса про ID.
  • App Intents Testing: гонять Siri / Shortcuts / Spotlight по настоящим системным путям. Тестируете объекты, не слоганы.

Вы пишете AppIntent на Swift; система видит вызываемое описание. полный гид по AI Agent рисует «модель предлагает, хост выполняет». На iOS предложение часто приходит от Siri; выполнение всегда в вашем perform().

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

Параметры — объект JSON, а не фраза пробуждения

Старый путь считал естественный язык строкой поиска. Новый путь считает его заполнением формы. Если поле лежит прозой, perform() парсит снова — преимущество диспетчеризации потеряно.

У каждого Intent должен быть JSON Schema. Тип Swift — проекция. @Generable, облачные Structured Outputs, набор оценок и не-Swift-клиенты должны указывать на один источник.

Минимальный контракт LookupOrder может выглядеть так:

{
  "$id": "https://example.com/schemas/intents/lookup-order.json",
  "type": "object",
  "properties": {
    "intent": { "const": "LookupOrder" },
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string", "pattern": "^A-[0-9]{4,}$" }
      },
      "required": ["order_id"],
      "additionalProperties": false
    }
  },
  "required": ["intent", "parameters"]
}

Ключевые слова — в учебник JSON Schema. Короткие имена свойств, жёсткий enum, массивы с maximumCount. зачем ИИ нужен JSON Schema уже писал: Schema — диаметр, а не фраза «пожалуйста, верни JSON».

Ошибочное заполнение Siri, устаревшая сущность или лишний ключ всё равно попадут в вашу функцию. Сжать объявление Intent, затем снова проверить тем же Schema перед execute. Отладка: форматирование, вытащить order_id через извлечение JSONPath, JSON Diff с объектом прошлой недели. Не клеить заказы пользователей на публичный сайт.

AI-агенты: автоматизация — цикл, а не один Intent

Пользователю редко нужен один шаг. «Найди A-1042 и верни, если оплачено» требует сначала LookupOrder, затем решения запустить CreateRefund. Это агент: предложить, выполнить, прочитать, предложить снова.

В стеке Apple цикл живёт в LanguageModelSession. Инструменты часто — App Intents или системные OCR / Spotlight. Каркас совпадает с облачным Function Calling: модель отдаёт имя и аргументы; хост проверяет и выполняет.

  • Каталог по умолчанию — Intent'ы, которые видит система, а не длинный tools[], который вы ведёте сами.
  • Вход и выход каждого шага — объекты. Проза со скриншота не может быть следующим параметром.
  • PCC около 32K. Результаты инструментов съедают окно первыми. Обрезать до сессии.
  • Цепочки между приложениями разрешены. На каждом шаге всё равно нужны законные параметры и своя политика подтверждения.
{
  "agent": "on_device",
  "goal": "refund_if_paid",
  "plan": [
    {
      "step": 1,
      "tool": "LookupOrder",
      "arguments": { "order_id": "A-1042" }
    },
    {
      "step": 2,
      "tool": "CreateRefund",
      "arguments": { "order_id": "A-1042", "reason": "duplicate" }
    }
  ]
}

Минимальный план «верни, если оплачено» похож на блок выше. Модель может предложить шаг 2; хост пропустить нельзя. Если status не paid, amount вне диапазона или нет подтверждения, CreateRefund не должен выполняться. AI-агенты и поток JSON Schema — как выстроить ворота; MCP Tool Schema vs Function Calling — другое написание JSON инструментов. Apple пишет тот же словарь как App Intents.

Не пишите Siri и агент одним словом. Siri решает, кого вызвать. Агент решает, какой инструмент следующий. Оба передают объект как эстафету.

Schema — ворота перед execute, не приложение к документу

Guided Generation останавливает незаконные токены. Авторизацию, лимиты и второе подтверждение она не делает. Параметры, которые заполнила Siri, всё ещё могут потерять поле, взять неверный enum или указать на устаревшую сущность.

Сплющить четыре слоя в «Siri стала умнее» — и роли пропадают. Разделить:

Слой Что делает система Без Schema
Siri AI Превращает фразу в вызов Intent Проза попадает в perform(); побочный эффект стартует
App Intents Регистрирует вызываемые действия в системе Новая Siri вас не видит; старые фразы не спасут
AI Agent Вызывает инструменты несколько шагов в сессии Состояние угадывают из лога чата; следующий шаг вяжет не тот объект
JSON Schema Ничего не делает — это линейка Если линейка живёт только в макросе Swift, облако и CI не измерят

После успешного lookup состояние автоматизации тоже должно быть объектом, а не фразой «нашли»:

{
  "automation": "refund_if_paid",
  "trigger": "siri",
  "state": {
    "order_id": "A-1042",
    "status": "paid",
    "amount": 99.00
  },
  "next": {
    "intent": "CreateRefund",
    "allowed": true
  }
}

allowed должен посчитать хост по Schema и бизнес-правилам. Модель может сказать «предлагаю возврат». Сама писать allowed: true она не имеет права.

Автоматическое выполнение: Shortcuts, Spotlight и между приложениями

Автоматизация в iOS 27 — не другой API. Это разные двери на одном каталоге Intent.

  • Shortcuts — визуальный планировщик. Каждый тайл по-прежнему Intent; каждая передача по-прежнему объект параметров.
  • Spotlight семантический индекс возвращает сущности, не веб-сниппеты. «Тот заказ с прошлой недели» должен разрешиться в order_id.
  • Между приложениями цепочки допустимы, но каждая сторона проверяет свой perform(). Не кормить следующий шаг прозой другой стороны.
  • Разрушительные действия подтверждать. Возврат, удаление, исходящая отправка: объявить политику подтверждения. Вернуть структурированный результат, не одно «OK».

Один и тот же LookupOrder можно сказать вслух, нажать на холсте Shortcuts или взять как инструмент агента. Schema у вас одна.

Если автоматизация упала, сначала смотрите объект: нет required, enum не из списка, сущность устарела. Не начинайте с переписывания фраз пробуждения.

Как выпускать в 2026

  • Держать в репозитории schemas/intents/ и schemas/state/ со стабильным $id и версией.
  • Писать JSON Schema до AppIntent / @Generable. Тип — проекция, не источник.
  • Побочные эффекты (поиск, возврат, почта) — через Intent. Извлечение, сортировка, handoff — через Guided Generation.
  • Новые объекты по умолчанию с additionalProperties: false и явным enum. Для расширения — отдельный metadata.
  • Объявить подтверждение для возврата, удаления и исходящей отправки. Нелегальные параметры — в App Intents Testing, не только счастливый путь.
  • Секреты и пользовательские поля смотреть только в браузере: форматирование, JSON Diff, без загрузки.

Каталог может быть тонким. Важно файлы раньше демо. Формулировки Siri изменятся. Диаметр должен стабилизироваться первым.

Частые ошибки

  • Считать Siri AI ChatGPT. Она доставляет Intent. Побочные эффекты не выполняет и законность параметров не гарантирует.
  • Опираться на фразы пробуждения без App Intents. Новая Siri вас не видит.
  • Не проверять, потому что Siri уже заполнила поля. Пропавшие ключи, плохие enum и устаревшие сущности всё равно доходят до perform().
  • Писать только типы Swift, без JSON-источника. Облачное API, оценки и клиенты на других языках разъедутся.
  • Широкий type: object, чтобы не проектировать. Открытый объект — не ворота. Версионируйте или добавьте явный metadata.

FAQ

Может ли Siri в iOS 27 вызвать моё приложение без App Intents?

Новая Siri — нет. SiriKit ещё в окне миграции, но диспетчеризация на естественном языке, сущности на экране и многошаговые агенты видят только App Intents. Чтобы вас вызвали, зарегистрируйте действие и параметры.

Siri уже заполнила параметры. Всё равно проверять?

Да. Siri — диспетчер. Пропавшие поля, плохие enum и устаревшие сущности всё ещё могут дойти до вашего perform(). Сожмите объявление Intent и ещё раз проверьте тот же Schema перед execute.

Shortcuts и Siri — два API?

Нет. Они читают один каталог Intent. Разница в двери: голос, холст Shortcuts или цикл агента. Форма объекта должна совпадать.

Может ли агент на устройстве сам писать в базу?

Нет. Модель может только предложить имя и аргументы. Смена состояния, возврат и почта должны пройти через хост-perform() и вашу политику подтверждения.

Как смотреть этот JSON локально?

Отформатировать, сверить Schema на пропавший required или плохой enum, затем Diff с последней прошедшей версией. JSONSort делает это в браузере и ничего не загружает. Не клеите заказы и контакты на публичный сайт.

Вывод

В iOS 27 «Siri AI вызывает приложение» — это не открытие чата. Это превратить фразу в законный параметр Intent, дать хосту выполнить и при необходимости войти в многошаговый цикл агента.

App Intents — дверь, агент — цикл, JSON Schema — ворота перед execute. Сначала положите schemas/intents/lookup-order.json в репозиторий. Потом решайте, какие формулировки достойны демо.

Дальше читать

Журнал: первая публикация