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 寫進倉庫,再決定哪些話術值得演示。

延伸閱讀

更新紀錄: 首次發布