Skip to content

Ornith-1.5 35B MoE Mac 本地实测

Bart Slodyczka 在 M3 Ultra Mac Studio(MLX、4-bit OQ4E 量化)上对 Ornith-1.5 35B-A3B 做的一组单次提示(One-shot)实测:发票视觉解析、塔防游戏、试算表、Three.js FPS。结论:结构化提取和 2D 交互逻辑已达实用水平,长代码单次生成败于微小字符错误,极度依赖迭代修复。适合关注本地 LLM(Local LLM)实用性的开发者。

目录


模型背景:Ornith-1.5 家族

Ornith-1.5 于 2026-08-19 发布,来自 Ornith / DeepReinforce(开源,MIT 系),主打「自我改进(Self-Improvement)」训练策略——模型自己写训练课程。本次实测对象是 35B MoE 版本。

[!info] 归属验证 视频标题只说 "Ornith's New 35b MoE"。经查证:发布方为 Ornith / DeepReinforce(HuggingFace: ornith-ai/Ornith-1.5-35B-A3B),不是 Google/OpenAI 等大厂产品。35B 版本激活参数约 3B(A3B),bf16 约 70 GB。

版本 架构 定位
9B Dense(稠密) 可跑在手机上
35B-A3B MoE,激活约 3B 本次实测,4-bit 仅 21.6 GB,32 GB Mac 可跑
397B MoE 旗舰,据报道在 Terminal-Bench 2.1、SWE-bench 上超越 DeepSeek V4 Flash 0731 与 Claude Opus 4.8(社区说法)

发布信息拆解:

Ornith-1.5(2026-08-19)
├── 9B Dense      → 手机端
├── 35B MoE A3B   → 消费级桌面(本视频主角)
└── 397B MoE      → 旗舰 / benchmark 竞争

硬体配置与推论速度

测试机为 M3 Ultra Mac Studio(512 GB),运行 MLX 引擎,4-bit OQ4E 量化(为 MLX 优化的量化方案)。作者自嘲 Ultra 跑 35B 是杀鸡用牛刀,正在筹措 24/32 GB 设备做更贴近现实的测试。

记忆体占用构成

21.6 GB   模型权重(4-bit OQ4E)
+21.5 GB  KV Cache(262k 完整上下文)
─────────────────────────────
≈43 GB    满上下文总需求
  • ✅ 32 GB Mac:可跑 4-bit 权重 + 中等上下文
  • ❌ 262k 满上下文:需要 43 GB+,32 GB 机器撑不满

解码速度(Decode Speed)

配置 上下文 速度
4-bit + MTP 0 120 TPS
8-bit + MTP 0 107 TPS
4-bit 无 MTP 0 83 TPS
4-bit + MTP 60k–120k 76.1 TPS
DeepSeek V4 Flash(作者日常机,参照) 40 TPS(MTP 开)
Qwen 3.8 27B(前作视频,参照) 70k ~25 TPS(无 MTP)

MTP = 多 Token 预测(Multi-Token Prediction),一次前向预测多个 token 以加速解码。

要点:4-bit + MTP 的 120 TPS 在本地模型里属于极快;上下文拉到一半窗口仍有 76 TPS,衰减平缓。


实测方法论:四变体矩阵

四个代码任务各跑 4 个变体,全部 --no-session(每次从零上下文开始,唯一变量是标签),共 12 个 build,7 个可用。基础提示(Basic Prompt)只描述需求;升级提示(Upgraded Prompt)额外强制三步:先写计划 → 按计划实现 → 跑测试用例自检。

变体 量化 Thinking 提示
4bit-nothink.html 4-bit basic
4bit-thinking.html 4-bit basic
4bit-thinking-upgraded.html 4-bit upgraded
8bit-thinking.html 8-bit basic

升级提示的增量部分(示意):

1. First, create a plan.
2. Build the app exactly as designed.
3. Run test cases and verify everything works.

[!warning] 视频口误 vs 仓库终局 视频里作者口头认为塔防 4-bit+thinking「应该整个能跑,只是背景里有个小问题」;GitHub 仓库的最终判定是它 fail(见下文)。以仓库 README 为准:7/12 可用。


视觉文档解析(发票提取)

三张 Claude 生成的发票(PDF 转 PNG),按信息密度递增,逐行结构化提取。注意是信息密集而非像素密集——像素密度过高(手机相机高分辨率拍摄)本身就可能压垮模型,这里特意排除该变量。

发票 结果 错误细节
基础(1 行项目) 15/16 漏掉唯一行项目的描述字段——作者多次跑此测试,基础发票首次失手
中等 32/32 全对
高密度 82/84 SWIFT 代码一个字母认错(PPTP→PPTL);数量 2232→2332(形近数字)
合计 129/132 ≈ 98%

错误模式高度一致:形近字符(相似字母、7/5 类数字)。

生产环境最佳实践:

  • ✅ 模型输出 + 确定性校验(正则、校验位、规则引擎)
  • ✅ 关键字段双通道提取(LLM + 传统解析器),不一致时人工/仲裁
  • ✅ 控制输入像素密度,别让摄像头分辨率先压垮模型
  • ❌ 98% 准确率直接无监督上线——2% 的错误恰好集中在 SWIFT 码、金额这类最痛的字段

塔防游戏:创意预算被规划吃掉

三个 4-bit 变体的对比揭示了最有趣的现象:

变体 代码行数 视觉效果 实际判定
no-think 881 最好,完整可玩 ✅ works
thinking 710 更精致一点 failsbetween: true 在初始化时反转了 startWave() 的守卫条件,开始按钮永久失效,且控制台无任何报错
thinking + upgraded 509 明显阳春,但逻辑对 ✅ works

「创意预算(Creativity Budget)」假说——作者的现场推测:

