作者:蒋志伟
个人简要
蒋志伟
爱好技术的架构师参与OpenTelemetry开源社区
曾0-1搭建美团APP的推荐、搜索服务曾负责Qunar.com上亿用户机票搜索、低价推荐系统有旅游GDS(全球分销系统)的技术专利
开源项目
基于场景的AI编程测评集https://github.com/laziobird/CodeLLMTEval
CONTENTS
01
AI辅助编程的背景与发展
AI在自然语言处理NLP上的里程碑
2017GoogleOpenAITransformer模 型在翻译任务上超过之 前最优秀的循环神经网络模型采 用Attention Layers重点解决多义词问题,基于此的GPT模型让AIGC极大发展
Code LLM(代码生成大语言模型)的发展
人工智能对自然语言的上下文推理、一词多义理解能力的加持。让场景契合的辅助编程领域有了快速的发展
辅助编程相关场景任务一般有三大类:
•代码-代码:包含代码补全、代码修复•代码-文本:代码解释、代码优化、代码异常排查•文本-代码:通过高级提示词Prompt做代码生成(单元测试、API、SQL、数据建模等)
Code LLM:代码生成大语言模型的发展
关键模型与项目
•2024.7 CodeGeeX4https://github.com/THUDM/CodeGeeX4•2024.6 DeepSeek-V2https://github.com/deepseek-ai/DeepSeek-V2
现有Code LLM测评数据集问题
模型测试训练、测试数据不足
现有的Code LLM测评工具通常使用有限的训练数据以HumanEval、MBPP代表代码模型评测数据几年没更新
评估标准单一
现有的Code LLM测评原理只关注代码结果的正确性,看不到代码的可读性、完整性、通用性等维度的信息
测评打分原理造假容易
各家公布自家测试结果,测评是黑盒的状态将测评集放到训练集中训练,好比拿着标准答案答考题,测评分数会虚高
Github上公布的测评结果明显有水分
代码大模型各家评测基数差异巨大
•同样大模型不同测评来源,评分不一样
•智谱CodeGeeX 4
•基本常识性错误
代码大模型评测集工作原理
最常用的测评:Human EvalOpenAI发布的一个评估大型语言模型在代码生成方面表现的基准测试。它包含164个设计的Python编
程任务,每个任务有多个单元测试,通过评估模型生成的代码是否能通过这些单元测试来评判模型的能力
根据测评文件编程任务给出prompt,调用大模型生成完整代码,保存到一个样本文件的completion字段中
代码大模型评测集工作原理
用程序读取样本文件,批量把任务生成中代码和任务的单元测试代码合并成一个完整的程序
批量动态执行每个任务程序,如果单元测试用例通过,返回passed,最后调用pass@k的算法测评打分
假设样本文件叫samples.jsonl,调用叫evaluate_functional_correctness函数完成1-4的步骤
简单来造个假
简单用测试集和问题集运行打分效果,pass@k分值0.16
02
基于场景功能的测评测试集
基于编程场景的测评
实际编程出发看到真正的价值
编程使用场景
从日常编程习惯,按频率和功能进行工具的对比测评,如代码补全、缺陷查找、代码调优、报错排查、代码解释等
提示词生成能力
提示词生成功能代码的能力,如API文档、单元测试、代码注释、参考模版编写新模块等能力的对比测评
业务建模能力
辅助编程能更多读懂我们的业务逻辑,参与框架设计,如数据库表设计、项目构建、根据数据模型生成Service代码
客观加主观判定
不能只局限程序对错简单打分,要加入更多判断标准:成熟度、完整度、易用性、语言特性等
代码补全提示
•上下文理解
从代码上下文补全的结果,对比其理解和输出的准确能力
•统一风格能力
基于已有的代码模版和示例,新的示例自动补全的准确性和代码风格的统一性能力
考虑国内的正常使用,测评基于国内辅助编程平台,同时参考Github Copliot。我认为的第一梯队产品去比较为了避嫌,暂且A、B、C表示。最后有测评总结报告,列出第一梯队和测评产品完整对比结果
代码补全提示
•统一风格能力
这是有关电商产品库的真实代码先设计好类目表LsCategory相关数据库操作模版示例
优秀、体验非常棒,内容风格一致
差、几乎没法用
参考LsCategory模版,对比辅助生成电商Spu实例效果
补全一般,代码注解不一致
代码补全提示
上下文理解能力
这是有关机票搜索的真实的代码,search方法根据入参搜索条件返回搜索结果
先输入文字注释,看看A、B、C各自代码补全效果:
•B、C理解了注释的意图,拿了不存在的入参属性•A理解想表达意图同时,给出了代码库中正确方法,也秒懂打印日志的意图
测评维度
•不同项目案例逐行提示、多行提示测评•代码补全总的代码采纳率作为测评标准•长期统计,A代码采纳率略高,上下文能力一般,幻觉多
高频缺陷查找
•常见致命缺陷
导致CPU100%的死循环、各种严重的内存溢出、基本业务逻辑错误、线程并发死锁问题这类缺陷特点:常年高频发生、对业务影响大、往往花更多的精力进行线上排查和修复
高频缺陷查找
•举个例子
导致CPU100%的死循环
B
C
publicclassendlessLoop{publicstaticvoidmain(String[]args){intcount=0;while(count<10){if(count==3){continue;}System.out.println(count);count++;}}}
A
左边是一个常见的死循环Case,A、B、C都没有发现这个致命问题,用ChatGPT明确告知会导致无限循环和修复建议。这种程序往往导致线上服务无法工作
高频缺陷查找
•测评维度
•综合打分:借鉴HumanEval打分思路,根据高频缺陷查找场景分析有没有缺陷正确与否进行•开源测评集:同时讲主观答案进行提示词模版优化转换成客观答案https://github.com/laziobird/CodeLLMTEval
提示词模版Demo:测评集用代码大模型生成结果的客观答案
检查