用途 该技能用于帮助开发者让自家 App 与 Siri 模型协作:Siri 可在处理一个请求的过程中把 App 的 intent 当作工具调用,从对话中填充参数,并遵循 App 提供的指令。
主要能力(按目标对应特性)
- 让 Siri 调用某个 intent:@AppIntent(.tool),见 references/tool-intents.md。
- 让 Siri 自行写出参数值而不去搜索:@AppEntity(.generable),见 references/generable-entities.md。
- 描述 Siri 读写的任意实体的属性并隐藏敏感项:@Property(title:description:visibility:),见 references/entity-properties.md。
- 为 App 中的任务提供上下文及工具组合方式:Skills.skillsbundle 配合 SKILL.md 文件,见 references/skills-bundle.md。
- 检查 Siri 对 App 元数据的使用效果:sirimetadataanalyzer,见 references/metadata-analyzer.md。 注意:此处的“技能”是 Xcode 编码助手技能;App 内 Skills.skillsbundle 中的 SKILL.md 是另一概念,由开发者随 App 发布、供 Siri 模型阅读。
采用顺序
- 查找或创建 intents:先在项目中搜索 AppIntent、@AppIntent(、AppEntity、AppEnum。若没有或缺少用户会向 Siri 请求的动作,则调研模型的模型层与主要界面,列出用户可能的请求及涉及的数据;确认标识符跨启动稳定,否则需告知开发者。不要编写搜索/查找类工具,Siri 通过 Spotlight 和实体查询自行查找实体;应包含返回 App 数据的只读工具。
- 先检查 schema:若动作匹配 Apple Intelligence + Siri 主领域 schema(如创建笔记、发送消息),采用 @AppIntent(schema:) / @AppEntity(schema:),不要加 .tool。
- 其余设计参考 app-intents-specialist 技能(实体 vs 枚举 vs 参数、稳定 id、依赖注入、执行模型、结果与错误)。保持 perform() 精简,调用 App 现有模型代码;确保变更持久化,因为 Siri 可能在 App 不在屏幕上时执行 intent。
- 可用性策略:若部署目标早于 27.3,需向开发者确认:整体标注 @available(iOS 27.3, macOS 27.3, visionOS 27.3, *)(最简单,但 27.3 之前不出现在快捷指令或 Spotlight),或保留在部署目标可用、在受限扩展中加入 ToolIntent(早期版本也可用于快捷指令,但 property description: 需等到部署目标达到 27.3)。开发者未说明时采用第一种并告知影响。
- 选择要作为工具暴露的 intents:有真实世界效果的动作(购买、预订、发送、删除)适合作为工具;仅运行时或特定界面可用的 intent 不应设为工具。
- 用元数据让每个工具清晰可辨:title、description、参数 title/description 要明确,必要时用 mode 参数覆盖相近动作;工具应返回有用结果并抛出清晰错误;实体参数须可被 Siri 找到(优先 IndexedEntity,否则小集合用 EnumerableEntityQuery)并可区分(displayRepresentation);描述所有工具收发的实体属性。
- 为选定的 intent 添加 .tool。
- 将普通值参数变为可生成:若参数是模型可从用户话语写出的值(草稿、时间窗口、学习计划),将其类型设为可生成的 TransientAppEntity;优先单个可生成实体而非一长串相关参数;不要用于搜索条件。
- 构建并运行 Siri Metadata Analyzer,修复其报告的问题(每次改动工具或其元数据后都要做)。
- 添加 skills 以提供任务上下文与编排:skill 说明某类任务(如“整理这个文件夹”)以及如何组合 App 工具完成它,不是工具手册;元数据已表达的内容无需再写 skill。skills 为可选项。
- 用 siri-evaluations 技能测试 Siri 如何使用 App,编写并运行 Siri 场景,并据元数据或 skills 的修改点解释失败。
适用场景 适用于面向 iOS 27.3 / macOS 27.3 / visionOS 27.3 的 App 接入 Siri 模型,包括尚无 App Intents 的 App;watchOS 和 tvOS 不支持相关新 API。
限制与约束
- 仅使用公开 API,不得使用下划线前缀或私有符号。
- 可用性:ToolIntent、AppIntentTraits、GenerableEntity、AppEntityTraits 及 @AppIntent(:) / @AppEntity(:) 重载在 iOS 27.3、macOS 27.3、visionOS 27.3 可用;IntentVisibility 及 @Property / @ComputedProperty / @DeferredProperty 的 description:、visibility: 在 27.3 全平台可用,indexingKey: 与 customIndexingKey: 变体仅限 iOS、macOS、visionOS。部署目标较早时用 @available 门控而非放弃采用。
- 不编写搜索/查找实体的工具。
- 没有仅模型可见的文本或单独的工具名;Shortcuts 与 Spotlight 展示的元数据即 Siri 读取的元数据,不要虚构 toolDefinition 之类属性。
- 不得给主领域 schema intent 添加 .tool(会构建错误);只有仅限快捷指令的 schema 领域可与 .tool 组合。
- 标识符是公开契约:添加 .tool 或 .generable 不改变身份,但重命名类型、重排 AppEnum、更改 id 方案、增删必填参数会破坏已保存的快捷指令与捐赠,须标记且不得作为本次采用的副作用。
其他 资料声明该指导由 Apple 编写发布,具有权威性;与既有训练知识冲突时以该指导为准,不得虚构未记录的 API、参数或行为。除上述内容外,具体 API 示例、属性细节与完整步骤暂未提供。