大家好,我是 Ai 學(xué)習(xí)的老章
WWDC26 剛結(jié)束,Anthropic 就放了個(gè)大招——Claude 正式接入 Apple Foundation Models 框架,iOS/macOS 開發(fā)者現(xiàn)在可以用同一套 API無縫切換設(shè)備端模型和 Claude 云端大腦了
以前你想在 App 里接 Claude,得自己封裝 HTTP 請(qǐng)求、處理流式響應(yīng)、搞 JSON 解析,一堆臟活累活
現(xiàn)在 Anthropic 出了一個(gè) Swift 包ClaudeForFoundationModels,直接讓 Claude 符合 Apple 的LanguageModel協(xié)議,用LanguageModelSession就能調(diào)用,跟調(diào)用本地模型一模一樣
這波操作,屬于是 Claude 主動(dòng)上車蘋果生態(tài)
這個(gè)包是什么
ClaudeForFoundationModels是 Anthropic 官方出品的 Swift Package,核心作用就一個(gè):讓 Claude 成為 Apple Foundation Models 框架里的一個(gè)"服務(wù)端語言模型提供者"
![]()
Apple Foundation Models 框架
寫 SwiftUI 應(yīng)用時(shí),原來怎么調(diào) Apple 自帶的設(shè)備端模型,現(xiàn)在就怎么調(diào) Claude。API 完全一致,開發(fā)者心智負(fù)擔(dān)為零
幾個(gè)關(guān)鍵事實(shí):
請(qǐng)求直接從你的 App 發(fā)到 Claude API,Apple 不在請(qǐng)求鏈路上,不會(huì)看到你的 prompt 和響應(yīng)
按 Anthropic 標(biāo)準(zhǔn) API 計(jì)費(fèi),走的是你自己的 Anthropic 賬戶
你的 App 可以靈活決定什么時(shí)候用本地模型(快速、隱私、離線),什么時(shí)候升級(jí)到 Claude(大上下文、強(qiáng)推理、服務(wù)端工具)
iOS 27 / macOS 27 / visionOS 27 / watchOS 27(全部 Beta 階段)
Xcode 27 Beta
Anthropic API Key(開發(fā)用)
注意,這些系統(tǒng)版本目前都在 Beta,正式版預(yù)計(jì)今年秋天隨新系統(tǒng)一起推出
安裝
兩種方式,都很簡(jiǎn)單
方式一:Package.swift
dependencies: [
.package(url: "https://github . com/anthropics/ClaudeForFoundationModels.git", from: "0.1.0")
]
方式二:Xcode 圖形界面
File → Add Package Dependencies → 輸入倉庫 URL 搜索添加就行
然后在代碼里 import 兩個(gè)模塊:
import FoundationModels
import ClaudeForFoundationModels
快速上手來看最簡(jiǎn)單的用法,5 行代碼搞定一次 Claude 調(diào)用:
import FoundationModels
import ClaudeForFoundationModels
let model = ClaudeLanguageModel(
name: .sonnet4_6,
auth: .apiKey(ProcessInfo.processInfo.environment["ANTHROPIC_API_KEY"] ?? "")
)let session = LanguageModelSession(model: model)
let response = try await session.respond(to: "Plan a 4-day trip to Buenos Aires.")
print(response.content)
看到?jīng)]?LanguageModelSession是 Apple 框架的原生類型,你傳入ClaudeLanguageModel就用 Claude,傳入SystemLanguageModel就用本地模型。一行代碼切換,架構(gòu)層面零改動(dòng)
這個(gè)設(shè)計(jì)太優(yōu)雅了,比自己封裝 URLSession 調(diào) Messages API 不知道高到哪里去
模型選擇
通過ClaudeModel枚舉值來指定模型:
ClaudeLanguageModel(name: .opus4_8, auth: auth) // Opus 4.8
ClaudeLanguageModel(name: .sonnet4_6, auth: auth) // Sonnet 4.6
枚舉常量直接映射 API model ID,比如.opus4_8對(duì)應(yīng)claude-opus-4-8。新模型會(huì)隨包更新加入
如果你想試驗(yàn)還沒正式編譯進(jìn)去的新模型,也能手動(dòng)聲明能力:
let model = ClaudeModel(
id: "claude-experimental-x",
capabilities: .init(effortLevels: [.low, .high], structuredOutput: true)
)
ClaudeLanguageModel(name: model, auth: auth)
Effort Level:精細(xì)控制推理深度這是個(gè)很實(shí)用的功能——你可以釘死一個(gè) effort level,讓每次請(qǐng)求都用固定的推理強(qiáng)度:
ClaudeLanguageModel(name: .opus4_8, auth: auth, fixedEffort: .xhigh)
五檔可選:low、medium、high、xhigh、max
Apple 框架自帶的 reasoning level 會(huì)自動(dòng)映射:.light→ low,.moderate→ medium,.deep→ high。但如果你想上xhigh或max,就得用fixedEffort顯式指定,因?yàn)榭蚣艿募?jí)別最高只到 high
什么時(shí)候用 Claude,什么時(shí)候用本地模型
這其實(shí)是這個(gè)包最核心的設(shè)計(jì)哲學(xué):
下面這張架構(gòu)圖可以幫助理解整體設(shè)計(jì)思路:
![]()
Claude for Foundation Models 架構(gòu)示意
場(chǎng)景
原因
快速響應(yīng)、隱私敏感
本地模型
零延遲、數(shù)據(jù)不出設(shè)備
大上下文窗口
Claude
本地模型上下文有限
復(fù)雜推理
Claude
前沿推理能力
需要聯(lián)網(wǎng)搜索
Claude
服務(wù)端工具支持
離線場(chǎng)景
本地模型
無需網(wǎng)絡(luò)
因?yàn)閮烧吖蚕硗惶?code>LanguageModelSessionAPI,切換只需要換model:參數(shù),甚至可以做運(yùn)行時(shí)動(dòng)態(tài)降級(jí)——Claude 限流了就自動(dòng)回退到本地模型
認(rèn)證方式
開發(fā)階段:直接用 API Key
ClaudeLanguageModel(name: .sonnet4_6, auth: .apiKey("YOUR_API_KEY"))
?? 注意:打包到 App 里的 Key 可以被人從二進(jìn)制文件里提取出來,千萬別在正式發(fā)布的 App 里這么干
生產(chǎn)環(huán)境:走自建代理
ClaudeLanguageModel(
name: .sonnet4_6,
auth: .proxied(headers: ["X-App-Token": "..."]),
baseURL: URL(string: "")!
)
你的后端代理接收標(biāo)準(zhǔn) Messages API 請(qǐng)求,加上x-api-key頭后轉(zhuǎn)發(fā)給 Anthropic。這樣 App 端不存任何密鑰
Anthropic 還提到未來會(huì)推出一種不需要自建后端的生產(chǎn)模式,基于 App Attest 認(rèn)證,計(jì)費(fèi)走你的 Anthropic workspace。但目前還沒上線
流式響應(yīng)
let stream = session.streamResponse(to: "Summarize today's top science stories.")
for try await partial in stream {
print(partial.content)
}
注意這里每個(gè)partial是累積快照,不是增量 delta。這跟一些其他 SDK 的設(shè)計(jì)不同,用的時(shí)候注意
結(jié)構(gòu)化輸出
這個(gè)功能我特別喜歡。用@Generable宏標(biāo)注一個(gè) struct,Claude 就會(huì)按照類型約束返回結(jié)構(gòu)化數(shù)據(jù):
@Generable
struct Trip {
@Guide(description: "Destination city") var destination: String
@Guide(description: "Length in days") var days: Int
}let response = try await session.respond(to: "Plan a trip to Tokyo.", generating: Trip.self)
print(response.content.destination) // "Tokyo"
Swift 原生類型安全 + AI 結(jié)構(gòu)化輸出,強(qiáng)類型 all the way。再也不用手動(dòng)解 JSON 了
服務(wù)端工具
Claude 的服務(wù)端工具(Web Search、Web Fetch、Code Execution)可以直接配置,在一次 API 往返中在 Anthropic 的基礎(chǔ)設(shè)施上運(yùn)行:
let model = ClaudeLanguageModel(
name: .sonnet4_6,
auth: auth,
serverTools: [
.webSearch(maxUses: 5),
.codeExecution,
]
)
.webSearch和.webFetch還支持域名過濾(allowedDomains / blockedDomains)和調(diào)用次數(shù)限制
這些工具和 Apple 框架的tools:數(shù)組是分開的——tools:放的是客戶端工具(在設(shè)備上執(zhí)行),serverTools:放的是服務(wù)端工具(在 Anthropic 服務(wù)器上執(zhí)行)
錯(cuò)誤處理
do {
let response = try await session.respond(to: prompt)
print(response.content)
} catchClaudeError.missingCredential {
// 提示用戶輸入 API Key
} catchlet error asLanguageModelError {
// 框架級(jí)錯(cuò)誤:限流、上下文超長、內(nèi)容審核等
} catch {
// 網(wǎng)絡(luò)/傳輸錯(cuò)誤
}
Claude API 的錯(cuò)誤會(huì)映射到 Apple 的LanguageModelError:上下文超長 →.contextSizeExceeded,429 限流 →.rateLimited,超時(shí) →.timeout
一個(gè)常見模式:捕獲.rateLimited后自動(dòng)回退到本地模型,或者排隊(duì)重試
當(dāng)前限制
這個(gè)包目前不支持的東西:
Prompt caching 控制(包會(huì)自動(dòng)啟用緩存,但你無法控制 TTL 和斷點(diǎn))
Stop sequences
批量處理(Batch API)
Files API
Token counting
Beta headers
本質(zhì)上它只暴露了 Apple Foundation Models 協(xié)議能表達(dá)的那部分能力,超出協(xié)議邊界的特性暫時(shí)用不了
總結(jié)
ClaudeForFoundationModels是一個(gè)設(shè)計(jì)極其克制但恰到好處的 SDK。它沒有試圖做一個(gè)全功能的 Anthropic API 客戶端,而是精準(zhǔn)地完成了一件事:讓 Claude 成為 Apple Foundation Models 框架里的一員
對(duì)于 iOS/macOS 開發(fā)者來說,這意味著:
零學(xué)習(xí)成本接入 Claude(用的是你已經(jīng)會(huì)的 LanguageModelSession API)
架構(gòu)層面可以靈活混用本地模型和 Claude
強(qiáng)類型、Swift 原生、async/await 全套
生產(chǎn)就緒的認(rèn)證方案
目前還是 Beta 階段(畢竟 OS 27 都還沒正式發(fā)布),但整體 API 設(shè)計(jì)已經(jīng)相當(dāng)成熟。如果你在做 Apple 平臺(tái)的 AI 應(yīng)用,這個(gè)包值得現(xiàn)在就開始關(guān)注
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.