AI 开发

iOS 27 Siri AI 如何调用 App?App Intents、AI Agent、JSON 数据与自动化执行完整指南

阅读约 15 分钟

用户说「帮我查一下 A-1042」。对写 JSON 的人,问题不是 Siri 会不会聊天,而是:这句话会不会变成一份合法的 Intent 参数,你的 App 会不会在 perform() 里执行副作用。本文把 App Intents、AI Agent、JSON 数据 和自动化执行拆开。

阅读前速览

概念 一句话 落在哪
App Intents App 向系统登记的可调用动作 perform() + 参数对象
Siri AI 把一句话填进 Intent 的调度员 只调度,不执行副作用
AI Agent 多步工具循环:提议、执行、再读 LanguageModelSession + Intents
JSON Schema 参数与状态的运行时口径 仓库里的源文件,不是 Swift 附录

先记住分工:Siri 投递对象,App Intents 是入口,Agent 是循环,Schema 是执行前门禁。把四者写成「Siri 打开了 App」,下一跳就会在 parse 散文。

先把「调用 App」问对

2026 年 9 月,iOS 27 已经随 iPhone 18 系列出货。软件口径在 WWDC 2026 就定了:新 Siri 用 LLM 重建,SiriKit 弃用,第三方入口只剩 App Intents。iPhone 18 的 AI 到底有多强 写过「有多强」;本文只写一件事——Siri 怎么调用你的 App。

「调用 App」如果理解成「打开界面、念一段说明」,你会设计错。系统真正做的是:听懂一句话,选出 Intent 名,填好参数对象,交给宿主的 perform()。界面可开可不开。

  • 用户说的是自然语言。系统交出来的必须是对象。
  • Siri 是调度员。查单、退款、发信仍在你的 App。
  • 多步自动化不是再开一个聊天窗口,而是多次合法的 Intent 调用。

所以这篇指南按执行路径写:入口 → 参数 → Agent 循环 → Schema 门禁 → Shortcuts / Spotlight。每一步都问同一句:对象合法吗?

调用链:一句话如何变成 perform()

旧 Siri 靠短语匹配和 SiriKit。新 Siri 靠填槽:把「A-1042」「退掉这个」「付过就退」写成字段,再投递给已经登记的 Intent。

一次成功的调用,最少经过四跳:

  1. 听懂。设备端或 Private Cloud Compute 把语音 / 文字收成意图,而不是一段聊天记录。
  2. 选谁。系统在能看见的 App Intents 目录里挑名字。没登记,就轮不到你。
  3. 填参。实体、屏幕上的 View、Spotlight 索引,都被压进参数对象。
  4. 宿主执行。你的 perform() 跑副作用,再把结构化结果交回系统。

落到 JSON,LookupOrder 这一跳接近这样:

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

source 可以是 siri、shortcut、spotlight、agent。入口不同,对象形状应当相同。打开界面只是一种呈现,不是调用本身。

App Intents:新 Siri 能看见的唯一入口

WWDC 2026 之后,没讲 App Intents 的 App,新 Siri 看不见。SiriKit 有两到三年迁移窗口,但新能力只加在 Intents 上。唤醒词、自定义短语、旧的 intent definition 文件,不再是主路径。

对系统来说,一个 Intent 就是一条可调度的工具:名字、参数类型、是否需要确认、是否打开 UI、属于哪个领域。Siri、Shortcuts、Spotlight、设备端 Agent,共用这一张目录。

  • Intent Schema:系统预置领域(任务、照片、通讯、商务)。对齐领域后,Siri 不必背你的唤醒词。
  • Entity Schema:订单、联系人、文件进入 Spotlight 语义索引,个人上下文带回来源归属。
  • View Annotations:把眼前的 View 标成实体。「把这个退掉」才有绑定对象,而不是再问一遍 ID。
  • App Intents Testing:走真实系统路径测 Siri / Shortcuts / Spotlight。测的是对象,不是广告词。

你在 Swift 里写 AppIntent,系统看到的是一份可调用描述。AI Agent 完整指南 把「模型提议、宿主执行」画进循环;在 iOS 上,提议往往来自 Siri,执行永远在你的 perform()。

打开 App 只是一种呈现。查单、改状态、跨 App 接力,都可以在后台完成——前提是参数合法,并且你声明了破坏性动作是否需要确认。

参数是 JSON 对象,不是一句唤醒词

旧路径把自然语言当成检索词。新路径把自然语言当成填表。字段一旦写成散文,perform() 只能再 parse 一次,等于把调度优势丢掉。

每个 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。AI 为什么需要 JSON Schema 写过:Schema 是口径,不是 prompt 里的「请返回 JSON」。

