llostinthesauce/fm-teardown
GitHub: llostinthesauce/fm-teardown
对 macOS 27 中 Apple Foundation Models CLI 工具 fm 的逆向工程笔记,系统性记录了其端侧与云端模型栈架构、CLI 命令用法及 OpenAI 兼容 API 行为。
Stars: 4 | Forks: 0
# `fm` — Apple Foundation Models CLI:逆向工程笔记 (macOS 27)
关于 **`/usr/bin/fm`**(随 macOS 27 发布的 Apple Foundation Models 命令行工具)及其背后的端侧 + Private Cloud Compute 模型栈的实地记录。
这里的所有内容均来源于**公开发布的 macOS 二进制文件**,使用标准工具(`strings`、`otool`、`codesign`、`curl`)以及 `fm` CLI 本身的实机运行推导得出。未分发任何专有权重、源码或资产。参见[免责声明](DISCLAIMER.md)。
## TL;DR
- **`fm` 是一个由 Apple 签名的轻量级 CLI**,基于公开的 `FoundationModels.framework`。它没有增加任何模型——它是通往 Siri 和 Apple Intelligence 所使用的同一技术栈的开发者门户。
- 它公开了**两个执行*层级***,而不是两个模型:`system`(端侧)和 `pcc`(Private Cloud Compute)。
- 在这些层级背后,`ModelCatalog` 枚举了一个真正的**模型库**:端侧语言层级包含 **`instruct_9m / 85m / 300m / 3b`**,一个单独的**代码模型**家族、**视觉**和**语音**模型,以及一个**包含 193 个用例的云 / PCC 适配器目录**。
- 3B 端侧层级以**稠密 (dense) + 稀疏 (sparse) 组合**的形式发布——对照 Apple 的博文进行交叉引用,即 **AFM 3 Core**(3B 稠密)+ **AFM 3 Core Advanced**(20B 稀疏,1–4B 激活)——并带有用于实现低延迟的 **`.draft`** 推测解码孪生模型(实测短文本补全约为 0.26 秒)。
- **`fm` 不负责**在模型之间进行路由——它只固定在一个层级。真正的端侧↔云端路由是一个 **Siri 端的编排层**(`ORCHNLRouterBridge` → `serverFallback` → PCC),受**证明**(`TC2XPCTrustedRequestProtocol`,一致性 token)控制。
- **`fm serve`** 是一个可正常工作的 **OpenAI Chat-Completions API** 服务器(支持流式和非流式传输,具有真实的 token 统计,支持 TCP 或 Unix socket)——可直接兼容 OpenAI 客户端,但**仅限聊天**:任何包含 `tools` 数组的请求都会返回 400 错误被拒绝(`Invalid tool definition`),因此必须将 agent 框架配置为完全忽略工具定义。
## 文档
| 文档 | 内容 |
|-----|--------------|
| **[00 — 实地报告](00_FIELD_REPORT.md)** | 经过证据分级的综合结论;对常见假设的纠正;全局大图;诚实的局限性说明。 |
| **[01 — CLI 参考](01_CLI_REFERENCE.md)** | 所有命令和参数、REPL 中的斜杠命令,以及包含已验证请求/响应示例的完整 `fm serve` API。 |
| **[02 — 模型架构](02_MODEL_ARCHITECTURE.md)** | `ModelCatalog` 分层、端侧大小层级 + 适配器、代码/视觉/语音家族、PCC 层级、信任/证明,以及 Siri 如何在端侧↔云端之间进行路由。 |
| **[03 — 官方交叉引用](03_OFFICIAL_CROSSREF.md)** | 将我们的发现映射到 [Apple 第三代 Foundation Models 文章](https://machinelearning.apple.com/research/introducing-third-generation-of-apple-foundation-models):模型名称核对(Core / Core Advanced / Cloud / Cloud Pro / ADM)、Apple 确认的内容、我们补充的内容,以及由此引发的修正。 |
| **[原始笔记](ORIGINAL_NOTES.md)** | 促成此项研究的早期行为会话记录(隐去了主机规格),保留以作溯源。 |
### 证据分级
各项发现都附有标签,以便您区分实测事实与推论:
- **[OBSERVED]** — 在真实的 macOS 27 主机上运行命令产生。
- **[STRINGS]** — 从已签名的 Apple 二进制文件的符号/字符串分析中恢复(高度确信该功能存在于操作系统中;但不一定能通过 `fm` 访问)。
- **[INFERRED]** — 推理得出的结论,已作相应标记。
## 原始证据 (`artifacts/`)
| 文件 | 内容 |
|------|----------|
| [`fm_model_ids.txt`](artifacts/fm_model_ids.txt) | 1,037 个 `com.apple.fm.*` 模型目录标识符(核心证据) |
| [`pcc_use_cases.txt`](artifacts/pcc_use_cases.txt) | 193 个云/PCC `instruct_server` 用例适配器 |
| [`cloud_endpoints.txt`](artifacts/cloud_endpoints.txt) | `afm.aiml.apple.com` / `smoot.apple.com` 推理 endpoint |
| [`siri_pcc_models.txt`](artifacts/siri_pcc_models.txt) | `llm_siri_pcc` + `lw_planner_v1..v5` |
| [`movie_schema.json`](artifacts/movie_schema.json) | 引导生成的 schema 示例(已进行实机往返验证) |
| `logs/serve.log` | 捕获的 `fm serve` 输出(仅限环回接口) |
## 自行复现
在 macOS 27 机器上:
```
# CLI surface
fm --help
for c in respond chat token-count schema serve available quota-usage; do fm $c --help; done
# Live on-device generation
fm respond --greedy --no-stream 'Say hello in three words.'
fm available
fm quota-usage
# Guided / constrained generation
fm schema object --name Movie --string title --integer year --boolean rewatchable > movie.json
fm respond --no-stream --schema movie.json 'Give me a classic sci-fi film.'
# OpenAI-compatible server
fm serve --port 1976 &
curl -s localhost:1976/v1/models
curl -s localhost:1976/v1/chat/completions -H 'Content-Type: application/json' \
-d '{"model":"system","messages":[{"role":"user","content":"PONG?"}],"stream":false}'
```
二进制文件 / 目录检查(模型 ID 列表即来源于此):
```
codesign -dvvv /usr/bin/fm
otool -L /usr/bin/fm
CACHE=/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld
for f in "$CACHE"/dyld_shared_cache_arm64e*; do strings -a "$f"; done \
| grep -aoE 'com\.apple\.fm\.[a-z0-9._]+' | sort -u
```
## 贡献
这些是基于单一 macOS 27 构建版本的笔记——非常欢迎来自**其他构建版本、硬件或支持 PCC 的主机**的发现。请参阅 **[CONTRIBUTING](CONTRIBUTING.md)** 了解哪些内容是有用的以及基本规则(禁止专有内容,保持证据分级,展示您的构建版本)。
## *未*包含的内容
- 没有模型权重,没有提取的 Apple 源码,没有专有资产。
- 没有实时的 PCC 跟踪记录——测试主机上的 PCC 受证明控制,因此云端层级的详细信息来自于字符串分析,而不是云调用。
有关范围、版权和商标说明,请参阅 **[免责声明](DISCLAIMER.md)**。
标签:DLL 劫持, Foundation Models, 云资产清单, 人工智能, 大语言模型, 技术分析, 文档结构分析, 用户模式Hook绕过, 系统架构, 逆向工程