## AI专题·X2：用GPT-4编程的体验

GPT-4是个威力无比强大的AI，但是绝大多数人根本没有让它充分发挥。把ChatGPT当做一个聊天机器人随便玩玩，既对不起你自己的时间和金钱，也对不起GPT。如果你家有个机器猫，你会只跟它玩脑筋急转弯吗？

GPT不是一个聊天工具，而是一个「生成性」AI。生成性的意思是它会创造内容。它能发挥到什么程度，不是取决于它，而是取决于你。能把GPT用到飞起，可能会是你平生最重要的几项技能之一。我们这个AI专题会全面探讨GPT各项应用的技巧。我也是一边学一边演练，一边演练一边讲……

这一讲咱们探索一下GPT最厉害的一项功夫，编程。这是OpenAI的独门功夫，现在好几个大公司都推出了自家的大语言模型，有的参数比GPT多，但是会编程的，大概只有GPT一个。

我搞的这个小项目是制作一个成语连线游戏。我选择的程序语言是Python，但我已经很久没用Python写过程序了，这一次干脆假装一点都不会，从0基础开始。这次真正的程序员不是我，而是ChatGPT界面下的GPT-4模型。整个过程我俩都是用中文交流。

✵

我们首先需要验证GPT确实有我想要的东西。我先让ChatGPT随机列举了10个成语，并且提供它们的解释。它做得很好——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803785961801284976/032716.png)

那么我就开始直接提需求了，我说：“写一个Python 程序，把这些成语和它们的解释分开，分别列表，打乱顺序，在一张A4纸上分两列列出，形成一个连线题”。

你看我说的比较笼统。我并没有告诉它怎么做，我没有设计详细算法。我只是提了一个需求。事实证明这种小需求GPT完全可以胜任。

它立即听懂了我的要求，但是没有直接开始编程，而是先提醒我安装一个「程序库」，因为这个库不是每台电脑上都有的，而这次编程会用到：

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803785999382247920/032716.png)

然后它就哗哗哗把整个程序写出来了。我给你看一段截图，它把每一段程序实现的功能都用注释标记好了，方便我理解——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786032668243484/032716.png)

当然，作为零基础，我并不想理解。整个程序只有70多行，很简单。

我运行了程序，立即出错了。我理解报错信息是说字体错误。GPT用的是英文字体，无法显示中文，它显然没有事先考虑到这一点。我告诉它这个问题，它立即改正，还说“很抱歉给您带来了困扰” ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786064880500080/032716.png)

还告诉我去哪找中文字体。但我运行之后又出错。这回我连出错信息都没看，直接复制给它，它意识到加中文字体需要另外挂载一个库，告诉我应该怎么办，并且重新写出了完整的程序 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786098166495728/032716.png)

中间有个字体的路径还需要改一下，然后程序就运行成功了。生成了一个PDF文件，打开就是一套成语解释连线题 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786129305007644/032716.png)

也许你可以做着玩，但这还不是我想要的。我想要的是每次运行程序都生成一套新题，以至于我自己也可以做着玩。我不能每次都先用ChatGPT生成成语再复制到程序里，我必须把这一切给自动化，以至于我只要一个命令，就能得到一套新题。

为此，我们必须调用OpenAI 的 API。API就是干这个用的，它允许你的机器直接跟GPT远程对话，自动返回结果。

✵

这是我第一次使用API，我是零基础。不过没关系，我跟它一说，ChatGPT就非常善解人意地告诉我要用API必须先做些什么——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786163664747888/032716.png)

我完全按照它给的步骤操作，它哗哗哗把整个程序写出来了。而且它还记得我们需要中文字体……这里有个小细节是GPT-4并不知道OpenAI开放了GPT-3.5的API而且流量价格便宜十倍，它一开始给的是老模型，是我自己改成了新的（model="gpt-3.5-turbo"）。

结果一运行又出错，我把错误信息复制给它，它立即意识到问题所在并且做了修改——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786200171969008/032716.png)

然后它说，“现在，程序应该能够正常运行。请注意，使用 GPT-3.5 可能会产生额外费用。确保在使用之前了解相关费用。”

还怕我浪费钱，真是贴心啊。又这样来回改了几次错误，程序终于顺利运行，说明API调用成功了，但是输出结果是这样的——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786231310480924/032716.png)

不但格式不对，而且成语和解释没有分开和打乱顺序。我没办法给ChatGPT看图，只能用语言描述了问题所在，结果它一听就懂了！

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786274260155760/032716.png)

它修改了程序，结果一运行又出了几次错。这时候它用了一个程序员常用的调试程序的办法：它让我在程序中间几处地方插入打印语句，看看中间结果，以此来发现问题到底出在哪一步——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786309693635056/032716.png)

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786346200856092/032716.png)

我运行了程序，告诉了它结果，然后它就找了问题所在 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786387003047280/032716.png)

这样折腾几次，我们——我和它——都意识到这是因为GPT-3.5的API输出的内容并不是标准化的格式，你必须自己想个办法区分哪里是成语，哪里是成语的解释。我什么话都没说，ChatGPT自己想了个办法——找其中的冒号！成语和解释之间有个冒号，应该用冒号区分。

这一关过去，程序就运行成功了。但是输出结果不太理想 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786427805235696/032716.png)

又折腾了一番，程序突然又报错。这次错误非常有意思。原来GPT-3.5作为一个语言模型，跟你对话有时候会变一变语气，比如开头先客气一句：“好的，以下是10个中文成语或固定短语及其解释：”——它这一客气不要紧，ChatGPT之前用冒号算好的格式就不好使了。

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786467533682204/032716.png)

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786495450971504/032716.png)

