WWDC Quick Look 💓 By SwiftGGTeam
Discover machine learning & AI frameworks on Apple platforms

Discover machine learning & AI frameworks on Apple platforms

观看原视频

Highlight

Jaimin Upadhyay 按从高到低五层结构梳理 Apple ML/AI 栈:Platform Intelligence、ML-powered APIs、领域框架、Core ML、MLX,新增的 Foundation Models 框架让开发者用三行 Swift 即可调用设备端语言模型。

核心内容

iOS 18 之后,开发者要把 AI 能力塞进 app,常见做法是接 OpenAI 或 Gemini 的云端 API:要管理 API key、要承担每次请求的成本、用户数据要离开设备、网络不好就用不了。对很多「轻量、本地化」的功能——比如行程摘要、智能搜索建议、游戏对话生成——这套云端方案显得过重。

Jaimin Upadhyay 在这次 session 里给出的答案是:把整个 Apple ML/AI 栈按「从高到低」分成五层,让你按需取用。最上层是系统已经内置的 Writing Tools、Genmoji、Image Playground,标准 UI 控件自动支持,几乎不用写代码(02:03);再往下是 iOS 26 新增的 Foundation Models 框架,三行 Swift 就能调用设备端语言模型,完全离线、零成本、隐私不出设备(05:05);再往下是 Vision、Speech、Natural Language 等领域框架,每个都内置任务专属的优化模型;底层是 Core ML 部署任意自定义模型,以及 MLX 这种面向研究前沿的开源数组计算框架。每一层都为 Apple Silicon 做了优化,调度 CPU / GPU / Neural Engine。

详细内容

第一层:Platform Intelligence(01:16

Writing Tools 与 Genmoji 内置在标准文本控件里,几乎零代码就能接入。Image Playground 框架则通过 SwiftUI 扩展 imagePlaygroundSheet 弹出图片生成面板。

第二层:ML-powered APIs(02:45

iOS 18.4 引入的 ImageCreator 让你绕开系统面板、直接基于文本 prompt 生成图片(03:08):

let creator = ImageCreator()
let images = try await creator.images(
    for: [.text("a corgi surfing at sunset")],
    style: .illustration,
    limit: 1
)
// 拿到 images 后自己决定怎么展示

关键点:

  • ImageCreator() 直接实例化,无需 entitlement 申请。
  • 第一个参数是 ImagePlaygroundConcept 数组,.text(...) 表示用文本 prompt;也可传入起始图片作为 concept。
  • style 选择风格(.illustration / .animation / .sketch),limit 控制返回张数。
  • 返回值是异步序列/数组,images 拿到后由 app 自己决定展示方式,完全不弹系统 UI。

Smart Reply API03:29)通过把对话上下文「捐」给键盘,让系统在候选区生成智能回复:

// 在 messages 场景的输入视图里
let context = UIMessageConversationContext(messages: recentMessages)
textView.conversationContext = context

// 邮件场景需要实现 delegate 自己生成回复
func insertInputSuggestion(_ suggestion: UIInputSuggestion) {
    let reply = await generateLongerReply(from: suggestion)
    textView.insertText(reply)
}

关键点:

  • UIMessageConversationContext / UIMailConversationContext 携带对话历史,必须在键盘弹出前设置到 entry view 上。
  • 即时消息场景,用户选中的回复直接被插入文档,app 无需处理。
  • 邮件场景由系统回调 insertInputSuggestion,让 app 基于 suggestion 生成更长正文。
  • 所有推理在设备端完成,使用 Apple foundation model。

Foundation Models 框架04:24)是 iOS 26 新增的设备端语言模型 API,三行代码就能跑起来:

import FoundationModels

let session = LanguageModelSession()
let response = try await session.respond(to: "Summarize this trip in 3 bullets: ...")

关键点:

  • import FoundationModels 引入模块,不需要额外初始化。
  • LanguageModelSession() 创建一次会话,可复用,自动维护上下文。
  • respond(to:) 是异步方法,返回结构化结果,文本在 response.content
  • 全程设备端,没有 API key、没有网络请求、对用户和开发者零成本。

Guided Generation05:38)让 Swift 类型直接当作输出 schema,省掉 JSON 解析:

@Generable
struct Itinerary {
    @Guide("城市名称") var city: String
    @Guide("3 到 7 天的日程") var days: [DayPlan]
}

@Generable
struct DayPlan {
    @Guide("当天主题,例如美食、博物馆") var theme: String
    @Guide("当天活动列表") var activities: [String]
}

let itinerary = try await session.respond(
    to: "Plan a 5-day trip to Kyoto",
    generating: Itinerary.self
)

关键点:

  • @Generable 把现有 Swift 类型标成可生成;嵌套类型也要各自标注。
  • @Guide("...") 给每个属性写自然语言说明,模型据此理解字段含义。
  • respond(to:generating:) 指定输出类型,框架定制解码循环,阻止生成不合 schema 的结构。
  • 拿到的是强类型实例,无需手写 JSON schema、也无需写解析与容错。

Tool Calling07:02)让模型按需访问实时/个人数据并执行真实动作。引用数据源的能力让用户能事实核查输出,绕开训练数据时间截止的局限。

