查看原文
其他

【教程】万维钢手把手教你用ChatGPT编程(图文版)

万维钢 创新海DAO团 2023-03-28

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

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

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

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

上手

我们首先需要验证GPT确实有我想要的东西。我先让ChatGPT随机列举了10个成语,并且提供它们的解释。它做得很好——那么我就开始直接提需求了,我说:“写一个Python 程序,把这些成语和它们的解释分开,分别列表,打乱顺序,在一张A4纸上分两列列出,形成一个连线题”。

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

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

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

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

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

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

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

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

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

进阶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总共花了三个多小时。

终局

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

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

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

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

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

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

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

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

每次收到报错信息,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还会在那里。

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



Meta360 院(AI工具学习交流群)

AI+|Web3|ESG|元宇宙 DAO:: https://meta360.vipTwitter: @meta360dao: meta360dao

💡

Meta360 DAO

Meta360 DAO

DAOMeta360 DAO

⛵️欢迎加入我们🏴‍☠️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存