前言
写在前面的话:这是一篇简短的编程教程。遵循主动阅读和主动学习的原则,我建议你在电脑上打开这篇教程,然后一边阅读一边跟着操作。如果你还能自己多捣鼓一下、多发散一下、多反思一下,效果更佳。Enjoy~

今年5月份的时候,AK(Andrej Karpathy)在 Microsoft BUILD 大会上做了一次关于 GPT的现状(State of GPT) 的主题演讲( https://youtu.be/bZQun8Y4L2A),临近末尾的时候他讲了一段非常有感染力的话,他说:

GPT-4是一个了不起的艺术品。我非常感谢它的存在,它很美。它有大量的知识,涉及这么多领域。它可以做数学、编码等等。此外,还有这个欣欣向荣的生态系统,其他一切都在建立,并被纳入生态系统中。其中一些事情我已经谈过了,所有这些力量都可以在你的指尖上获得。所以,以下是向GPT-4提出问题,提示它,并得到回应所需的所有代码:

如何在AI编程助手的帮助下开发一个AI编程助手?

如何在AI编程助手的帮助下开发一个AI编程助手?

当AK说“所有这些力量都可以在你的指尖上获得”,他是对着台下那些敲了很多年代码的开发者/工程师/程序员说的。那么假设我只是一个对编程有点兴趣的初学者,我的指尖又可以触到哪里?我要怎样获得和掌控像GPT这样的AI技术所带来的力量?这篇教程的目的是带着你跟这些强大的AI技术进行一次“亲密接触”——技术上的接触,而不仅仅是体验上的,最起码让你的指尖能触碰到它们。

0

在开始之前,我们有一点准备工作要做。你需要去到1024Code(https://1024code.com/)这个网站注册一个账号。1024Code是一个在线编程学习社区,它提供了一个云端编程环境,免除了配置环境和安装软件包的麻烦。不过1024Code现在还处于公测期,需要邀请注册。你可以在本公众号后台发送关键词“1024Code”获取一些可用的邀请码,数量有限,先到先得。

1

第一步,我们要把上面那段代码放到我们指尖。你只需要两步操作:
(1)用你注册的账号登录1024Code(https://1024code.com/);
(2)进入这个页面 https://1024code.com/codecubes/cpeouvm,点击【Fork空间】,就可以把代码Fork到你自己的代码空间里:

1024Code的IDE界面截图

1024Code的IDE界面截图

我们Fork的代码跟AK给的那段代码有两处不同:

  1. 我们这里用的模型是GPT-3.5,不是GPT-4。1024Code目前还只开放了GPT-3.5的体验接口,GPT-4还没有对普通用户开放。
  2. 我们这里还调整了GPT扮演的角色和给它的指令。我们让他扮演“唐朝大诗人李白”,并让它“以‘月’为主题写一首古诗”。

你可以点击页面上方的【运行】按钮,看看GPT会给出什么样的响应。另外,你还可以试着修改一下代码里的角色设定部分(你是唐朝大诗人李白 )和指令部分(请以'月'为主题写一首古诗),让AI模型扮演不同的角色做一些其他的事情(注意要保留句子两边的双引号" ")。实际上,在你跟ChatGPT聊天的时候,背后发生的就是这样的一些“请求-响应”。

2

你可能会有一个疑问:这段代码是什么意思?我们来问问AI助手:
如何在AI编程助手的帮助下开发一个AI编程助手?

如何在AI编程助手的帮助下开发一个AI编程助手?

你可以选中整段代码,点那个【告诉AI助手要做什么】。然后输入你想问的问题,点【发送】。你也可以直接点下面的【解释代码】快捷按钮:
如何在AI编程助手的帮助下开发一个AI编程助手?1

如何在AI编程助手的帮助下开发一个AI编程助手?1

AI助手给出了一个基本的解释。阅读完这段解释,你应该对这段代码有了一个基本认识。如果你觉得AI助手的这段解释不够具体的话,你还可以再次调起AI助手,选择【添加注释】这个快捷指令,让它给代码添加上注释,从而针对具体的代码给出解释:
如何在AI编程助手的帮助下开发一个AI编程助手?2

如何在AI编程助手的帮助下开发一个AI编程助手?2

你可能会好奇,AI助手的这些功能是如何实现的?你可能也已经有了答案,这些功能实现的关键部分就类似于我们正在学习的这段代码:程序通过调用某个接口函数创建一个请求,把“系统角色的消息”和“用户角色的消息”作为输入,传给某个类似GPT的AI模型,然后把AI模型的回复内容打印出来。解释代码、添加注释、优化代码、查找Bug,这些功能都是AI模型自身具备的基础能力,你需要做的是通过编程以及一些提示词技术(精心编辑的指令)来引出这些能力。你现在应该已经感受到了AI模型的强大,并且可能生出一种渴望——想要利用AI模型编写一些有趣又有意义的应用程序。

3

现在的程序还太单调了,我们来给这个程序添加一点交互:

import openai

system_msg = "你是一名AI编程助手"
question = input("请输入你的问题:")

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": system_msg},
    {"role": "user", "content": question}
  ]
)
print(response["choices"][0]["message"]["content"])

这里我们新增了两个变量: system_msg 用来存储系统角色消息,question 用来存储用户输入的问题。我们调整了角色设定,让AI模型来扮演一名AI编程助手。我们使用input 函数来获取用户的输入。你可能会有疑问:input 函数是什么?你可以调出平台提供的AI助手,问它。但是这次,我们来问问我们自己编写的AI编程助手。运行程序,然后在右侧控制台输入你的问题:
如何在AI编程助手的帮助下开发一个AI编程助手?3

如何在AI编程助手的帮助下开发一个AI编程助手?3

结合它的解释以及你刚刚运行程序的体验,你应该大致明白 input 函数的作用了。你也可以换其他问法问它,或你有其他一些疑问,也可以问它(注意:你每次提问都需要重新运行程序)。
如何在AI编程助手的帮助下开发一个AI编程助手?4
如何在AI编程助手的帮助下开发一个AI编程助手?4

如何在AI编程助手的帮助下开发一个AI编程助手?5
如何在AI编程助手的帮助下开发一个AI编程助手?5

4

我们自己开发的AI编程助手已经初具模样了^_^ 但是,你应该已经发现了它的不足:它目前还不能进行多轮对话,每次提问都要重新运行。怎么办?肯定要继续写代码,完善它的功能。但这次,我们来试试让AI编程助手帮我们写。1024Code提供的AI助手除了可以从代码区调起之外,还可以从左侧的工具栏进入:

如何在AI编程助手的帮助下开发一个AI编程助手?6

如何在AI编程助手的帮助下开发一个AI编程助手?6

点击工具栏上的【AI】按钮,你会打开一个类似ChatGPT的聊天窗,你可以通过聊天的方式跟AI编程助手交流。因为我们这次的需求稍稍有点复杂,所以我们需要构建一段稍稍复杂一点的提示词(输入给AI模型的问题或者指令):


import openai

system_msg = "你是一名AI编程助手"
question = input("请输入你的问题:")

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": system_msg},
    {"role": "user", "content": question}
  ]
)
print(response["choices"][0]["message"]["content"])


