您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[2023第十二届全球TOP100软件案例研究峰会]:中科院-李明宇-基于GPT的代码review助手开发与应用 - 发现报告

中科院-李明宇-基于GPT的代码review助手开发与应用

中科院-李明宇-基于GPT的代码review助手开发与应用

“l前深信服科技集团云计算首席专家 l中国科学院计算技术研究所高级工程师,开源项目活跃开发者,20余年编程与软件开发经验,10余年云端系统研发与产业化工作经历。历任国家重点实验室研究组负责人,上市公司事业群技术总监、首席技术专家。l李老师在理论研究和产业实践均有丰富的经验,为多家知名企业和单位落地云原生和数字化转型项目。荣获中国软件协会“优秀CTO”等多项荣誉,兼任中国新一代IT产业联盟分委会秘书长、全国高校人工智能与大数据创新联盟专家委员、北京开源创新委员会委员。 李明宇“编程老师傅” •背景与痛点——让人又爱又恨的Code Review环节•Code-Chat-Reviewer开发历程与实现原理•应用效果与优缺点•最近一个月的新进展•总结与展望 背景与痛点 www.top100summit.com www.top100summit.com 对比:过去(4月份) Pull/Merge Request Review 众所周知的重要性:质量!知识共享、持续维护…… 但是,没有人喜欢PRReview:•成本、短期效率 •心理和社交压力•核心成员的精力分配与持续成长•…… Pull/Merge Request Review 众所周知的重要性:质量!知识共享、持续维护…… 但是,没有人喜欢PRReview:•成本、短期效率 •心理和社交压力•核心成员的精力分配与持续成长•…… 另一个问题:为什么要在Pull/MergeRequestReview环节用LLM?为什么不在其他环节对代码审查中解决?比如VSCodeCopilotReview对象不同,上下文、时间点不同 Code-Chat-开发历程与实现原理Review messages = [{"role": "system","content":""" v0.1gpt-3.5gpt-4 API waitlist ...As an AI assistant with expertise in programming, your primary task is to review the pull request providedby the user. Git1. gitpush3. GETCode Changes5.POSTReview Comments4.Human ReviewerX17. Comment / Approve6. Revise效果与问题:gpt-3.5效果不理想,挑出来的问题比较琐碎大家很期待gpt-4API的开放When generating your review, adhere to the following template:**[Changes]**: Summarize the main changes made in the pull request in less than 50 words.**[Suggestions]**: Provide any suggestions or improvements for the code. Focus on code quality, logic,potential bugs and performance problems. Refrain from mentioning document-related suggestions such as "Isuggest adding some comments", etc.**[Clarifications]**: (Optional) If there are parts of the pull request that are unclear or lacksufficient context, ask for clarification here. If not, this section can be omitted.**[Conclusion]**: Conclude the review with an overall assessment.**[Other]**: (Optional) If there are additional observations or notes, mention them here. If not, thissection can be omitted. 2. WebhookPrompts/MessagesGeneratedThe user may also engage in further discussions about the review. It is not necessary to use the templatewhen discussing with the user.""", "content":f"Review the following pull request. The patches are in standard `diff` format. Evaluate thepull request within the context of the referenced issues and full content of the codefile(s).\n{changes_str}\n",}, v0.2gpt-4prompt engineering 效果与问题: v1-alphaDatabaseChat / Conversation8. Comment / Approve Git 3. GETCode Changes5.POSTReview CommentsHuman ReviewerX17. Revise4.效果与问题:引入Chat机制带来的效果不错但,Review结果不收敛,修改后又提出新的意见,没完没了... 1. gitpush Review-Bot2. WebhookGenerated GPT Contributor MongoDB6.Chat/Conversation www.top100summit.com 应用效果与优缺点 https://github.com/OpenRHINO/RHINO-Operator/pull/51“为"等待Minikube"步骤添加超时,以防Minikube启动失败时工作流无限期地运行” https://github.com/LI-Mingyu/cndev-tutorial/pull/23"在Chart.yaml中,appVersion被设置为"1.16.0"。确保它与您要部署的实际应用程序版本匹配。" https://github.com/OpenRHINO/RHINO-Operator/pull/38“在Reconcile函数中使用常量而不是硬编码的字符串来表示pod和job的状态值” ①交流设计考量 ②给出实现代码 •一些简单的问题并没有检查出来(但大部分应该可以通过自动化测试避免) •对自身代码Review时容易混淆Prompts,对其他同类项目有可能存在类似问题?(未验证)•还是会提一些琐碎的问题 •缺少对项目整体上下文的考虑未来100K以上tokenscontext-length模型的测试(一行代码大约10~20个tokens) 最近一个月的新进展 也无法调试 上传、下载图片、CodeInterpreter…… GPTs看不到构建历史,也无法调试用户访问本身无日志,但是从外部调用可以记录日志 RAG效果一言难尽……复杂场景目前还是需要接入第三方服务 不用保存对话历史了 很方便地换SystemMessage(Instruction) 目前不支持回调,需要不断轮训。调用参数不可控 总结与展望 整体效果: 审核工作量降低70+% 局部问题导致的代码质量问题减少40+% 核心程序员代码贡献量提高一倍以上 低频场景,异步:可以接受比较贵(常常也慢)的模型,可以构造比较复杂的调用链以及多模型融合 •••• ààà à 微 信 官 方 公 众 号 : 壹 佰 案 例关 注 查 看 更 多 年 度 实 践 案 例