评测驱动代码大模型“码力”提升 王一男 2024.06 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 LLM代码能力评测方法 目录 LLM代码能力评测数据集 LLM代码能力评测反馈闭环实践 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 王一男 腾讯|研发效能产品专家 腾讯智能化软件工程数据与评测团队负责人。曾任百度工程效能部产品负责人,开源中国产品总监。北京航空航天大学软件工程本科、硕士。致力于通过设计软件研发效率工具,推动软件工程实践落地来提升组织的研发效能。曾主笔制定企业软件工程规范,主导多个企业级研发效能平台的规划设计与系统开发。 腾讯代码智能化产品:工蜂Copilot 主屏(写代码模式) 侧屏(Chat模式) 主屏(写代码模式) 代码补全 代码生成 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 使用混元代码大模型 侧屏(Chat模式) 原生能力 计算机知识问答 代码漏洞、缺陷检测和修复 代码优化 单测代码生成 通用代码生成 tRPC领域代码生成 比较多种模型迭代优化 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 腾讯代码智能化产品:工蜂CopilotAI评审 工蜂CopilotAICR解释CR->识别问题->修复代码 01LLM代码能力评测方法 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 模型评测——用户问题 快速、准确、全面评估模型代码生成能力 帮助提高代码智能化产品的迭代速度和产品质量 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 人工评测—代码大模型综合能力评测 •5档评分 •档位+权重计算总分 •参考标准答案 •1题3人评测,计算Agreement 自动化评测——代码生成场景 评测数据集:HumanEval/HumanEval-0-Shot/T-HumanEval 提示语(问题) •OpenAI为了评测Codex模型而构造的评测数据集 •164个问题 •Python语言(HumanEval–X支持5种语言) •每个task(case)包含提示语、规范的解决方案、单元测试、文字说明、函数声明、单元测试样例 •单元测试用例平均7.7个/每问题 单元测试 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 代码生成场景——评测结果(Pass@1) 自动化评测——代码补全场景 评测方法: 1.在一段评测代码中掩盖X%行的代码后,作为prompt输入模型 2.模型返回代码中取第一行,与1中的prompt组成新的prompt继续输入模型 3.重复第2步,直到模型将代码补全完成 4.将第3步补全完成的代码,执行单元测试,计算Pass@1 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 自动化评测——代码补全场景—评测结果(Pass@1)(CC_MBXP) GOPS全球运维大会暨XOps技术创新峰会2024·北京站 自动化评测——测试生成场景 评测方法: 1.指标采用单测正确率和覆盖率 2.采用humaneval数据集为基础,提供正确的目标函数代码,由模型生成相应的单测,然后计算单测覆盖率和正确性 提示语://Accordingtothecode,generateaunittestfunctionthatcanberundirectly,andthecoveragerateisrequiredtobeashighaspossible prompt=提示语+test_set_up+code_solution+单测函数声明 标准测试函数通过率=(模型生成的测试函数中所有测试用例全部执行通过,且该测试函数的覆盖率达到80%以上)/总数 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 测试生成场景——评测结果 Humaneval_UT数据集 Python Java C++ Go 模型 覆盖率 正确率 正确覆盖率 标准测试函数通过 率(80%) 覆盖率 正确率 正确覆盖率 标准测试函数通过 率(80%) 覆盖率 正确率 正确覆盖率 标准测试函数通过 率(80%) 覆盖率 正确率 正确覆盖率 标准测试函数通过 率(80%) starchat(23年9月)(t0.1) 78.88% 15.24% 98.00% 14.63% 24.42% 6.10% 94.50% 5.49% 44.47% 10.98% 97.41% 10.37% 69.03% 14.02% 89.94% 11.59% githubcopilotchat(23年11月)(t0.2) 87.75% 49.39% 99.00% 48.17% 87.21% 54.27% 99.32% 53.66% 92.11% 57.32% 99.77% 57.32% 88.54% 46.34% 99.23% 45.73% starchat-sft(t0.1)*prompt不加测试函数声明**prompt增加测试函数声明 85.77% 23.17% 99.08% 23.17% 55.38% *47.35% ** 12.80%*28.66 %** 85.32%*36.07 %** 9.15%*8.54%* * 76.55% 33.54% 93.54% 28.66% 74.05% 21.95% 93.03% 18.90% ??? 62.66% 3.05% 99.00% 3.05% 44.89% 7.32% 98.76% 7.32% 80.92% 26.22% 99.32% 25.61% 15.74% 7.93% 34.82% 1.83% CodeLLM-a6-new-tokenizer 68.62% 22.56% 99.41% 22.56% 17.32% 9.76% 96.94% 9.15% 58.87% 28.66% 92.72% 26.22% 80.42% 19.51% 93.23% 17.68% 02LLM代码能力评测数据集 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 习语挖掘API挖掘 代码克隆检测代码规范检测信息提取 程序验证缺陷定位文档摘要总结代码注释代码评审 代码补全代码翻译测试生成代码修复代码混淆代码反混淆 代码搜索代码生成 程序归纳 (模拟程序执行) 模型评测——代码大模型应用分类 程序生成 LLM 代码应用 代码模式 输出 自然语言 代码 LLM代码应用分类 源代码分析 输入代码 自然语言 输入 输入/输出示例 代码 输出代码 基于输入和输出的大代码应用分类 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 DeepLearningforSourceCodeModelingandGeneration:Models,ApplicationsandChallenges 模型评测——评测任务分类 基于LLM代码应用分类,设计代码大模型评测任务分类 •22种任务分类 •12个高优先级场景分类 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 分类方法 任务分类 任务描述 优先级 输入代码,输出自然语言 文档生成 生成软件程序的文档,从而帮助解释源代码的需求、操作和用途,并使软件维护更容易。 P2 代码注释 对当前代码进行简洁、准确的注释,包括解读代码逻辑、功能、算法原理等 P1 代码解释 描述源代码或函数的主要功能;对代码语言类型、代码实现功能进行详细解释 P0 代码评审 在当前代码中识别可能导致软件缺陷的不良编码实践;对当前代码进行评价等。 P1 输入代码,输出代码 代码补全 将未完成的函数、脚本自动补充完整 P0 代码翻译 将一种编程语言的代码转换为另一种编程语言 P1 测试生成 生成单元测试,如编写测试用例、使用测试框架、进行测试覆盖率分析等 P0 代码修复 验证程序正确性、定位错误之后对bug进行修复,并且输出修复好的正确的程序;也包含代码格式化、复杂度优化、代码执行效率的优化 P1 代码混淆 防止未经授权者分析和窃取源代码,基于源代码生成混淆后的代码,从而保护知识产权 P2 代码反混淆 代码去混淆与混淆相反,去混淆可以从混淆代码中恢复源代码的原始版本 P2 代码执行 输出代码执行结果 P1 输入自然语言,输出代码 代码搜索 根据自然言查询返回现有源代码的最佳匹配片段 P2 代码生成 代码补全的特殊情况,根据用户指令从头到尾生成完整代码;也包含重构/改写代码 P0 输入程序输入输出用例,输出执行 结果 程序归纳 程序归纳旨给定的输入/输出示例来模拟程序执行,其中执行的正确性比源代码的可读性更重要 P2 输入自然语言,输出自然语言 系统设计 问题要求分析系统需求并根据软件工程的方法进行系统设计 P1 编程基础知识 问题主要提问编程语言如何使用,编程相关技术的咨询,通常涉及到对语言特性的解释、代码示例的提供,以及可能的最佳实践的讨论。 P0 输入自然语言,输出代码模式 习语挖掘 习语挖掘提取跨项目重复出现的代码段,既编码习惯用法,可以跨项目复用 P2 API挖掘 API挖掘是指从现有的软件项目(代码或描述)中自动识别和提取API使用模式或者最佳实践的过程,帮助开发者更好地理解和使用API,从而提高编程效率和代码质量。 P2 代码克隆检测 代码克隆检测是指在软件项目(代码或描述)中自动识别相似或者完全相同的代码片段的过程。 P2 代码规范检测 代码规范检测发现特定编程语言推荐但编译器未强制执行的代码实践。这些编码规范(例如,缩进、命名约定、空格)有助于提高源代码的可读性和可维护性。 P2 信息提取 信息提取旨在从自然语言、图像或视频中识别某些代码片段、程序或软件相关的工件的存在。 P2 缺陷定位 Bug定位与程序验证密切相关,除了代码之外,还可以识别特定类型Bug的位置。 P1 模型评测——评测体系框架 •根据“从产品到技术”的思路,划分用户/产品、场景/任务、领域/框架、开发语言四个评测维度 •以用户/产品的场景/任务为出发点,设计评测指标,确定任务优先级和指标权重 评测指标(业界通用指标、自定义指标) 工蜂Copilot 混元助手 用户/产品 评评 文档生成 测试生成 代码注释 代码评审 代码补全 缺陷定位 代码翻译 代码生成 代码解释 系统设计 编程基础知识 测测 维方 度法 信息提取 代码规范检测 代码克隆检测 API挖掘 习语挖掘 程序归纳 代码搜索 代码执行 代码反混淆 代码修复 代码混淆 优场景/任务自 先动 级化 AI/ML与数据科学 游戏引擎开发 游戏客户端开发 Web应用开发 移动应用开发 指评 标测 权工 大数据开发 数据库开发 桌面应用开发 分布式应用开发 企业级应用开发 重程 自动化脚本 中间件开发 桌面GUI应用程序 嵌入式系统开发 云平台开发 术 领域/框架技 开发语言 Python Java Go C++ JS C# Lua TS Kotlin PHP Rust Swift Scala Perl Ruby 评测数据集(开源数据集、自研数据集) GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 代码综合能力评测数据集制作流程 •11类主要任务场景 •5种主流编程语言 V1.0/V2.0… 迭代评测集 改进重点 下一版本 迭代评测 大版本评测 Badcase分析 •3个月内的新数据 出题标准更新 •500题滚动更新 任务分类 题数 编程基础知识 60 测试生成 60 代码解释 60 代码评审 60 代码生成 70(SQL/