🕳️iOS 本地 AI:準備踩坑 AnyLanguageModel
AnyLanguageModel 是相容 Foundation Models framework 語法的模型替換套件。理想上能輕鬆替換 Apple Intelligence 的 Foundation Models,換成第三方開源本地模型,或是 OpenAI 等雲端模型。實際狀況如何呢?我們要從這篇文章開始準備踩坑。
2025/12/24 勘誤:Package Traits 功能應為 Swift 6.1 推出,原先誤植為 Swift 6.2。
我在 WWDC25 第一次看到 Foundation Models 的 @Generable macros 功能時,就覺得概念很好。同時就想到:會不會有人做出相容語法的套件,可以替換模型,但保留原本的呼叫方式?
很高興的是,果然有人做出來了。Apple 開發圈備受信任的 @mattt(NSHipster 原作者)與 Hugging Face 合作,開發出 AnyLanguageModel 這個專案,讓開發者可以把 Foundation Models 替換成在本地執行第三方開源模型,或是 OpenAI、Claude、Gemini 等雲端模型,但是盡可能保留原本寫好的語法。
Mattt 撰寫了一篇介紹文章,發表在 Hugging Face 上:
Introducing AnyLanguageModel: One API for Local and Remote LLMs on Apple Platforms。
他談到了以 Foundation Models framework 為基礎是很好的開始,因為:
- 有好的開發者體驗(我們已經用多篇文章說明了它的語法優秀之處)
- 雖然功能有限,卻是好的基礎,讓開發者可以先聚焦在語言模型共通的核心功能上
- 想要避免使用其他抽象層,讓事情更複雜
所以,AnyLanguageModel 走的路線,完全相容 Foundation Models framework 的語法。
理想上,開發者只要把:
import FoundationModels
替換成:
import AnyLanguageModel
並且把原本建立 session 的方式:
let session = LanguageModelSession() // 等同於LanguageModelSession(model: SystemLanguageModel.default)
改寫成:
let model = CoreMLLanguageModel / MLXLanguageModel / LlamaLanguageModel / OpenAILanguageModel / AnthropicLanguageModel / GeminiLanguageModel // 先建立想使用的外部 model 或服務
let session = LanguageModelSession(model: model)
其餘呼叫 session 產生 response 的方式,都不需要調整。
語法相容是很美好的理想。但是底層模型不同,實際效果如何?我們當然得親自實驗才知道。