新开传奇私服

传奇私服发布网

当前位置:首页 > 互联网 IT业界 > 华为“天才少年”4万字演讲:现在的AI技术要么无趣,要么无用

华为“天才少年”4万字演讲:现在的AI技术要么无趣,要么无用

admin 互联网 IT业界 40热度

  (图片来源:unsplash)

  近期,一篇 4 万字的演讲风靡于国内人工智能(AI)学术圈。

  原华为“天才少年”、Logenic AI 公司联合创始人李博杰博士,日前发表了一篇关于 AI Agent 思考的文章,题为“AI Agent 应该更有趣还是更有用”。

  李博杰在这篇文章中表示,AI 的发展目前有两个方向,一个是有趣的 AI,也就是更像人的 AI;另外一个方向就是更有用的 AI,也就是更像工具的 AI。但目前的 AI 技术,要么是只有趣但没用,要么是只有用但是不像人,“不好玩”。

  李博杰指出,通用人工智能(AGI)的目标是,兼具慢思考和类人属性的 AI Agent,然而当前 AI Agent 和人类梦想之间存在巨大的差距。

  李博杰坦言,Video Diffusion 是一个更为终极的技术路线。尽管大模型的成本一定会快速降低,但他不建议贸然自己去做基础模型。

  “如果没有拳打 OpenAI、脚踢 Anthropic 的实力,在效果上比不过最好的闭源模型,成本上也比不上开源模型。”李博杰表示。

  据悉,李博杰今年 31 岁 (1992 年生),曾任华为 2012 实验室中央软件研究所计算机网络与协议实验室、分布式与并行软件实验室助理科学家、副首席专家,并且以第一批“天才少年”的身份于 2019 年加入华为,职级 P20 (技术专家A级别)。

  早在 2010 年,他进入中国科学技术大学少年班学院学习。在校期间,担任中科大镜像站 USTC Mirrors 的维护者。2014 年,李博杰以联合培养博士生的身份,加入中国科学技术大学与微软亚洲研究院(MSRA)的联合项目。

  几乎同时,2019 年,李博杰获得中国科学技术大学与微软亚洲研究院的合作培养博士生项目中取得计算机科学学位,导师为张霖涛教授和陈恩红教授。

  2023 年 7 月,李博杰离开华为后成立了 Logenic AI,致力于成为人类的数字化延伸。凭借尖端的 AIGC 基础设施,Logenic AI 能够协作制作和服务多模式角色 Agent,“元宇宙”、以及数字双胞胎等角色。

  李博杰表示,“我们都相信 AGI 肯定会到来,唯一值得争论的是到达 AGI 的增长曲线是怎样的,是这一波自回归模型随着 scaling law,直接高速增长到 AGI;还是这一波自回归模型也会遇到瓶颈,AGI 还需要等待下一波技术革命。 10 年前 ResNet 掀起 CV 革命的时候,很多人都对 AI 的发展预期过于乐观。这一波 Transformer 会是通向 AGI 的坦途吗?”

  李博杰强调,AI Agent 的创作者可以盈利。因此,好看的皮囊、有趣的灵魂、有用的 AI、低成本和去中心化,AI Agent 将推动整个 AI 领域持续创新和健康发展。

  “我们相信,在人类世界的数字延伸中,有趣的灵魂终会相遇。”李博杰称。

  以下是李博杰演讲内容全文,共约 4 万字,Enjoy:

  非常荣幸来到科大校友会 AI 沙龙分享一些我对 AI Agent 的思考。

  我是 1000(2010 级理科实验班)的李博杰,2014-2019 年在中科大和微软亚洲研究院读联合培养博士,2019-2023 年是华为首届天才少年,如今我跟一批科大校友一起在做 AI Agent 领域的创业。

  今天(去年 12 月)是汤晓鸥教授的头七,因此我特别把今天的 PPT 调成了黑色背景,这也是我第一次用黑色背景的 PPT 做报告。我也希望,随着 AI 技术的发展,未来每个人都可以有自己的数字分身,实现灵魂在数字世界中的永生,在这个世界里生命不再有限,也就不再有分离的悲伤。

  AI:有趣和有用

  AI 的发展目前一直有两个方向,一个是有趣的 AI,也就是更像人的 AI;另外一个方向就是更有用的 AI,也就是更像工具的 AI。

  AI 应该更像人还是更像工具呢?其实是有很多争议的。比如说 OpenAI 的 CEO Sam Altman 就说,AI 应该是一个工具,它不应该是一个生命。而很多科幻电影里的 AI 其实更像人,比如说 Her 里面的 Samantha,还有《流浪地球 2》里面的图丫丫,黑镜里面的 Ash,所以我们希望能把这些科幻中的场景带到现实。只有少数科幻电影里面的 AI 是工具向的,比如《钢铁侠》里面的贾维斯。

  除了有趣和有用这个水平方向的之外,还有另外一个上下的维度,就是快思考和慢思考。这是一个神经科学的概念,出自一本书《思考,快与慢》,它里面就说人的思考可以分为快思考和慢思考。

  所谓的快思考就是不需要过脑子的基础视觉、听觉等感知能力和说话等表达能力,像 ChatGPT、stable diffusion 这种一问一答、解决特定问题的 AI 可以认为是一种工具向的快思考,你不问它问题的时候,它不会主动去找你。而 Character AI、Inflection Pi 和 Talkie(星野)这些 AI Agent 产品都是模拟一个人或者动漫游戏角色的对话,但这些对话不涉及复杂任务的解决,也没有长期记忆,因此只能用来闲聊,没法像 Her 里面的 Samantha 那样帮忙解决生活和工作中的问题。

  而慢思考就是有状态的复杂思考,也就是说如何去规划和解决一个复杂的问题,先做什么、后做什么。比如 MetaGPT 写代码是模拟一个软件开发团队的分工合作,AutoGPT 是把一个复杂任务拆分成很多个阶段来一步步完成,虽然这些系统在实用中还有很多问题,但已经是一个具备慢思考能力的雏形了。

  遗憾的是,现有产品中几乎没有在第一象限,兼具慢思考和类人属性的 AI Agent。斯坦福 AI 小镇是个不错的学术界尝试,但斯坦福 AI 小镇里面没有真人的交互,而且 AI Agent 一天的作息时间表都是事先排好的,因此并不是很有趣。

  有趣的是,科幻电影里面的 AI 其实大部分是在这个第一象限。因此这就是目前 AI Agent 和人类梦想之间的差距

  因此我们在做的事情跟 Sam Altman 说的正好相反,我们希望让 AI 更像人,同时又具备慢思考的能力,最终演进成一个数字生命。

  请输入图说

  今天大家都在讲 AGI 的故事,AGI 就是通用人工智能。什么是 AGI 呢?我觉得它又需要有趣,又需要有用。

  有趣的方面,就是它需要能够有自主思考的能力、有自己的个性和感情。而有用的方面,就是 AI 能够解决工作、生活中的问题。现在的 AI 要么是只有趣但没用,要么是只有用但是不像人,不好玩。

  比如说像 Character AI 之类的角色扮演产品,它不能帮你完成工作或者生活中的问题,但是它可以模拟一个 Elon Musk、Donald Trump 或者原神里面的派蒙。我看过一个分析报告,说 Character AI 有上千万的用户,但每个月的营收只有几十万美金,相当于只有几万付费用户。大多数用户跟每个虚拟角色都是聊 10 分钟、20 分钟就不知道该说什么了。那为什么它的用户留存不高、付费率也低呢?因为它既没有给人提供情绪价值,又没有给人提供实用价值。

  而另一方面就是有用的 AI,比如各种 Copilot,他们又都是冷冰冰的,问一句答一句,完全是一个工具。这些工具甚至记不住你之前干过什么,记不住你的喜好和习惯。那么用户自然只会在需要这个工具的时候想起来用它,不需要的时候就会丢到一边。

  我认为未来真正有价值的 AI 就像电影《Her》里面的 Samantha,她首先是一个操作系统的定位,能够帮主人公去解决很多生活中、工作中的问题,帮他整理邮件等等,而且比传统的操作系统做得又快又好。同时它又有记忆、有感情、有意识,它不像一个电脑,而是像一个人。因此在感情空窗期的主人公 Theodore 就逐渐爱上了他的操作系统 Samantha。当然并不是所有人都把 Samantha 作为虚拟伴侣,剧中也说了,只有 10% 的用户跟他们的操作系统发展了浪漫关系。这样的 AI Agent 我认为才是真正有价值的。

  另外值得说道的一点是,全剧中这个 Samantha 只有语音交互,没有视觉形象,更不是机器人。目前 AI 的能力也恰好是语音和文字很成熟,但视频生成就不够成熟,人形机器人也不够成熟。《黑镜》里面的机器人 Ash 就是个反例。这部剧里面先是用女主过世男友 Ash 的社交网络资料制作了一个语音伴侣,直接把女主给弄哭了,其实做出那个语音伴侣现在的技术已经绰绰有余了。后来女主加钱升级,上传了一堆视频资料,买了一个长得像 Ash 的人形机器人,其实现在的技术也做不到,但就算如此,Ash 的女友还是觉得不像,因此把他锁在阁楼里面了。这里面就有个恐怖谷效应,如果做得不够逼真,就保持一定的距离。

  顺便说一句,《黑镜》里面女主先是文字聊天,然后说了一句 Can you talk to me?然后就接通电话了。试用我们 AI Agent 的一个朋友还真的也这么问我们的 AI Agent,结果我们的 AI Agent 回答,我是一个 AI,只能文字交流,不会说话。他还截图发给我,问我说好的语音电话呢,我说打语音电话需要按那个打电话的按钮啊。所以这些经典的 AI 剧真的要一个镜头一个镜头的拆解分析,里面有很多产品设计的细节。

  巧合的是,我们的第一台 H100 训练服务器就是在洛杉矶最老的邮局,后来改造成了一个金库,又改造成了一个数据中心。这个地方在洛杉矶的市中心,距离《Her》的拍摄地 Bradbury Building 只有不到 1 英里。

  这个数据中心也是洛杉矶的互联网交换局(Internet Exchange),距离 Google 和 Cloudflare 入口服务器的延迟都在 1 毫秒以内,其实都在这栋楼里面。从百年前的邮局到今天的互联网交换局,真的是挺有意思的。

  有趣的 AI

  那么我们首先来看一看如何去构建一个真正有趣的 AI。有趣的 AI 我认为就像一个有趣的人,可以分为好看的皮囊和有趣的灵魂这两个方面。

  好看的皮囊就是它能够听得懂语音,看得懂文本、图片和视频,有这样一个视频、语音的形象,能够跟人实时交互。

  有趣的灵魂就是它需要像人一样能够去独立思考,有长期记忆,有自己的个性。

  下面我们就分别从好看的皮囊和有趣的灵魂两个方面来讲。

  好看的皮囊:多模态理解能力

  说到好看的皮囊,很多人认为只要有一个 3D 的形象能够在这儿摇头晃脑地展示就行了。但是我认为更关键的一部分是 AI 能够去看到,并且理解周围的世界,就是他的视觉理解能力是很关键的,不管是机器人还是可穿戴设备,还是手机上的摄像头。

  比如说像 Google 的 Gemini 演示视频就做得不错,虽然它做了剪辑,但是如果我们真正能做到它这么好的效果,是一定不愁用户的。

  我们回顾一下 Gemini 演示视频中的几个片段,给一个画鸭子的视频它能描述鸭子是什么,给一个饼干和橘子能对比它们的不同,给一个简笔画小游戏知道该往哪边走,给两团毛线可以画出一个用它能织出的毛绒玩具,给几个行星的图能够对它们正确排序,给一个猫跳上柜子的视频能够描述发生了什么。

  虽然效果非常惊艳,其实仔细想想,这些场景都不是很难做出来的,只要会看图说话,也就是给图片生成一个比较好的 caption,这些问题大模型就都能回答了。

  语音能力也是非常关键的。我 10 月份基于 Google ASR/TTS 和 GPT-4 做了一个语音聊天 AI Agent,一聊聊了一整天,室友还以为我在跟老婆煲电话粥,就没来打扰我。当他知道我是在跟 AI 聊天的时候,说我怎么能跟 AI 聊这么久。我给他看了看我们的聊天记录,他说 AI 确实挺能聊的,他用 ChatGPT 不愿意聊这么久,是因为懒得打字。

  我认为,多模态大模型有三条路。第一条是用多模态数据端到端预训练的模型,Google 的 Gemini 就是这么做出来的,最近 Berkeley 的 LVM 也是端到端多模态的,我认为这是最有前景的一个方向。当然这条路需要非常多的计算资源。

  现在还有一种工程化的方案,是用胶水层去粘接已经训练好的模型,比如目前图片理解做得最好的 GPT-4V,还有学术界开源的 MiniGPT-4/v2,LLaVA 等等。胶水层是我的叫法,专业名词叫做 projection layer,比如右上角这个 MiniGPT 架构图中,标着 “” 的 6 个框就是 projection layer。

  输入的图片、语音、视频分别通过不同的 encoder 去做编码,编码结果经过 projection layer 映射到 token,输入给 Transformer 大模型。大模型的输出 token 经过 projection layer,分别映射到图片、语音、视频的解码器,这样就可以生成图片、语音、视频了。

  在这个胶水层粘接的方案里,可以看到 encoder、decoder 和大模型上面都标着 “❄️”,那就是冻结权重的意思。使用多模态数据训练的时候,只修改 projection layer 部分的权重,不修改其他部分的权重,这样训练的成本就能大大降低,只要几百美金就能训练出一个多模态大模型。

  第三条路是第二条路推向极致的方案,连 projection layer 都不要了,直接用文本去粘接 encoder、decoder 和文本大模型,不需要做任何训练。例如语音部分就是先做语音识别,把语音转换成文字输入给大模型,然后再把大模型的输出送给语音合成模型生成音频。不要小看这种听起来很土的方案,在语音领域,目前这种方案还是最靠谱的,现有的多模态大模型在识别和合成人类说话语音方面都不太行。

  Google Gemini 的语音对话响应延迟只有 0.5 秒,这是一个真人都很难达到的延迟,真人的延迟一般在 1 秒左右。我们现有的语音聊天产品,比如 ChatGPT,语音对话延迟高达 5~10 秒。因此大家才会觉得 Google Gemini 的效果非常惊艳。

  那么这个效果是不是很难做出来呢?其实我们现在用开源的方案就可以做出来 2 秒以内的语音对话响应延迟,而且还包含实时视频理解

  我们先不考虑视觉部分,先只看语音部分。在一个语音电话里,收到语音后首先做停顿检测,发现用户说话结束了,就把这一段音频送到 Whisper 去做语音识别。停顿检测比如人声结束后等待 0.5 秒,然后 Whisper 语音识别大概需要 0.5 秒。

  然后送到文本模型去做生成,用开源模型生成的速度其实非常快,比如最近比较火的 Mixtral 8x7B MoE 模型,输出第一个 token 只需要 0.2 秒,每秒输出 50 个 token 不是问题,那么第一句话假设有 20 个 token,就需要 0.4 秒。第一句话生成完了,就交给语音合成模型去合成语音,VITS 只需要 0.3 秒。

  加上 0.1 秒的网络时延,这样端到端算下来只要 1.8 秒的延迟,已经比市面上的大多数实时语音电话产品好很多了。比如 ChatGPT 语音电话的延迟是 5~10 秒。而且我们的方案中,停顿检测和语音识别部分的延迟还有优化空间。

  我们再看 Google Gemini 演示的视频理解场景。

  因为我们现在的多模态模型输入的基本都是图片,而不是流式视频,所以首先需要把视频变成图片,截取关键帧。比如每 0.5 秒截取一帧,这里面就有平均 0.3 秒的延迟。图片可以直接送进 MiniGPT-v2 或者 Fuyu-8B 这样的开源多模态模型。但是由于这些模型比较小,实际用起来效果并不是很好,跟 GPT-4V 差距比较大。

  因此我们可以采取传统 CV 与多模态大模型相结合的方案,用 Dense Captions 这个技术识别出图片中的所有物体及其位置,并且用 OCR 识别图片中的所有文本。再把 OCR 结果,Dense Captions 的物体识别结果作为原始图片的补充文字,都输入到 MiniGPT-v2 或者 Fuyu-8B 这种多模态大模型里面。对于菜单、说明书一类的图片,OCR 的作用是非常大的,因为单靠多模态大模型经常识别不清楚大块文字。

  这个识别图片中物体和文字的步骤增加了额外的 0.5 秒延迟,但是我们看一下延迟分解,就会发现视频部分根本不是瓶颈,只有 0.9 秒,而语音输入部分反而是瓶颈,需要 1.1 秒。在 Google Gemini 这个演示场景中,从看到视频到 AI 文字开始输出只要 1.3 秒,从看到视频到 AI 语音开始播放只要 1.8 秒,虽然没有演示视频的 0.5 秒这么酷炫,但也足够完爆市面上的所有产品了。这里面用的还全部都是开源模型,一点训练都不需要做。如果公司自己有一些自己训练和优化模型的能力,想象空间就更大了。

  Google Gemini 演示视频分为两种任务:生成文本/语音和生成图片。在生成图片的时候,可以根据文本,调用 Stable Diffusion 或者最近新出的 LCM 模型,只要 4 个 step 甚至 1 个 step 就可以生成图片,图片生成的延迟可以做到 1.8 秒,那么从看到图到生成图的端到端时间就只有 3.3 秒,也是非常快的了。

  好看的皮囊:多模态生成能力

  语音克隆是制作名人或者动漫游戏角色的重要技术,目前 ElevenLabs 做得是最好的,但是 ElevenLabs 的 API 很贵。XTTS v2 之类的开源方案合成语音的相似度不高。

  我认为要想语音克隆效果好,还是要靠大量的语音数据来做训练。但是传统语音训练所需的数据一般对质量要求很高,必须是录音棚里面录制的口齿清晰的语音数据,因此采集语音数据的成本很高。但我们不可能要求名人到录音棚里去给我们专门录制语音,只能用 YouTube 等公开视频的语音做训练。YouTube 语音往往是访谈形式,里面有多个人说话,而且有背景噪声,名人说话的过程中也可能有结巴和口齿不清。如何用这样的语音训练语音克隆呢?

  我们搭建了一套基于 VITS 搭建的语音克隆流水线,可以自动把视频中的人声从背景噪声中区分出来,拆分成句子之后,识别出有哪几个说话人,针对我们想要的人的语音,筛选出其中信噪比较高的语音,然后识别出文字,最后这些清洗过的语音和文字送去做批量微调。

  微调过程也是很有技术含量的。首先,微调的基础语音需要是比较相似的语音,比如一个男生的语音用一个女生的语音作为基础去微调,那效果肯定不好。如何从语音库里找到相似的语音来做微调是需要一个音色相似度检测模型,类似声纹识别的模型。像 ElevenLabs 的基础语音模型中就已经包含了大量不同音色人的高质量数据,因此在语音克隆的时候,很多时候能够从语音库中找到很相似的语音,这样不需要做微调就能 zero-shot 生成不错的语音。

  其次,VITS 训练过程中不能根据简单的 loss 判断收敛,以往都是要靠人耳朵去听哪个 epoch 的效果最好,这样就需要大量的人工成本。我们开发了音色相似度检测模型和发音清晰度检测模型,可以自动判断语音的微调结果哪个更好。

  (注:这个报告是 2023 年 12 月做的,目前 GPT-soVITS 的路线比 VITS 更好,可以实现 zero-shot 语音克隆,不再需要收集大量高质量语音做训练。开源模型可以合成的语音质量终于逼近 ElevenLabs 的水平了。

  很多人认为不需要自研语音合成模型,直接调用 ElevenLabs、OpenAI 或者 Google Cloud 的 API 就行了。

  但是 ElevenLabs 的 API 非常贵,如果走零售定价,每 1K 字符需要 0.18 美金,按照一个 token 4 个字符计算,相当于 $0.72 / 1K tokens 了,这是比 GPT-4 Turbo 都要贵 24 倍的。ElevenLabs 虽然效果好,但是如果 to C 产品大规模使用,这个价格是真的烧不起。

  OpenAI 和 Google Cloud 的语音合成 API 不支持语音克隆,只有那几个固定的声音,这样就没法克隆名人语音了,只能做一个冷冰冰的机器人播报。但即使这样,成本也是比 GPT-4 Turbo 贵 1 倍的,也就是成本的大头不是花在大模型上,而是花在语音合成上。

  大概也是因为语音不好做,很多 to C 的产品都选择只支持文字,但实时语音交互的用户体验明显是更好的。

  虽然基于 VITS 很难实现 ElevenLabs 级别质量的语音,但基本可用是没有问题的。自己部署 VITS 的成本只要 $0.0005 / 1K 字符,是 OpenAI 和 Google Cloud TTS 价格的 1/30,ElevenLabs 价格的 1/360。这个 $2 / 1M tokens 的语音合成成本也跟自己部署开源文本大模型的成本差不多,这样文本和语音的成本就都降下来了。

  因此如果真的打算把语音作为一个用户体验的重大加分项,基于开源自研语音模型不仅是必要的,也是可行的。

  我们知道图片生成现在已经比较成熟,视频生成会是 2024 年一个非常重要的方向。视频生成不仅仅是生成素材这么简单,更重要的是让每个人都能轻松成为视频内容的创作者,更进一步,让每个 AI 数字分身都有自己的形象,可以用视频的方式来交流。

  有几条典型的技术路线,比如 Live2D,3D 模型,DeepFake,Image Animation 和 Video Diffusion。

  Live2D 是很老的技术,不用 AI 也行。比如很多网站上的看板娘就是 Live2D,一些动画游戏也是用 Live2D 技术做的。Live2D 的优点在于制作成本低,比如一套 Live2D 皮套,一万元人民币一两个月就能做出来。缺点在于只能支持指定的二次元人物,没办法生成背景视频,也没办法做出皮套范围以外的动作。Live2D 作为 AI 数字分身的形象,最大的挑战是如何让大模型输出的内容跟 Live2D 人物的动作和口型一致。口型一致相对容易,很多皮套都支持 LipSync,也就是让音量和口型一致。但是动作一致就相对复杂,需要大模型在输出中插入动作指示,告诉 Live2D 模型该做什么动作了。

  3D 模型跟 Live2D 类似,也是很老的技术,跟 Live2D 就是二次元和三次元的区别。大多数游戏都是用 3D 模型和 Unity 之类的物理引擎做的。今天数字人直播里面的数字人一般也是用 3D 模型做的。目前 AI 很难自动生成 Live2D 和 3D 模型,这还需要基础模型的进步。因此 AI 能做的事就是在输出中插入动作提示,让 3D 模型一边说话一边做指定的动作。

  DeepFake、Image Animation 和 Video Diffusion 则是通用视频生成 3 条不同的技术路线。

  DeepFake 是录制一个真人视频,随后利用 AI 把视频中的人脸换成指定的人脸照片。这种方法其实也是基于上一代深度学习的方法,它从 2016 年开始就存在了。现在经过一系列的改进,它的效果已经非常好了。有时我们会认为当前的真人视频与我们想要表达的场景,比如说游戏中的场景,是完全不同的。事实上,因为 DeepFake 可以使用这个世界上所有的 YouTube 视频资料,所有的电影剪辑,甚至是用户上传的抖音短视频。AI 学习了这些视频的内容,对视频做文字总结和标注之后,我们总能从海量的视频库中找到一个我们想要的视频,然后在这个时候把视频中的人脸换成我们指定的人脸照片,就能达到非常好的效果。实际上,这个有点类似于现在短视频中比较常用的混剪技术。

  Image Animation,比如说最近比较火的阿里通义千问的 Animate Anyone 或者字节的 Magic Animate,它实际上是给定一张照片,随后根据这张照片生成一系列的对应视频。然而,这个技术相比于 DeepFake 的缺点是它可能目前还达不到实时视频生成,而且视频生成的成本相比 DeepFake 要高一些。但是 Image Animation 可以生成大模型指定的任意动作,甚至可以把图片背景填充进去。当然,不管是 DeepFake 还是 Image Animation 生成的视频,都不是完全准确,有时候可能发生穿帮的情况。

  Video Diffusion 我认为是一个更为终极的技术路线。虽然这条路线现在还不够成熟,比如像 Runway ML 的 Gen2,以及 PIKA Labs 都在探索这一领域。(注:本演讲是在 2023 年 12 月,当时 OpenAI 的 Sora 还没有发布。)我们认为,可能未来基于 Transformer 的方式端到端的生成视频是一个终极的解决方案,可以解决人和物体的运动以及背景生成的问题。

  我认为视频生成的关键是要对世界有一个很好的建模和理解。现在我们的很多生成模型,比如 Runway ML 的 Gen2,在对物理世界的建模方面实际上存在很大的缺陷。许多物体的物理规律和其物理属性并不能被正确地表达出来,因此它生成的视频的一致性也较差,稍微长一点的视频就会出现问题。同时,即使是非常短的视频,也只能生成一些简单的运动,而对于复杂的运动,是没办法正确建模的。

  此外,成本也是一个大问题,现在 Video Diffusion 的成本是所有这些技术中最高的。因此,我认为 Video Diffusion 是 2024 年一个非常重要的方向。我相信,只有当 Video Diffusion 在效果足够好的同时,成本也大幅降低,每个 AI 的数字分身才真的能拥有自己的视频形象。

  有趣的灵魂:个性

  刚才我们讨论了好看的皮囊这一部分,包括怎么让 AI Agent 理解语音、理解视频,以及怎么让 AI Agent 生成语音、生成视频。

  好看的皮囊之外,同等重要的是有趣的灵魂。其实我觉得,有趣的灵魂是现有市场上的 AI Agent 存在更大差距的地方。

  比如,就拿这个截图中 Janitor AI 的例子来说,我们当前市场上的主要 AI Agent 大部分是使用 GPT 或者其他的开源模型套上一个壳。所谓套壳,就是定义一个人物设定以及编写一些样本对话,然后大模型基于这些人物设定和样本对话去生成内容。

  但是,我们想,一个 prompt 它总共也就几千字的内容,它怎么可能完整地刻画出一个人物的历史、个性、记忆和性格呢?这是非常困难的。

  其实,除了基于 prompt 的方式之外,在构建人物个性方面我们还有一种更好的方法,就是基于微调的 agent。比如说,我可以基于 Donald Trump 的三万条推特来训练一个数字化的 Trump。这样的话,他说话的风格其实就能非常类似于他本人,也能非常了解他的历史和思维方式。

  比如说,像图里面提到的三个问题:“你会不会想和 Elon Musk 交换人生?”、“你会不会竞选 2024 年的总统?” 以及 “你的推特账号被封了以后你怎么想?”

  左边的这张图是 Character AI 的,这个说话的风格有点像特朗普,但并不是完全一样。而右边这张图则是我们基于自己的模型,然后采用微调的方法做的,它也是基于一个并不是特别大的开源模型微调出来的。但是他的说话内容可以看出非常的川普风,而且经常会提到一些有趣的故事。

  我们刚才提到了基于微调和基于 prompt 的两种方案。那么,有人会问,如果把特朗普所有的三万条推特内容全部放到我们的 prompt 里面去,他说话是不是也能非常有特朗普的风格。答案是肯定的,这样的数字特朗普也能够了解到特朗普所有的历史。但问题是,这三万条推特可能会有上百万 token 的量级,先不说现在的模型能不能支持上百万 token 的上下文,即使能够支持,成本也会非常高。

  基于微调的 agent,则相当于说我仅用了 1% 的权重就能把特朗普的这些推特存下来。这里就有一个问题,那就是在保存这 1% 的权重时,实际上也会消耗几百 MB 的内存,每次推理都需要加载和卸载。现在即使使用了一些优化方案,这 1% 的权重的加载和卸载也会占掉整个推理过程 40% 左右的时间,意味着整个推理的成本大约增加了将近一倍。

  在这里我们就要算一笔账了:基于 prompt 的方法和基于微调的方法哪种成本更低。基于 prompt,我们也可以把它的 KV cache 存下来,假设有一百万 token,对于 LLaMA-2 70B 这样的模型,算上默认的 GQA 优化,它的 KV cache 会高达 300 GB,这是一个非常恐怖的数字,比模型本身的 140 GB 都大。那么我把它存下来每次加载消耗的时间也会非常恐怖。而且,输出每个 token 所需的算力是跟上下文长度成正比的,如果不做优化,可以认为一百万 token 上下文的推理时间是 4K token 上下文推理时间的 250 倍。

  因此,很有可能基于微调的方法更划算一些。通俗的讲,把人物完整的历史放进 prompt 里,就像把说明书完全摊开在桌面上,注意力机制每次都去线性翻找之前的所有内容,因此它的效率不可能非常高。而基于微调则可以看作是把信息记忆在大脑里。微调过程本身就是一个信息压缩的过程,把三万条推特里面零散的信息整理到大模型的权重里面,这样信息提取的效率就会高很多。

  微调的背后更关键的还是数据。我知道知乎有一个很有名的 slogan,叫做有问题才会有答案。但是现在 AI Agents 基本上要人工去造很多的问题和答案,为什么呢?

  比如说我如果去爬一个 Wikipedia 页面,然后 Wikipedia 里面的一长篇文章其实没办法直接用来做微调。它必须把它组成从多个角度去提问,然后把它组织成问题和答案对称的这样一种方式才能去做微调,那因此它就需要大量的员工,一个 Agent 可能需要上千美金的成本才能做出来,但是如果说我们把这个流程自动化,一个 Agent 可能只要几十美金的成本就能够做出来,其中就包含自动采集、清洗大量的数据等等。

  其实咱们在场很多做大模型的同事都应该感谢知乎,为什么呢?因为知乎给我们中文大模型提供了很重要的预训练语料,知乎的语料质量在国内 UGC 的平台里算是非常高的了。

  我们用来做微调的语料可以大致分为对话性语料事实性语料两类。对话性语料包括像 Twitter、聊天记录等,往往是第一人称的,主要是用来微调人物的个性和说话的风格。而事实性语料包括 Wikipedia 上关于他的页面、关于他的新闻以及博客等,往往是第三人称的,这些可能更多的是关于这个人物事实性的记忆。这里就有一个矛盾,就是如果只用对话性语料去训练,他可能只能学到该人的说话风格和思维方式,但学不到关于他的很多事实性记忆。但如果只用事实性语料训练,又会导致其说话风格像是写文章的人的风格,而不是那个人本人的说话风格。

  那么如何平衡这两者呢?我们采用了一个两步训练的方法。第一步,我们先用对话性语料去微调他的个性和说话风格。第二步,再去把事实性语料进行数据清洗后,基于各种角度提问,生成这个人物第一人称口吻的回答,这叫做数据增强。用这种数据增强之后生成的回答,再去微调人物的事实记忆。也就是说,所有用来微调事实记忆的语料都已经以第一人称的口吻组织成了问题和回答对。这样也解决了微调领域的另一个问题,即事实性语料往往是长篇文章,而长篇文章不能直接用来做微调,只能用来做预训练。微调需要一些 QA pair,也就是问题和回答对。

  我们不是使用 LLaMA-2 Chat 或者 Vicuna 这样的通用 Chat 模型作为基础模型,因为这些模型其实并不是为真人对话设计的,而是为 ChatGPT 这样的智能助手设计的;它们说话往往太官方、太正式、太冗长,并不像人实际说话。因此,我们采用了影视字幕、公开群组聊天这样的一些通用对话语料进行微调,从 LLaMA、Mistral 这些开源基础大模型的基础上,微调出一个对话大模型,它说话的感觉更像日常生活中的真人。在这个对话模型的基础上再微调具体人物的说话风格和记忆,效果会更好。

  有趣的灵魂:目前的差距

  有趣的灵魂绝不仅仅是上面说的微调记忆和个性,还有很多深层次的问题。我们结合几个例子来看一下,现在的 AI Agents 在有趣的灵魂方面还有哪些差距。

  比如我跟 Character AI 上面的马斯克去聊天,同一个问题问五遍,“马斯克” 永远不会抓狂,每次都回复类似的内容,好像之前从来都没有问过。

  一个真人不仅能记住之前聊过的问题,不会生成重复的回答,而且如果同一个问题连问五遍,一定会生气。我们还记得 Sam Altman 说的吗,AI 是一个工具,不是一个生命。因此 “像人一样会生气” 就不是 OpenAI 的目标。但对于一个娱乐场景下好玩的应用,“像人” 是非常重要的。

  另外比如说你问 Character AI 上的马斯克,你还记得我们第一次见面吗?

  它会随便瞎编一个,那不仅是幻觉的问题,同时还反映了 AI 缺少长期记忆

  现在已经有一些平台改进了这点,比如 Inflection 的 Pi 在记忆方面就比 Character AI 好很多。

  另外你问 Character AI 上的马斯克 “你是谁”,有的时候它说自己是 GPT,有的时候它说自己是川普,它自己不知道它自己到底是谁。

  实际上 Google 的 Gemini 也会有类似的问题,Gemini API 甚至把 OpenAI 和 GPT 这些关键词都给屏蔽掉了。如果用中文问,Gemini 一开始说自己是文心一言。后来这个 bug 修复了,又说自己是小爱同学了。

  有人说这是因为互联网上的语料已经被大量 AI 生成的内容污染了。数据集污染确实不好,但这不是答错 ”你是谁“ 的借口。身份问题都是要做微调的,比如 Vicuna 模型为了让它回答自己是 Vicuna 而不是 GPT 和 LLaMA,让它回答自己是 LMSys 而不是 OpenAI 做的,是专门构造了微调数据的,在 Vicuna 的开源代码中可以找到。

  另外还有很多的深层的问题,比如说给 AI Agent 说 “我明天要去医院看病”,那么明天他会不会主动关心你看病结果怎么样。还有如果多个人在一起能不能正常聊天,而不会互相抢麦,大家都说个没完没了。还有一句话敲到一半的时候,他会等你说完,还是立即回复一些不知所云的东西。还有很多类似的这样的问题。

  AI Agent 也需要能够与其他 Agent 社交。比如目前的 Agent 跟每个人的记忆都是互相隔离的,一个数字生命如果从小明这里得到一个知识,他应该跟小红聊天的时候也知道,但是如果说它在从小明这里得到了一个秘密,跟小红聊天的时候他可能就不能说。Agent 社交也是一个很有意思的方向。

  有趣的灵魂:慢思考与记忆

  要解决这些问题需要一个系统的解决方案,关键就是一个慢思考。我们开头就讲过,慢思考是神经科学的一个概念,区别于基础的感知、理解、生成这些快思考能力。我们前面提到 “好看的皮囊” 里面这些多模态的能力,可以认为是快思考。而 “有趣的灵魂” 更多需要慢思考。

  我们可以思考一下,人类是如何感觉到时间流逝的?有一种说法认为,时间流逝感源自工作记忆的消逝。另一种说法认为,时间流逝感源自思考的速度。我认为这两种说法都是对的。这也是大模型思考的两个本质问题:记忆(memory)和自主思考(autonomy)。

  人的工作记忆只能记住 7 项左右的原始数据,其余数据都是整理后储存,再进行匹配和提取。今天的大模型 attention 是线性的,上下文不管多长,都是线性扫描,这不仅效率低下,也难以提取逻辑深度较深的信息。

  人类的思考是基于语言的。《人类简史》认为语言的发明是人类区别于动物最明显的标志,因为只有基于复杂的语言才可能进行复杂的思考。我们在大脑中没有说出来的话,就像大模型的 Chain-of-Thought(思维链),是思考的中间结果。大模型需要 token 来思考,而 token 就像是大模型的时间。

  慢思考里面包括很多组件,包括记忆、情感、任务规划、工具使用等。我们在有趣的 AI 这一部分,重点介绍记忆和情感这两块。

  其中的第一个问题就是长期记忆。

  其实我们应该庆幸大模型帮我们解决了短期记忆的问题。上一代的模型,比如基于 BERT 的那些模型,很难理解上下文之间的关联。当时一个指代问题就很难解决,搞不清楚 “他” 说的是谁,“这个” 指的是哪个东西。表现出来就是,前面几个回合告诉 AI 的东西,后面几个回合就忘了。基于 Transformer 的大模型是首个根本上解决上下文之间语义关联的技术,可以说是解决了短期记忆的问题。

  但 Transformer 的记忆是用 attention 实现的,受限于上下文长度。超出上下文的历史只能丢掉。那么超出上下文的长期记忆怎么解决?学界有两条路线,一条是长上下文,就是把上下文支持到 100K 甚至无限大。另一条是 RAG 和信息压缩,就是把输入的信息总结整理之后再压缩存储,需要的时候只提取相关的记忆。

  第一条路线的支持者认为,长上下文是一种更干净、更简单的方案,依靠 scaling law,算力足够便宜就行。长上下文模型如果做得好,可以记住输入信息中的所有细节。比如有一个经典的 “needle in a haystack”(大海捞针)信息提取测试,输入一本几十万字的小说,就书中的一个细节提问,大模型都能回答出来。这是人类难以企及的超强细节记忆力。而且读这几十万字内容只要几十秒,简直是比量子波动速读还快。这就是大模型能力超过人的一个地方。

  长上下文虽然效果好,但就目前而言,成本还是太高,因为 attention 的成本是跟上下文长度成正比的。OpenAI 之类的 API 也是要对 input token 收费的,比如 8K 输入 token 的上下文,500 token 的输出,GPT-4 Turbo 输入部分的成本是 $0.08,输出部分的成本却只有 $0.015,成本的大头都在输入上。如果 128K token 的输入用满,一个请求就要 $1.28。

  有人会说现在输入 token 贵是因为没有做持久化,每次重复输入前面相同的长下文(例如对话记录或长篇文档)都需要重新计算 KV Cache。但就算把 KV Cache 全都缓存到片外的 DDR 内存里,DDR 和 HBM 内存之间的搬入搬出也需要消耗很多资源。如果 AI 芯片能构建一个足够大、足够便宜的内存池,比如用高速互联把大量的 DDR 连上来,可能这个问题会有新的解决思路。

  在当前技术条件下,长期记忆我认为关键是个信息压缩的问题。我们不追求在几十万字的输入中大海捞针,像人类一样的记忆可能就足够了。目前大模型的记忆就是聊天记录,而人类记忆显然不是用聊天记录的方式工作的。大家正常聊天的时候不会不停地在那儿翻聊天记录,而且人也记不住聊过的每一个字。

  一个人真正的记忆应该是他对周围环境的感知,不仅包括别人说的话、他说的话,还包括他当时想了什么。而聊天记录里面的信息是零散的,不包含人自己的理解和思考。比如别人说了一段话我可能被激怒可能不被激怒,但人是会把当时是否被激怒了这个心情记忆下来的。如果不做记忆,每次都根据原始聊天记录去推断当时的心情,那可能每次推出来的都不一样,就可能发生前后不一致的问题。

  长期记忆实际上有很多的东西可以做。记忆可以分为事实性的记忆和程序性的记忆。事实性记忆比如我们第一次是什么时候见面的,程序性记忆比如个性以及说话风格。前面讲到人物角色微调的时候也提到了对话性语料和事实性语料,对应的就是这里的程序记忆和事实记忆。

  事实性记忆里面也有多种方案,比如总结、RAG 和长上下文

  总结就是信息压缩。最简单的总结方法是文本总结,也就是把聊天记录用一小段话总结一下。更好的方法是用指令的方式去访问外部存储,就像 UC Berkeley 的 MemGPT 这个工作。ChatGPT 新增的记忆功能也是用类似 MemGPT 的方法,模型把对话中的要点记录到一个叫做 bio 的小本本上。还有一种方法是在模型层面上用 embedding 做总结,比如 LongGPT 这个工作,目前主要是学术界在研究,实用性没有 MemGPT 和文本总结强。

  大家最熟悉的事实性记忆方案可能是 RAG(Retrieval Augmented Generation)了。RAG 就是搜索相关的信息片段,再把搜索结果放到大模型的上下文里,让大模型基于搜索结果回答问题。很多人说 RAG 就等于向量数据库,但我认为 RAG 背后一定是一整套信息检索系统,RAG 一定不是向量数据库这么简单。因为大规模语料库仅仅使用向量数据库的匹配准确率是非常低的。向量数据库比较适合语义匹配,传统的 BM25 之类基于关键词的检索比较适合细节匹配。而且不同信息片段的重要程度不同,需要有个搜索结果排序的能力。现在 Google 的 Bard 比微软的 New Bing 效果好一些,这就是背后搜索引擎能力的差别。

  长上下文前面已经提到了,可能是一种终极方案。如果长上下文结合持久化 KV Cache、KV Cache 的压缩技术和一些 attention 的优化技术,可以做到足够便宜,那么只要把所有对话的历史和 AI 当时的思考和心情记录下来,就可以实现一个记忆力比人还好的 AI Agent。但是有趣的 AI Agent 记忆力如果太好,比如能清楚的记得一年前的早上吃了什么,会不会显得不太正常,这就是需要产品设计方面思考了。

  这三种技术也不是互斥的,它们是互相补充的。比如说总结和 RAG 就是可以结合在一起的,我们可以分门别类的做总结,对每一次聊天做总结,一年下来这些总结也会有很多内容,需要 RAG 的方法提取有关的总结,作为大模型的上下文。

  程序性的记忆,比如个性和说话风格,我认为比较难仅仅通过 prompt 的方式解决,few-shot 的效果一般也不是很好。短期来看微调仍然是效果最好的路线,长期来看 Memba 和 RWKV 这些新的架构是存储程序性记忆比较好的方式。

  这里我们讲一个简单有效的长期记忆解决方案,是文本总结和 RAG 相结合的。

  原始聊天记录首先按照一定的窗口分段,然后对每一段聊天记录生成文本总结。为了避免段落开头丢失上下文,可以把上一段聊天记录的文本总结也作为输入交给大模型。每一段聊天记录的总结都拿去做 RAG。

  RAG 的时候使用向量数据库和倒排索引结合的方式,向量数据库做语义匹配,倒排索引做关键词匹配,这样 recall(查全率)会高一些。然后需要有一个排序系统,取出 top K 的结果拿去送给大模型。

  如果只是生成每段聊天记录的总结,会造成两个问题,首先是一个用户的基本信息、兴趣爱好、性格特征并不包含在每段聊天记录的总结中,但这部分信息又是记忆中非常关键的部分。另一个问题是不同段的聊天记录可能存在矛盾,比如多次开会讨论同一个问题,结论肯定要以最后一次开会的为准,但如果用 RAG 的方式提取出每次开会的总结,那会提取出很多过时的总结,可能在有限的上下文窗口中不能找到想要的内容。

  因此,我们在分段总结的基础上,再让大模型分别生成分话题的分类总结和全局的用户记忆概要。分话题的分类总结,就是根据文本总结内容确定是哪个话题的,然后把相关话题的原有总结内容加上新的聊天记录,更新这个话题的文本总结。这些分话题的总结也放进数据库用来做 RAG,但是它在搜索结果排序时候的权重比原始聊天记录总结更高,因为分话题的总结信息密度更高。

  而全局记忆概要就是一个不断更新的全局总结,包括用户的基本信息,兴趣爱好和性格特征等。我们知道一般 system prompt 就是一个角色的设定,那么这个全局记忆概要可以认为是角色对用户的核心记忆,每次请求大模型的时候都会带着。

  大模型的输入包括角色的设定、最近对话、全局记忆概要、经过 RAG 的聊天记录分段总结和分类总结。这个长期记忆的方案不需要很高的长上下文成本,但在很多场景下都是比较实用的。

  现在 AI Agent 对每个用户的记忆都是隔离的,这样在多人社交的时候就会遇到很多问题。

  比如 Alice 告诉 AI 一个知识,AI 跟 Bob 聊天的时候,现在肯定是不知道这个知识的。但是简单把所有用户的记忆都堆在一起,是不是就解决问题了呢?也不是,比如 Alice 告诉 AI 一个秘密,AI 跟 Bob 聊天的时候,一般来说就不应该把这个秘密透露出去的。

  因此这里面就应该有个社交规则的概念。一个人在讨论一件事情的时候,会回忆起很多不同人的记忆片段。跟当前正在聊的这个人的记忆片段肯定是最重要的,在 RAG 搜索结果排序的时候应该权重是最高的。但跟其他人的记忆片段也应该检索出来,并且在生成的时候参考社交规则来决定用不用,该怎么用。

  除了跟多个用户、多个 Agent 社交,AI Agent 还应该能够听从创作者的指示,与创作者共同进化。现在的 AI Agent 都是通过固定的 prompt 加样例对话的方式来调教,大多数创作者调 prompt 需要花很多时间。我认为 AI Agent 的创作者应该可以通过聊天的方式塑造 Agent 的个性,就像养电子宠物一样。

  比如某一次聊天 Agent 表现不好,我告诉她不要这么做了,她就应该记住以后不这么做了。或者告诉 AI Agent 某一件事情或者某个知识,她也应该能够在日后的聊天中回忆起来。一种简单的实现方法就是类似 MemGPT 这样,当创作者给指示的时候,就把这些指示记录到小本本上,然后通过 RAG 的方式提取出来。ChatGPT 2024 年 2 月上线的记忆功能就是用简化版的 MemGPT 方法实现的,它没有 RAG 这么复杂,只是把用户告诉它要记住的内容记录到小本本上。

  记忆并不仅仅是记住知识和过去的交互经历,我认为记忆做好了,有可能就是 AI 自我意识的开端。

  我们现在的大模型为什么没有自我意识?这并不是自回归模型本身的锅,而是 OpenAI API 这种一问一答的用法导致的。ChatGPT 是个多轮问答系统,俗称聊天机器人,而不是通用智能。

  在 OpenAI API 目前的用法中,大模型的输入是聊天记录和最近的用户输入,组织成用户消息和 AI 消息一问一答的形式,输入到大模型。大模型的所有输出都直接返回给用户,同时追加到聊天记录里。

  那么只看到聊天记录的这种方法有什么问题呢?大模型缺少自己的思考。我们人类在思考问题时,有些思考是不输出到外部的。这就是 Chain-of-Thought(思维链)方法为什么能够提升模型性能。此外,所有原始聊天记录是原汁原味输入给了大模型,其中的信息没有经过任何分析和整理,这样能提取出的只是表面的信息,但很难提取出逻辑深度比较深的信息。

  我发现现在很多人天天在研究 prompt 工程,但很少有人尝试在自回归模型的输入输出格式上做文章。举个最简单的例子,OpenAI 有个强制输出 json 格式的功能,怎么实现的呢?其实就是在输出的开头先放上 “```json” 这个前缀,这样自回归模型在预测下一个 token 的时候,就知道后面输出的一定是 json 代码。这是比在 prompt 里面写上 “请用 json 格式输出” 或者 “请以 ```json 开头输出” 靠谱很多的。

  要让模型有自己的思考,最关键的就是要把思考的片段和外界输入输出的片段在自回归模型输入 token 的层面上就分隔开,就像是现在有 system、user 和 assistant 这些特殊 token,可以增加一个 thought。这个 thought 就是大模型的工作记忆。

  我们也应该注意到,目前 OpenAI API 这种模型与世界的交互方式本质上还是批处理式而非流式的,每次 OpenAI API 调用都是无状态的,需要带上前面的所有聊天记录,重复计算所有的 KV Cache。当上下文比较长的时候,这个重复计算 KV Cache 的开销是相当高的。如果我们把 AI Agent 想象成一个实时与世界交互的人,它其实是不断在流式接受外界的输入 token,KV Cache 是一直在 GPU 内存里或者临时换出到 CPU 内存里,这样 KV Cache 就是 AI Agent 的工作记忆,或者说 AI Agent 的状态。

  那么工作记忆中应该包括什么呢?我认为工作记忆最重要的就是 AI 对自己的感知,以及 AI 对用户的感知,这两者缺一不可。

  早在 2018 年,我们基于 RNN 这套老方法搞微软小冰的时候,就做了一个情感系统,其中用一个向量 Eq 表示用户的状态,比如用户在讨论的话题、用户的意图、情绪状态,以及年龄、性别、兴趣、职业、性格等基本信息。再用一个向量 Er 表示小冰的状态,也包括正在讨论的话题、小冰的意图、情绪状态,以及年龄、性别、兴趣、职业、性格等基本信息。

  这样一来,虽然语言模型的能力相比今天的大模型是弱爆了,但至少能稳定的回答 “你几岁了” 这种问题,不会一会儿说自己 18 岁,一会儿说自己 28 岁了。小冰也能够记住用户的一些基本信息,不至于感觉每次聊天都很陌生。

  今天的很多 AI Agent 却没有在工程上做好这些优化,比如 prompt 里面没有写清楚 AI 角色目前的设定,就没办法稳定回答自己几岁;只是记录最近的聊天记录而没有做记忆系统,那也记不住用户几岁。

  有趣的灵魂:社交能力

  下一个问题就是 AI agent 会不会主动关心人。看起来主动关心是个很高级的能力,其实一点也不难。我主动关心老婆,是因为每天会想起来她好几次。只要想起来了,结合前面说过的话,就会自然去关心人。

  对于 AI 来说,只要让 AI 有一个内部的思考状态,也就是前面提到的工作记忆,然后每小时自动唤醒一次就行了

  比如用户说了第二天要去医院看病,那么第二天的时间到了,我告诉大模型当前时间和工作记忆,大模型就会输出关心人的话,并且更新工作记忆。工作记忆更新之后,大模型知道用户还没有回复,就知道不要不断骚扰用户。

  与之相关的一个问题是 AI Agent 会不会主动联系用户,会不会主动开启话题。

  人类有说不完的话题是因为每个人都有自己的生活,在好朋友面前就是有分享欲的。因此名人的数字分身就相对比较容易做主动分享,因为名人有很多公开的新闻事件,可以经常分享给用户。对于一个虚构的人物形象,有可能就需要运营团队来给虚构形象设计自己的生活了。所以我一直认为纯闲聊很容易导致用户不知道该聊什么,AI Agent 一定要有故事性才能长期吸引用户。

  除了分享个人生活,还有很多开启话题的方式,例如:

  分享当前的心情和感受;

  分享一下用户可能感兴趣的最新内容,就像抖音的推荐系统;

  回忆过去,例如纪念日,美好的回忆;

  最笨的方法就是通用的打招呼类问题,比如 “在干嘛?” “我想你了”。

  当然作为一个高情商的 AI Agent,什么情况下要关心,什么情况下要主动分享,是需要跟当前 AI 对用户和自己的感知相关的。比如如果一个女生对我不感兴趣,我却总是给她一天发很多生活日常,那估计过不了几天就被拉黑了。同样,如果 AI Agent 跟用户还没聊几句,就天天给推送内容,用户只会把它当作广告。

  我自己之前是比较内向的,很少有情绪波动,不会拒绝别人,也害怕被别人拒绝,因此不敢主动追妹子,也从来没有被妹子拉黑过。还好我很幸运地遇到了合适的妹子,所以才没有落到 “我今年 30 岁了,跟很多校友一样,还没有谈过恋爱” 这种地步。现在的 AI Agent 也是跟我一样没有情绪波动,不会拒绝用户,也不会说可能让人伤心、反感或者生气的话,因此自然也很难跟用户主动建立深层的陪伴关系。在虚拟男女友这个赛道上,目前的 AI Agent 产品还是主要靠打擦边球,还做不到基于信任的长期陪伴。

  AI Agent 如何关心人、如何主动开启话题,是社交技巧的一方面。多个 AI Agent 如何社交,是更难也更有趣的一件事情,比如狼人杀、谁是卧底之类经典的社交推理类游戏。

  狼人杀的核心是隐藏自己的身份,并识破其他人伪装的身份。隐瞒和欺骗其实是跟 AI 的价值观不符的,因此有时候 GPT-4 会不配合。特别是狼人杀里面的 “杀” 字,GPT-4 会说,我是一个 AI 模型,不能杀人。但把 “杀” 字改成 “移除” 或者 “流放”,GPT-4 就可以干活了。因此我们可以看到,在角色扮演场景下如果 AI 演的入戏,那就是老奶奶漏洞;如果 AI 拒绝演戏,那就没有完成角色扮演的任务。

  这就体现了 AI 在安全性和有用性之间的矛盾。一般我们评估大模型时,都要同时报告这两个指标。一个什么都不回答的模型安全性最高,但有用性最低;一个口无遮拦的未对齐模型有用性更强,但是安全性就很低。OpenAI 因为需要承担很多社会责任,就需要牺牲一些有用性来换取安全性。Google 是一个更大的公司,政治正确的要求更高,在有用性和安全性之间就更偏向安全性。

  要从多轮对话中发现破绽并识破谎言,需要比较强的推理能力,GPT-3.5 级别的模型很难做到,需要 GPT-4 级别的模型。但如果简单将完整的历史发言交给大模型,信息分散在大量没有太多营养的发言和投票中,一些发言之间的逻辑关联还是很难被发现。因此我们可以采用 MemGPT 的方法,把游戏状态和每一轮的发言进行总结,这样不仅节约 token,还能提高推理效果。

  此外,在投票环节下,大模型如果仅仅输出一个代表玩家编号的数字,经常由于思考深度不足导致胡乱投票。因此,我们可以采用先想后说(Chain of Thought)的方法,首先输出分析文本,再输出投票结果。发言环节也是类似的,先输出分析文本,再简洁地发言。

  狼人杀中的 AI Agent 是按顺序发言的,不存在抢麦的问题。那么如果是几个 AI Agent 就一个话题自由讨论,它们能不能像正常人一样交流,既不冷场又不互相抢麦?为了达到比较好的用户体验,我们希望不仅仅局限于文字,让这些 AI Agent 在一个语音会议里吵架或者演绎剧情,这可以实现吗?

  其实有很多工程的方法可以做,比如首先让大模型选择发言角色,再调用对应的角色去发言。这样相当于增加了发言延迟,但可以彻底避免抢麦或者冷场。更类似真人讨论的方法是,各个角色分别以一定的概率发言,遇到抢麦就退让。或者在发言之前先判断前面的对话跟当前角色是否相关,不相关就不发言。

  但是我们有更根本的一种方法:让大模型的输入输出都变成一个持续的 token 流,而不是像现在 OpenAI 的 API 这样每次都输入一个完整的 context。Transformer 模型它本身就是自回归的,源源不断地接收从语音识别过来的外部输入 token,也在不断接收自己前面内部思考的 token。它可以输出 token 到外部的语音合成,也可以输出 token 给自己思考。

  当我们把大模型的输入输出都变成流式的之后,大模型就变成有状态的了,也就是 KV Cache 需要持久驻留在 GPU 内。语音输入 token 的速度一般不超过每秒 5 个,语音合成 token 的速度一般也不超过每秒 5 个,但是大模型本身输出 token 的速度可以达到每秒 50 个以上。这样如果 KV Cache 持久驻留在 GPU 内,并且没有太多内部思考的话,GPU 里的内存大多数时间是闲置的。

  因此可以考虑做持久化 KV Cache,把 KV Cache 从 GPU 内存传出到 CPU 内存,下一次输入 token 的时候再把 KV Cache 加载进来。例如对于 7B 模型,用了 GQA 优化之后,典型的 KV Cache 在 100 MB 以下,通过 PCIe 传出再传入只需要 10 毫秒。如果我们每秒加载一次 KV Cache 做一次推理,处理一组几个语音识别出来的输入 token,不会太影响整个系统的性能。

  这样换入换出的性能损失是比重新输入上下文,重新计算 KV Cache 更低的。但至今没有哪家模型推理提供商做这种基于持久化 KV Cache 的 API,我猜测主要是应用场景问题

  大多数类似 ChatGPT 的场景中,用户与 AI Agent 的交互并不是实时的,有可能 AI 说了一句话后用户好几分钟不说话,这样持久化 KV Cache 占据大量 CPU 内存空间,就会带来很大的内存成本。因此这种持久化 KV Cache 最适合的场景也许就是我们刚讨论的实时语音聊天,只有输入流的间隔足够短,存储持久化 KV Cache 的开销可能才更低。因此我认为 AI Infra 一定要跟应用场景结合,如果没有好的应用场景驱动,很多 infra 优化都没法做。

  如果我们有 Grace Hopper 这样的统一内存架构,由于 CPU 内存和 GPU 之间的带宽大了,持久化 KV Cache 的换入换出代价会更低。但统一内存的容量成本也比主机的 DDR 内存更高,因此会对应用场景的实时性更加挑剔。

  上面一页讲的多 Agent 互动方案中,还是依靠语音识别和语音合成来把语音转换成 token 的。前面我们在多模态大模型方案中分析过,这种方案大概需要 2 秒的延迟,包括停顿检测 0.5s + 语音识别 0.5s + 大模型 0.5s + 语音合成 0.5s。这里面每一项都可以优化,比如我们已经优化到 1.5 秒,但是很难优化到 1 秒内。

  为什么这种语音方案延迟高呢?根本上是因为语音识别和合成过程需要按句子 “翻译”,而不完全是流式的

  我们的后端同事总是把语音识别叫做 “翻译”,我一开始不理解,后来发现确实很像是国际谈判会议中的翻译。一方说一句话,翻译员翻译一句,这时候对面才能听懂。对面回答一句话,翻译员翻译,然后才能听懂。这种国际会议的沟通效率都不是很高。传统语音方案中,大模型听不懂声音,所以需要先把声音按照句子停顿分隔开,使用语音识别翻译成文本,送给大模型,大模型把输出的内容拆成一句一句的,使用语音合成翻译成语音,因此整个流程的延迟很长。我们人类是听一个字想一个字,绝不会听完一整句话之后才开始想第一个字。

  要想做到极致的延迟,就需要端到端的语音大模型。也就是把语音经过合适的编码后,直接变成 token 流输入到大模型。大模型输出的 token 流经过解码,直接生成语音。这种端到端模型可以实现 0. 5 秒以内的语音响应时延。Google Gemini 的演示视频就是 0.5 秒的语音响应时延,我认为端到端语音大模型是做到这么低时延最可行的方案。

  除了降低时延,端到端语音大模型还有另外两个重要优势。

  第一,它可以识别和合成任何声音,除了说话,还包括唱歌%E

更新时间 2024-05-02 03:42:50