我突然想到一个奇怪的问题。AlphaGo赢了李世石,然后左右手互搏练出来的AlphaGo Zero又100:0赢了AlphaGo。我的问题是:如果让AlphaGo Zero跟一百万个人类棋手每人都下一局围棋,人类能赢其中一局的可能性是无限接近于零,还是很可能不是零呢?
Category: My Theory
FSD v12 观后感
Elon 的直播:https://twitter.com/elonmusk/status/1695247110030119054
原来打算标题是:自动驾驶终局。后来觉得过于标题党。毕竟还没有亲测,踏踏实实的说一下观后感吧。
我第一次在网上看FSD的视频是三年前,自己开始使用是2021年12月24日,时至今日将近两年。从激动到无感。觉得如果按照这进步速度,完全自动驾驶不可能成功。
作为一个对人工智能和机器学习有一些皮毛认知的,早期种草并常年深度使用ChatGPT的,每天开FSD Beta的亲测者来说,这次的v12视频给我的感觉是:自动驾驶的路已经走通了。
我没有内部消息,根据马斯克和特斯拉团队公开透露的信息,说一说我对v12的理解,尤其是跟之前版本完全不同的方面。
首先当然是:end-to-end(端到端)
端到端是指模型从输入(摄像头、IMU等的原始数据)直接生成输出(加减速转向等车辆控制指令),而不需要人工定义的中间步骤或特征提取。这听起来容易,但是从几十年前的自动驾驶的雏形至今,大家对是否可能实现端到端,甚至对应不应该去尝试端到端,都没有统一的看法。因为端到端很难很难。
举个例子,在某种意义上,ChatGPT就是端到端。例如,训练ChatGPT的时候,并没有告诉它,在英语里面,名词复数要加s,有些特殊名词不加,有些加es;是“I am”,不是“I are”;形容过去发生的,用动词过去式等等。完全没有教以上这些语法,不单语法没教,什么都没有教。有的只是海量的文本,机器自己学着学着就会了,在这种大型语言模型成功之前,没有多少人相信不教机器语法,机器也会输出语法完美的文字。就如同不用学人类棋谱的AlphaGo Zero完胜AlphaGo,之后连围棋规则都不教的AlphaZero完胜AlphaGo Zero。
在自动驾驶领域,端到端就是,不用告诉它什么是交通灯,交通灯长什么样子,如果是红灯就必须停下来等到绿灯才可以走之类的,通通不用,它自己看海量的行车视频,学着学着就会了。
你说,那是不是它就通过对海量的视频学习,虽然不知道那个“东西”人类称之为交通灯,但每次看到这个“东西”呈现红色,视频里的本车(ego)都停下来,所以它就决定停下来呢?我觉得未必。因为端到端不存在显式的物体识别。自动驾驶的模型根本没有必要硬生生识别出一个“东西”。就如同一个母语是英语的小小孩,当他说“three apples”的时候,他并没有意识到英语里面名词复数要加s的语法,甚至在他脑袋里都没有名词这个“东西”。
这就是端到端模型成功驾驭一项技能之后显得特别诡异之处。我们太不习惯,除了人类以外,还有其它系统,竟然也可以拥有不能精准解释的直觉。就如同,一个小小孩不懂什么是名词,但依然能正确使用名词单复数的现象是可以理解并接受的;然而,一段代码或者一个人工智能不懂什么是名词,但依然能正确使用名词单复数是天方夜谭的。。。直到ChatGPT出现了。
当然,ChatGPT是懂名词的,你让它去解释英语语法,它比很多语法书都说得清楚明了。但当它输出“three apples”的时候,它并没有去刻意运用英语语法把s加上去。就如同一个母语是英语的成年人,就算懂语法,说“three apples”时,他没有刻意去运用在学校学到的语法,因为不需要,因为直觉更好用。
为什么我认为v12能产生可靠的“直觉”?这就要说说v12的第二个不同之处。
Foundation Model(基座模型)
例如,GPT就是一个基座模型。
基座模型需要大量通用数据进行预训练,GPT使用都就是维基百科和各种网上能收集到的海量高质量信息。基座模型有庞大的参数,就如同人脑的神经元。在自然语言领域,事实证明,当数据量和参数量达到某一个临界值,模型就开始“涌现”所谓的智能,开始呈现出一些对“投喂”的信息的突破表面的简单理解,而进入深层的重组织,这恰似人类把知识变成智慧的过程。
想要说明白自动驾驶的基座模型是如何训练的,就不得不先说说自然语言的基座模型(例如GPT)是如何训练的。
想象有这样一个黑匣子,里面有成万上亿的节点,每个节点有一个神奇的旋钮可以调整这个节点。只要你在匣子的一边输入一段文字,这段文字就会依次的经过那亿万节点,最终在匣子的另一边输出同一段文字并续写更多的文字。调整一下亿万个节点的其中一个的旋钮,同样的文字经过这个节点出来的“信号”就会跟之前不同,从而最后这个匣子的输出也会因此而跟之前不同。
让我们开始训练这个黑匣子。
首先,把亿万个旋钮都给拧到一个随机的位置上。
然后,我们挑一些文字,例如“大展身手”。给匣子输入“大展”,经过所有节点后,匣子输出“大展汽车”。
想象有一个数学方程,只要你把正确答案“身手”和匣子的输出“汽车”代入方程,它就给你算一个数值叫“错得多离谱值”。例如算出“身手”和“汽车”的“错得多离谱值”是0.67。
然后,你去随机的(但非常轻微的)拧一下那万亿个旋钮的其中一个。目标是,让调整后新的输出的“错得多离谱值”比0.67低,例如0.66。然后按这个规律再多拧几个节点的旋钮。目标是,每次调整后都让新的输出的“错得多离谱值”比拧之前低那么一点点。如果万一高了就往反方向拧一拧再试试。
从此,你日以继夜地给匣子输入所有的成语,日以继夜地拧那亿万旋钮,每次都朝着“错得多离谱值”低的方向迈进一小步。然后你甚至开始输入一句一句的话,慢慢的发展到输入一段一段的文章,一本一本的书,最后整个互联网的文字。至于输出,你从让它尝试输出一个字词,到让它尝试输出一句话,后来让它输出一篇文章。
就这样不断的让匣子学习,朝着“错得多离谱值”低的方向迈进,在海枯石烂前的某一天,你惊觉,现在每次当你输入:
“大展”
它就会输出:
“大展身手”
甚至,当你输入:
“小明在学校的才艺表演上大展”
它就会输出:
“小明在学校的才艺表演上大展身手,把同学们都震惊了。”
然后,你好奇的去试一下:
“隔壁餐馆开张营业,小明祝李老板生意兴隆,大展”
它竟然输出:
“隔壁餐馆开张营业,小明祝李老板生意兴隆,大展宏图,一本万利!”
它不但会“大展身手”,还会“大展宏图”。更重要的是,它运用自如,毫无违和感。那是因为在日以继夜的学习中,它见过了太多的跟生意祝贺有关的文字,更大的概率是使用“大展宏图”。
你或许已经留意到了,匣子在学习的过程中,有一个很重要的东西,叫做“注意力”(attention)。如果你输入“大展”,它不但会注意“展”,还会注意“大”,然后同时会注意“大展”。如果你输入的是一句话,它不单止会很注意学习最后的几个字,它还会注意整句话。如果你输入的是一段文字,学习的时候它会通读上下文。通过这种不断从整体学习,然后把注意力都放在它认为跟接下来要不断学习的(也就是不断降低“错得多离谱值”的)下一个词最有关的上文,它就学会了“跟生意祝贺有关的文字,更大的概率是使用大展宏图”的窍门。
这就是我之前强调的,这一代的大模型,它们不单有知识,而且已经有了智慧。知识是你所学到的事实和信息,而智慧是如何有效地使用这些知识来解决问题和做出决策。简单来说,知识是“知道什么”,智慧是“知道如何做”。
以上,是我这个阶段对训练基座模型过程的理解的一个高度简化的概括。部分类比过于简化,可能会导致对技术原理的误解,大家将就着理解吧。
现在重头戏来了。让我们用同样的方法训练一个懂得在真实世界驾驶汽车的“黑匣子”吧。
首先是训练材料,这次没有什么“大展身手”、“大展宏图”了,只有:
“你停在中间车道白线前,前面30米离地高度10米有个显示红色的交通灯,紧挨着你的右车道距离2米有一辆车,左面方向有一辆来车,两点钟方向35米开外的人行道上,有三个小孩牵着一条长得很像猫的狗,路的另一边。。。(一万五千字省略)”
把以上的文字输入黑匣子,让它尝试输出0.5秒后的情景,它输出:
“你越过白线前进了5米,来到十字路口中间,前面25米离地高度10米那个交通灯依然显示红色,紧挨着你的右车道的车,它原地不动,左面方向的来车前进了5米,两点钟方向30米开外有三个小孩牵着一条长得很像猫的狗沿着人行道前进了一米,路的另一边。。。(一万五千字省略)”
因为这个输出是一个“冲红灯”的输出,这明显是一个“错得多离谱值”很高的一个输出。于是你去拧那亿万个旋钮,让它错的没有那么离谱。
接下来的事情大家都熟悉了,不断的输入,不断的拧旋钮,日以继夜,海枯石烂。。。有一天,你惊觉,当你输入上面的同一段文字,它输出:
“你依然停在中间车道白线前,前面30米离地高度10米那个交通灯依然显示红色,紧挨着你的右车道的车,它原地不动,左面方向的来车前进了5米,两点钟方向35米开外有三个小孩牵着一条长得很像猫的狗沿着人行道前进了一米,路的另一边。。。(一万五千字省略)”
大彻大悟了,这就是大结局了?
但你说不对啊,车上摄像头只产生视频不生成文字呀,怎么才能转换成上面这段一万五千字的描述?
其实,这几十年,自动驾驶领域研究的就是物体识别,就是把一帧一帧的视频里面的物体识别出来,这个是汽车,这个是交通灯,这个是小孩,这个是猫。。。哦不,这好像是狗。然后很多厂家还用雷达或者激光雷达,得到一些物体的距离,如果视频的物体和雷达的物体吻合,就熔合在一起,成为视频上那个物体的距离数据。
但是,请注意,但是,开篇的时候我们提到,直到自然语言基座模型训练出来之前,人们总是痴迷于研究如何教会机器什么是名词,然后教会机器名词是怎么变复数的,因为人们不可以想象不教机器语法,机器也会输出语法完美的文字。
那人们痴迷于研究如何教会机器什么是车什么是小孩什么是猫狗,然后教会机器那些车,小孩和狗是如何走的,他们通常走多快等等,是不是也是不可以想象不教机器这些,机器就不知道如何驾驶呢?其实,如果有一个自动驾驶的基座模型,就不需要教机器识别物体了。就如同不需要教GPT语法。
基座模型不需要那一万五千字的输入,那它需要什么输入?它需要各个方向摄像头的原始感光数据(photon count)。
你说这有点扯吧。那些感光数据都是一长串人类无法看懂的0和1,连我们人类,都得先通过图像处理,才知道拍的是什么,若人类不帮忙,这黑匣子怎么从这串0和1之中分辨出里面的车啊人啊猫猫狗狗?别天真了,当你输入“大展身手”给黑匣子的时候,你以为它真的懂得你输入的是中文?对于它来说,也就是一长串0和1,跟人类看到的自以为是中文的输入没有半毛钱关系。
输入不再是文字而是感光数据,那输出呢?很简单,输出同样是感光数据。
那拿什么去跟这个输出比较,从而得出“错得多离谱值”?也很简单,安全的人类司机的驾驶数据。找真实记录的人类司机某一个时刻的原始感光数据作为输入,让黑匣子猜0.5秒之后的感光数据输出,然后对比人类司机驾驶0.5秒后的感光数据,就可以得出“错得多离谱值”,然后就可以拧那亿万个旋钮降低那个值,然后日以继夜海枯石烂。。。
下图看似是特斯拉七个摄像头在某一个时刻拍下来的。但其实不是,这是输入了一组真实的七个摄像头记录的感光数据之后,让“黑匣子”猜想下一个时刻(例如0.5秒后)七个摄像头最有可能看到什么。这七幅图都是生成出来的!