怎样基于这段程序实现一个多轮对话的聊天AI程序?

这段提示词的第一部分是我们当前版本的程序代码,用` 把代码包起来,是为了让提示词格式更清晰,方便AI模型理解。提示词第二部分是指令,也就是我们想让AI模型完成的任务,代码部分可以看作是这个任务的输入内容。我们把这段提示词复制到聊天输入框,发送给1024Code的AI编程助手,看看它怎么回答(如果你想自己在聊天框输入多行提示词,可以用 Shift+Enter 输入换行):
如何在AI编程助手的帮助下开发一个AI编程助手?7

如何在AI编程助手的帮助下开发一个AI编程助手?7

AI编程助手给我的回答是这样的,它给出了一段参考代码,并且附上了一些解释。因为AI模型生成的内容有随机性,所以你看到的回答会跟我看到的不一样。我们把它给的参考代码复制到代码区,运行看看:
如何在AI编程助手的帮助下开发一个AI编程助手?8
如何在AI编程助手的帮助下开发一个AI编程助手?8

这里我向我们自己开发的AI编程助手提问:“while True 是什么意思?”,它给了一段简洁的解释。然后我又让它举几个例子,我期望它能给出一些代码示例,但是它的回答文不对题。作为用户,当我让它“举几个例子”的时候,我是想让它举几个关于 while True 应用的例子,但是它并没有结合前面的聊天上下文回答问题。我们把这个问题反馈给1024Code的AI编程助手,让它优化程序:
如何在AI编程助手的帮助下开发一个AI编程助手?9
如何在AI编程助手的帮助下开发一个AI编程助手?9

AI编程助手重新生成了一段程序:
如何在AI编程助手的帮助下开发一个AI编程助手?10
如何在AI编程助手的帮助下开发一个AI编程助手?10

阅读一下这段程序,你会发现程序新增了一些代码,你可能想要搞清楚这些新增的代码是什么意思?怎么办?相信你已经知道要怎么做了:把你的问题描述清楚,向AI编程助手提问。我们来运行这段程序,然后测试看看:
如何在AI编程助手的帮助下开发一个AI编程助手?11
如何在AI编程助手的帮助下开发一个AI编程助手?11

OK,程序可以依据前面的聊天上下文来回答用户的问题了,它已经可以很好跟用户进行多轮对话了。总结一下我们的成就:我们在1024Code提供的AI编程助手的帮助下开发了一个简易版的AI编程助手。你跟AI的互动过程可能跟我这里演示的不一样,但是我相信你已经大致了解了跟AI编程助手协作的基本思路。GPT这类新的AI技术的出现让编程这件事儿变得更加有趣了,经历过这次“亲密接触”,你应该已经感受到了。新的AI技术不仅意味着我们可以利用这些技术开发出更强大、更有意思的应用程序,同时在AI的帮助下,我们的整个编程的体验也与以往不同了。当然,AI对于编程以及编程学习的改变还远不止如此,我们后面有机会再深入来聊。

5

最后一步,把我们的程序发布出去,供社区其他小伙伴把玩和学习:
如何在AI编程助手的帮助下开发一个AI编程助手?12

如何在AI编程助手的帮助下开发一个AI编程助手?12

6

如果你想继续深入学习AI应用开发,下面是一些学习材料。

1024Code提供了两个AI应用模版(https://1024code.com/templates),一个Python的,一个Node.js的。你可以基于这些模版来创建自己的代码空间,模版里预置了一个复杂一些的AI应用示例,你可以在示例的基础上做开发。

如何在AI编程助手的帮助下开发一个AI编程助手?13

如何在AI编程助手的帮助下开发一个AI编程助手?13

1024Code上还部署了一个Auto-GPT(https://1024code.com/codecubes/qi57zzj)——前段时间大火的一个AI应用,你可以把它Fork到自己的代码空间里把玩一下。

吴恩达跟OpenAI的工程师以及LangChain作者合作开发了几节AI应用开发的短课(https://www.deeplearning.ai/short-courses/),特别适合入门阶段的开发者。课程免费,但是是英文的。如果英文对你是一个问题,国内某视频站上应该可以搜到带中文字幕的搬运视频。

最后,OpenAI官方提供的资料: