接下来三五年的人机交互方向将如何变化?
先说结论:基本就是钢铁侠里面的贾维斯(Jarvis)
老一辈的人不懂很好的使用电脑,学不会怎么使用一些app,其实原因只有一个,现在的机器,包括各种系统、软件、界面,人要先学习如何操控,想要得到结果,对于不同使用者,只有同一种正确的操控方式,你没学会,就得不到那个结果。但如果帮你出活儿的是贾维斯,那就算对方是老人家,他也照样把事情办好。因为他的界面是开放的,是灵活的,是人性化的,是只关心语义和语意的。
由此可以得出,最近所谓的高薪工作“提示工程师”(prompt engineer),也只会是昙花一现的工作,因为现在的贾维斯还在牙牙学语。当一个小孩刚开始跟世界沟通,有一段时间,只有她的父母明白,需要父母这种提示工程师,才可以让其他人跟她有效的沟通。但随着孩子长大,这个时间段通常不会延续很久。
另一个角度来继续聊人机交互。人要跟机器沟通,不能说人话,一直以来,机器听不懂人话。这里所谓听不懂,有两层意思。第一层很浅显,就是要用晦涩的编程语言来“对话”,一边人类给出定义好的指令,另一边机器执行,完成指令或者给出定义好的出错信息。第二层需要好好玩味一下,就是机器“听到”人类的话之后,不会给出自己的“理解”。也就是说机器的反应是确定的(deterministic),当然如果简单的加上随机,结果只能是变成不确定,但跟相关(relevant)是不同的。就算你跟婴儿交互,使用简单的语言,也不需要预先定义,她听到之后的反应,更不可能总是唯一确定的。这就是人跟机器一直都没法像跟人那样无缝交互的原因。
但现在大语言模型不同了,既可以跟它说人话,它还听得懂人话。
那对于软件工程师们,就出现了一种范式转移。并不是说改成用copilot或者ChatGPT帮你写代码那种转移,那是必须的。我指的是,你要把面前的机器当作人,至少当作钢铁侠的贾维斯。
举例说,你要编写一个军棋的电脑裁判,以前的你,首先要把军棋的棋子吃子规则转化成一堆if…else和switch…case代码,然后用大量标注好的棋子图库,去训练一个识别军棋棋子的模型,用它连起摄像头和你之前的评判代码。但现在,你只需要让GPT4去看一下双方的棋子,问它谁吃了谁,搞定。(我现在还在OpenAI图像的API的waitlist里面,等拿到了试一下是不是可行)
以上的是程序员和机器的沟通范式转移,下面来聊一下机器和机器之间的沟通范式转移。机器跟机器指的是代码调用其他API。
一直以来,API接口各种参数需要定义得滴水不漏。那是不得已的,因为对接的是机器;如果对接的是人,这些不单止不需要,而且是多余的,有时甚至是不可行的。
我这个星期做了一个Bing Chat翻版,当然了,Bing Chat比我的这app多许多功能。在写到其中一段逻辑,我需要把对话的内容输入给GPT4,让它根据之前对话内容,自己给出五个可能追问的问题,然后我可以把这五个问题做成五个按钮给用户一键提问。
我当时开始的提示是这样的:
Based on our discussion above, can you suggest five follow-up questions for me to ask in order to dive deeper into this topic? Answer with a JSON array of strings.
一试,就成功了。感叹GPT4的厉害之余再试,结果出错了。
它说sure thing, …. 这不是画蛇添足吗?!于是我加上一句:
nothing else. no explaination needed just the array.
然后再试,果然没有废话了。于是试一下问中文问题,结果有时返回的是五个英文问题。虽然我的system message有包含下面这句话,但是显然还是不够明确。(也不全怪它,因为是我用坚持用英语出的提示)
Keep using the same language as my first question. Do not switch to a different language.
于是再加上一句:
respond in the same language as your last answer.
就这样,无端变回英语的bug解决了。但偶尔还是会报错,因为它返回的不是正确的JSON格式,例如["asdf" "qwer" "tuio"],正确的应该是["asdf","qwer","tuio"].
于是加上强调要正确的JSON,还给了例子,算是one-shot了。最后我的提示是长这样的:
Based on our discussion above, can you suggest five follow-up questions for me to ask in order to dive deeper into this topic? Answer with a JSON array of strings, nothing else. no explaination needed just the array. make sure it is a well formed JSON array. Example: [“What is your favorite color?”, “What is your favorite food?”]. respond in the same language as your last answer.
一番操作下来,我的感悟是,在大语言模型的机器和机器交互,如果还是要回归以前的思路,就是简单如一个JSON的payload,也折腾得这么辛苦,明显这是无用功。真正的机器之间交互,如果两边都是大语言模型,那应该直接用语言而不是JSON等规范来沟通。例如GPT4生成提示直接调用MidJourney画图;又如AutoGPT自己给自己分派子任务。
每个API提供者,现在有的RESTFul,有的GraphQL,但以后估计最重要的是要提供一个自然语言接口,因为上游很有可能是一个大语言模型。由此估计,现在的OpenAI的plugin策略只是过渡期的产物,毕竟市面上现在绝大多数的API都不是大语言模型API。
这个新时代,每个后端都有必要重新写一次,每个应用都有必要重新发明一次。很多人担心程序员失业,但是灭霸被击败前,钢铁侠们还是要好好活着,哈哈。