Siri 填错、实体过期、多出键,都会进你的函数。Intent 声明收紧,执行前再用同一份 Schema 校验。调试时先 格式化 看结构,用 JSONPath 提取 抽出 order_id,和上周能过的对象 JSON Diff。不要把用户订单贴到公共站点。

AI Agent:自动化不是一次 Intent,而是一个循环

用户很少只做一步。「查一下 A-1042,付过就退」需要先 LookupOrder,再决定 CreateRefund。这就是 Agent:提议、执行、读结果、再提议。

Apple 栈上的循环发生在 LanguageModelSession 里,工具常常就是 App Intents,或系统自带的 OCR / Spotlight。骨架和云端 Function Calling 相同:模型只发名字和参数,宿主校验并执行。

  • 工具目录默认是系统能看见的 Intent,不是你自己维护的 tools[] 长名单。
  • 每一步的输入输出都是对象。截图散文不能当下一跳的参数。
  • PCC 约 32K,工具结果先吃窗口。先裁再进 session。
  • 跨 App 串联可以,每一步仍要合法参数和各自的确认策略。
{
  "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" }
    }
  ]
}

一次「付过就退」的最小计划,形状接近上面。模型可以提议 step 2,但不能跳过宿主。status 不是 paid、amount 越界、缺少确认,CreateRefund 就不该执行。AI Agent 与 JSON Schema 工作流 写门禁怎么排;MCP Tool Schema vs Function Calling 是另一套工具 JSON 写法。Apple 用 App Intents 表达同一本字典。

不要把 Siri 和 Agent 写成同一个词。Siri 决定「调用谁」;Agent 决定「下一步调哪个」。两者都把对象当接力棒。

Schema 是执行前的门禁,不是文档附录

Guided Generation 挡住非法 token;它不替你做权限、限额和二次确认。Siri 填好的参数,仍然可能缺字段、枚举写错、实体过期。

把四层压成「Siri 变聪明了」,职责就丢了。拆开之后:

层 系统在做什么 没有 Schema 会怎样
Siri AI 把一句话变成 Intent 调用 散文进 perform(),副作用先跑起来
App Intents 向系统登记可调用动作 新 Siri 看不见你;旧短语救不了你
AI Agent 在 session 里多步调用工具 状态从聊天记录猜;下一步接错对象
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 和跨 App

iOS 27 上的自动化,不是另一套 API。它是同一张 Intent 目录上的不同入口。

  • Shortcuts 是可视化的规划器。每一步拖的仍是 Intent,交出的仍是参数对象。
  • Spotlight 语义索引返回实体,不是网页摘要。「上周那笔订单」必须能解析成 order_id。
  • 跨 App 可以串,但每一方自己校验 perform()。不要把对方的散文结果直接当下一跳参数。
  • 破坏性动作要确认。退款、删除、对外发送,声明确认策略;结构化返回结果,不要只回「OK」。

同一条 LookupOrder,用户可以用嘴说,可以在快捷指令里点,也可以被 Agent 当作工具。你只维护一份 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 填好了就不校验。 缺字段、错误枚举、过期实体仍会到达 perform()。
  • 只在 Swift 里写类型,不保留 JSON 源。 云端 API、评测和跨语言客户端很快会对不上。
  • 用宽 type: object 逃避设计。 开放对象不是门禁。真要扩展,用版本号或显式 metadata。

FAQ

没有写 App Intents,iOS 27 的 Siri 还能调用我的 App 吗?

新 Siri 不能。SiriKit 还在迁移窗口里,但新的自然语言调度、屏幕实体、多步 Agent,都只认 App Intents。想被调用,先登记动作和参数。

Siri 已经填好参数,还要校验吗?

要。Siri 是调度员。缺字段、错误枚举、过期实体仍可能到达你的 perform()。Intent 声明收紧,执行前再用同一份 Schema 验一次。

Shortcuts 和 Siri 是两套 API 吗?

不是。它们读同一张 Intent 目录。差别在入口:嘴、快捷指令画布,或 Agent 循环。对象形状应当相同。

设备端 Agent 能直接改数据库吗?

不能。模型只许提议名字和参数。改状态、退款、发信必须经过宿主的 perform(),并受你的确认策略约束。

这些 JSON 怎么在本地看?

先格式化看结构,对照 Schema 找缺的 required 或错的 enum,再和上一版能过的对象 Diff。JSONSort 在浏览器本地做这些事,不上传数据。不要把订单或通讯录贴到公共站点。

结论

iOS 27 里,Siri AI「调用 App」不是打开一个聊天界面。它是:把一句话变成合法的 Intent 参数,交给宿主执行,必要时再进入多步 Agent 循环。

App Intents 是入口,Agent 是循环,JSON Schema 是执行前门禁。先把 schemas/intents/lookup-order.json 写进仓库,再决定哪些话术值得演示。

延伸阅读

更新记录: 首次发布