AnyLanguageModel:苹果平台统一 LLM API

指南Hugging Face2025年11月20日4 分钟阅读
AnyLanguageModel:苹果平台统一 LLM API
苹果开发者集成大语言模型(LLM)时,常因不同提供商 API 各异而头疼。AnyLanguageModel 这个 Swift 包以苹果 Foundation Models 框架为模板,提供了一套统一 API,支持本地和云端模型,让切换变得简单。

大语言模型(LLM)已成为软件开发的重要工具,但对苹果开发者来说,集成它们依然麻烦。开发者通常采用混合方案:用 Core ML 或 MLX 跑本地模型保证隐私和离线能力;用 OpenAI 或 Anthropic 等云端服务获取前沿能力;或者把苹果的 Foundation Models 当作系统级备选。

每种方案都有不同的 API、不同的要求、不同的集成模式。一位开发者直言:“我本想快速用个 demo 测试一下,结果浪费了大量时间,简直要疯了。”

实验成本太高,导致开发者很难发现本地开源模型其实很适合他们的用例。

今天我们发布 AnyLanguageModel,这是一个 Swift 包,它提供了苹果 Foundation Models 框架的替代方案,支持多个模型提供商。目标是降低在苹果平台上使用 LLM 的摩擦,让开发者更容易采用本地运行的开源模型。

解决方案

核心思路很简单:换掉 import 语句,保持 API 不变。

code
- import FoundationModels
+ import AnyLanguageModel

实际操作起来是这样。先用苹果内置模型:

code
let model = SystemLanguageModel.default
let session = LanguageModelSession(model: model)

let response = try await session.respond(to: "Explain quantum computing in one sentence")
print(response.content)

现在试试通过 MLX 本地运行的开源模型:

code
let model = MLXLanguageModel(modelId: "mlx-community/Qwen3-4B-4bit")
let session = LanguageModelSession(model: model)

let response = try await session.respond(to: "Explain quantum computing in one sentence")
print(response.content)

AnyLanguageModel 支持一系列提供商:

  • 苹果 Foundation Models:与苹果系统模型原生集成(macOS 26+ / iOS 26+)
  • Core ML:运行转换后的模型,利用 Neural Engine 加速
  • MLX:在 Apple Silicon 上高效运行量化模型
  • llama.cpp:通过 llama.cpp 后端加载 GGUF 模型
  • Ollama:通过 Ollama 的 HTTP API 连接本地服务模型
  • OpenAI、Anthropic、Google Gemini:云端提供商,用于对比和备选
  • Hugging Face 推理提供商:数百个云端模型,由世界级的 推理提供商 驱动

重点放在可以从 Hugging Face Hub 下载的本地模型上。包含云端提供商是为了降低入门门槛,并提供迁移路径。先让它跑起来,再让它跑得好。

为什么以 Foundation Models 为基础 API

设计 AnyLanguageModel 时,我们面临选择:创建一个试图涵盖一切的新抽象,还是基于现有 API 构建。我们选择了后者,以 苹果的 Foundation Models 框架 为模板。

这看起来可能有点反直觉。为什么要受限于苹果的设计?有几个原因:

  1. Foundation Models 确实设计得很好。它利用 Swift 特性(如宏)提供了顺手的开发者体验,其围绕会话(Sessions)、工具(Tools)和生成(Generation)的抽象很好地映射了 LLM 的实际工作方式。
  2. 它有意做了限制。Foundation Models 有点像语言模型能力的“最小公分母”。我们不把这看作弱点,而是将其视为稳定的基础。每个针对苹果平台的 Swift 开发者都会遇到这个 API,直接基于它构建意味着更少的概念负担。
  3. 它让我们保持脚踏实地。每多一层抽象,就离你真正要解决的问题远一步。抽象很强大,但堆叠太多,它们本身就成了问题。

结果是,切换提供商只需要极少的代码改动,核心抽象保持清晰可预测。

包特性:按需引入

多后端库的一个挑战是依赖膨胀。如果你只想跑 MLX 模型,不应该被迫拉入 llama.cpp 及其所有依赖。

AnyLanguageModel 使用 Swift 6.1 的包特性(Package Traits)来解决这个问题。你只需选择需要的后端:

