前言
自从LLM的发展,LLM4Code已经生成一个落地比较强的方向了,比较好的产品就是github的copilot。
这些天看了不少code的相关paper,准备花几篇文章大概总结一下,主要总结一些有价值的点,细节就不展开了。细节可以自己去看下原文
主要的方向就是code review,code generation等
一、GPT-3.5 for Code Review Automation: How Do Few-Shot Learning, Prompt Design, and Model Fine-Tuning Impact Their Performance?
链接:https://arxiv.org/pdf/2402.00905.pdf
这篇文章主要是讨论小样本学习、提示设计(即使用角色模式)和模型微调对 GPT-3.5 的影响。
流程中已经很清晰的给出三种实验了。
1.1 Zero shot prompt设计

1.2 few shot prompt设计
这里的例子由 BM25 检索方法 从训练集中获取三个输入和输出示例对。
1.3 数据集
CodeReviewer
Tufanodata
D-ACT
1.4 结论
建议在使用 GPT-3.5 进行代码审查自动化时
(1) 应进行小样本学习而不是零样本学习
(2) 构建提示时不应包含角色,以及
(3) GPT-3.5 应使用小型训练数据集进行微调。
二、Improving Automated Code Reviews: Learning From Experience
https://arxiv.org/pdf/2402.03777.pdf
这篇paper着重挖掘了reviewer的experience,文章指出具有高创作/或审查经验的审阅者来训练模型,并在训练期间过度表示他们的示例。使用这种方法,过采样示例将对模型的行为产生更大的影响,从而生成更高质量的评论。
根据commit 数量和pr的数量的关系,分为:major authors、 minor authors 、major reviewers、minor reviewers,所以用户的角色也有很多种,这意味着reviewer的经验会不一样。
2.1 流程
数据准备:在github找了很多10k star的高星项目,提取其中的review等信息
review的meta信息:这个直接通过github rest api就可以获取到,比如commit diff, date等信息
删除机器人:这个意思应该是很多review也有机器人作用的,而我们要的是人的review的样本,所以删除
挖掘审阅者经验:
其中身份比例:
对三种身份(仅主要审稿人主要作者(MRMA)、所有主要审稿人(MR)、所有主要作者(MA))每一种分别微调
三、Using an LLM to Help With Code Understanding
ICSE2024的一篇文章来自CMU:https://arxiv.org/pdf/2307.08177v3.pdf
这篇文章主要是讨论产品形态的,和技术关系也不大
3.1 插件形态
本文中作者开发了一个插件

在选中2的一段代码后,会直接触发生成3所指的overview部分,文中把3所选框内称为无提示交互,只需要点一点就可以了,而chat部分还需要写提示。
在显示代码的摘要说明(概述)。然后,可以通过单击 API (API)、特定领域概念 (Concept ) 和用法示例 (Usage) 的按钮进行进一步探索。
3.2 实验
简单说下实验,就是找了很多人,有学生有研究人员,有用过chatgpt的也有没有用过的,做一个数据可视化3D渲染的工作。
主要就是把左图中的兔子,最终旋转并易到板凳上。
中间有很多小的task,作为中间过程。实验的人主要是通过插件来逐步完成这个任务。

与专业人士相比,学生在编程信息搜索方面的经验可能较少,在制定有效提示方面遇到了挑战,并且更多地依赖无提示的互动(Overview),主要也是突出了这种推送式、点击式、不需要prompt的方式更易用。
四、Automatic Semantic Augmentation of Language Model Prompts (for Code Summarization)
ICSE2024的一篇文章,来自加州大学: https://arxiv.org/abs/2304.06815

4.1 方案
Few shot: 通过寻找与输入code相似的样本作为few shot例子,具体是BM25 IR 算法从训练集中选择相关的小样本样本。
Automatic Semantic Augmentation of Prompts (A𝑆𝐴𝑃):

主要增加
repo info:仓库的名字、文件的路径以及方法名字:如“tony19/logback−android”、“apache/parquet−mr”、“ngageoint/geo−package−android” 都将函数连接到特定领域(如android、apache、地理位置 ),可以增强对要总结的目标代码的理解
标记标识符:标识符在代码中扮演着不同的角色。局部变量、函数名称、参数、全局变量等在它们发生的方法的功能中起着不同的作用,使用 tree-sitter 遍历函数的 AST 并收集标识符及其角色
DataFlow:通过tree-sitter得到

推荐阅读:
公众号:AI蜗牛车
保持谦逊、保持自律、保持进步
发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)
发送【1222】获取一份不错的leetcode刷题笔记
发送【AI四大名著】获取四本经典AI电子书