本页译自英文文档。命令、标识符和示例保持原样。运行时 7.24.5 · SDK 2.6.9。 英文原文
AX Code 与 OpenCode 客户端复测:2026 年 9 月 19 日
状态:生效
范围:已测量的诊断快照
最近审阅:2026-09-19
负责人:ax-code 运行时
这次复测使用 AX Code 源码 62895cf40a39e0ebd4afec0afa21044e9871aa0b,位于本地前缀修复(42908b46a)以及 MTPLX/oMLX 提供方加入之后。全部六种客户端/后端组合在 Apple M3 Max、128 GiB 上使用同一 已启用 MTP 的 Qwen3.8 27B AXQ 6-bit 产物。较早的测量 仍是历史证据;它们的模型包、提示、token 上限和缓存条件不同。这不是对前缀修复加速的受控前后估算。
交付的输出速度
每个单元格是 首次任务 / 重复任务,单位为 token/秒。这些是单次观察,不是中位数。重复任务针对同一后端进程启动新的 CLI 会话;不假定它会命中缓存。加载和等待首次输出不计入该速率。
| 客户端 | AX Engine | MTPLX | oMLX |
|---|---|---|---|
| AX Code | 11.73 / 13.60 | 18.73 / 19.69 | 17.48 / 16.60 |
| OpenCode | 22.49 / 18.98 | 27.91 / 26.35 | 20.33 / 20.64 |
估算是 (completion tokens - 1) / (last output payload time - first output payload time)。推测解码可以在一个载荷中发出多个 token,因此这是客户端交付估算,不是后端的原生解码计数。它也不测量完整请求吞吐。
请求计时、工作负载与接受情况
NR 表示服务器没有报告缓存 token 用量;它并不断言为零。首载荷时间从本地记录代理收到模型请求时开始。CLI 墙钟时间还包括客户端启动和完成。任务要求一个独立的通用 TypeScript LRU 缓存,带有 get、set、delete 和 clear,没有工具执行或文件编辑。
| 后端 | 客户端 | 任务 | 输入 token | 输出 token | 缓存 token | 首载荷(秒) | CLI 墙钟(秒) | 代码检查 |
|---|---|---|---|---|---|---|---|---|
| AX Engine | AX Code | 首次 | 29,896 | 268 | NR | 197.78 | 231.58 | 通过 |
| AX Engine | AX Code | 重复 | 29,896 | 268 | 29696 | 7.22 | 33.34 | 通过 |
| AX Engine | OpenCode | 首次 | 17,316 | 216 | NR | 100.86 | 112.83 | 通过 |
| AX Engine | OpenCode | 重复 | 17,316 | 228 | NR | 116.03 | 129.90 | 通过 |
| MTPLX | AX Code | 首次 | 36,708 | 285 | 0 | 246.67 | 269.43 | 通过 |
| MTPLX | AX Code | 重复 | 36,708 | 285 | 36708 | 0.04 | 20.48 | 通过 |
| MTPLX | OpenCode | 首次 | 18,729 | 276 | 0 | 108.67 | 121.00 | 通过 |
| MTPLX | OpenCode | 重复 | 18,729 | 276 | 18729 | 0.08 | 12.77 | 通过 |
| oMLX | AX Code | 首次 | 33,124 | 275 | 0 | 212.25 | 235.62 | 通过 |
| oMLX | AX Code | 重复 | 33,124 | 232 | 32768 | 4.41 | 23.34 | 通过 |
| oMLX | OpenCode | 首次 | 17,316 | 213 | 0 | 118.03 | 130.88 | 通过 |
| oMLX | OpenCode | 重复 | 17,316 | 261 | 16384 | 7.73 | 22.91 | 通过 |
代码接受检查覆盖缺失的键、值查找、LRU 驱逐、保留的条目、更新新近度、删除已有和不存在的键、清空、对象键身份以及假值。生成的文件还会接受严格的 TypeScript 检查。这些有界检查不能确立广泛的编码质量。所有测量行都保留其生成输出和验证结果;失败不会被静默替换成更快的重试。
MTP 与运行时条件
- AX Engine 7.4.0:
--mlx-mtp-policy required,受管的本地运行时标志,n-gram 加速和 n-gram 堆叠已禁用。实时进程指标显示ax_engine_mlx_mtp_model_policy_active=1,起草和已接受 token 计数非零。AX Code 快照在预热之后;OpenCode 快照在首次任务之后。两者都包含预热,不是按任务的接受总计。按任务的 AX Code 起草计数没有保留。 - MTPLX 2.11.3 / MLX 0.32.2:显式
--generation-mode mtp --depth 3;实时健康报告generation_mode: mtp和runtime_mode: Sustained MTP。智能体改写和 SSD 会话缓存关闭;原生内存会话库保持启用。原生启动/内核预热予以保留并排除在计时之外。无关的加载预热已完成;准入时的后台预热状态保留在数据中,而不是假定已完成。 - oMLX 0.6.4 / MLX 0.32.0:启用 Lightning MTP,深度 3,仅文本模型加载,并发为一。每次生成的日志记录预热和两项任务的起草接受以及按深度的执行。上游附属导入器重命名 15 个张量;它们的 dtype、形状和载荷字节与原始 AXQuant 附属文件保持相同。骨干权重未改变。
- 产物:
AutomatosX/AX-Qwen3.8-27B-MLX-AXQ-6bit-MTP,修订4d36d652c21590f6813495351c3baf5fca5b3831。产物元数据声明 MTP 深度为 1;此处循环深度 3 遵循所选的运行时策略/显式实验,并不扩展产物认证。本次复测不使用 Optimized-Speed 模型包。 - OpenCode 版本为 1.18.31。所有后端和客户端串行运行。每个客户端/后端对启动新进程和隔离的任务缓存,随后是无关的模型加载预热,输出 token 上限为 64。模型加载和该预热排除在表格之外;首次任务仍要支付冷预填充。风扇控制保持默认,骨干文件位于 SMB 存储。
哪些对齐了,哪些仍然不同
两个客户端收到相同的冻结完整项目说明、用户任务和四个被允许的工具(glob、grep、read、skill)。源码 AX Code CLI 使用实际的 ax-engine、mtplx 和 omlx 提供方 ID;AX Engine 使用其已验证的环回连接契约,后端单独启动并携带受管标志。这不计时受管的下载/启动界面。OpenCode 使用其 OpenAI 兼容的提供方路径。项目配置被禁用,每个客户端有隔离的设置/状态。原生客户端提示、工具模式和会话头保持完整;因此渲染的 token 计数和缓存行为不同。
本地记录代理对齐 temperature 0.55、top-p 1、top-k/min-p 0、重复惩罚 1、存在/频率惩罚 0、seed 0、思考关闭,以及 1,024 token 的输出天花板。它对这项无工具任务强制 tool_choice: none。两个客户端都配置为 65,536 token 上下文。每一行都检查完整的说明快照、四个工具名、共同采样、一次请求、成功的 CLI 退出、自然停止以及没有工具执行。
更长的 AX Code 提示会增加生成期间的预填充和注意力工作。不同的响应长度、内容、运行时模板、内核和缓存策略,使这些表不能被当作等 token 的客户端开销基准。MTP 处于活动状态并不保证完整编码上下文有 30–40 token/秒。要隔离客户端开销或前缀修复效果,请在受控的输出和缓存条件下分别重放相同的序列化请求/token ID。
本报告不改变云端、私有 GPU、CLI 提供方或 AX Trust 的行为。连接说明见 本地运行时设置指南,精确计时、计数、哈希、验证结果和 MTP 证据见 已清理的测量数据。私有项目说明、模型响应、本地路径和会话头保留在本地,不予发布。因此,完整的私有上下文工作负载不能仅凭公开报告独立复现。