跳转至

开发质量与语言基准测试

吞吐不等于质量。一个模型可以 decode 飞快,却依然无法用于 agentic 编码 —— 它会截断工具调用参数、在错误上陷入循环,或者它的微调悄悄破坏了另一门语言。 本页报告真实的 asiai bench --codeasiai bench --language 结果: 确定性信号(核心部分无需 LLM 评判器),衡量的是模型是否真的能用, 而非它喷出 token 的速度。

持续更新文档。 随着模型修订、引擎和模板的变化,这些数字会被刷新。每一个 区块都标注了确切的模型文件和服务配置,因此结果始终可复现。

测量内容

asiai bench --code(确定性,无评判器):

  • tool-call —— 一段 8 轮、上下文不断累积的 agentic 文件编辑会话。对工具调用 的发出、JSON 有效性、不截断、正确的工具、schema 一致性,以及空对象 bug 进行评分:即 |items 模板截断把 edit_file.edits 数组塌缩成 {} / []
  • tool-call-stress —— 同样的任务,但更难:更深的上下文、8–10 个元素的编辑 数组、JSON 转义压力(换行、引号、反斜杠、unicode)。用于区分那些在基线上 满分的模型。
  • recovery —— 在会话中途注入一个合成的工具错误;对纠正性动作 vs 卡死循环 (重新发出失败的调用)进行评分。
  • thinking —— thinking 模式纪律:不把 <think> 泄漏进正文、在短预算下输出 非空,以及遵守 enable_thinking=false
  • coding / coding-hard (可选评判器) —— 多轮编码任务,由位于 --judge-url 的 LLM 评判器(任意 OpenAI 兼容端点)按 1–5 分评分。

asiai bench --instruct(确定性指令遵循):

  • verifiable —— IFEval 风格的单轮提示词,带有可通过程序检查的指令 (字数/句数/段落数、关键词、仅 JSON、大小写、无逗号、结尾短语、用 <<>> 括起的标题、语言……)。以严格/宽松准确率在提示词层级和指令层级上报告 —— 即公开排行榜的格式。这是对 IFEval 范式(Zhou et al. 2023)的 asiai 原生 重新实现;未内置任何 IFEval 代码或数据。
  • research-brief —— 一项 agentic 任务:通过工具研究若干主题,然后撰写一份 多章节简报,最后再执行一个次要工具动作(保存)。模型究竟会产出主体简报, 还是只做工具工作并仅返回次要步骤的确认?一个模型可以在工具调用可靠性上拿 满分,却依然跳过主要交付物 —— 通过检查必需的章节是否出现在工具轮次之后来 进行确定性评分。order-control 调换顺序(次要在前)作为诊断。

asiai bench --language <code>(确定性,8 种语言):

  • adherence —— 模型是否保持在目标语言?(拉丁字母文字看目标 vs 英语的 功能词比例;ja/ko/zh 看目标文字的字符比例)。
  • diacritics —— 陷阱提示词,其正确答案必须包含特定的带重音 token (cafépréféré);被剥去 ASCII 的答案算失败。

这三种模式都仅输出 JSON,并通过对输出做差异比较来跨模型对比。

实例分析 —— Qwen3.6-35B-A3B vs Qwopus3.6-35B-A3B vs Qwen3.6-27B 稠密模型

一个微调版(Qwopus3.6,对 Qwen3.6-35B-A3B MoE 进行 Opus 蒸馏的微调) vs 它的基座模型,vs 一个只有其一半大小的稠密模型。相同的 llama.cpp、 chat 模板保持恒定不变(只替换模型文件)、关闭 thinking、3 次重复。 Apple Silicon M5 Max,High Power Mode。

工具调用可靠性

model · quant tool-call clean empty-object bug under stress
Qwen3.6-35B-A3B base · Q4 / Q5 87.5% 3 87.5% · 3 bugs
Qwopus3.6-35B-A3B · Q4 100% 0 100% · 0
Qwen3.6-27B dense · Q5 100% 0 88.9% · 3 bugs
  • 基座 35B MoE 存在一个模板修复无法完全闭合的残余工具调用缺陷。 在深上下文的某一轮中,它会把 edit_file.edits 塌缩成空对象 bug,3/3 —— 在 Q4 和 Q5 两种量化下都如此(所以这是一种生成行为,而非量化所致)。 社区的 froggeric 模板能修复简单调用上的 |items bug,却救不了深陷上下文 中的基座 MoE。
  • Opus 蒸馏微调版将其完全修复 —— 0 个 bug、100% clean —— 而且是在更低的 量化下(Q4 vs Q5),这让胜势更加有力。
  • 在压力之下,该微调版是比稠密 27B 更稳健的 agent:27B 出现裂缝 (在更难的测试集上有 3 个空对象 bug),而微调版保持在 0。它们在基线上打平; 压力测试集才把它们区分开来。

代码正确性(LLM 评判的高难度任务)

在两项更刁钻的多轮编码任务上它们分道扬镳:在一个滑动窗口限流器上两者都能 处理边界/淘汰的边缘情况;在一个表达式求值器上,稠密 27B 把运算符优先级处理 对了-2**2 == -4,一元负号作为一个真正的运算符),而微调版没有 (它把一元负号折叠进了数字 → 4.0)。工具调用稳健性与算法正确性是不同的 维度 —— 两者都要测。

语言保持

对微调版及其基座以相同量化运行 --language fr

model adherence diacritic traps ASCII-stripped
Qwen3.6-35B-A3B base 100% 4/4 0
Qwopus3.6-35B-A3B 100% 4/4 0

法语零退化。 这个面向编码的微调版完好地保留了基座模型的法语能力 (adherence、变音符号、无 ASCII 剥离)—— 一个任务专精的微调并未以牺牲另一门 语言为代价,这一点值得验证,而非想当然。

如何阅读本页

  • 结论优先,而非速度优先。 这些是正确性/可靠性信号。关于吞吐, 请见 Agentic 基准测试结果
  • 确定性核心,可选评判器。 tool-call / recovery / thinking / adherence / diacritics 无需 LLM 评判器 —— 它们可复现。coding/fluency 评分由 LLM 评判 (主观,可选)。
  • 在受控变更内比较。 该实例保持模板恒定、只变动模型,因此差异归于模型, 而非测试框架。

方法与注意事项

  • asiai bench --code / --language,关闭 thinking (chat_template_kwargs.enable_thinking=false),同一时刻仅常驻一个引擎。
  • 量化在该实例中各异(微调版用 Q4,而 Qwen 系列模型用 Q5):作为重头戏的 空对象 bug 是由模板/生成驱动的,并已在基座的 两种 量化下得到确认, 因此量化并不能解释这一差距 —— 而且微调版还是从更低的量化中胜出的。
  • 此处的代码质量评判器并非严格盲测(一个前沿模型基于实质内容阅读了 对话记录);确定性的 tool-call/stress 数字是客观的。
  • Recovery 对权重敏感,并非干净的跨模型信号 —— 重头戏是 tool-call/空对象 可靠性,它在多次重复之间保持稳定。

另见:Agentic 基准测试结果 · 基准测试方法 · 指标规范