但是ChatGPT马上又想了个办法——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786525515741680/032716.png)

等于是以更智能的方式寻找成语和解释。这个方法成功了， 不过后来ChatGPT干脆修改了我最初写给GPT3.5的提示语，让它每次必须按照标准格式输出——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786559875479068/032716.png)

我为我一开始没考虑到这一点而感到惭愧。

最后程序终于成功，输出的结果是这样的 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786587792768368/032716.jpeg)

每次运行都是一套新题，成语和解释的顺序是打乱的，需要你连线 ——

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786612488829424/032716.jpeg)

其实版面还不够美观，但我已经满意了。你还可以把解释变成英文的，用这个程序练习英语……

总共花了三个多小时。

✵

对我来说，这是一次神奇的编程体验。我全程只有两次主动对程序做了调整，一次是ChatGPT给出的中文字体路径不对，一次是它后期对一个函数的定义顺序有点小问题，可能是因为反复修改造成的，我看出来就顺手改了。其实我的主要工作是严格按照ChatGPT的要求修改程序、运行程序并且把报错信息反馈给它。

它完全可以自己做这些事情。我理解，OpenAI之所以禁止GPT直接上手编程，是出于安全的考虑：你真不知道它能编出什么来。

当然我也不是一点贡献都没有。我的主要作用是提需求。这个程序的想法是我的，调取API这个“大设计”是我的，对最终结果接不接受的决定权也是我的……尽管连最后呈现的版面设计也是GPT做的。

这就是「自然语言编程」。像用Python调取API、生成表格这些功能我以前都没用过，我根本不知道——也无需知道——具体的编程语句是什么，我借助注释大概看看是什么意思就行。我甚至没有设计——甚至都不用思考——中间操纵成语和解释的字符串的算法。你想想这得节省多少时间和精力。

GPT-4并没有一次就生成完美的程序，但这只不过说明它不是神！它证明了自己是个非常优秀的程序员。程序里没有一个低级错误。所有错误都或者跟具体运行环境有关、或者跟GPT-3.5 API返回的结果有关，都是你必须试了才知道的问题。GPT-4在整个过程中一步都没有浪费。机器返回的每一个报错信息，我说的每一个现象，它都正确理解了并且直达本质，而且立即给出解决方案。

我最为惊叹的还是GPT-4表现出的主动性和创造性。它主动让我在程序中添加几个打印中间结果的信息，来帮助自己调试。面对GPT-3.5的不规则输出，它先是创造性地想到了用“冒号”确定区分成语和解释，又发明了适应性更强的搜索方法，最后索性直接修改了我写的提示语。

如果是一个人类程序员跟我合作，难道能做得比它更好吗？

其实在编程过程中，我下意识地，已经把它当成了人。有时候我本能地不好意思再把报错信息给它——我几乎想跟它说，要不咱们先休息一会儿再弄吧—— 我必须用意志力说服自己它只是个AI，它不怕麻烦不怕累！才能继续下去。

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786658659726876/032716.jpeg)

每次收到报错信息，ChatGPT总是先对我说抱歉。它哪里知道，其实是我感到很抱歉……真是太麻烦人家了。

我不知道你对AGI的定义是什么，在我看来这就是AGI。

✵

GPT会不会取代人类程序员的工作？至少目前不会。程序员应该比AI更清楚项目经理的需求，而且对于更大的程序，大概还是需要有个程序员设计大局。但也许更根本的原因是，GPT不被允许独立编程：必须有个人类帮他编译、运行程序和报错才行。

可是GPT会大大提高程序员的编程效率。你从此之后再也不需要记住具体的程序语句，也不需要设计小算法了。GPT是你最忠实最得力的助手。而且你从此都不用独自编程了，你获得了陪伴感。

但是GPT最大的贡献，还是让我这样平时不编程的人可以编程了。我不可能每天花五个小时编程，但是你要说每周花三个小时，那我非常愉快。世间有无数的人有想法而没时间，现在有了GPT，这些人都可以立即开展自己的「秘密项目」。GPT是在给人赋能，它解放了我们。

就在GPT-4发布后短短的几天，Twitter上就有好多人晒出了自己使用GPT-4的编程项目。有人做了用AI处理文档和语音的小程序，有人做了浏览器插件，有人做了手机APP，还有几个人做了桌面电子游戏。这些很多都是平时不编程的人。

事实上GPT不但让编程更容易，而且让编程更值得了。因为你现在可以在程序里调用AI！程序里有了AI，那绝对是画龙点睛，它就活了，它可以做各种各样神奇的事情。以前谁能想到一个人在家能写出一个会自动出成语题的程序来呢？我还有好几个有意思的想法，我打算找时间把它们实现。

✵

记得GPT-4刚发布那天，Twitter上大家都无比兴奋，各种试用。晚上我看有个哥们说：兄弟们别玩了先睡觉吧，你明天醒来，GPT-4还会在那里。

这次编程经历真的让我产生了那个感觉。我一分钟都不想离开它，我怕它没了。我真怕明天一觉醒来，发现这一切都只是一场梦……

![图片](https://piccdn2.umiwi.com/uploader/image/ddarticle/2023032716/1803786722010495472/032716.jpeg)

### 💡 精华要点
- GPT会大大提高程序员的编程效率，它不但让编程更容易，而且让编程更值得了。
