跳到正文
原文
Hugging Face Blog·· 2025-11-20精选AI 评分62

AnyLanguageModel 发布:为 Apple 平台本地与远程 LLM 提供统一 API

Introducing AnyLanguageModel: One API for Local and Remote LLMs on Apple Platforms

AI 导读

AnyLanguageModel 是一个 Swift 包,作为 Apple Foundation Models 框架的 drop-in 替代,只需把 import FoundationModels 换成 import AnyLanguageModel 即可保持相同 API。

推荐理由

AnyLanguageModel 用 Apple Foundation Models 的统一 API 接入本地与云端模型,读者可据此评估跨后端切换的成本。

正文 · AI 翻译

LLM 已成为构建软件不可或缺的工具。 但对于 Apple 开发者来说,集成它们仍然异常痛苦。

构建 AI 驱动应用的开发者通常采用混合方案, 组合使用以下几种方式:

  • 使用 Core ML 或 MLX 的本地模型,以实现隐私保护和离线能力
  • 像 OpenAI 或 Anthropic 这样的云服务提供商,以获取前沿能力
  • Apple 的 Foundation Models 作为系统级回退方案

每一种都有不同的 API、不同的要求、不同的集成模式。 这太多了,而且很快就会累积成负担。 当我采访开发者关于构建 AI 驱动应用的情况时, 模型集成方面的摩擦立刻就被提及。 一位开发者直言不讳地说:

我本以为可以很快用 demo 测试一下,也许再快速粗糙地构建一下 结果却浪费了太多时间。 快把我逼疯了。

实验的成本很高, 这阻碍了开发者去发现 本地开源模型可能实际上非常适合他们的使用场景。

今天我们宣布推出 AnyLanguageModel, 这是一个 Swift 包,提供了 Apple Foundation Models 框架的即插即用替代方案, 并支持多个模型提供商。 我们的目标是减少在 Apple 平台上使用 LLM 的摩擦, 并让采用本地运行的开源模型变得更加容易。

解决方案

核心思想很简单: 替换你的 import 语句,保持相同的 API。

- import FoundationModels
+ import AnyLanguageModel

下面是实际使用中的样子。 从 Apple 的内置模型开始:

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 在本地运行的开源模型:

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 支持一系列提供商:

  • Apple Foundation Models:与 Apple 系统模型的原生集成(macOS 26+ / iOS 26+)
  • Core ML:利用神经网络引擎加速运行转换后的模型
  • MLX:在 Apple Silicon 上高效运行量化模型
  • llama.cpp:通过 llama.cpp 后端加载 GGUF 模型
  • Ollama:通过 Ollama 的 HTTP API 连接本地提供的模型
  • OpenAI、Anthropic、Google Gemini:用于对比和回退的云服务提供商
  • HF Mirror Inference Providers:由世界级 推理提供商 驱动的数百个云端模型。

重点是可以从 HF Mirror Hub 下载的本地模型。 包含云服务提供商是为了降低入门门槛并提供迁移路径。 先让它能用,再让它变好。

为什么以 Foundation Models 作为基础 API

在设计 AnyLanguageModel 时,我们面临一个选择: 创建一个试图囊括一切的新抽象, 还是在现有 API 的基础上构建。 我们选择了后者, 使用 Apple 的 Foundation Models 框架 作为模板。

这看起来可能违反直觉。 为什么要让自己受限于 Apple 的选择? 有几个原因:

  1. Foundation Models 确实设计得很好。 它利用 Swift 的宏等特性提供了符合人体工程学的开发者体验, 其围绕会话、工具和生成的抽象很好地映射了 LLM 的实际工作方式。

  2. 它刻意保持有限。 Foundation Models 代表了语言模型能力的大致最低共同标准。 与其将其视为弱点, 我们把它当作稳定的基础(嘿嘿)。 每一位面向 Apple 平台的 Swift 开发者都会遇到这个 API, 所以直接基于它构建意味着更少的概念负担。

  3. 它让我们保持脚踏实地。 每增加一层抽象,都会让你离真正要解决的问题更远。 抽象很强大, 但堆叠太多,它们本身就成了问题。

结果是,在不同提供方之间切换只需极少的代码改动, 而核心抽象依然保持干净且可预测。

包特性:只包含你需要的

多后端库的一个挑战是依赖臃肿。 如果你只想运行 MLX 模型, 就不该被迫引入 llama.cpp 以及它的所有依赖。

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

dependencies: [
    .package(
        url: "https://github.com/mattt/AnyLanguageModel.git",
        from: "0.4.0",
        traits: ["MLX"]  // Pull in MLX dependencies only
    )
]

可用的特性包括 CoreML、MLX 和 Llama(用于 llama.cpp / llama.swift)。 默认情况下,不包含任何笨重的依赖。 你得到的是基础 API 加上云提供方, 它们只需要标准的 URLSession 网络支持。

对于 Xcode 项目(目前尚不支持直接声明特性), 你可以创建一个小的内部 Swift 包,让它以所需的特性依赖 AnyLanguageModel, 然后将该包添加为本地依赖。 README 中有详细说明。

图像支持(以及 API 设计的取舍)

视觉语言模型能力惊人且被广泛使用。 它们可以描述图像、 从截图中提取文本、 分析图表、 并回答关于视觉内容的问题。 遗憾的是, Apple 的 Foundation Models 框架目前不支持随提示发送图像。

基于现有 API 构建,就意味着接受它的约束。 Apple 很可能会在未来版本中加入图像支持(也许是 iOS 27?), 但视觉语言模型太有用了,等不起。 所以我们扩展到了 Foundation Models 目前所提供范围之外。

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

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"))
)

我们在这里冒了一个经过权衡的风险; 我们设计的东西可能会与 Apple 最终实现产生冲突。 但这正是弃用警告存在的意义。 有时你必须为尚不存在的框架编写 API。

试一试:chat-ui-swift

Screenshot of chat-ui-swift app

想看看 AnyLanguageModel 的实际效果, 请查看 chat-ui-swift, 这是一个展示该库能力的 SwiftUI 聊天应用。

该应用包括:

  • 通过 Foundation Models 集成 Apple Intelligence(macOS 26+)
  • HF Mirror OAuth 认证,用于访问受限模型
  • 流式响应
  • 聊天持久化

它的定位是一个起点: 复刻它、扩展它、换入不同的模型。 看看各部分如何组合,并把它改造成适合你的需求。

下一步

AnyLanguageModel 目前处于 1.0 之前的阶段。 核心 API 已稳定, 但我们正在积极将 Foundation Models 的完整功能集带给所有适配器,即:

  • 在所有提供方之间支持 工具调用
  • 用于工具和引导的 MCP 集成
  • 用于结构化输出的 受引导生成
  • 本地推理的性能优化

这个库是迈向更大目标的第一步。 统一的推理 API 提供了在 Apple 平台上构建无缝智能体工作流所需的基础设施—— 在这样的应用中,模型可以使用工具、访问系统资源并完成复杂任务。 很快会有更多内容。🤫

参与其中

我们很希望你能帮忙把它做得更好:

  • 试一试 —— 构建点东西,试试看
  • 分享你的经验——什么方法有效?什么令人沮丧?我们想听听你在将 AI 集成到应用中时面临的挑战
  • 未解决问题——功能请求、bug 报告、问题
  • 贡献——欢迎提交 PR

链接

我们很期待看到你构建的作品 🦾

来源:Hugging Face Blog · hf-mirror.com