Newt:基于 Apple Core AI 的 Swift 结构化问答包
Swift 包 Newt 在 Apple Core AI 上跑 Qwen3-4B,本地完成多选、评分与是非类问题并返回概…
Newt 是一个面向 Apple 平台的 Swift 包,可在搭载 Apple Silicon 的 Mac 上调用本地大语言模型,对一段文本进行多选、评分与是非类问题的推理,并返回每个选项的概率分布。项目以 Isaac Newton 命名,灵感来自 TypeSafe 的 Jev(以经济学家 William Stanley Jevons 命名)。Newt 目前运行的是开源模型 Qwen3-4B(4-bit 量化动态导出),通过 Apple 的 Core AI 框架与 apple/coreai-models 仓库完成推理,整套流程完全在端侧完成,不联网。
核心能力与 API 设计
Newt 保留了 TypeSafe Jev 的 API 形态,提供三类问题:
- Choice(多选):通过
.choice定义 2–255 个选项,每个选项附带自然语言描述;返回choice、probabilities、confidence、coverage四个字段。 - Score(评分):通过
.score定义 2–10 个有序等级;返回score、legend、probabilities等字段,score 值为 Σ level × probability。 - Noul(是非):通过
.noul定义 true/false 两个选项;返回noul概率与coverage。
底层采用评测框架中常见的多选打分方式:对每个选项的 token 序列加上句末 token 计算对数概率,再在选项之间做归一化。由于 Apple 自带的 Foundation Models 不暴露 token 概率,Newt 不得不借助 Core AI 加载开源模型来绕开这一限制。
性能表现
在 Apple M3 Pro(18 GB 统一内存)、macOS 27.0 的发布版构建下,Qwen3-4B 的实测数据如下:
- 首次加载(Core AI 为当前 Mac 特化模型):7.6–11.8 秒
- 后续加载:约 1.0 秒
- 首次提问(3 选项 Choice):约 0.5 秒
- 热态提问(3 选项 Choice):约 435 毫秒
- 热态提问(两个 Noul 问题):约 600 毫秒
作者特别强调,应使用 swift test -c release 或 swift build -c release 进行测量——调试构建下 4B 模型慢 4.5 倍,0.6B 模型慢 14 倍。Qwen3-0.6B 体积仅 336 MB,但在一半的测试用例上失败,因此推荐使用 4B 版本(占用约 2.1 GB 磁盘)。
输出数字的含义
Newt 的输出字段并非全部可以直接解读为「正确答案的概率」:
- probabilities:模型在给定选项之间的偏好归一化值,不是校准过的概率,也不代表答案正确的概率。
- confidence:公式为
(max p − 1/n) / (1 − 1/n),0 表示各选项等概率,1 表示模型完全偏向某一选项。该公式是 Newt 自行推导的,能复现 TypeSafe 已公开的两个数值。在 Qwen3-4B 上这一指标几乎恒为 1.0,区分度有限。 - coverage:模型把概率放在「列出的完整选项」上的占比。低覆盖率意味着模型其实想说别的内容,应警惕其他字段;高覆盖率只说明模型按预期格式作答,并不代表答案正确。
局限与使用门槛
- 仅支持 macOS 27 + Xcode 27 + Apple Silicon Mac,Linux 上 Core AI 不存在。
- iOS 27 编译可通过,但作者未在真机上运行;4B 模型能否装入 iPhone 内存尚未验证。
- 苹果的 apple/coreai-models 仓库尚无正式 tag,Newt 只能固定到某个 commit,因此必须以
branch:形式引入 SwiftPM,暂无法发布稳定版本。 - 仓库地址:github.com/willswire/swift-newt。模型需自行用 apple/coreai-models 导出,Newt 不分发权重。
