“新程序员”必须学会的GPT提问技术

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提问技术
图为:思码逸 Devchat 统计

我可以问GPT什么问题?

下面我们来看跟 GPT 的各种具体交互,那这部分得有一个方法把它组织起来,所以我们以一个完整的实例,看从头到尾中间能用GPT去做哪些事情,例子比较有代表性:用 Golang 写一个 API 服务,跑 Kubernetes 里,那我们就从实例开始看, GPT 它能够帮助我们做哪些事情,能做到什么样的程度?

1.询问较为稳定的知识,辅助综合技术选型

需求不完全明确,可寻求一般性建议 ;如果需求明确,可快速提炼信息。

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

2.搭建脚手架或可运行的初始代码,让万事开头“易”

GPT能够完整的帮你把操作步骤都写出来,大家可以偷个懒,直接按照它的步骤敲代码就好。

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

3.向 GPT 反映错误信息,让它帮助 debug

把错误信息给到GPT,像这样的错误信息以前都读过,然后就能够给你相应的修正。

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

4.提供上下文,生成各类代码

把上下文给到GPT,将关系实质说清楚,不需要很复杂,然后它就能够把所做的修改都给出来。

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

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

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

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

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

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

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

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

“新程序员”必须学会的GPT提问技术
图为:Devchat提问解答过程

我应该如何向 GPT 提问?

前面分享通过一些实例,一方面展示 GPT 本身的能力,另一方面也分享 GPT 的使用技巧,下面再总结一下如何向 GPT 提问。

1.提示词工程(prompt engineering)

底层信息组合,未必对用户可见,具体问题相关,必须由用户输入。

“新程序员”必须学会的GPT提问技术

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

“新程序员”必须学会的GPT提问技术

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

“新程序员”必须学会的GPT提问技术

人在 GPT 编程中扮演什么角色?

用 GPT,你永远省不了超出你认知范围外的工作。

“新程序员”必须学会的GPT提问技术

有了GPT之后,人和GPT到底是什么样的关系?我觉得上图基本上就概括了我们截至目前所体验下来的一个认知,人其实还是扮演了一个很重要的控制者的角色,基本上拆分起来就是这三个角色。

任务的组织者,你需要把这个任务本身进行比较合理的拆分,定义好这个问题,然后提供合理的上下文,这是人最重要的工作,这件事情目前我们试来试去,你让 GPT在去做这个层面的问题,往往其实做的不是很好,因为人有很多综合的判断。

过程指导者,你需要不断的给予反馈,调整提示词。往往有些时候你不一定在一轮都能达到好的结果,然后会多轮的去问。

结果验证者就是人最终还是那个主要负责人,你还是要为代码负责并做出判断。