code
dependencies: [
    .package(
        url: "https://github.com/mattt/AnyLanguageModel.git",
        from: "0.4.0",
        traits: ["MLX"]  // 只引入 MLX 相关依赖
    )
]

可用的特性包括 CoreMLMLXLlama(用于 llama.cpp / llama.swift)。默认情况下,不包含任何重量级依赖。你会得到基础 API 和云端提供商,后者只需要标准的 URLSession 网络功能。

对于 Xcode 项目(目前还不直接支持特性声明),你可以创建一个依赖 AnyLanguageModel 并指定所需特性的小型内部 Swift 包,然后将其作为本地依赖添加。README 里有详细说明。

图像支持(及 API 设计权衡)

视觉语言模型(Vision-Language Models) 能力极强且应用广泛。它们可以描述图像、从截图中提取文字、分析图表、回答关于视觉内容的问题。不幸的是,苹果的 Foundation Models 框架目前不支持在提示词中发送图像。

基于现有 API 构建意味着接受它的限制。苹果可能会在未来版本(也许是 iOS 27?)中添加图像支持,但视觉语言模型太有用了,等不了。所以我们扩展了 Foundation Models 目前不提供的功能。

这是一个向 Claude 发送图像的示例:

code
let model = AnthropicLanguageModel(
    apiKey: ProcessInfo.processInfo.environment["ANTHROPIC_API_KEY"]!,
    model: "claude-sonnet-4-5-20250929"
)

let session = LanguageModelSession(model: model)
let response = try await session.respond(
    to: "What's in this image?",
    image: .init(url: URL(fileURLWithPath: "/path/to/image.png"))
)

我们在这里冒了一个计算过的风险;我们设计的东西可能与苹果最终实现冲突。但这就是弃用警告存在的意义。有时候,你必须为尚不存在的框架编写 API。

试试看:chat-ui-swift

chat-ui-swift 应用截图

想看看 AnyLanguageModel 的实际效果,可以试试 chat-ui-swift,这是一个 SwiftUI 聊天应用,展示了该库的功能。

这个应用包括:

  • 通过 Foundation Models 的苹果智能(Apple Intelligence)集成(macOS 26+)
  • Hugging Face OAuth 认证,用于访问受限制模型
  • 流式输出(Streaming)响应
  • 聊天记录持久化

它旨在作为一个起点:fork 它、扩展它、换用不同的模型。看看各个部分如何组合,并根据你的需求进行调整。

下一步计划

AnyLanguageModel 目前处于 1.0 之前版本。核心 API 是稳定的,但我们正在积极工作,将 Foundation Models 的完整功能集带到所有适配器中,主要是:

  • 所有提供商的工具调用(Tool Calling)
  • MCP 集成,用于工具和引导(Elicitations)
  • 用于结构化输出的引导生成(Guided Generation)
  • 本地推理的性能优化

这个库是迈向更大目标的第一步。统一的推理 API 为在苹果平台上构建无缝的智能体工作流(Agentic Workflows)提供了脚手架——这些应用中的模型可以使用工具、访问系统资源并完成复杂任务。更多内容即将揭晓。🤫

参与进来

我们很乐意得到你的帮助,让它变得更好:

  • 试试看——构建点东西,测试一下
  • 分享你的经验——什么好用?什么让人头疼?我们想听听你在应用中集成 AI 时遇到的挑战
  • 提交问题——功能请求、错误报告、疑问
  • 贡献代码——欢迎提交 PR

链接

期待看到你构建的作品 🦾

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

pgEdge 推出开源 MCP Server for Postgres,支持 AI 智能体通过模型上下文协议(MCP)而非传统 API 方式访问数据库。服务强调数据源无关性、完整模式自省和 token 优化,适用于 Claude Code、Cursor 等主流 AI 开发工具。

指南The New Stack·4月2日·4 分钟

Google 推出 Flex 和 Priority 两个新的推理层级,帮助开发者平衡成本与可靠性。Flex 是成本优化层级,适合后台任务,价格便宜一半;Priority 是最高保障层级,适合用户交互型应用。两者都通过同步接口调用,简化了架构管理。

指南·4月2日·3 分钟

评论