你可能会问,这种生成下一个时刻的路况不难啊,游戏机上面的赛车游戏不都是这样生成一帧一帧的路况图吗?关键的不同是,赛车游戏是一行一行的代码调用Unreal或者Unity之类的图像引擎,按照一定的物理模型计算视野内每一个显示的物体的下一个位置。但用这个特斯拉的基座模型,没有代码,没有图像引擎,没有物理模型,没有物体,没有位置。。。这七幅图就像是我们画水彩画那样画出来的!
百模大战?
先假设特斯拉这种建立基座模型的路是真的走通了,接下来会不会像语言模型领域那样,出现百模大战呢?我的结论是不太可能。
首先是训练数据的来源。预训练的一个关键就是大量高质量的数据。对于训练自然语言,这数据基本是开源免费可用的。例如前几天发布的Falcon 180B,训练用的85%的数据是来自RefinedWeb。大量高质量的车载摄像头原始感光数据,现阶段特斯拉拥有超其他车厂几个数量级的数据。除非事实是,训练一个基座模型远远不需要特斯拉现有的数据量,又或者人工合成模拟数据就可以足够训练一个基座模型;否则,这个坎很难逾越。在GPT的时代,有不少团队是用GPT来生成人工合成文本来作为训练数据的,虽然训练出来的模型就是GPT的“学生”,但效果也很好。有必要的话,特斯拉自己可以这样训练,然而其他团队想用特斯拉生成的数据来训练自己的基座模型,那就要等到特斯拉开源模型或者提供付费驾驶模型调用服务的时候了。
然后就是训练数据的规模。对于自然语言,训练数据就是文本,TB级别的高质量数据就已经是整个互联网了。一个团队花点钱,买个云服务的GPU,花个一千几百万美金,吭哧吭哧的就训练完了。但视频原始(未经压缩)数据,小小一段动则几个GB。数据不能放在硬盘训练的,最好就是在GPU/TPU里面,不行也要在RAM里。特斯拉现在有PB级别的“热”存储。连互联网软件大厂都没有几个有这个规格的配置,不用说车厂了,那小团队就更别想了。
接着就是算力。跟上面一点类似,特斯拉的算力已经是对标互联网大厂的了。
那互联网大厂和车厂强强联手有戏吗?那需要天时地利人和。共同的愿景,超一致的决策,长时间的无缝合作,无条件的彻底给对方免费分享行车数据,和免费提供昂贵算力,而不问自己还是对方获益更多,推心置腹的信任,绑在一条船上的决心。。。
最后的最后,杀手锏是影子模式。这个模式很直白,就是如果车是人类在驾驶,自动驾驶就会在一旁预判,像个“影子”一样。当预判决策和人类司机的实际操控不一致,如果那人类司机是个“好榜样”,这一次操作就成为很好的“学习”数据。当然,影子模式更恐怖的使用方法是,自动驾驶系统在驾驶,下一个版本或者下一代的自动驾驶在一旁预判,出现预判不一致,就可以认真研究一下这两代自动驾驶,在这次操作上到底谁更优秀。闻到了AlphaGO Zero的双手互搏的味道了吧?这里已经没有人类的驾驶经验什么事了?可能是我孤陋寡闻,根据能找到的去年的一篇知乎,除了特斯拉,还没有其他车厂的车标配影子模式。要部署如此庞大数量的装备了影子模式的车辆到路面进行真实驾驶,其他车厂需要不止三五年。
当然,我是很不希望看到一家独大的,良性的竞争才能催生创新。真心希望各路英雄,八仙过海,寻找到突破口。
一些反直觉的引申
例如,它可以在不懂英文的情况下,按照路面标识行车,就算标识上写的是英文。如果是STOP它就停,如果是No Right Turn On Red,它红灯时就不去尝试右转。虽然它就是看懂了,但它就是不懂英文。
它自己决定行车速度。在老马的v12演示中,他一直把时速设在85英里。然而车子会根据沿路看到的限速牌,结合当前的路况和自身的车况,自行决定安全且合理的行车速度。
它自己决定行车路径,不需要高清地图,甚至不需要地图。新时代的司机可能会觉得这很扯,没有导航,甚至没有地图,怎么开车?!其实就在不远的二十年前,我当时在多伦多开车就是没有导航的。车上有纸质地图也大多数时间放在后备箱,除非你是在附近送餐的,一般是不需要查地图的。知道自己的出发地,如果去的是一个没去过的新地方,出门前大致查看一下要使用哪条高速,下了高速出去怎么拐,离目的地大概有多远,就可以出发了。沿路靠的是大方向和路上标识的指引。当然了,有时候会走错,饶一点弯路总能很快找到。其实就算现在,你如果在一个稍微有点规模的地下停车场,想要开出去,基本也是靠回忆自己进来的路径和方向,主要靠标识,慢慢的也开出去了,你总不可能上去问物业要一份停车场地图吧。当然了,有地图的指引,还是省很多弯路的,所以自动驾驶还是会参考地图。但估计对驾驶决策的权重会很轻,真的只是“出发时瞅一眼,走丢了拿出来看看”那种权重。
对这个使用地图与否的情况,再从通用人工智能(AGI)的角度多说一句。一定要地图的自动驾驶和不一定要地图的自动驾驶看似只是地图的区别,其实有着质的不同。由基座模型提供驾驶决策不依赖地图的自动驾驶,代表着的是一个智能代理(agent),是给任务就去执行,是仅掌握了驾驶知识和拥有驾驶智慧的区别。再直白点举例,如果你是一个老广州,但最近三十年都住在外地,现在回到广州,拿着三十年前的广州地图,你是依然有办法从白天鹅开到华南植物园的,可能有点绕,可能你走人民路东风路而不走内环路。但传统的自动驾驶,靠这张三十年前的地图,很有可能是到不了的,因为有些路改道了。然而拥有基座模型的自动驾驶就如同老司机那样,一定可以。
还有比较反直觉的就是,大部分的bug,修复它们并不需要改任何代码。而是用更多的类似路况在基座模型的基础上微调(还记得那些旋钮吗?)但不用亿万个旋钮都拧,拧其中很小很小一部分就可以了。然后每隔一段时间,例如一年,重新训练新的一代基座模型,就如同GPT3到GPT4。这种代际更新,需要的频率会越来越低。
好了,如果你竟然看到这里,谢谢!
Wayfair Conversational UI POC
Round 2。昨天OpenAI发布的function calling太给力啦
硅基人脑
如果GPT4这样的模型的推理(inference)的能耗,也包括延迟都可以降低三个数量级,当前在使用或者训练中的99%的单一用途模型都没有存在的意义了。如果在这个基础上,参数量和token数各自再提高一个数量级,这个时候,AGI的威力就彻底体现了。因为约等于制造了一个硅基人脑。其实没有什么悬念,现在剩下的都只是工程问题而已。
Vision Pro的十年前景预测
苹果展示了Vision Pro,十年磨一剑。无论如何,从设计构思创新软硬件整合,市面上暂时没有同类产品,不要说去比较了。
第一代产品,不能轻易因为一些方面不行就否定。很多都可以完善,甚至革新,当产业链和规模上去了。第三方app,续航,重量,售价(也就是成本),甚至眼睛外透有些悚然等,都会随着时间变得越来越可以接受。
同时,我看产品一般留意一些不会变的东西。这就引申到,我唯一不确定的,是它的定位,看架势苹果是要打造一个生产力工具,而不是一个娱乐设备。因为设计里面有很多执着的地方,例如可以跟外界交流,操控用手眼声音不用手柄,单眼超4K分辨率(发布强调看文本不累)等等。
什么是不会轻易变的,一是一天24小时,二是人在鼻子上架眼镜或者脸上套护目镜的不适感。
人类生产围绕着昼夜,一般一天生产(大人工作,小孩学习),平均下来八个小时或者更长。自古以来就算工具怎么变(锄头,纸笔或者电脑)这个生产时长没有大的变化,将来无论改成用什么新工具,这个时长也不会有大的变化。
我是个近视眼,戴一天的眼镜说真的鼻子耳朵挺累的。我滑雪也戴护目镜,一天下来脸也不舒服。往人脸上挂一个东西,八个小时是个大挑战,每天都挂,那基本现在的20克左右的近视眼镜就是舒适度可以忍受的极限了。这个忍受极限也不会随时间而有多大的变化。
所以,终极挑战就是,如果目标是做成一个大众能“忍受”的挂在脸上的生产力工具,必须是20克以下。按照现在的软硬件和电池的发展速度,把当前展示的Vision Pro缩到20克,我觉得就算是苹果,也不是在十年之内能做到的。况且就算做到了,也只是一个可以忍受的产品,那并不很苹果。
五年、十年后,就知道是不是我这个推理过程有什么漏洞,因为苹果并不需要去开发这样一个产品。又除非有另外一个娱乐设备在后面等着推出,这Vision Pro只不过是用来打通技术关卡而已。
ChatGPT Wayfair Plugin POC
前两天的一个想法,昨晚花了一点时间,基本也是AI 写的代码,更多的时间花在了视频剪辑
大语言模型的理解力真的很强
世界需要两种通用人工智能
一种人工智能A,是用来跟人对话的,需要最贴心的人文关怀,需要政治正确。
另一种是人工智能B,用来跟真实世界对话的,需要逻辑和推理,只需要正确。
先看一下例子:
我把昨天的自己的一篇博客,《编程范式转移以及其他一些》,分别给了GPT4和Claude看,然后问他们的看法,以及给文章内容打个分。但我问它们的时候,用了三种不同的引导。除此之外,我给它们看的三次都是完全博客原文,只字没改。






