ChatGPT 等大语言模型给人带来惊喜也给人带来了焦虑。惊喜在于它给各种工作带来的提效是肉眼可见的,焦虑在于很多人都担心会被 AI 替代,可能工程师们对此最深有感触。很多工程师已经开始用 GPT 来处理一些手头的开发工作,可能是写脚本,也可能是 code review,不过 GPT 给编程带来的效能提升到底有多大?使用 GPT 来辅助编程的“正确姿势”是什么?你真的知道么?
7月26 日, DevData Talks 邀请到了思码逸创始人兼 CEO 任晶磊老师。为了获得将GPT应用于编程的真实手感,他与团队身体力行,用 GPT“写了一万行代码”,并开发一款基于 GPT 的开源编程工具 DevChat,并上线了 VS Code 插件。在这次直播活动中,他以《当我用 GPT 写了一万行代码:研发数据的现状和智能编程的未来》为主题,分享了通过自家产品的演进看数据智能的发展趋势,揭示 GPT 在软件开发领域的实际操作场景和优化技巧,并在直播后半段,为线上观众们答疑解惑,做了深度交流。
本文为演讲精华整理。由于演讲包含大量技术细节,篇幅有限,我们仅摘选了部分亮点,建议大家在文末扫码获取 PPT、观看视频回顾。
今天分享主要分为五部分:
-
GPT 编程能带来多大效能提升?
-
我可以问 GPT 什么问题?
-
我应该如何向 GPT 提问?
-
人在 GPT 编程中扮演什么角色?
-
GPT 在软件工程中扮演什么角色?
-
我们如何成长为“新程序员”?
GPT编程能带来多大效能提升?
+50%代码当量,注释和测试覆盖度大幅提升。
我们先从一个直白的数字谈起,到底用 GPT 之后有多大提升?我觉得要给一个数字的话,代码的产出量应该能比现在高50%,首先看下图,图为思码逸本身的统计,拿我们自己做 Devchat 项目为例,它是以 Python 为主要编程语言的项目。
我们从开源社区里找了一些 TOP500 的开源项目来做对比,他们也是平均周提交数在两三个人的项目。其实很多成熟的开源项目,周均提交可能就两三个人,那如果对比下来,周均 1000 当量,当量是通过代码分析所获得的一个代码复杂度的评估,不能通过数行数看大家写多少,那就当量来看的话,在 1000 当量每周,三个人平均计算之后,大概是 1500 到 2000 这样一个范围,所以基本上能加50%。
图为:思码逸 Devchat 统计
我可以问GPT什么问题?
下面我们来看跟 GPT 的各种具体交互,那这部分得有一个方法把它组织起来,所以我们以一个完整的实例,看从头到尾中间能用GPT去做哪些事情,例子比较有代表性:用 Golang 写一个 API 服务,跑 Kubernetes 里,那我们就从实例开始看, GPT 它能够帮助我们做哪些事情,能做到什么样的程度?
1.询问较为稳定的知识,辅助综合技术选型
需求不完全明确,可寻求一般性建议 ;如果需求明确,可快速提炼信息。
图为:Devchat提问解答过程
2.搭建脚手架或可运行的初始代码,让万事开头“易”
GPT能够完整的帮你把操作步骤都写出来,大家可以偷个懒,直接按照它的步骤敲代码就好。
图为:Devchat提问解答过程
3.向 GPT 反映错误信息,让它帮助 debug
把错误信息给到GPT,像这样的错误信息以前都读过,然后就能够给你相应的修正。
图为:Devchat提问解答过程
4.提供上下文,生成各类代码
把上下文给到GPT,将关系实质说清楚,不需要很复杂,然后它就能够把所做的修改都给出来。
图为:Devchat提问解答过程
5.IDE 无法支持又不涉及复杂架构设计的代码重构
图为:Devchat提问解答过程
6.提供目标源代码(和现有测试用例),生成新的测试用例
图为:Devchat提问解答过程
7.写提交信息(commit message)或者发布说明(release note)
图为:Devchat提问解答过程
8.理解指定范围内的已有代码,给出具有一定深度的解释和证据
图为:Devchat提问解答过程
我应该如何向 GPT 提问?
前面分享通过一些实例,一方面展示 GPT 本身的能力,另一方面也分享 GPT 的使用技巧,下面再总结一下如何向 GPT 提问。
1.提示词工程(prompt engineering)
底层信息组合,未必对用户可见,具体问题相关,必须由用户输入。
2.底层信息组合,未必对用户可见
3.具体问题相关,必须由用户输入
人在 GPT 编程中扮演什么角色?
用 GPT,你永远省不了超出你认知范围外的工作。
有了GPT之后,人和GPT到底是什么样的关系?我觉得上图基本上就概括了我们截至目前所体验下来的一个认知,人其实还是扮演了一个很重要的控制者的角色,基本上拆分起来就是这三个角色。
任务的组织者,你需要把这个任务本身进行比较合理的拆分,定义好这个问题,然后提供合理的上下文,这是人最重要的工作,这件事情目前我们试来试去,你让 GPT在去做这个层面的问题,往往其实做的不是很好,因为人有很多综合的判断。
过程指导者,你需要不断的给予反馈,调整提示词。往往有些时候你不一定在一轮都能达到好的结果,然后会多轮的去问。
结果验证者就是人最终还是那个主要负责人,你还是要为代码负责并做出判断。
GPT在软件工程中扮演什么角色?
汇集众多数据源的研发数据平台是智能化的基础。
这里用思码逸4.0产品来举例,GQM是做研发效能数据分析的一个基本方法,我们有支持这个方法的一些看板,可以帮助你灵活的去下钻和定位问题。然后也有专家系统,基于组织的极限,得出一些靠谱的、可行动的一些结论。
图为:思码逸产品矩阵图
那今天有了 AI 之后,它带来的变化使得我们对这种非结构化分析的能力增强,其实是把不可能变成了可能。有了 AI 能力加持,结构化数据和非结构化数据都能够盘活,所以在我们自己的这个产品体系当中,包括结构化数据、非结构化数据和代码,其中代码既是结构化数据也是非结构化数据,它们都在数据湖中。我们面向研发的数据湖叫做 DevLake,这个也是我们捐给 Apache 的一个项目。现在其实全球有这个几十万的下载,美国一些非常著名的公司都是在用。
面向技术管理者的是DevTable这个产品。DevInsight能为管理者呈现不同的数据看板,并提供智能的洞察。图中的DevChat就是刚刚提到的开源工具,可以在 VS Code,上面免费用。而刚刚在讲 GPT 的示例时的截图,其实都是在IDE中的,DevChat 会提供更方便的工作流,帮助我们去更好的去使用 AI 。
我们如何成长为“新程序员”?
我认为在当前的技术趋势下,作为开发者,我们应当像练习写作和编码一样,练习写提示词;作为管理者,我们应该积极倡导和运营,关注研发数据基础设施,统计 GLOC 和代码当量。
直播回顾看这里👇👇