大语言模型在真实开发场景下的实践
个人简介
吴沁芸,代码智能团队高级算法工程师,负责面向开发者的代码编程助手中代码生成相关的算法研发及业务落地,在MSR、FSE等重要学术会议上发表过相关学术工作。
目录
- 工业界代码补全评估体系
- 代码补全未来:编辑推荐
- 代码生成Copilot回顾&探索
- 字节跳动代码生成探索历程
工业界代码补全评估体系
现有评测指标的问题
- HumanEval:题目不匹配真实项目代码补全场景,存在数据泄漏,学术界/工业界刷分现象严重。
- 评测集局限性:
- 场景单一:仅提供语句级、函数级或类级生成能力评估。
- 缺乏仓库级信息:未充分利用代码库中的上下文信息。
- 单测不充分:测试用例不足,评测结果不置信。
- 缺乏基准测试与真实生产环境相关性研究。
构建自研评测体系的重要性
- RepoMasterEval:基于真实世界仓库构建评测集,确保真实性、高质量和置信度。
- 仓库筛选:要求每个代码仓库至少获得100颗星,活跃且不断更新,包含测试文件并经过手动核实。
- 题目构建:保证测试的多样性,通过mutation testing方法增强单测充分性,人工补充单测。
- 评测流程:利用Git commit历史记录和LintError信息,提取用户编辑行为信息。
代码生成Copilot回顾&探索
GitHub Copilot
- 模型:基于GPT-3构建,与OpenAI合作训练Codex模型,持续迭代提升性能。
- 产品形态:放弃Chat Bot,选择代码补全,因其容错率高、用户粘性强。
- 交互:使用Ghost Text展示推荐代码,Tab键采纳,继续输入取消推荐,发挥多行补全优势。
- 低延时&提示工程:
- 低延时:优化推理速度和工程链路,平均延迟500ms。
- 提示工程:通过加入文件路径、相似代码、浏览记录等信息提升代码补全表现。
字节跳动代码生成探索历程
- 产品体验快速迭代:组建算法、工程和产品一体的智能编程助手团队。
- 功能扩展:自研代码LLM评测集和自动评测系统。
- 难点:评估和创新。
代码补全未来:编辑推荐
代码补全/续写的局限性
- 仅解决编写全新代码问题,无法胜任编辑已存在代码的任务(新增、删除、替换等操作)。
代码编辑推荐的概念
- 开发者实现log函数,调用该方法,需手动修改函数和调用方。
- AI可帮助完成修改,提升效率。
数据构建和模型训练方法
- 数据构建:利用Git commit历史记录和LintError信息。
- 模型训练:
- 基于代码大语言基座模型。
- 通过CT和SFT模型理解diff格式数据。
- 加入ErrorMessage修复Lint Error。
- 通过SFT修正模型过度编辑行为。
落地场景
- 功能与交互演示:
- 批量修改。
- 下一步预测。
- LintError修复。
未来展望
- 关于产品形态:
- 完全自主的代码生成Agent可能不适合复杂任务。
- AI应更智能地识别人类意图,主动参与编码过程。
- 关于模型:
- 支持更长的上下文长度(百K甚至M级别)。
- 维持长上下文支持的同时具备更快推理速度。
- 模型不一定采用标准Transformer架构。
- 模型具备代码编辑能力。
欢迎体验豆包MarsCode