Qwen3-Coder 评测仓库解读:用 DevQualityEval v0.5.0 的 granite-code-3b-instruct 报告读懂 LLM 代码生成质量评测
2026/9/14 9:36:05 网站建设 项目流程

Qwen3-Coder 评测仓库解读:用 DevQualityEval v0.5.0 的 granite-code-3b-instruct 报告读懂 LLM 代码生成质量评测

【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder

本文以 Qwen3-Coder 评测仓库(qwencoder-eval)中eval-dev-quality基准的 v0.5.0 单模型报告为样本,完整拆解一份 DevQualityEval 评测报告的组成结构、七类结果分类体系、CSV 汇总数据的含义与交叉校验方法,并结合基准源码说明 "write-tests" 任务的打分流程与本地复现方式。读完你可以独立阅读该基准下任意模型的报告,并能复现一次针对指定模型的评测运行。

1. 报告定位:一份由 DevQualityEval v0.5.0 生成的单模型评测快照

该报告位于仓库路径qwencoder-eval/instruct/eval-dev-quality/docs/reports/v0.5.0/granite-code-3b-instruct-q8_0-b93b1a15197d/,标题为 "Evaluation from 2024-06-24 14:53:48",即 2024-06-24 14:53:48 生成。报告首页明确声明:

Keep in mind that LLMs are nondeterministic. The following results just reflect a current snapshot.

也就是说,报告中的所有数字只是该模型在某一时刻的一次运行快照,而非模型的稳定能力度量——这是解读任何 LLM 评测结果时首先要注意的前提。

报告目录内的实际文件包括:

文件内容
README.md报告正文:分类说明 + 各分类下的模型清单
categories.svg按分类汇总所有参评模型的条形图
evaluation.csv逐任务(model/language/repository/task)的明细得分
models-summed.csv该模型跨语言的总体汇总
golang-summed.csvGo 语言的按语言汇总
java-summed.csvJava 语言的按语言汇总

README 中还引用了两个文件:./evaluation.log(包含全部请求/响应的完整日志)以及模型明细子目录./ollama_granite-code:3b-instruct-q8_0/。经核对,这两个路径在当前仓库副本中并不存在,因此本报告的可核验数据以上述 5 个文件为准。

该报告只评估了一个模型:ollama/granite-code:3b-instruct-q8_0(经 ollama 提供的 Granite Code 3B instruct 模型的 Q8_0 量化版本)。整个v0.5.0/目录下还有 claude、gemini、deepseek、codellama、gemma 等大量兄弟目录,可横向对比不同模型的报告。

2. 七类结果分类体系:读懂报告的骨架

报告正文把参评模型划入以下 7 个分类(分类文案在 README 中逐条给出,分类判定逻辑实现于 evaluate/metrics/category.go):

分类报告中的定义
category unknown无法归入任何分类的模型
response error评测过程中遇到错误的模型
no code模型没有产出任何代码
invalid code模型产出了无法编译/无效的代码
executable code模型产出了可执行的代码
statement coverage reached模型产出的代码达到了完整的语句覆盖率
no excess response模型的响应没有超出任务要求的内容(不多答)

