字号:TTT

原华为“天才少年”4万字演讲,谈谈天才眼中的AI


现在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,KVCache 是一直在 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 会不会主动联系用户,会不会主动开启话题。

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

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

分享当前的心情和感受;

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

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

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

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

我自己之前是比较内向的,很少有情绪波动,不会拒绝别人,也害怕被别人拒绝,因此不敢主动追妹子,也从来没有被妹子拉黑过。还好我很幸运地遇到了合适的妹子,所以才没有落到“我今年 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,还能提高推理效果。

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

点击图片看原样大小图片

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

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

但是我们有更根本的一种方法:让大模型的输入输出都变成一个持续的 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 更低的。但至今没有哪家模型推理提供商做这种基于持久化 KVCache 的 API,我猜测主要是应用场景问题。

大多数类似 ChatGPT 的场景中,用户与 AI Agent 的交互并不是实时的,有可能 AI说了一句话后用户好几分钟不说话,这样持久化 KV Cache 占据大量 CPU 内存空间,就会带来很大的内存成本。因此这种持久化 KVCache 最适合的场景也许就是我们刚讨论的实时语音聊天,只有输入流的间隔足够短,存储持久化 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 秒的语音响应时延,我认为端到端语音大模型是做到这么低时延最可行的方案。

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

第一,它可以识别和合成任何声音,除了说话,还包括唱歌、音乐、机械声、噪声等。因此我们可以把它叫做一个端到端声音大模型,而不仅仅是语音大模型。

第二,端到端模型可以减少语音/文字转换导致的信息丢失。例如在现在的语音识别中,识别出的文字会丢失说话人的情感和语气信息,而且由于缺少上下文,专有名词经常识别错误。在现在的语音合成中,为了让合成的语音带有情感和语气,一般需要在大模型的输出文本中进行适当的标注,再训练语音模型来根据标注生成不同的情感和语气。使用端到端声音大模型后,识别和合成就会天然带有情感和语气信息,并且可以根据上下文更好地理解专有名词,语音理解的准确率和语音合成的效果都能显著提升。

有趣的灵魂:性格匹配

点击图片看原样大小图片




还没有人评论



    还可输入500个字!
    ©2023 wailaike.net,all rights reserved
    0.017592906951904 is seconds