1、业务领域代码大模型深度探索与实践顾小东|上海交通大学演讲嘉宾顾小东上海交通大学副教授、博士生导师长期从事智能软件工程领域的研究工作,包括代码大模型、程序自动生成、代码翻译、代码搜索等。提出首个基于深度学习的代码搜索引擎DeepCS。在ICSE、FSE、ASE、TOSEM等顶级学术会议和期刊上发表学术论文30余篇,主持和参与多项国家自然科学基金、国家重点研发计划、国防课题等。并与华为、宁德时代、腾讯等企业开展广泛的产学研合作。研究概览代码生成 特定领域代码生成 仓库级代码生成 生成代码的修复代码翻译 小样本代码翻译 代码翻译的细粒度评估 C2Rust翻译代码修复 大模型生成代码修复 仓库级问题修
2、复代码搜索 跨语言代码搜索 搜索语句重构代码大模型目 录CONTENTS1.背景:代码生成问题与痛点2.探究:大模型在业务领域的表现3.方法:业务知识与大模型的融合4.深入:基于思维链的正则表达式生成5.实践:复杂程序问题修复6.总结与展望背景:程序生成问题与痛点PART 01基于大模型的程序自动生成大模型数据预训练param:=c.Query(param)c.JSON(http.StatusOK,gin.Hmessage:param,)/以下是当前件的相关代码/public skip()/./以下是其他件中的依赖代码/public static read()/./根据以上信息,补全以下代码/
3、*注册消息通知*/funcfunc Register(router*Register(router*gin.RouterGroupgin.RouterGroup)/以下是相应的代码样例/样例1,/样例2,代码生成有监督微调(SFT)参数高效微调(PEFT)人类反馈强化学习(RLHF)检索增强(RAG)多agent提示关键技术研究现状HumanEval评测榜单挑战大模型的领域面广而不深l 大模型依赖海量的训练数据,而专用领域的训练数据有限l 大模型在开放领域数据上预训练,缺少专用领域的知识(API、业务知识、项目私有函数等等)专用领域GitHub通用领域探究:大模型在业务领域代码生成方面的表现P
4、ART 02经验研究RQ1:大模型在特定业务领域的代码生成能力如何?RQ2:如何提示大模型生成特定业务领域的代码?RQ3:如何将领域知识引入代码大模型?Gu X,Chen M,Lin Y.et al.On the effectiveness of Large Language Models in Domain Specific Code Generation.TOSEM 2024RQ1:大模型在特定业务领域上的代码生成能力 测试模型:ChatGPT,CodeLlama-7B,PolyCoder-2.7B 测试方法:根据函数签名补全函数体 测试指标:BLEU,CodeBLEU,人工评估 测试数据
5、:l 开放领域数据集:HumanEval,CodeSearchNet(Go)l 专用领域数据集:GitHub上使用了特定领域(web,game)第三方库的500个函数测试结果 定量分析发现2:ChatGPT(开放域大模型)在开放域数据集上效果优于代码专用的大模型。发现1:大模型在特定领域上的代码生成效果有明显下降。测试结果 定性分析随机抽取200个样例进行人工分析16%18%26%40%错误类型占完全正确正确但实现不同API误API缺失发现3:大模型在专用领域的代码生成效果下降,主要因为缺少第三方库的知识,如API的使用方式测试结果 常见错误:功能错误:生成的代码功能不符合用户需求,或者缺失部
6、分功能 函数调用错误:生成的代码语义大致正确,但没有调用正确的API举例:Reference code:ChatGPT:func(api*API)RegisterRouter(router*gin.RouterGroup)v1:=router.Group(constants.APIVersion1)api.execute.Register(v1)func(api*API)RegisterRouter(router*gin.RouterGroup)router.GET(/test,api.Test)RQ2:如何提示大模型生成领域特定代码 测试方法:在大模型提示中加入知识,进行(零样本)代码生成