Highlight
Apple 将运行在 Private Cloud Compute(PCC)上的服务器端大模型开放给第三方 App,开发者只需改一行代码(传入
PrivateCloudComputeLanguageModel())即可将端侧 LLM 调用无缝切换到 32K 上下文的云端模型,无需 API Key、无需鉴权、无 Token 费用,但需处理用户每日配额限制。
核心内容
端侧模型的天花板
去年 Apple 推出了 Foundation Models 框架,让开发者可以用 3 行代码调用端侧 LLM。但 4K 的上下文窗口和有限的算力,让稍微复杂一点的场景就捉襟见肘。比如你要做一个能分析长文档的助手,或者一个需要多次调用工具、生成大量输出的功能,端侧模型根本装不下。(00:16)
开发者想突破这个限制,通常只能接入第三方云端 API。这意味着要自己管理 API Key、处理鉴权、承担 Token 费用,还要向用户解释数据隐私问题。对独立开发者和小团队来说,这是一笔不小的开销和心智负担。
改一行代码,获得云端算力
Apple 今年的答案是:把自家系统功能也在用的 Private Cloud Compute(PCC)开放给第三方 App。PCC 上的服务器模型提供 32K 上下文,支持更复杂的推理能力,而且调用方式与端侧模型完全统一。(00:39)
最直观的体现是代码层面的零成本迁移。如果你已经在用 Foundation Models 框架,只需把 LanguageModelSession 的初始化参数改一行:
let session = LanguageModelSession(
model: PrivateCloudComputeLanguageModel()
)
结构化输出(@Generable)和工具调用(Tool)的代码完全不用改。同一个 respond(to:) 方法,同一个 generating: 参数,端侧和云端的行为一致。(03:02)
不需要 API Key,但需要处理配额
PCC 和 iCloud 深度集成。用户不需要注册新账号,开发者不需要配置 API Key。只要用户的设备支持 Apple Intelligence,就能直接使用。(02:02)
天下没有免费的午餐。PCC 的调用是按用户 iCloud 账号计费的,每个用户有每日配额上限。用户可以通过升级 iCloud+ 获得更高额度,但开发者必须在 App 里优雅地处理配额耗尽的情况。如果用户当天额度用完,请求会直接抛错,这时弹一个 Alert 告诉用户”出错了”是很差的体验。(07:14)
Apple 建议的做法是:在 UI 中实时检测配额状态,接近上限时给出温和的提示,额度耗尽时禁用请求按钮并引导用户升级。所有状态信息都通过 PrivateCloudComputeLanguageModel 的 quotaUsage 属性暴露,几行代码就能实现。(08:07)
详细内容
端侧 vs 云端:如何选择模型
(04:06)
两个模型各有适用场景:
| 维度 | 端侧模型 | PCC 云端模型 |
|---|---|---|
| 网络依赖 | 离线可用 | 需要联网 |
| 请求限制 | 无限制 | 每日配额 |
| 上下文大小 | 4K(旧设备)/ 8K(新设备) | 32K |
| 推理能力 | 不支持 | Light / Moderate / Deep 三级 |
| 隐私 | 数据不出设备 | 端到端加密,不存储 |
代码里可以用 contextSize 属性动态获取当前模型的上下文大小:
SystemLanguageModel().contextSize // 4096 (旧设备) 或 8192 (新设备)
PrivateCloudComputeLanguageModel().contextSize // 32768
(05:58)
检查可用性
PCC 只在支持 Apple Intelligence 的设备上可用。在 UI 中应先检查 isAvailable,再决定是否展示相关功能:
import FoundationModels
struct ArticleSummarizationView: View {
private var model = PrivateCloudComputeLanguageModel()
var body: some View {
if model.isAvailable {
// 展示 PCC 功能 UI
} else {
// 降级到端侧模型或其他方案
}
}
}
(03:51)
关键点:
isAvailable在 View 的 body 中直接使用,SwiftUI 会自动响应状态变化- 不支持 Apple Intelligence 的设备(如非 A17 Pro / M 系列芯片)会返回 false
- 不要假设可用性,始终提供降级方案
结构化输出和工具调用完全复用
端侧模型的 @Generable 和 Tool 协议在 PCC 模型上行为完全一致:
import FoundationModels
@Generable
struct ArticleSummary {
let oneLineSummary: String
let keyPoints: [String]
}
struct FindRelatedArticlesTool: Tool {
// Tool 实现...
}
let session = LanguageModelSession(
model: PrivateCloudComputeLanguageModel(),
tools: [FindRelatedArticlesTool.self]
)
let response = try await session.respond(
to: "Summarize this article: \(article)",
generating: ArticleSummary.self
)
(03:25)
关键点:
@Generable宏标记的结构体定义不变Tool协议的工具实现不变respond(to:generating:)的调用方式不变- 切换模型只需改
LanguageModelSession的初始化参数
设置推理级别
PCC 模型支持三级推理(Reasoning),让模型在生成最终答案前先”思考”:
let response = try await session.respond(
to: prompt,
contextOptions: ContextOptions(reasoningLevel: .light)
)
// .light: 模型收集少量额外上下文
// .moderate: 中等深度的推理
// .deep: 推理文本可能比最终答案还长
(05:26)
关键点:
- 推理过程会生成额外的文本片段,存储在 session 的 transcript 中
- 可以通过观察 transcript 显示推理进度,尤其在
.deep模式下 - 推理文本消耗 Token,计入 32K 上下文限制
- 不要用
.deep处理简单任务,避免浪费配额
优雅处理配额限制
配额耗尽时不应该弹 Alert,而是更新 UI 状态:
struct ArticleSummarizationView: View {
private var model = PrivateCloudComputeLanguageModel()
var body: some View {
VStack {
Button("生成摘要") {
// 触发请求
}
.disabled(model.quotaUsage.isLimitReached)
if case .belowLimit(let info) = model.quotaUsage.status,
info.isApproachingLimit {
Text("配额即将用完")
.foregroundStyle(Color.orange)
}
if model.quotaUsage.isLimitReached {
Text("今日配额已用完")
.foregroundStyle(Color.red)
if let suggestion = model.quotaUsage.limitIncreaseSuggestion {
Button("获取更多配额") {
suggestion.show()
}
}
}
}
}
}
(09:41)
关键点:
quotaUsage.status返回.belowLimit(info)或配额耗尽状态info.isApproachingLimit表示接近上限,适合给出温和提示isLimitReached为 true 时应禁用请求按钮limitIncreaseSuggestion提供引导用户升级的按钮,调用show()即可展示系统界面- 避免使用 Alert,改用持久化的内联 UI
Xcode 调试配额状态
Xcode 提供了模拟配额状态的调试选项。在 Scheme 的 Debug > Options 中,选择 “Simulate Apple Foundation Models Availability”,可以模拟配额耗尽(Quota Usage Limit Reached)或接近上限(Nearing Usage Limit)的场景,无需等待真实用户触达上限。(09:12)
核心启发
1. 做一个”智能文档助手”
端侧模型 4K 上下文只能处理几页文档,PCC 的 32K 可以吞下整本书。用 @Generable 定义结构化输出,让模型从长文档中提取关键信息、生成摘要、回答具体问题。
- 做什么:一个支持 PDF/Word/Markdown 的智能阅读助手
- 为什么值得做:PCC 的 32K 上下文首次让端侧 App 能处理真正的长文档,且数据不离开 Apple 生态
- 怎么开始:用
PrivateCloudComputeLanguageModel()创建 session,定义@Generable结构体描述输出格式,用respond(to:generating:)获取结构化结果
2. 多级推理的渐进式 AI 功能
不是所有任务都需要 .deep 推理。简单问题用端侧模型,复杂问题用 PCC 的 .light,深度分析用 .moderate,研究级任务用 .deep。
- 做什么:根据任务复杂度自动选择模型和推理级别的智能路由层
- 为什么值得做:节省用户配额,提升响应速度,端侧离线时也能工作
- 怎么开始:先用端侧模型尝试,如果置信度低或上下文不够,再切换到 PCC;通过
contextSize属性动态判断
3. 带工具调用的个人知识库
PCC 支持 Tool 协议,可以让模型调用你的自定义工具。结合 32K 上下文,可以构建一个能搜索本地笔记、查询日历、检索联系人的个人助手。
- 做什么:一个能调用 App 内多个数据源的个人 AI 助手
- 为什么值得做:端侧 + PCC 的混合架构让隐私和性能兼得
- 怎么开始:实现
Tool协议定义搜索、查询等工具,在LanguageModelSession初始化时传入tools参数
4. 配额感知的渐进式降级
当用户配额耗尽时,不要直接报错。可以自动降级到端侧模型处理简单任务,同时在 UI 中提示用户升级 iCloud+。
- 做什么:配额耗尽时自动切换模型的智能降级系统
- 为什么值得做:保证核心功能始终可用,不因配额问题导致 App 不可用
- 怎么开始:监听
quotaUsage.isLimitReached,为 true 时创建LanguageModelSession()(不传 model 参数,默认端侧)处理简单请求
5. watchOS 上的 AI 功能
PCC 支持从 watchOS 调用。Apple Watch 的算力极其有限,但通过 PCC 可以让手表获得云端大模型的能力。
- 做什么:在 Apple Watch 上实现语音摘要、健康数据分析等 AI 功能
- 为什么值得做:watchOS 首次获得服务器级 LLM 能力,且无需手表独立联网(通过配对的 iPhone)
- 怎么开始:在 watchOS App 中直接 import FoundationModels,使用与 iOS 完全相同的 API
关联 Session
- What’s new in the Foundation Models framework — Foundation Models 框架的全貌,包括端侧模型的新能力(图像输入、更好的工具调用)
- Build agentic app experiences with Foundation Models — 端侧模型和 PCC 模型协同工作的 Agent 架构
- Meet the Evaluations framework — 用数据决定端侧和 PCC 模型各自的能力边界
- Debug and profile agentic app experiences with Instruments — 运行时追踪模型调用、Token 消耗和推理耗时
- What’s new in Swift — Foundation Models 框架依赖 Swift 6 的新特性
评论
GitHub Issues · utterances