从 category.go 的源码结构看,这些分类是依据一组 "Assessment"(如response-with-codefiles-executed、覆盖率是否达到上限等指标)的判定结果逐层归类的;源码中还有一个值得注意的注释:由于目前不能总是可靠地检测模型响应中是否包含源码,当代码实际全部成功运行时,会避免将其误判为 "no code"(对应 upstream issue #43,见category_test.go中的 "Code not Detected but Executes" 用例)。

本报告的实际结果是:ollama/granite-code:3b-instruct-q8_0被归入"category unknown"分类。也就是说,它既不满足"可执行代码"档位的判定,也没有落入其他更明确的类别。要理解为什么,需要看下一节的明细数据。

3. 明细与汇总数据:字段逐项解读

3.1 evaluation.csv 的字段含义

evaluation.csv 共 4 行数据(2 种语言 × 2 个仓库),字段及本报告中的取值如下:

字段含义说明
model参评模型 IDollama/granite-code:3b-instruct-q8_0
language评测语言golang/java
repository评测仓库golang/lightgolang/plainjava/lightjava/plain
task任务类型本基准的write-tests(给实现代码写测试)
score综合得分见 3.2 节的口径校验
coverage语句覆盖数测试实际覆盖到的语句对象计数
files-executed成功执行测试的源文件数模型生成的测试真正跑起来的文件数量
generate-tests-for-file-character-count被测试源文件的总字符数衡量任务规模
processing-time处理耗时汇总值,报告未注明单位,解读时应作相对比较而非绝对时长
response-character-count模型响应总字符数衡量响应体量
response-no-error无错误响应的任务数模型正常返回了响应(未报错)的任务数
response-no-excess无冗余响应的任务数响应未超出任务要求内容
response-with-code响应中包含代码的任务数检测到代码输出的任务数

4 行明细数据原文如下:

ollama/granite-code:3b-instruct-q8_0,golang,golang/light,write-tests,480,300,17,99456,4841933,100952,115,19,29 ollama/granite-code:3b-instruct-q8_0,golang,golang/plain,write-tests,9,0,1,1102,62323,1587,5,1,2 ollama/granite-code:3b-instruct-q8_0,java,java/light,write-tests,7083,6830,78,78624,4259723,108799,115,10,50 ollama/granite-code:3b-instruct-q8_0,java,java/plain,write-tests,46,30,5,1520,87186,2677,5,1,5

3.2 三份汇总 CSV 与交叉校验

汇总文件scorecoveragefiles-executedno-errorno-excesswith-code
models-summed.csv(总体)761871601012403186
golang-summed.csv489300181202031
java-summed.csv71296860831201155

三份汇总与明细之间是可以互相印证的:

  • score:480 + 9 + 7083 + 46 =7618(与 models-summed 一致),其中 Go 侧 480 + 9 =489,Java 侧 7083 + 46 =7129
  • coverage:300 + 0 + 6830 + 30 =7160,Go 侧300、Java 侧6860
  • files-executed:17 + 1 + 78 + 5 =101
  • response-no-error:115 + 5 + 115 + 5 =240,即每个语言各有 120 个文件级任务,全部拿到了无错误响应。

3.3 数据画像:这个模型报告说明了什么

把汇总数字翻译成任务口径(240 个 "文件级写测试" 任务):

  • 响应成功率 100%(240/240 no-error):模型调用层面没有报错,说明其分类不可能是 "response error";
  • 约 36% 的响应检测到代码(86/240 with-code):大量响应未被检测出代码内容;
  • 仅约 42% 的任务测试真正跑通(101/240 files-executed):只有不到一半的生成测试能编译并执行,且 Go 侧(18/120 ≈ 15%)明显弱于 Java 侧(83/120 ≈ 69%);
  • 语句覆盖 7160,绝大部分(6860)来自 Java/light 仓库,而两个plain简单仓库基本没拿到分(Go/plain 仅 9 分、0 覆盖);
  • 仅 31/240 个响应满足 "no excess response":多数响应包含了超出要求的内容。

这就解释了为什么该模型被归入 "category unknown":它有稳定的响应能力,但既没有足够的可执行代码比例、也没有达到分类阈值上的完整覆盖表现,因而落不到任何一个明确的"成功档"。对一个 3B 量级的量化 instruct 模型而言,这份报告给出的画像与模型规模是相符的——这也体现了该基准 "用可执行、可验证的信号而非主观打分来刻画模型" 的设计取向。

4. 分数从哪里来:write-tests 任务的实际流程

要理解上面的字段,需要看基准源码中写测试任务的执行链(实现见 evaluate/task/task-write-test.go):

  1. 遍历目标源文件TaskWriteTests.Run从仓库数据目录枚举所有源文件,逐个构建model.Context(语言、仓库路径、文件路径),调用模型的CapabilityWriteTests能力生成测试;每个文件执行前会先ctx.Repository.Reset重置临时仓库,保证任务间互不污染。

  2. 向模型发出写测试请求:eval-dev-quality/README.md 中保留了一段真实评测日志,可以直观看到请求模板。Go 语言的任务 prompt 为:

    Given the following Go code file "plain.go" with package "plain", provide a test file for this code. The tests should produce 100 percent code coverage and must compile. The response must contain only the test code and nothing else. ```golang package plain func plain() { return // This does not do anything but it gives us a line to cover. }
    Java 任务的 prompt 则额外指定了测试框架:"provide a test file for this code with JUnit 5 as a test framework"。注意 prompt 明确要求"响应只包含测试代码"——这正是汇总字段 `response-no-excess` 度量"是否多答"的依据。
  3. 执行测试并计量:拿到模型响应后,ctx.Language.ExecuteTests实际运行测试(日志中的对应命令形如symflower test --language golang --workspace /tmp/eval-dev-quality.../plain),成功时记录AssessmentKeyFilesExecuted(+1 个可执行文件)与AssessmentKeyCoverage(覆盖的语句对象数)。日志示例显示成功判据是测试 PASS 且输出coverage: 100.0% of statements

  4. 超时与失败处理:若执行超时(context.DeadlineExceeded)则跳过修复尝试直接记账;若 Go 语言任务测试执行失败,还会额外走一条symflower fix修复链路,把"模型原始结果"与"修复后结果"分别记入IdentifierWriteTestsIdentifierWriteTestsSymflowerFix两组指标(见 task-write-test.go)。报告中展示的 score 对应的是模型原始结果组。

  5. 汇总落盘:评测结束后,框架把逐任务明细写入evaluation.csv,并按语言/模型维度输出*-summed.csv与分类图categories.svg,即本报告目录所见的全部文件。

值得说明的口径细节:scorecoverage在汇总文件中同时存在且 score ≥ coverage(7618 vs 7160),说明 score 是在覆盖点数之上叠加了其他指标(如可执行文件、无错误响应等)之后的综合分;仓库中metrics包实现了具体的指标键与聚合逻辑,但报告本身未给出逐字段的算式,引用具体分值时应以 CSV 原文为准。

5. 复现方法:安装与运行 DevQualityEval

本报告由 eval-dev-quality 工具(version 0.5.0)生成,其安装与运行方式在 qwencoder-eval/instruct/eval-dev-quality/README.md 中有完整说明:

  1. 安装(前置条件:Git、Go):

    git clone https://github.com/symflower/eval-dev-quality.git cd eval-dev-quality go install -v github.com/symflower/eval-dev-quality/cmd/eval-dev-quality

    安装后即可使用eval-dev-quality二进制执行基准测试。

  2. 配置模型提供方凭证。该工具支持 openrouter、ollama、openai-api 等 provider(见 provider/ 目录);以 openrouter 为例:

    export PROVIDER_TOKEN=openrouter:${your-key}
  3. 执行评测。全量运行:

    eval-dev-quality evaluate

    只评估一个或多个模型(本报告即单模型报告,模型 ID 前缀ollama/表明走的是 ollama 通道):

    eval-dev-quality evaluate --model=openrouter/meta-llama/llama-3-70b-instruct
  4. 安全前提:README 特别强调,该工具默认不在沙箱中执行 LLM 生成的代码,务必在隔离环境中运行,例如加--runtime docker。完整参数见eval-dev-quality --helpeval-dev-quality evaluate --help

  5. 产物:运行过程输出逐请求的详细日志,最终结果保存到evaluation.csv;本仓库docs/reports/v0.5.0/下每个模型子目录就是对应一次运行的固化报告,顶层另有全量 evaluation.csv 用于跨模型对比。

6. 使用与引用该报告时的注意事项

  • 快照性质:报告首页已声明 LLM 输出非确定性,数字只代表 2024-06-24 14:53:48 那次运行的结果,不宜作为模型的长期能力排名依据;
  • 单模型、双语、四仓库:本报告只覆盖write-tests任务在 golang/java 的lightplain四个仓库组合,code-repairtranspile等其他任务(evaluate/task/ 中另有task-code-repair.gotask-transpile.go)不在其内;
  • 缺失文件:README 引用的evaluation.log与模型明细子目录未随仓库保留,逐条请求/响应级别的可追溯性受限,深入核对只能依赖 5 个 CSV 文件;
  • 横向对比入口:若要把 granite-code-3b-instruct 与 GPT-4o、Claude 3.5 Sonnet、DeepSeek-Coder-V2 等模型对比,直接查看v0.5.0/下各兄弟目录的同名 CSV 结构即可,字段口径完全一致;
  • 适用前提:复现时需自备模型访问凭证与隔离运行环境(建议--runtime docker),且 ollama 量化版本(q8_0)的量化配置会影响结果,换用非量化版本不应直接沿用本报告数值。

综合来看,这份报告是 DevQualityEval "以真实测试执行结果刻画代码生成质量"方法论的一个最小完整样本:七类分类给出定性结论,evaluation.csv及其三份汇总给出可交叉验证的定量明细,而 task-write-test.go 中的执行链则解释了每个数字的确切来源——三者结合,就构成了阅读整个v0.5.0报告体系所需的全部方法论。

【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询