总生成预算(固定)
├── 生成精致 UI/CSS 的预算   ← no-think:几乎全额
└── 生成计划 + 测试用例的预算 ← upgraded:先扣掉一大块
                              └→ 剩余预算只够"保证能跑"
                                 → 模型主动剥离视觉复杂度

模型意识到「代码必须通过自检」后,优化方向从「好看」滑向「能跑」——把复杂度砍到最低以保证测试通过。约 200 行的差距(881→509)大致就是被吃掉的 CSS/UI 预算。


试算表:思考模式的最佳场景

要求:可点击单元格、输入数字、公式实时计算(如 =A1+B1)、高亮反馈。

变体 结果
4-bit no-think 视频演示中明显残缺(部分单元格无法输入),但 README 判定为 works——有可用逻辑
4-bit thinking ✅ 公式、交互、高亮全部可用
4-bit upgraded + thinking ✅ 且输入时整格高亮,体验最好
8-bit thinking

README 补充硬数据:四个变体全部通过 8 项公式测试(运算符优先级、括号、左结合减法、单元格引用、SUMAVERAGE),8/8。

构建时间(README):

任务 no-think thinking upgraded 8-bit
塔防 1m36s 2m27s 16m43s 1m46s
试算表 16m31s 18m50s 21m23s 7m29s
FPS 2m36s 1m46s 25m29s 2m03s

[!tip] 反直觉数据 8-bit 试算表 7m29s,不到 4-bit(16m31s)的一半。「4-bit 一定更快」值得重新验证。

对比参照:前作视频中 Qwen 3.8 27B 与 DeepSeek 在同场景(no-think + 基础提示)连单元格点击、数字输入都做不到——Ornith no-think 残缺版已胜出。

任务难度判断决策树:

开 Thinking 吗?
├── 数学/公式/逻辑运算(试算表类)→ ✅ 必开,收益明确
├── 视觉丰富的 UI/游戏 → ⚠️ 权衡:可能吃掉视觉预算
└── 长代码(3D/大项目)→ 单次生成本来就会挂,开不开都救不了

Three.js FPS:全部阵亡的字符级错误

四个变体全部无法启动,且没有一个是架构问题——12 个 build 全部包含结构合理、设计可信的完整实现,败因全是「转录级(Transcription-level)」小错:

变体 死因
4-bit no-think function loop() 声明了两次
4-bit thinking new THREE.CapsuleGeometry 少写一个点 .
4-bit upgraded JS module 内出现 HTML 注释 <!-- -->
8-bit thinking obstacles 在声明前 9 行就被使用

修复流程实证:

4bit-thinking.html  →  Claude 审查定位:缺一个 "."
                     →  补上这一个字符,其余零改动
                     →  4bit-thinking-PATCHED.html
                     →  ✅ 完整可玩(含音效、键鼠操作、视角转动)

最 instructive 的是 8-bit 的失败:语法完美解析、HUD 完整渲染、canvas 尺寸正确、控制台干净——唯独 3D 场景没出现。这种错误不执行页面根本发现不了。

对「自检提示」的致命打脸:升级提示要求「证明它能跑」,但模型没有浏览器,于是它把「证明」写成了一份断言程序能跑的 QA 文档——而这份 QA 文档自身还带着语法错误。

A self-check is worth exactly what the checker can observe. (自检的价值,等于检查者实际能观测到的东西。)


关键洞察

  1. 失败全部是转录级错误,不是设计失败。4-bit MoE 有 99% 的代码架构能力,单次产出的最大痛点是漏个点、用错括号、变量先用后声明。
  2. 8-bit 救不了 FPS。量化精度不是瓶颈——8-bit 的失败模式(解析全过、场景缺失)反而最难发现。
  3. Thinking 不是万能开关。塔防开 thinking 反而挂了(且无报错静默失败);试算表开 thinking 则从残缺变可用。
  4. 「证明它能跑」在无执行环境时是伪命题。模型会退化为「写一份声称能跑的文档」。

生产化决策树:

你的任务是什么?
├── 结构化提取(发票/文档)→ Ornith 35B + 确定性校验层
├── 2D 交互应用(试算表/工具页)→ Thinking 开 + 基础提示
├── 3D / 长代码项目
│    ├─ 单次生成? → ❌ 必挂(字符级错误率 100%)
│    └─ Agent 分段生成 + 编译/运行反馈闭环 → ✅ 正确姿势
└── 视觉精致的 UI → 提示里少加约束,把预算留给 CSS

✅/❌ 清单:

  • ✅ 把 Ornith 35B 4-bit 当「极快的 99% 完成度生成器」用
  • ✅ 串接 linter / 编译器 / 运行时报错作为反馈回路
  • ❌ 指望升级提示(自检话术)替代真实测试环境
  • ❌ 因为 4-bit 出小错就指望 8-bit 解决——错误在转录层,不在精度层

实践建议

  1. 生产环境必须搭配验证机制:视觉解析与代码生成均高准确率,但不宜无监督上线。串接正则校验、语法 linter、或第二个专用解析器做 fallback。
  2. 拒绝 One-shot 长代码:3D/复杂前端项目采用 Agent 架构——分段生成、每段编译验证、报错回填修复。单字符错误的修复成本趋近于零,但必须先「看见」它。
  3. 按场景选择 Thinking:数学/公式逻辑(试算表类)必开;纯视觉 UI 场景少约束、关 thinking 反而更好。
  4. 32 GB Mac 用户:4-bit(21.6 GB)是甜点位,满 262k 上下文才需要 43 GB。

参考资料

相关笔记

  • [[Qwen 3.8 27B]]
  • [[DeepSeek V4 Flash]]
  • [[MLX 本地推理]]