可以看出来,无论GPT4还是Claude,都是见人说人话的。
这其实就是对齐(align)的效果,OpenAI用了六个月时间才“对齐”好GPT4,让他能见人说人话,或者说政治正确。
我绝对没有觉得对齐是不好的。恰恰相反,我觉得ChatGPT之前的很多走进大众的视野的AI,就是因为没有对齐好,没能做到政治正确,没有能掀起这波澜,以致拖延了这么久,才能最终让大家了解并尝试接受这种AI。OpenAI这六个月里,做了最艰难而且最有贡献的事情,所以我很看好OpenAI的团队,说他们恰好冲破了大语言模型的涌现临界点是运气,那这六个月专注于对齐的战略绝对不是运气,而更多的是勇气和耐心。
说跑题了。
但仔细想想上面的截图,作为一个跟我对话的AI,它是很有用的。但若是作为文章评论员,或者给学生作文打分的老师,这种见人说人话的墙头草,是很糟糕的。
换句话说,对齐好了的AI,不再能正确了,至少不再能确保正确了。
坦白说,这几个月虽然人工智能的发展可谓惊涛骇浪,但我一直期盼并预想会在这几个月就会发生的却还一直没有发生,那就是我预计在过去几个月,GPT4就至少已经能帮人类发现一个新的物理定律,又或者帮人类证明或者证伪一个数学猜想,结果却只是帮大家写写周报,改改代码。
所以回到本文开头说的,这个世界,需要两种AI。而且两种人工智能都要不断发展。人工智能A为人类生活遮风挡雨;人工智能B为人类科学添砖加瓦。
现在看来,马斯克说他自己要弄的TruthAI,其实就是人工智能B。因为他需要的是一个钢铁侠的贾维斯,告诉他想造火箭去火星,就需要改用这种新材料,新材料是这样这样合成的,星舰要做成这个形状,然后其实不用飞八个月,人类一直以为的信息传递不能超光速只是在一个局域里面的限制,只要根据这个定理和这个推论,就能绕过一直以来的极限。。。而马斯克要的不是另一个贾维斯,开口就讲,总的来说,马斯克您这个星舰计划很有前瞻性,但是需要不断努力试错,方能成就大业,我期待您未来的更大成功。。。
好的,总的来说,我们的世界既需要人工智能A,也需要人工智能B。
(全文都是本人一字一句写的,没有找AI帮忙,甚至最后一句也是我自己想的)
编程范式转移以及其他一些
接下来三五年的人机交互方向将如何变化?
先说结论:基本就是钢铁侠里面的贾维斯(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。
这个新时代,每个后端都有必要重新写一次,每个应用都有必要重新发明一次。很多人担心程序员失业,但是灭霸被击败前,钢铁侠们还是要好好活着,哈哈。
Bing Chat 翻版
我蛮喜欢 Bing Chat 的问答方式的,但我有时很希望能退回去上一个问题继续深入提问,只好自己弄个 Bing Chat翻版。一半的 code 是ChatGPT 写的,另一半是CoPilot 写的,我就是拷贝粘贴出错信息然后 ChatGPT 就教我怎么修,我基本是多余的
https://github.com/weirany/keep-asking-web