第三层:领域专用框架(08:21

Vision 今年新增 Document Recognition(在「读出文字行」之上识别标题、段落、表格分组)与 Lens Smudge Detection(09:13)。Speech 框架推出 SpeechAnalyzer 替代旧的 SFSpeechRecognizer09:56),配套新语音模型对 lecture、meeting、conversation 这类长音频与远场录音显著更准更快。用法是把音频 buffer 喂给 analyzer 实例,由它路由到模型:

let analyzer = SpeechAnalyzer(modules: [transcriber])
try await analyzer.start(inputAudioFile: audioFile)

for try await result in transcriber.results {
    print(result.text)
}

关键点:

  • SpeechAnalyzer(modules:) 用模块化结构组合不同分析能力,transcriber 负责语音转文字。
  • start(inputAudioFile:) 接受文件输入;实时场景可改用音频 buffer 喂入。
  • transcriber.results 是异步序列,流式返回识别结果,适合实时显示。
  • 完全设备端运行,对长音频与远场场景做了专门优化。

Natural Language、Translation、Sound Analysis 各自针对语种识别、文本翻译、声音分类。Create ML(10:55)让你用自己的数据微调系统模型——Vision 用的图像分类器、Natural Language 用的 word tagger,甚至 Vision Pro 上带 6DOF 跟踪的特定物体识别。

第四层:Core ML 与底层(11:16

模型来源有两个:developer.apple.com 上有按类别整理、附设备性能数据的 Core ML 模型库;Hugging Face 上的 Apple space 同时提供 Core ML 格式与 PyTorch 源定义。Core ML Tools 把 PyTorch 模型转成 Core ML,自动融合算子、消除冗余,可选剪枝、量化做 trade-off。Xcode 集成(13:09)能在任意连接设备上看预测延迟、加载时间、各 op 落在 CPU / GPU / ANE 上的位置;今年新增完整架构可视化,可下钻每个 op。

更细粒度的控制有两层:MPS Graph + Metal 把 Core ML 模型嵌入图形管线;Accelerate 的 BNNS Graph API 在 CPU 上做严格延迟与内存控制的实时信号处理。BNNS Graph 新增 Graph Builder(14:36),允许直接构建算子图,写预/后处理或小型 ML 模型在 CPU 上实时跑。

第五层:MLX(15:33

Apple ML 研究团队设计、完全开源的数组计算框架。一条命令行就能跑 Mistral 这类 LLM 推理(演示中生成 quicksort 代码,max token = 1024)。Hugging Face 上的 MLX 社区已有数百个前沿模型,一行代码即可加载。利用 Apple Silicon 统一内存(16:30),MLX 中数组不绑定设备、操作绑定设备,可在同一 buffer 上让 CPU/GPU 并行跑不同操作。提供 Python / Swift / C++ / C 多语言绑定,支持一行代码微调与分布式训练扩展。如果你用 PyTorch 或 JAX,Apple 提供 Metal 后端,不切换框架即可在 Apple Silicon 上探索前沿。

核心启发

  • 做什么:给 app 加 Foundation Models 驱动的「智能摘要 / 智能分类」功能。

    • 为什么值得做:完全设备端运行,零 API 成本,离线可用,用户数据不出设备——比接云端 LLM 在合规和成本上都更划算。
    • 怎么开始:import FoundationModels,创建 LanguageModelSession,发 prompt。先用三行代码把最简版本跑通,再把领域数据塞进 prompt 验证质量。
  • 做什么:用 @Generable + Guided Generation 替换现有的「LLM + JSON 解析」管线。

    • 为什么值得做:定制解码循环阻止结构性错误,省掉手写 schema、写解析器、处理 LLM 偶发不合法 JSON 的工作;Swift 类型即 schema,更新数据结构就是更新 prompt 输出。
    • 怎么开始:把你现有的 Codable 结构体加上 @Generable,给字段加 @Guide("...") 描述,必要时加 .range.count 等约束。
  • 做什么:把旧 SFSpeechRecognizer 的长录音/会议功能迁到 SpeechAnalyzer

    • 为什么值得做:新 API 配套的新模型对长音频与远场(lecture、meeting、conversation)显著更准更快;旧 API 是为短句口述设计的,长录音体验差。
    • 怎么开始:建立 SpeechAnalyzer 实例,配置 transcriber 模块,把音频 buffer 流式喂进去,从 results 序列里收文本。
  • 做什么:用 Tool Calling 替代「把所有上下文塞进 prompt」。

    • 为什么值得做:设备端模型知识有时间截止点,靠 prompt 喂全量数据既慢又超 context window;tool calling 让模型按需查询天气、日历、你的 app 数据,并能引用来源、执行真实动作。
    • 怎么开始:定义 Tool(带描述、参数 schema、执行闭包),把 tools 数组传给 session;prompt 里描述任务,让模型自己决定何时调用哪个 tool。
  • 做什么:上线前用 Xcode 的 Core ML 性能 / 架构可视化做模型体检。

    • 为什么值得做:能看到每个 op 落在 CPU / GPU / ANE 上、各设备的预测延迟与加载时间——避免上线后才发现某个 op 不支持 ANE、拖累整体延迟。
    • 怎么开始:把 .mlpackage 拖进 Xcode,打开 Performance 标签连接真机跑分;用今年新增的架构视图下钻可疑算子。

关联 Session

评论

GitHub Issues · utterances