AI Pulse

裸IPython harness让9B小模型匹敌生产级框架

我们一直在测试哪种 agent harness 最适合小型本地模型。
结果是:在 Terminal-Bench Lite 上,一个单工具的 IPython harness 可以匹敌许多更重型的生产级 harness,而且“小模型 agent 的随机性”大多来自环境中的噪声,而不是模型本身。

实验设置

- 模型:Qwen/Qwen3.5-9B
- 基准:OpenThoughts TB-Lite。它运行很快,且比 Terminal-Bench 2.0 更容易,因此适合小模型。
- 我们根据不同测量目标,在不同配置下运行该基准(主要是不同的重复次数 N 或任务子集)。
- Harness:QwenCode、OpenHands、opencode、Pi,以及一个裸 ipython 会话。

主要发现

在 reward(奖励)、token 数和运行时间之间,没有明显的赢家。

QwenCode 每轮有更大的 prompt,因为它的系统提示词非常庞大。IPython 初始 prompt 最小,但因为没有历史压缩,prompt 会线性增长。

工具的使用方式更多反映系统提示词,而不是模型本身。每个 harness 大约有 25–30% 的调用都花在读取文件上。QwenCode 只是把读取操作路由到专用工具,因为它的提示词明确要求使用 read_file/grep_search/glob 而不是 cat/grep/find。

Harness 的随机性非常大。在 20 次试验 × 3 个任务中,同一任务的通过率在不同运行之间大幅波动。OpenHands 最稳定,部分原因是其默认设置将 temperature 硬编码为 0.0。即便如此,它也在某个任务上接近完美,在另一个任务上只有 14/20。最小化的 harness(IPython、Pi)最不稳定。

改进 IPython harness

v0

IPython 内核与任务环境分离,这会让模型困惑。

v1

修复了上述问题,并处理了空工具结果。

v2

改进系统提示词(使用 %%writefile,结束前验证)。这在性能和每次尝试的成本上带来了显著收益,但即使在 temperature=0 时,运行仍然不确定。

修复方差的方法简单得令人意外:规范化工具输出。pip 输出中的 10.8/10.8 MB 150.3 MB/s 与 129.3 MB/s 这类差异,足以让 9B 模型走向一条完全不同的路径。一个约 40 行的正则规范化器(gist)加上让环境安静下来,解决了大部分问题。大模型可能对此无所谓,但小模型显然很敏感。

给本地 agent 构建者的启示

- 对于小模型,更少的脚手架反而更好。
- 控制采样参数。
- 从工具输出中清理非确定性噪声。

该 harness 是开源的:huggingface/ipython-harness

原始讨论串(含所有图表)在这里。欢迎反馈,我特别好奇是否有人在其他小模型上也观察到这种输出规范化效果。

阅读原文
📚 相关主题 开源工程

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新