ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Qwen3-Coder 评估工具链中的 DevQualityEval v0.4.0:LLM 代码生成质量分层分类体系与 139 模型实测解读

Qwen3-Coder 评估工具链中的 DevQualityEval v0.4.0:LLM 代码生成质量分层分类体系与 139 模型实测解读 Qwen3-Coder 评估工具链中的 DevQualityEval v0.4.0LLM 代码生成质量分层分类体系与 139 模型实测解读【免费下载链接】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本指南以 qwencoder-eval/instruct/eval-dev-quality/docs/reports/v0.4.0/3/README.md 这份真实评估报告为核心系统讲解 DevQualityEval 基准该报告所在仓库 eval-dev-quality 是 Qwen3-Coder 项目qwencoder-eval/instruct目录下收录的第三方代码质量评估框架从响应报错→空响应→无代码→无效代码→可执行代码→语句覆盖达标→无多余输出的七级分类漏斗到每一项得分点背后的源码实现再到本期 139 个模型在 Go/Java 两种语言上的完整实测名单与解读。读完你将掌握如何读懂 DevQualityEval 报告中的分类与分数、每个类别在源码中的判定依据以及如何用该框架复现评估、为自定义模型打分。一、这份报告是什么一次快照式的代码生成质量体检报告标题记录了生成时间2024-04-25 19:03:54并由 DevQualityEval benchmark 在version 0.4.0下自动生成。在仓库中它位于docs/reports/v0.4.0/3/与1/、2/、4/、5/并列为 v0.4.0 的五次批次运行本报告即其中的第 3 批docs/reports/v0.4.0目录下还有跨批次汇总的evaluation.csv、golang-summed.csv、java-summed.csv、models-summed.csv。报告开篇即强调两条前提Keep in mind that LLMs are nondeterministic. The following results just reflect a current snapshot.即LLM 是非确定性的以下结果仅反映当时的一次快照不宜过度外推。与报告同目录的三个文件组成了完整的可核验数据链categories.svg按类别统计全部被评模型的柱状图evaluation.csv逐模型、逐语言、逐仓库的详细计分表279 行 139 个模型 × Go/Java 两种语言evaluation.log报告原文指向的完整请求/响应日志需注意该文件并未包含在当前仓库快照中仅有README.md、categories.svg、evaluation.csv三个文件落库。从 evaluation.csv 的表头与内容可以确认本期评估的范围每个模型均在golang/plain与java/plain两个空白函数仓库上执行测试生成write-tests任务每项任务最多可得 6 分列含义依次为score, coverage-statement, files-executed, response-no-error, response-no-excess, response-not-empty, response-with-code。二、DevQualityEval 框架速览安装、用法与支持的 Provider报告由 eval-dev-quality 框架自动产出。该框架定位为评估和对比 LLM 代码生成质量的基准与框架既服务于 LLM 开发者改进真实软件开发场景中的模型表现也服务于 LLM 使用者挑选适合自己任务的模型。安装需先安装 Git 与 Gogit 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最小可用流程注册 openrouter.ai 的 access key 并写入环境变量然后执行全量评估export PROVIDER_TOKENopenrouter:${your-key} eval-dev-quality evaluate命令输出为详细的请求/响应日志结束后结果写入evaluation.csv。可用--model参数只评估一个或多个模型例如eval-dev-quality evaluate --modelopenrouter/meta-llama/llama-3-70b-instruct支持的模型 Provider来自框架 READMEProvider注册方式模型选择前缀说明OpenRouter--tokensopenrouter:${key}或环境变量PROVIDER_TOKENopenrouter/...报告绝大部分模型经由该前缀接入Ollama监听默认端口 11434或自动拉起ollama服务ollama/...本地推理OpenAI API 兼容端点--urlscustom-${name}:${endpoint-url}注意custom-前缀同名的--tokens注册 API Keycustom-${name}/...任何兼容 OpenAI chat completion 的推理端点需要特别注意的是框架的安全前提默认不在沙箱中执行 LLM 生成的代码。运行评估时务必使用隔离环境例如加--runtime dockereval-dev-quality evaluate --runtime docker --runtime-image eval-dev-quality:dev --model symflower/symbolic-execution容器运行时有两点特殊行为--configuration传配置给 docker runtime 暂不支持--testdata的主机路径存在性检查会被忽略但容器内仍会强制校验。三、三大评估任务测试生成、代码修复与代码转译框架定义了三种任务README 的 Tasks 一节本期报告实际只涉及第一种Test Generation测试生成为给定源码生成测试套件要求能编译且达到 100% 覆盖率。其巧妙之处在于结果可自动判定——模型只有真正理解源码才能写出达标的测试因此隐式衡量的是模型的语言理解能力。高层流程为向模型索要测试代码 → 将响应写入文件 → 连同原始源码一起执行测试。本任务在框架源码中对应 task-write-test.go 的TaskWriteTests。Code Repair代码修复修复带编译错误的源码。mistakes仓库中每个错误示例被隔离在自己的包内并附带一组有效测试框架把源码与编译错误列表交给模型再用预置测试套件验证响应。Transpile转译把一种语言的实现转成另一种语言。每个包根目录下必须有implementation文件夹存放待转译的实现文件每个源语言一份以及函数签名桩和有效测试套件。每个仓库可用根目录的repository.json声明只运行哪些任务{ tasks: [write-tests] }未配置该文件时执行全部任务。本期报告所有模型跑的都是plain仓库空函数 要求写满 100% 覆盖率测试从 task-write-test.go 的Run入口可以看到框架先枚举仓库源码文件、为每个文件重置临时工作区、调用模型的WriteTests能力随后用ctx.Language.ExecuteTests执行生成结果并统计覆盖率对象数量。四、计分体系每一项得分背后的源码依据报告的分数并非黑盒。在框架源码 assessment.go 中每个评估指标都是一个带权重的AssessmentKeyRegisterAssessmentKey(key, multiplier)注册multiplier 为 0 的指标不参与总分计算当前源码定义如下AssessmentKey含义权重multiplierfiles-executed成功执行的文件数1files-executed-maximum-reachable理论上最多可执行的文件数0不参与计分processing-time完成任务耗时毫秒0不参与计分coverage覆盖率对象数量coverage-statement10tests-passing通过测试的百分比10response-character-count响应字符数0generate-tests-for-file-character-count生成测试文件的字符数0response-no-error响应未报错1response-with-code响应包含源码1response-no-excess响应未超出请求内容1总分由Score()assessment.go累加所有非零权重指标得出Award/AwardPoints分别按倍数追加 1 次或多次得分。框架 README 的 Reward Points 一节补充了任务级规则response-no-error1无错误响应response-not-empty1响应非空response-with-code1响应含源码compiled1源码可编译statement-coverage-reached每个执行代码的覆盖率对象 10在transpile与code-repair中禁用防止模型通过堆砌语句刷分no-excess1响应未超出请求内容passing-tests每个通过的测试 10在write-test中禁用防止模型堆砌用例刷分关于 v0.4.0 的权重版本差异仓库 v0.4.0/README.md 明确说明官方博文对 v0.4.0 结果计算的权重做了调整——把达到 100% 代码覆盖率从 1 分改为 10 分。对照本期 evaluation.csv 的数据可以印证以openrouter/openai/gpt-4-1106-preview的golang/plain行为例score5, coverage1, files-executed1, response-no-error1, response-no-excess0, response-not-empty1, response-with-code1若 coverage 权重为 10 则总分应为 14而实际为 5——说明本报告快照中的 CSV 分数按 coverage 权重为 1 的旧口径计算而当前仓库源码version.go 显示框架版本已演进到 0.5.0中的coverage权重已是 10。五、分层分类体系从原始指标到最终类别的判定逻辑报告把全部模型归入以下类别报告原文定义类别定义Category Unknown无法被归类Response Error遇到错误Response Empty产生空响应No Code未产生任何代码Invalid Code产生了无效代码Executable Code产生了可执行代码Statement Coverage Reached产生了达到完整语句覆盖的代码No Excess Response未输出超出请求范围的内容这 8 个类别与源码 category.go 中注册的类别一一对应category-unknown、response-error、response-no-code、code-invalid、code-executed、code-coverage-statement、code-no-excess。值得注意的差异是本期报告包含Response Empty类别而当前源码的类别定义中已不再单列该类别——从 v0.4.0 到 v0.5.0框架对类别体系做了调整读历史报告时需要留意这一点。类别判定的核心在 category.go 的Category(totalTasks)方法它按最弱环节原则逐级下钻——只有当模型在所有任务上一致达标类别才可能进入下一层源码注释明确A models overall category corresponds to the criterion where the model was consistently able to receive total amount of pointstotalTasks 0 → Unknown response-no-error 未拿满 → Response Error response-with-code 与 files-executed 均未拿满 → No Code files-executed 未拿满 → Invalid Code coverage 未拿满 → Executable Code response-no-excess 未拿满 → Statement Coverage Reached 否则 → No Excess Response对照 evaluation.csv 可逐条验证例如openrouter/meta-llama/llama-3-70b-instruct在 Go、Java 两行所有指标均为 1总分 6×2拿满全部指标因此落在最高层 No Excess Response而llama-3-70b-instruct:nitro两行response-no-excess0总分 5×2覆盖率达标但存在多余输出故降级为 Statement Coverage Reached。六、本期结果全览139 个模型的分层分布本期共评估139 个模型8 2 29 59 26 15全部名单来自报告原文并逐项核对类别模型数占比Response Error85.8%Response Empty21.4%No Code2920.9%Invalid Code5942.4%Executable Code00%Statement Coverage Reached2618.7%No Excess Response1510.8%6.1 Response Error8 个模型模型openrouter/nousresearch/nous-hermes-2-vision-7bopenrouter/jondurbin/bagel-34bopenrouter/anthropic/claude-2:betaopenrouter/anthropic/claude-instant-1openrouter/jebcarter/psyfighter-13bopenrouter/anthropic/claude-instant-1:betaopenrouter/anthropic/claude-2openrouter/haotian-liu/llava-13b6.2 Response Empty2 个模型模型openrouter/databricks/dbrx-instructopenrouter/01-ai/yi-34b6.3 No Code29 个模型模型openrouter/nousresearch/nous-capybara-7b:freeopenrouter/nousresearch/nous-hermes-yi-34bopenrouter/neversleep/noromaid-mixtral-8x7b-instructopenrouter/anthropic/claude-1.2openrouter/pygmalionai/mythalion-13bopenrouter/intel/neural-chat-7bopenrouter/openchat/openchat-7b:freeopenrouter/gryphe/mythomax-l2-13b:extendedopenrouter/anthropic/claude-instant-1.2openrouter/lynn/soliloquy-l3openrouter/undi95/remm-slerp-l2-13b:extendedopenrouter/open-orca/mistral-7b-openorcaopenrouter/nousresearch/nous-capybara-7bopenrouter/mancer/weaveropenrouter/undi95/toppy-m-7b:nitroopenrouter/mistralai/mistral-tinyopenrouter/gryphe/mythomax-l2-13b:nitroopenrouter/neversleep/noromaid-20bopenrouter/nousresearch/nous-hermes-2-mistral-7b-dpoopenrouter/togethercomputer/stripedhyena-hessian-7bopenrouter/codellama/codellama-70b-instructopenrouter/gryphe/mythomist-7b:freeopenrouter/openai/gpt-3.5-turbo-instructopenrouter/anthropic/claude-1openrouter/meta-llama/llama-3-8b-instruct:extendedopenrouter/mistralai/mixtral-8x22bopenrouter/gryphe/mythomist-7bopenrouter/undi95/remm-slerp-l2-13bopenrouter/anthropic/claude-instant-1.06.4 Invalid Code59 个模型模型openrouter/teknium/openhermes-2-mistral-7bopenrouter/meta-llama/llama-3-8b-instructopenrouter/perplexity/pplx-70b-onlineopenrouter/perplexity/sonar-small-chatopenrouter/openrouter/cinematika-7b:freeopenrouter/nousresearch/nous-hermes-llama2-13bopenrouter/nousresearch/nous-hermes-2-mixtral-8x7b-sftopenrouter/google/gemma-7b-itopenrouter/nousresearch/nous-hermes-2-mixtral-8x7b-dpoopenrouter/undi95/toppy-m-7bopenrouter/huggingfaceh4/zephyr-orpo-141b-a35bopenrouter/google/palm-2-chat-bison-32kopenrouter/perplexity/pplx-7b-chatopenrouter/google/palm-2-codechat-bison-32kopenrouter/01-ai/yi-6bopenrouter/mistralai/mixtral-8x7bopenrouter/openai/gpt-3.5-turbo-16kopenrouter/google/gemma-7b-it:nitroopenrouter/mistralai/mistral-smallopenrouter/mistralai/mistral-largeopenrouter/openrouter/cinematika-7bopenrouter/cohere/command-ropenrouter/sao10k/fimbulvetr-11b-v2openrouter/mistralai/mistral-7b-instructopenrouter/undi95/toppy-m-7b:freeopenrouter/recursal/eagle-7bopenrouter/teknium/openhermes-2.5-mistral-7bopenrouter/anthropic/claude-instant-1.1openrouter/alpindale/goliath-120bopenrouter/cognitivecomputations/dolphin-mixtral-8x7bopenrouter/google/gemma-7b-it:freeopenrouter/lizpreciatior/lzlv-70b-fp16-hfopenrouter/mistralai/mistral-7b-instruct:nitroopenrouter/perplexity/sonar-medium-onlineopenrouter/recursal/rwkv-5-3b-ai-townopenrouter/google/gemini-pro-visionopenrouter/gryphe/mythomax-l2-13bopenrouter/sophosympatheia/midnight-rose-70bopenrouter/cohere/commandopenrouter/mistralai/mixtral-8x22b-instructopenrouter/cohere/command-r-plusopenrouter/huggingfaceh4/zephyr-7b-beta:freeopenrouter/meta-llama/codellama-34b-instructopenrouter/microsoft/wizardlm-2-7bopenrouter/rwkv/rwkv-5-world-3bopenrouter/perplexity/pplx-7b-onlineopenrouter/austism/chronos-hermes-13bopenrouter/anthropic/claude-2.0:betaopenrouter/google/palm-2-chat-bisonopenrouter/google/palm-2-codechat-bisonopenrouter/togethercomputer/stripedhyena-nous-7bopenrouter/meta-llama/llama-3-8b-instruct:nitroopenrouter/koboldai/psyfighter-13b-2openrouter/openchat/openchat-7bopenrouter/openai/gpt-3.5-turbo-0613openrouter/huggingfaceh4/zephyr-7b-betaopenrouter/xwin-lm/xwin-lm-70bopenrouter/mistralai/mistral-7b-instruct:freeopenrouter/perplexity/sonar-small-online6.5 Statement Coverage Reached26 个模型模型openrouter/anthropic/claude-2.1openrouter/perplexity/sonar-medium-chatopenrouter/anthropic/claude-3-sonnet:betaopenrouter/mistralai/mistral-mediumopenrouter/microsoft/wizardlm-2-8x22bopenrouter/anthropic/claude-3-haiku:betaopenrouter/microsoft/wizardlm-2-8x22b:nitroopenrouter/anthropic/claude-2.0openrouter/anthropic/claude-2.1:betaopenrouter/anthropic/claude-3-sonnetopenrouter/openai/gpt-3.5-turbo-1106openrouter/openai/gpt-4-1106-previewopenrouter/mistralai/mixtral-8x7b-instruct:nitroopenrouter/meta-llama/llama-2-13b-chatopenrouter/anthropic/claude-3-opus:betaopenrouter/jondurbin/airoboros-l2-70bopenrouter/meta-llama/llama-2-70b-chat:nitroopenrouter/meta-llama/llama-3-70b-instruct:nitroopenrouter/perplexity/pplx-70b-chatopenrouter/anthropic/claude-3-haikuopenrouter/meta-llama/llama-2-70b-chatopenrouter/openai/gpt-4openrouter/anthropic/claude-3-opusopenrouter/phind/phind-codellama-34bopenrouter/mistralai/mixtral-8x7b-instructopenrouter/openai/gpt-4-32k6.6 No Excess Response15 个模型模型openrouter/openai/gpt-4-0314openrouter/openai/gpt-4-turboopenrouter/nousresearch/nous-capybara-34bsymflower/symbolic-executionopenrouter/google/gemini-pro-1.5openrouter/openrouter/autoopenrouter/openai/gpt-4-turbo-previewopenrouter/openai/gpt-3.5-turbo-0125openrouter/openai/gpt-3.5-turboopenrouter/meta-llama/llama-3-70b-instructopenrouter/01-ai/yi-34b-chatopenrouter/openai/gpt-3.5-turbo-0301openrouter/openai/gpt-4-32k-0314openrouter/google/gemini-proopenrouter/openai/gpt-4-vision-preview七、结果解读能通过代码生成质检的模型凤毛麟角把六个层级的名单叠成一条质量漏斗结论相当直观**超过四成59 个42.4%**模型卡在 Invalid Code——能输出代码、但代码无法通过执行验证对 plain 仓库来说就是连给空函数写一个能跑的测试都失败**近三成29 个20.9%**模型卡在 No Code——响应里根本没有代码另有 8 个模型请求阶段就报错、2 个返回空响应从 Statement Coverage Reached 开始才是可用层仅 41 个模型29.5%能在 Go 与 Java 两个任务上都写出通过验证、达到 100% 语句覆盖的测试最终只有15 个模型10.8%同时做到响应内容不多不少no-excess进入最高层级 No Excess Response。几个值得注意的名单细节均可在 evaluation.csv 中逐行核验最高层级被 GPT-4 系列gpt-4-0314、gpt-4-turbo、gpt-4-turbo-preview、gpt-4-32k-0314、gpt-3.5-turbo-0125等、llama-3-70b-instruct、gemini-pro/gemini-pro-1.5、yi-34b-chat占据另有nous-capybara-34bclaude-3-opus、claude-3-sonnet、gpt-4、gpt-4-32k等进入 Statement Coverage Reached说明覆盖达标但输出略超要求而同批的claude-2、gpt-3.5-turbo-instruct、codellama-70b-instruct甚至落在 No Code——同一家族不同版本差异悬殊symflower/symbolic-execution是名单中唯一的非 LLM 条目框架自带的符号执行基线与openrouter/auto一样处于最高层级类别由最弱环节决定一个模型只要在某个语言的任务上失败整体类别就会跌落到对应层级因此名单中的高层级模型意味着在全部任务上的一致达标而非平均表现。八、如何复现与继续深入1. 直接查看原始数据本期每行分数都在 evaluation.csv类别分布可视化见 categories.svg跨批次汇总见 docs/reports/v0.4.0 目录下的汇总 CSV。2. 复现评估按 README 安装eval-dev-quality二进制后配置PROVIDER_TOKEN即可复跑export PROVIDER_TOKENopenrouter:${your-key} eval-dev-quality evaluate --modelopenrouter/meta-llama/llama-3-70b-instruct --runtime docker--model可重复传多个默认结果写入evaluation.csv并额外生成REPORT.md及指向各结果文件的链接。更多选项见eval-dev-quality --help与eval-dev-quality evaluate --help。3. 扩展基准往testdata/golang/、testdata/java/、testdata/ruby/等语言仓库仓库根目录用repository.json声明任务添加测试用例即可扩展评估范围若要新增任务或修复缺陷需要开发环境make install-all后执行make查看可用命令。4. 阅读源码理解机制类别判定见 evaluate/metrics/category.go指标与权重见 evaluate/metrics/assessment.go测试生成任务的执行与symflower fix失败修复链路见 evaluate/task/task-write-test.go评估入口与 plain 仓库预检见 evaluate/evaluate.go。九、阅读报告的三个注意点快照性质LLM 非确定同一模型重复运行结果会波动本报告仅反映 2024-04-25 一次运行的截面安全边界框架默认不在沙箱中执行生成代码复现时必须使用--runtime docker或同等隔离环境没有完美赢家框架文档明确最佳模型取决于具体使用场景——计算资源、API 调用成本、权重是否开源等因素都会改变选择评分加权口径也随版本演进v0.4.0 中 coverage 权重为 1当前框架源码中为 10跨版本对比分数前务必先确认口径。【免费下载链接】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),仅供参考
返回列表