ChatGPT 等大语言模型给人带来惊喜也给人带来了焦虑。惊喜在于它给各种工作带来的提效是肉眼可见的,焦虑在于很多人都担心会被 AI 替代,可能工程师们对此最深有感触。很多工程师已经开始用 GPT 来处理一些手头的开发工作,可能是写脚本,也可能是 code review,不过 GPT 给编程带来的效能提升到底有多大?使用 GPT 来辅助编程的“正确姿势”是什么?你真的知道么?
7月26 日, DevData Talks 邀请到了思码逸创始人兼 CEO 任晶磊老师。为了获得将GPT应用于编程的真实手感,他与团队身体力行,用 GPT“写了一万行代码”,并开发一款基于 GPT 的开源编程工具 DevChat,并上线了 VS Code 插件。在这次直播活动中,他以《当我用 GPT 写了一万行代码:研发数据的现状和智能编程的未来》为主题,分享了通过自家产品的演进看数据智能的发展趋势,揭示 GPT 在软件开发领域的实际操作场景和优化技巧,并在直播后半段,为线上观众们答疑解惑,做了深度交流。
今天分享主要分为五部分:
- GPT 编程能带来多大效能提升?
- 我可以问 GPT 什么问题?
- 我应该如何向 GPT 提问?
- 人在 GPT 编程中扮演什么角色?
GPT编程能带来多大效能提升?
+50%代码当量,注释和测试覆盖度大幅提升。
我们先从一个直白的数字谈起,到底用 GPT 之后有多大提升?我觉得要给一个数字的话,代码的产出量应该能比现在高50%,首先看下图,图为思码逸本身的统计,拿我们自己做 Devchat 项目为例,它是以 Python 为主要编程语言的项目。
我们从开源社区里找了一些 TOP500 的开源项目来做对比,他们也是平均周提交数在两三个人的项目。其实很多成熟的开源项目,周均提交可能就两三个人,那如果对比下来,周均 1000 当量,当量是通过代码分析所获得的一个代码复杂度的评估,不能通过数行数看大家写多少,那就当量来看的话,在 1000 当量每周,三个人平均计算之后,大概是 1500 到 2000 这样一个范围,所以基本上能加50%。

我可以问GPT什么问题?
下面我们来看跟 GPT 的各种具体交互,那这部分得有一个方法把它组织起来,所以我们以一个完整的实例,看从头到尾中间能用GPT去做哪些事情,例子比较有代表性:用 Golang 写一个 API 服务,跑 Kubernetes 里,那我们就从实例开始看, GPT 它能够帮助我们做哪些事情,能做到什么样的程度?
1.询问较为稳定的知识,辅助综合技术选型
需求不完全明确,可寻求一般性建议 ;如果需求明确,可快速提炼信息。

2.搭建脚手架或可运行的初始代码,让万事开头“易”
GPT能够完整的帮你把操作步骤都写出来,大家可以偷个懒,直接按照它的步骤敲代码就好。

3.向 GPT 反映错误信息,让它帮助 debug
把错误信息给到GPT,像这样的错误信息以前都读过,然后就能够给你相应的修正。

4.提供上下文,生成各类代码
把上下文给到GPT,将关系实质说清楚,不需要很复杂,然后它就能够把所做的修改都给出来。

5.IDE 无法支持又不涉及复杂架构设计的代码重构

6.提供目标源代码(和现有测试用例),生成新的测试用例

7.写提交信息(commit message)或者发布说明(release note)

8.理解指定范围内的已有代码,给出具有一定深度的解释和证据

我应该如何向 GPT 提问?
前面分享通过一些实例,一方面展示 GPT 本身的能力,另一方面也分享 GPT 的使用技巧,下面再总结一下如何向 GPT 提问。
1.提示词工程(prompt engineering)
底层信息组合,未必对用户可见,具体问题相关,必须由用户输入。

2.底层信息组合,未必对用户可见

3.具体问题相关,必须由用户输入

人在 GPT 编程中扮演什么角色?
用 GPT,你永远省不了超出你认知范围外的工作。

有了GPT之后,人和GPT到底是什么样的关系?我觉得上图基本上就概括了我们截至目前所体验下来的一个认知,人其实还是扮演了一个很重要的控制者的角色,基本上拆分起来就是这三个角色。
任务的组织者,你需要把这个任务本身进行比较合理的拆分,定义好这个问题,然后提供合理的上下文,这是人最重要的工作,这件事情目前我们试来试去,你让 GPT在去做这个层面的问题,往往其实做的不是很好,因为人有很多综合的判断。
过程指导者,你需要不断的给予反馈,调整提示词。往往有些时候你不一定在一轮都能达到好的结果,然后会多轮的去问。
结果验证者就是人最终还是那个主要负责人,你还是要为代码负责并做出判断。