Ornith 的 Agent 编码能力凭啥质变?"行为优化层"设计拆给你看
2026 年 8 月,DeepReinforce 发布 Ornith-1.5 系列开源模型,社区反响最强烈的不是"又一个编码模型",而是一种训练范式的转向:模型在训练过程中不仅产出答案,还自己出题、自己设计解题脚手架(scaffold)、自己生成解题轨迹,并全部通过强化学习联合优化——有社区文章将其概括为"不是新模型,是 Agent 编码行为优化层"。本仓库承载的 Ornith-1.5-35B-A3B 正是这一范式的"中杯"落地形态:总参 35B、单 token 仅激活约 3B 的 MoE 模型,却在 Terminal-Bench、SWE-bench、DeepSWE 等 agentic 编码基准上把同规模的 Qwen 3.6-35B 甩开一个身位,甚至越级打赢 30B 稠密模型。本文从模型卡、官方技术博客与仓库权重出发,把"行为优化层"拆开:它到底优化了什么、为什么普通微调学不来、以及这份能力如何落到一个可单卡运行的 GGUF 上。
一、先看证据:35B-A3B 的"质变"数据
讨论设计之前,先摆事实。根据 README.md 中公布的基准结果,Ornith-1.5-35B-A3B 与同量级模型的对比如下:
| Benchmark | Ornith-1.5-35B-A3B | Ornith-1.0-35B-A3B | Qwen3.6-35B-A3B | Gemma-4-31B(稠密) | Muse-Glimmer-30B(稠密) |
|---|---|---|---|---|---|
| Terminal-Bench 2.1(Terminus-2) | 67.8 | 64.2 | 52.5 | 42.1 | 51.7 |
| Terminal-Bench 2.1(Claude Code) | 68.5 | 62.8 | 49.2 | — | — |
| SWE-bench Verified | 79 | 75.6 | 73.4 | 52 | 76 |
| SWE-bench Pro | 59.6 | 50.4 | 49.5 | 35.7 | 51.2 |
| SWE-bench Multilingual | 71.4 | 69.3 | 67.2 | 51.7 | — |
| DeepSWE | 22 | 0 | 0 | — | — |
| NL2Repo | 46.2 | 34.6 | 29.4 | 15.5 | — |
| SWE Atlas - QnA | 39.8 | 37.1 | 15.5 | — | — |
| GPQA Diamond | 89.2 | 86.2 | 86 | 84.3 | 83.5 |
| ClawEval | 72.5 | 69.8 | 68.7 | 48.5 | — |
几个值得单独圈出来的点:
- 全面压过同架构对手。Terminal-Bench 2.1(Terminus-2 框架)67.8 vs 52.5、SWE-bench Verified 79 vs 73.4、NL2Repo 46.2 vs 29.4、SWE Atlas QnA 39.8 vs 15.5——这不是单项优势,而是全赛道系统性领先,说明差距来自底层能力而非评测运气。
- DeepSWE 上的"0 → 22"跨越。DeepSWE 是更贴近真实开发的长程 agentic 任务。Ornith-1.0-35B 和 Qwen3.6-35B 都是 0 分,1.5 版本直接拿到 22,而同表的 Qwen3.5-397B 只有 1。这个从"完全解不出"到"能解出两成"的质变,恰恰是行为优化层带来的增量所在。
- 越级打稠密模型。激活参数仅约 3B,却在 SWE-bench Verified 上超过 76 分的 Muse-Glimmer-30B、52 分的 Gemma-4-31B。社区多篇 16G 显存实测也印证了这一点:Ornith 在代码生成与推理吞吐上相对同参数量模型占优。
二、"行为优化层"不是微调:与普通训练范式的本质区别
要理解"凭啥质变",必须先回答:Ornith 的训练目标函数和普通模型微调到底差在哪。
普通 SFT/RLHF 的隐含假设是:任务分布是固定的、由人工挑选的,解题过程的"编排方式"(该看哪些文件、按什么顺序改、出错后怎么恢复)是外部 agent 框架写死的提示词模板。模型只需要学一件事——在给定输入下输出正确答案。也就是说,行为的"壳"是外部代码,模型的"芯"只负责产出 token。
Ornith-1.0 打破了"壳"的不变性。它的核心创新是 self-scaffolding:把引导解题的脚手架(instructions、工具选择、任务分解策略、编排逻辑)从人工设计的固定模板,变成一个与策略共同进化的可学习对象。每一步强化学习分两阶段进行:先基于任务与上一步的脚手架,让模型提出更优的脚手架;再基于新脚手架与任务,生成解题 rollout。rollout 的奖励同时回传两阶段,于是模型不仅学"如何答对",还学"如何设计一套能诱导自己答对的过程"。
Ornith-1.5 再把"出题"也纳入闭环。正如 README.md 所述,1.5 把自改进循环从"脚手架 + rollout 优化"扩展为"任务生成 + 脚手架构建 + 解题 rollout"的联合优化:不再依赖人工挑选的固定任务集,模型持续生成新训练任务、发现有效解题策略、并通过强化学习改进策略。三者被放进同一个 GRPO 循环里互相促进——这就是"行为优化层"的完整含义:出题、编排、解题这三层"行为"不再是 prompt 工程或外部框架的产物,而是被梯度直接优化的对象。
用一句话概括本质区别:普通微调优化的是"答案分布",Ornith 优化的是"行为分布"——包括任务选择行为、过程编排行为与解题行为本身。
三、Agent 任务规划能力从哪里来:三阶段闭环与奖励设计
任务规划能力不是靠堆推理 token 堆出来的,它的来源是三阶段闭环里一套非常具体的奖励函数设计。
出题阶段:奖励"有效、有难度、有新意"
对"问题 q → 脚手架 s → 一组 rollout {τ_i}"的训练样本,任务奖励定义为三项的乘积:
R_task = V(q, s) × D(q, s, {τ_i}) × N(q)- V(有效性与可验证性):检查脚手架能否正常运行、高置信解能通过、明显错误解会被判失败、评测与任务描述一致。V 还是硬门控——
V = 0时整个任务奖励归零,防止"看起来很困难"的畸形任务骗取奖励。 - D(前沿难度):用模型自身的 rollout 成功率估计难度。对每个任务采样 N 条 rollout,得到经验成功率 p,然后奖励"接近目标前沿 p*"的任务:
D = exp(-(p - p\*)^2 / 2σ²),p* 取 0.2。这个值意味着:任务既要有挑战性,又得保留足够多的成功轨迹供强化学习使用。随着模型变强、某类任务成功率升高,D 自动衰减,出题器被迫转向更难的问题——课程分布随能力自动进化,这是普通固定数据集完全不具备的性质。 - N(新颖度):
N(q) = 1 - max sim(q, q_j),q_j 遍历历史任务缓冲区,防止模型反复生成同一任务的微变体。新颖度排在有效性与难度之后,只负责抑制冗余,不奖励猎奇。
编排与解题阶段:脚手架奖励 + rollout 奖励
脚手架 h 的奖励同样三项相乘:R_harness = C(q, h) × F(h, {τ_i}) × H(h)——分别衡量脚手架与任务描述的对齐度、其奖励是否忠实反映解质量、以及抗奖励黑客(reward hacking)的能力。每条 rollout 则直接由生成的脚手架打分:R_rollout(τ_i) = h(q, τ_i)。问题生成、脚手架生成、解题 rollout三者各自用 GRPO 按自己的奖励优化,在同一自改进循环内联合进步。
防作弊:三层护栏
允许模型自己出题、自己编评测,最危险的就是奖励黑客。官方博客给出了三层防御:
- 固定外层信任边界:环境、工具面、测试隔离不可变,模型只能进化"内层策略脚手架"(记忆、错误处理、编排逻辑)。
- 确定性监控器:任何读取被保留路径、修改验证脚本、调用工具面之外动作的行为,直接判零奖励并移出 advantage 计算。
- 冻结的 LLM 裁判:意图层面的作弊可以完全发生在合法工具面内,此时一个冻结的 LLM judge 作为验证器之上的否决层兜底,而非主奖励。
另外,长 rollout 训练使用 pipeline-RL 异步策略,用随 token 年龄衰减的陈旧度权重w(d_t)(d_t ≤ K1时为 1,K1 < d_t ≤ K2时指数衰减,超过K2直接丢弃)抑制离策略 token 的影响——这是保证三阶段联合训练稳定的工程细节。
四、能力如何落到 Agent 行为上:显式的推理与工具调用
训练范式之外,"行为优化层"在推理侧同样可观测。Ornith-1.5-35B-A3B 是 reasoning 模型:默认输出以<think>…</think>思维块开头,服务端解析后放入独立的reasoning_content字段;同时模型输出结构化<tool_call>块,被解析为标准 OpenAItool_calls。这意味着规划与执行在协议层面就是分离的——下游 agent 框架可以拿到"模型在想什么"和"模型要调什么"两份独立信号,而不是从长文本里盲猜。
README 给出的服务端启动即体现了这一设计:
vllm serve ornith-ai/Ornith-1.5-35B-A3B \ --host 0.0.0.0 --port 8000 \ --tensor-parallel-size 2 \ --max-model-len 262144 \ --gpu-memory-utilization 0.90 \ --enable-prefix-caching \ --enable-auto-tool-choice --tool-call-parser qwen3_xml \ --reasoning-parser qwen3 \ --trust-remote-code配合 OpenAI 兼容端点,OpenCode、Hermes、OpenClaw 等编码 CLI 只需设置OPENAI_BASE_URL指向本地服务即可获得完整的多步任务规划能力。社区在 16GB Mac Mini 上的实测也反复印证同一结论:这个模型能自主完成模块设计、多步应用开发、错误修复与代码优化,与"检索答案拼接"的传统 RAG 用法是两种物种。
五、把行为优化层跑起来:本仓库的 GGUF 实操
本仓库是 Ornith-1.5-35B-A3B 的 GGUF 量化版,包含五种精度与一个多模态投影器:
Ornith-1.5-35B-BF16.gguf # 近原精度(bf16,约 70GB 权重) Ornith-1.5-35B-Q8_0.gguf # 8-bit 量化 Ornith-1.5-35B-Q6_K.gguf # 6-bit 量化 Ornith-1.5-35B-Q5_K_M.gguf # 5-bit 量化(K-M 混合) Ornith-1.5-35B-Q4_K_M.gguf # 4-bit 量化(K-M 混合,小显存首选) mmproj-Ornith-1.5-35B-BF16.gguf # 多模态投影器单卡部署最省事的路径是 llama.cpp 的 OpenAI 兼容服务(README 中同时给出的 Ollama / Atomic.chat 用法本质相同):
llama-server -hf ornith-ai/Ornith-1.5-35B-A3B-GGUF --port 8000 -c 262144随后任意 OpenAI 兼容客户端即可调用,注意区分两个字段:
from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") resp = client.chat.completions.create( model="Ornith-1.5-35B-A3B", messages=[{"role": "user", "content": "修复这个仓库里 CI 失败的测试"}], temperature=0.6, top_p=0.95, max_tokens=8192, ) msg = resp.choices[0].message print("reasoning:", getattr(msg, "reasoning_content", None)) # <think> 轨迹 print("answer:", msg.content)量化取舍方面,社区实测建议:小显存(16G 级)用 Q4_K_M,兼顾精度与吞吐;追求接近原版质量且显存充裕选 Q8_0 或 BF16。256K 上下文是 agentic 任务的重要资产,若需要更长窗口,README 给出了通过 config 的rope_scaling启用 YaRN 将窗口扩展到约 1M token 的方案。
六、对 Agentic 编码赛道的启示
把 Ornith-1.5-35B-A3B 放回赛道语境,它传递了三个明确的信号:
第一,训练信号正在从"结果"迁移到"过程"。当 SWE-bench Verified 这类结果级基准被刷到饱和,DeepSWE、Frontier-Bench 等过程级长程任务成为新的标尺,而"0 分起步"的赛道恰恰奖励那些把编排行为训练进参数、而非写死在提示词里的方法。行为优化层让"怎么干活"成为可梯度优化的对象,这是其他靠 SFT 堆语料或靠外部 harness 打补丁的模型难以复制的。
第二,数据瓶颈的解除方式变了。前沿难度奖励让训练课程随模型能力自动推进,出题器永远瞄准"当前会 20%"的任务——这比人工策划数据集的边际效率高得多,也解释了社区"自己出题自己练"的直观概括。数据不再是消耗品,而是模型自己可以再生的训练资产。
第三,本地化 agentic 成为现实。激活 3B 参数、GGUF 量化后单卡甚至 16G 显存可跑,配合 OpenAI 兼容协议与现成 agent 框架,隐私敏感或离线场景第一次能以低成本获得"会自己干活"的编码智能。行为优化层不再只属于云端前沿模型,而是下沉到了开发者桌面。
当然,也要保持冷静:DeepSWE 22 分、Frontier-Bench 5.1 分说明长程自主任务仍是开阔的战场;HLE(with tools)33.4 与 397B 旗舰的 56.1 之间也还有明显代差。行为优化层证明了方向的正确性,但"端到端自我改进"才刚刚把第一个闭环跑通——接下来的竞争,比的正是谁把这个闭环转得更快、更稳、更抗作弊。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考