Highlight
Siri 的底层架构在 iOS 18 发生了质变——借助 Apple Intelligence 的大语言模型,开发者只需通过
@AssistantIntent(schema:)Macro 将 App Intent 符合预定义 Schema,就能白嫖 Apple 训练好的自然语言理解能力(06:26)。
核心内容
过去接入 Siri 的体验不好。用户必须记住固定的句式,说错一个词 Siri 就无法理解。开发者的选择也很有限:要么用 SiriKit 的预定义域(音乐、消息),要么自己处理复杂的自然语言解析。
今年 Apple 改变了这个游戏规则。他们用大语言模型重构了 Siri 的语言理解层,并推出了 App Intent Domains 和 Assistant Schemas。本质思路是:Apple 的模型已经针对特定”形状”的 Intent 做了大量训练,你只需要让自己的 AppIntent 符合这个形状,就能免费获得 Siri 的自然语言理解能力。
目前 Apple 公开了 12 个 Domains,覆盖 Books、Camera、Mail、Photos、Spreadsheets 等场景,包含 100+ 个预定义的 Schema。Mail 和 Photos 在 iOS 18 发布时可用,其余将陆续推出。如果你应用的功能落在这些 Domain 里,接入成本极低——在 AppIntent 前加一行 @AssistantIntent(schema:) Macro 即可。
除了操作,Apple 还引入了 In-App Search 和 Semantic Search。前者让 Siri 能直接调用你应用内的搜索功能并导航到结果页面;后者让 Siri 能理解内容的语义(搜索”宠物”能找到猫狗蛇),而不仅匹配关键词。
详细内容
Assistant Schemas:一行代码获得自然语言理解
传统的 AppIntent 需要大量样板代码:
struct CreateAlbumIntent: AppIntent {
static var title: LocalizedStringResource = "Create Album"
static var description = IntentDescription(
"Creates a new photo album",
categoryName: "Media"
)
@Parameter(title: "Album Name")
var albumName: String
@Parameter(title: "Photos")
var photos: [PhotosAsset]
var openAppWhenRun: Bool = true
func perform() async throws -> some IntentResult & ReturnsValue<AlbumEntity> {
// 实现逻辑
}
}
使用 Assistant Schema 后,代码可以精简到:
@AssistantIntent(schema: .photos.createAlbum)
struct CreateAlbumIntent: AppIntent {
@Parameter(title: "Album Name")
var albumName: String
@Parameter(title: "Photos")
var photos: [PhotosAsset]
func perform() async throws -> some IntentResult & ReturnsValue<AlbumEntity> {
// 实现逻辑
}
}
关键点:
@AssistantIntent(schema:)Macro 声明后,title、description、categoryName等元数据不再需要——Schema 的形状已经定义了这些openAppWhenRun等属性也被自动处理perform方法依然是你的完全控制域——Apple 只定义输入输出形状,具体实现由你决定
如果需要灵活性,可以扩展可选参数:
@AssistantIntent(schema: .photos.createAlbum)
struct CreateAlbumIntent: AppIntent {
@Parameter(title: "Album Name")
var albumName: String
@Parameter(title: "Photos")
var photos: [PhotosAsset]
// 扩展参数——Schema 未定义的属性
@Parameter(title: "Album Color")
var albumColor: AlbumColor?
}
Assistant Entity:让内容可被 Siri 理解
AppIntents 的 Entity 也有对应 Macro:
@AssistantEntity(schema: .photos.asset)
struct AssetEntity: AppEntity {
var id: PersistentIdentifier
var title: String
var creationDate: Date
var location: Location?
var hasSuggestedEdits: Bool // Schema 要求的属性
static var typeDisplayRepresentation: TypeDisplayRepresentation = "Asset"
static var defaultQuery = AssetQuery()
}
关键点:
- 编译器会检查你的 Entity 是否匹配 Schema 形状——缺少
hasSuggestedEdits会编译失败(12:18) - Xcode 提供代码片段自动填充必需属性
- 同样可以扩展可选属性
Assistant Enum:暴露枚举类型
@AssistantEnum
struct AlbumColor: AppEnum {
case red, blue, green, yellow
static var typeDisplayRepresentation: TypeDisplayRepresentation = "Color"
static var caseDisplayRepresentations: [AlbumColor: DisplayRepresentation] = [
.red: "Red", .blue: "Blue", .green: "Green", .yellow: "Yellow"
]
}
关键点:
- Assistant Enum 不限制枚举 case 的形状,你完全自由定义
- 一行 Macro 完成所有必需配置
Siri 请求的生命周期
理解 Assistant Schemas 如何工作,需要看请求的完整流程(05:34):
- 用户请求 → Apple Intelligence 处理
- 模型推理 → 根据 Schema 形状预测匹配的 Intent
- 工具箱路由 → 从所有符合该 Schema 的 AppIntents 中选择
- 执行 → 调用你的 AppIntent 的
perform方法 - 呈现结果 → 返回给用户
你的 AppIntent 通过符合 Schema,让模型能够”推理”它。这就是为什么 Schema 形状如此重要——模型是针对特定形状训练的。
In-App Search:调用应用内搜索
基于 ShowInAppSearchResultsIntent,Apple 新增了 System Domain 的 Search Schema:
@AssistantIntent(schema: .system.search)
struct SearchAssetsIntent: AppIntent {
@Parameter(title: "Search Criteria")
var criteria: String
func perform() async throws -> some IntentResult {
// 导航到应用内搜索结果页面
navigationManager.openSearch(with: criteria)
return .result()
}
}
关键点:
- 用户可以说”在 [应用名] 里搜索自行车”(16:24)
- Siri 会直接打开你的应用并导航到搜索结果 UI
- 当前可通过 Shortcuts 测试,未来会直接支持 Siri 语音
Semantic Search:让理解超越关键词
Apple Intelligence 让 Siri 能理解语义:
// 用户说"找我的宠物照片"
// Siri 不仅匹配"宠物"这个词,还会找到猫、狗、蛇等图片
要支持这个功能,需要将你的 Entity 标记为 IndexedEntity(19:56):
@AssistantEntity(schema: .photos.asset)
struct AssetEntity: IndexedEntity { // 符合 IndexedEntity
// ...
}
关键点:
IndexedEntity协议让你的内容进入语义索引- Siri 能理解”宠物”包含猫狗蛇,“风景”包含山川湖海
- 找到内容后,Siri 能直接执行操作(分享、编辑等)
测试流程:通过 Shortcuts 验证
当前阶段(iOS 18 发布时),Assistant Schemas 主要通过 Shortcuts App 测试(19:23):
- 所有符合 Schema 的 AppIntent 自动出现在 Shortcuts 动作列表
- 可创建快捷方式测试参数传递和执行结果
- 未来 Siri 语音支持会通过软件更新推出
核心启发
1. 给照片/媒体类应用加 Siri 支持
如果你的应用处理照片、视频或媒体内容,现在可以用 Photos Domain 的 Schema 低成本接入 Siri。比如”把昨天拍的照片加到加州相册""用滤镜处理这张照片”。用户能通过语音完成复杂操作,无需多步点击。
怎么开始:
- 检查你的功能是否匹配 Photos Domain 的 10+ 个 Schema(CreateAlbum、OpenAsset、SetFilter 等)
- 在现有 AppIntent 上加
@AssistantIntent(schema:)Macro - 用 Shortcuts 验证参数和执行结果
2. 暴露应用内搜索给 Siri
任何有搜索功能的应用都可以通过 In-App Search Schema 让 Siri 直接调用。比如邮件应用(“找所有关于自行车的邮件”)、笔记应用(“搜索项目计划”)。用户无需打开应用手动输入搜索词。
怎么开始:
- 确认应用有搜索 UI 和 API
- 创建符合
.system.searchSchema 的 AppIntent - 确保
perform方法能正确导航到搜索结果页面
3. 用 IndexedEntity 让内容可被语义搜索
如果你的应用有用户生成内容(照片、笔记、文档),标记 Entity 为 IndexedEntity 能让 Siri 理解内容语义。用户说”找我的旅行照片”时,即使照片没有”旅行”标签,Siri 也能根据地点、时间等语义推断。
怎么开始:
- 在 AppEntity 上同时符合
IndexedEntity协议 - 提供丰富的属性(地点、时间、人物、类型)
- 确保 Spotlight 搜索已集成
关联 Session
- Bring your app’s core features to users with App Intents — App Intents 框架的核心概念:Intent、Entity、Query 的完整指南
- What’s new in App Intents — IndexedEntity 等新能力详解
- Design for Apple Intelligence — 与 Apple Intelligence 集成时的设计原则
- Meet Apple Intelligence — Apple Intelligence 的整体能力和架构
评论
GitHub Issues · utterances