当你还在错误使用对话 AI 工具如 GPT,可能会觉得其作用不过是知识平移总结或简单问答。实际上,当了解先进的用法、知悉如何做到 better prompt,你会发现:AI 不是来替代你的,是来帮助你更好工作。如果还用搜索引擎的“关键词匹配”、“关键词命中”思路去思考人工智能的使用,已然有些落后。本篇在详细介绍几个GPT帮助程序员工作(干货满满)的应用场景之后,将为你分享AI的正确打开方式——better prompt。欢迎阅读和分享。
1.背景
2. AI可以帮助程序员做什么?
2.1 技术知识总结
2.2 拆解任务
2.3 阅读代码/优化代码
2.4 代码生成
2.5 生成单测
2.6 更多AI应用/插件使用体验
3. Prompt 能力
3.1 Prompt 是什么?
3.2 Better Prompt
4. 总结
01、背景
尤记得每个月「本月全球最流行编程语言」发布的时候,都会在程序员届掀起腥风血雨。“Java 下降了一名,怎么可能”、“JavaScript 又占据榜首,门槛太低,写个脚本就算用了吗?”、“C# 这种单平台语言也就是闭环生态内的产物了” 这类言论层出不穷,大家也都乐此不疲,已然是以前的流量密码。
然而这一切现在似乎已经悄悄变化了。大家开玩笑说现在使用的最多的编程语言,已经是英语(自然语言)了。
现在 GPT 已经开启了人工智能狂潮。在社交圈里不聊上两句 ChatGPT,感觉不只是要和时代脱节,更是已经被开除 IT 籍了 ~
笔者在 2022 年 12 月初开始体验 ChatGPT。一开始我向它提一些有趣的问题,例如“告诉我 TCS 相关的知识”等等。相信绝大多数人一开始使用的时候都是如此,那时候互联网上认为它的功效应该是代替知乎,让 ChatGPT 作为问答知识类的平台。知乎已死的声音甚嚣尘上。
后来大家又发现,它的很多回答都是胡编乱造的。例如你问它一些新上映的电影,它即使不知道也会胡编乱造一通。大家又开始贬低它,觉得只不过就是一个普通的聊天机器人,还是尬聊型选手。
去年相关的论文的分享介绍比较少,市面上的评价分析的角度还停留在认为 ChatGPT 只能针对已有知识进行总结,或者是平移。
但是随着使用的人数越来越多,大家才知道,ChatGPT 与语言无关,你用任何语言去提问,它都可以很好的理解你的意思。 因为它使用的是语言模型,而不是具体的某个语言库。如果还用搜索引擎的“关键词匹配”、“关键词命中”思路去思考人工智能,就已经显得有些落后了。本篇在介绍 AI对话工具能如何帮助程序员工作(干货满满)之后,将为你分享AI的正确打开方式——better prompt。
02、AI 可以帮助程序员做什么?
2.1 技术知识总结
刚开始接触学习一门技术的时候,难免需要去查看文档。现在的手册非常丰富。往往对于一个初学者来说,需要接触的信息太多、排版五花八门,学起来云里雾里。
这时候就可以借助 ChatGPT 的总结能力,例如我想学习一下 K8S 的相关知识,我发给它一个文档的地址,让它帮我总结。
prompt: kubernetes.io/zh-cn/docs/…
可以看到,它很好地总结了这篇中文的文档,并且对每一个关键点进行了概括。用最少的语言让你能够搞懂你想要的知识点。
因为 ChatGPT 是有上下文的,它知道你需要的内容是中文的总结,所以在这里你继续发一篇英文的文档给它,它也会用中文帮你总结。
prompt: 总结这篇文档kubernetes.io/docs/concep…
目前 chatgpt 的免费版本数据库的截止时间是 2021 年,也就是说如果问它比较新的内容,它是无法总结的,甚至是会随意编撰。例如这里询问一个关于电影《流浪地球 2》的问题,让它总结一下 wikipedia 里的介绍。
prompt: 总结:zh.wikipedia.org/zh/%E6%B5%8…
因为这时候电影还没有上映,所以之前的内容还都是错误的,它的总结是不准确的。
当我们将整个网站的内容复制进来,让 chatgpt 进行总结。但是这时候会发现,文章太长了,会收到报错。
这时候,就要运用自己的想象力,使用 prompt 来进行突破了。我们需要把文章进行段落拆分,每一段都符合它的标准。
将内容拆分成 7 段,发送完成之后,它就会自动总结了。
这样,才能得到了一篇文档的正确总结。
2.2拆解任务
上文所描述的内容,可以算是借助 AI 让程序猿日常生活效率提升。那么在工作当中,AI 如何帮助我们提效?
我们从需求端获取一个需求以后,很多情况下我们的任务并不能够非常准确的估计时,原因就是我们并没有将任务拆分清楚,所以并不能够对每一项任务进行估计,导致风险的发生。
这时候可以简要描述一下我们这次的需求点,让 ChatGPT 帮我们进行任务拆解。
可以看到任务整体被拆成了一个个细小的任务。它可以很快的让我们将任务转换为 task,或者是需求跟踪单。这既方便和产品经理进行沟通,也便于我们自身排期。转换成 KANBAN 模式也便于了解当前进度。
如果对方仍有疑问,可以继续询问拆解。比如我们想要询问第三步应该如何进一步实现。可以看到它甚至给了我们具体的 UI 交互。我们可以利用这样的提示对我们的交互以及实现提供一定的参考。
2.3阅读代码/优化代码
开发者经常接手别人的代码。质量参差不齐,还会夹在很多奇怪的命名。当我们阅读整体逻辑或者修改逻辑,可能会因为自身阅读的问题造成理解偏差,进一步引发 bug。
如果将这个方法交给 AI 去阅读呢?可以看看效果。
prompt:
逐行解释下面的代码 + 代码内容, (在这里使用了一段在 github上面的开源代码进行展示, 这段代码是一段定时器相关的内容)。
可以看到 ChatGPT 正确的理解了我们的代码,对代码进行了解释和说明。
但是这时候只是生成了一个整体的说明,并没有对每一行分别进行解释。这时候继续和它对话:
prompt: 可以在每一行代码上面加上注释,便于我理解吗?
这时候它会逐行的进行代码标注,便于你对每一行进行理解。如果你接着对它提出一个粗浅的优化需求,它也会照做。
prompt: 这段代码可以进行重构和优化吗?逻辑有些繁琐。
你可以对某一个部分提出更细节的要求,为它提出更好的优化方向。在这里我们提出了关于参数顺序耦合的问题,可以看到 GPT 也理解到了我们的需求,并且做出了对应的优化,如下:
prompt: children: (isCounting: boolean, durationTime: number, startCount: () => void) => React.ReactNode // 子组件,接收三个参数,返回一个React节点这里面的参数太多了,而且对顺序有强依赖,该怎么优化这里?
2.4代码生成
开发者在工作中还有一种场景的工作量比较大,需要复杂的逻辑思考。但是实际上最终的代码可能只需要几行就可以搞定。你在思考过程中觉得很痛苦,想和身边的同事去沟通。也许你给他解释完这个逻辑以后,他非但不能帮你思考,反而将一人份痛苦变成两人份。
例如,我们要进行数据转换,是否也可以交给AI来做?我们发送给 GPT 这样的 prompt,将数据结构进行转换。数据源为:
[
{
"candidates": null,
"candidatesX": null,
"description": "role---用户角色",
"label": "角色",
"name": "role",
"optional": true,
"schema": null,
"type": "String"
},
{
"candidates": null,
"candidatesX": null,
"description": "Topics of the pulsar server to create---需要创建的主题",
"items": {
"schema": [
{
"candidates": null,
"candidatesX": null,
"description": "topic name---主题名称",
"label": "主题名称",
"name": "name",
"schema": null,
"type": "String"
},
{
"candidates": null,
"candidatesX": null,
"default": 1,
"description": "partition number---分区数",
"label": "分区数",
"name": "partitions",
"schema": null,
"type": "Integer",
"validator": ">0"
}
],
"type": "Object"
},
"label": "主题列表",
"name": "topics",
"optional": true,
"schema": null,
"type": "List"
}
]
复制代码
我想要得到的数据是 type 为 List 的数据,并且数据结构为:
[
{type:List, name:"topics", needValidates:[{
name:"name", type:"String"
},{name:"partitions", type:"Integer"}] }
]
复制代码
GPT 会为我们得到正确的结果:
我们只需要输入目标数据结构,转换后的数据结构,无需指定语言。因为它会从你的上下文里理解到你是想要问什么实现方式。
还有执行脚本,我们只需要描述清楚我们的需求,它也会帮助我们进行完善。
此外,它还可以进行进行解释说明:
上面可以看到,我们在这里使用了一次“自然语言编程”的操作流程。不论你是否会使用 python、bash 你都可以正常的描述你的需求。进行生成。
我们还可以进行代码转换,例如你写了一段 js 代码,你希望将这段代码转化为python,以前我们会通过 Google 搜索看看有没有对应的转换器,现在就只需要交给 gpt 来执行。提出你的诉求,它会在 10s 内为你生成一段没有 bug,包含异常处理的代码。这里我们不展开举例。
2.5生成单测
我们刚刚那段数据转化的代码,如果我们想要进行测试。以前我们可能会苦思冥想很多场景进行补充。现在只需要告诉 AI 帮我生成单测即可。
prompt: (代码内容) 为这段代码生成 unit test。
如果你觉得测试条件不够,那就再问它,让它再生成。
prompt: 数据源不够丰富,多测试集中边界条件,比如数据不存在,数据类型无法转换,数据类型不对等。
它还会给你解释这里都做了什么操作,这些测试用例覆盖了不同的场景,包括:
当数据源中没有类型为 List 的字段时,应该返回空数组;当数据源中有类型为 List 的字段时,应该返回正确的字段数组,包括需要的验证。
2.6 更多 AI 应用/插件
AI 就像是一个基础应用, 在它上面还有着很多的可能。随着你用的越多,解锁的技能也就越丰富。例如现在 GPT 系列甚至推出了自己的应用市场。下面我们来为各位简单介绍几款热门插件:
- AIPRM
它是 ChatGPT3.5 时代的应用商店。用户通过不同的 prompt,对它进行训练,达到自己的目的。
例如我们在文章最开始介绍的“长文总结”能力:我们普通的和它进行交流,那么字数限制就会成为瓶颈。但是如果我们转化了沟通技巧,那么就可以突破这一限制。AIPRM 就是一个充满了奇思妙想的插件系统,你可以在里面查找/发布各种你想要的 prompt。
- Voice Control for ChatGPT
依托于这样的系统,我们可以使用它锻炼英文(伪需求)。或者是直接用语音和它进行对话,让它替自己写代码,例如我们刚刚所有的脚本说明都可以让它直接语音转文字发出去。
它也很好的服务了一些视障人士,因为它还会读出每一次 GPT 生成的内容。让每个人都拥有平等接触 AI的机会。
- ChatGPT Sidebar
随着使用的人越来越多,ChatGPT 的响应速度越来越慢。有时候只不过想问一个简单的问题,却要等上很久。这时候,就可以使用 ChatGPT Sidebar 插件。
它内置了 ChatGPT 的 API,可以直接集成在你的搜索引擎里,你的每一次搜索都会触发(也可以设置为手动),免注册,使用方便。还可以让它提示你如何搜索相关的关键词。
在它的侧边栏里,我们还可以进行其它的操作。
-
著名应用工具使用体验:Bing Copilot、ChatGPT、Google Bard
那我们再回头看看几个影响力比较高的AI工具。笔者个人现常用的基础 AI 工具大概有 3 种,分别是 Bing Copilot、ChatGPT、Google Bard。最被广泛使用的 ChatGPT(GPT3-5),我们先来看看它的自我介绍是什么。
ChatGPT:使用频率最高的 AI。它有强大的上下文,还可以拆分成为不同的 conversation,便于它处理不同的对话。
例如一个控制台的项目,可以单独做一个对话,这样它聊的上下文都是围绕这个主题进行,每次新的问答也无需补充上下文信息。
Bing :Bing 在很早就使用了 GPT-4,可是因为对话数实在是太少了(从 5 次扩充到了 15 次),每一次对话的内容长度也很有限(截止目前仍只有 2000 字) 而且不能保存对话上下文,导致使用起来实在很不方便。好处是它是实时联网的,所以作者主要用于搜索最新的资讯以及总结一些文章和文档的摘要,以及辅助 ChatGPT 使用,对比一下两遍生成的逻辑是否一致。优点就是,搜索结果会给出详细的出处以及引用地址。
Google Bard (LaMDA) :Google 近期发布的AI工具目前只支持英文。特点是能够给出多个回答,而且响应速度很快。集成了 Google it,点击之后会帮你生成一个最适合你的问题的 google 搜索关键词。这算是和 Bing Copilot 反其道而行之,一个是将 chat 集成到搜索里,一个是将搜索集成到了 chat 中。
03、Prompt 能力
3.1Prompt 是什么?
整体来说,上述 AI 的强大之处有几点:
总结/理解能力。它能够很好的总结你发给它的内容,并且进行总结。其实这也就是一种理解能力。因为它明白了你说的话的意思。
具有强大的上下文关联能力。你不需要像使用搜索引擎一样,每一次的操作都是独立的。你可以将整个对话都变成一个巨大的搜索,通过多次对话来阐述自己想要的信息。甚至还能让它帮助你向它自己提问。
有丰富的拓展插件潜力。
这些能力,相信各位读者上面的case中都能感知。在上面案例中,为了更好使用AI、利用这些能力,我们频繁使用了一个词叫做 prompt——这在 AI 时代是一个非常重要的内容。
想要用好各类 AI 效率工具,最好的方法就是不断的提升自己的 prompt 能力。prompt 就是提示词,表达语言的能力。
在以前的开发生涯中, 我们是“Google 工程师”、 “StackOverflow 工程师”, 被戏称为“面向搜索引擎开发”。 每次遇到未解之谜,我们通常会去不断的更换搜索关键词。
这时候比拼的就是我们的语言表达能力了——我们需要转换自己的思维,从工程师到产品经理,或者是一个 Business Analysis 的角色。我们需要将接到手的任务,进行拆解,一步步的变为提示词。 当你拆解到足够细的时候,任务就自然而然可以依靠 AI 自动完成了。这个会在项目应用的章节进行具体讲解。
3.2Better Prompt
开发者可以利用它的上下文能力,帮助自己纠正语法以及提供更好的 prompt 的训练。
AI 是不挑语言的?不管你用任何一种语言,它都是利用数据模型进行分析,并不是用单一的语言进行思考。也就是说结果的生成质量不会差异很大。真的是这样吗?
实际上,我们通过官网的介绍发现,它对语言的理解是有差异的,目前理解力最强的当然是英文了。我们使用英文进行 prompt,既能锻炼自己的英文能力,也能更好的表述自己的问题。可是受限于自身英文水平,我们并不一定每一次都能清晰表达自己的观点,这时候我们可以利用它帮我们提高这一点。我们故意打错一段话,来测试一下。
prompt:
you need answer my question obey the format, format should be like this
correct grammar is :
"insert correct grammar here"
________________________________ (keep the diver line)
you can also ask it like this:
"insert better prompt here"
then tell the answer about what i ask below the divier also keep the diver line.
Correct grammar is should correct my question's grammar
AI 的每一次训练得到的返回结果都是不一样的,我们有可能会得到自己想要的,但它也有可能没有完全理解我们的意思。当我们的诉求没被完全理解,可以对它进行进一步的训练。
在它做对了以后,我们对它进行表彰。然后再去尝试一下我们其它的问题。可以看到一切正常。
如果有时候它忘记了,你需要再提醒它一次 format。它就会重新输出。
04、总结
笔者使用 ChatGPT 等 AI 工具已经 4 个多月了。一开始只是进行简单的尝试,并没有觉得有什么特别的。直到在浏览各类教程时,才发现那些以前分享金融知识的人已经开始利用 GPT 进行代码创作来丰富自己的武器库,比如进行图标分析、软件制作等等。实际上,AI 并不是简单的问答而已,它具有解决问题甚至是创造知识的能力。
当然我在使用的过程当中,周围也有很多声音在质疑 AI 的能力。认为它并不能如想象的优秀。例如你直接跟它讲,给我做个需求、给我写篇论文,它都是无法完成的。
因为其实我们在错误地使用 AI。 合理的使用,应该是「我们做我们该做的事情,AI 做 AI 该做的事情」。以前搜索引擎的时代,我们也并不是直接在搜索框里输入 “给我答案” 吧?用户要尽量描述清楚自己的问题。
现在对程序员的要求已然不是简单的书写代码了。因为 AI 能做,甚至比你的代码质量还要高。我们需要将自己的思维进行转换,从程序员变成拥有产品思维的程序员、拥有 BA 思维的程序员。要对自己手里的任务、方法、逻辑,有更清晰的认知。让人类做人类该做的事情,让 AI 做它擅长的事情。
当你把你想要的内容清晰的描述出来以后,你会发现:AI 不是来替代你的,是来帮助你更好的工作的。 以上是本次分享全部内容,欢迎大家在评论区分享交流。如果觉得内容有用,欢迎转发~