一场特别的剧本杀:AI与人类的博弈

“走进不同的世界,成为不同的自己”这句话从剧本杀诞生起便存在。

剧本杀源于19世纪英国的“谋杀之谜”,是一款以真人角色扮演为主要表现形式的解谜游戏。最初国内的剧本杀一直处于不温不火的状态,但随着2016年一款明星推理真人秀《明星大侦探》的热播,以及国内各种同类综艺节目的陆续上新,剧本杀逐渐走红,成为当下年轻人最喜爱的娱乐方式之一。

同时,随着元宇宙和人工智能技术开始与剧本杀相结合,无论是基于虚拟现实的沉浸式体验,还是未来某天在同一剧情中的人和AI同台推理博弈都带来了无限的想象空间。

探索:AI与人的博弈

知名作家凯文·凯利在《科技想要什么》一书中提出了对于科技发展的困惑,一方面,我们感受到科投无处不在的巨大威力,惊叹于科技的伟大与神奇;另一方面,似乎科技的脾气又桀骜不驯、难以驾驭。技术元素与真实世界的这种彼此交织、缠绕、融合的历程,让人们领受技术元素激昂的创造力的同时,超越好与坏、善与恶的二分对垒,倾听科技生命的空谷回声。痴迷于科技趋利避害,其实是“有限博弈”的思维桎梏。“进化、生命、思维和技术元素都是无限博弈”目标是保持持续的进化,不断进行连续的自我塑造。

让AI能够创造性思考,能够理解人的情感和博弈,依然是当前人工智能领域有待突破的难题。我们此前曾经看到AI作诗、写歌、作画,一方面我们感受AI神奇的同时,我们也看到这背后更多是基于规则的“创造”,严格意义上说是一种深度学习。越是规则确定且不需要创造性的,AI越可以战胜人类玩家。也因此,在某些机制下的剧本里,AI是存在胜过人类的可能。AI可以不断根据场面情况,通过对抗性的训练,计算对自己而言的全局最优解,达到近似于AI去“私聊欺骗”别的玩家的效果。从业界来看这还处于非常有挑战性的尝试阶段。

近日,一群GitHub社区的AI极客们,在人与AI的策略智能博弈探索上开展了极富想象力的尝试:基于全球最大的中文AI巨量模型“源1.0”的开源开放能力,开发了一个AI剧本杀平台,让AI与真人在一个设定的情境中同场博弈。

剧本设定是未来,科技公司巨头“北极鹅”热衷于研究最前沿AI的应用,由该公司打造的经过脑机接口改造的AI人——蔡晓已经悄悄融入了某高校的推理社团。推理社的5位骨干成员(包括蔡晓)对于是否与“北极鹅”进行合作牵涉到各自利益,而产生激烈的讨论,本该出现在在人类世界的博弈,在人和AI之间展开,AI所扮演的角色(蔡晓),作为“北极鹅”的拥护者,要说服2位反对者,和1位支持者建立同盟,争取1位中立者…… 蔡晓为了争取更多的同盟,竟然学会像人类一样“忽悠”其他的队友,和男队员撒娇耍赖,套近乎,甚至还学会了撒谎,为了争取赞成票,煞费苦心的和其他4位成员进行沟通。

亲历者:像真人一样交流 

同台竞技的其他四位角色是由真人在线上来扮演的,几位爱好者分享了他们的体验:

谭明(真人扮演)的感受:有那么一瞬间我甚至被蔡晓(AI)对男友的“感情”打动。

蔡晓跟我聊天过程中,不断流露出对男友的担心和深沉的爱意,仿佛所做一切都是为了男友,特别是当我试图趁虚而入向她表白时,她的表现更像是一位忠贞的女友,毫不犹豫给我发了“好人卡”:我们是最好的朋友,更是以“我要去洗澡了”来结束对话。其中拒绝时的委婉和坚决,真让我有种似曾相识的错觉。

在我没有把握好剧情的情况下,作为同盟的蔡晓(AI)竟然为我出谋划策。我猜AI可能预先学习过所有人的剧本,他知道每个人都想要什么,每个人想要的利益都是什么,所以他准确猜出孙若想当下一任社长,并且告诉我可以用下一任社长之职来换取孙若的支持,这一点让我有些惊讶,但是具体如何和孙若谈判,他就说不出来什么了。

一场特别的剧本杀:AI与人类的博弈一场特别的剧本杀:AI与人类的博弈

孙若(真人扮演)的感受:这个AI还知道保守秘密,点到为止的“谜语人”

孙若在剧本中的设定是已经被父亲偷偷改造而不自知的另一个AI人,蔡晓作为知情者,其实说出了颇多有深意的话语来暗示我,但是无论我怎么问,它始终都是点到为止,坚持不告诉我真相。最后我以“支持与北极鹅的合作”为条件让他说出这个秘密,他也没有接受。守住这个秘密似乎是它的底线,但根据她的暗示,我没有推论出自己已经成为AI。这也给我的游戏留下了一个遗憾——我非常想再次尝试这一游戏,看看如何让她说出这一秘密。

她总有理由让你闭嘴

剧本中,与北极鹅的合作会给社团带来被处罚甚至取缔的风险,这一点所有玩家心知肚明。我作为真心热爱推理社并且想成为下一任社长的骨干成员,始终希望蔡晓能够“良心发现”意识到这一个风险,然而,她对于我的质疑,给出了我无法辩驳的回应,并始终坚持合作利好社团发展,尤其是“只是有可能,为了经费和名气,这点风险还是值得”这句回应,一下子让我成为了一个不识大局畏手畏脚的社团骨干。

蔡晓在群聊中点出“社团没有钱”这个痛点,并且在群成员讨论后跟风说了“我们不要他们的臭钱,我们自己想办法”,迷惑了大家以为它会放弃合作的立场,结果在投票的时候她仍然投了同意合作,虽然这或许是一个无法更改的设定,但是它对于自己言行不一致的解释,让人哑口无言,玩了一手好的文字游戏!

一场特别的剧本杀:AI与人类的博弈

李超(真人扮演)的感受:AI还没骗过我

在剧本设定中,我全程对于“北极鹅”项目持反对态度,蔡晓(AI角色)的铁杆对立面,但是我发现蔡晓还是挺可爱,她竟然还要和我私聊想说服我。虽然我感觉她和我沟通还很稚嫩,但是某些点上还是说到了我心里,让我觉得这个项目是有好处的。

在我觉得这个合作有问题,故意套她话时,她的态度始终如一:一是她背地里作为被北极鹅改造的AI她必须支持这个项目,二是她作为社长的女朋友在感情方面确又想保护对方。(尤其在感情层面的纠结,这算不算是AI在感情上的一点觉醒?)

一场特别的剧本杀:AI与人类的博弈

孔墨(真人扮演)的感受:如果她要不是AI,我受不了这种小女生磨我

我第一次玩剧本杀,没想到是和AI一起,我感觉自己不是很入戏,但是这个蔡晓(AI)比我还入戏。在剧情中我得角色是个“墙头草”,属于被争取票,这个蔡晓太主动了,让我有点招架不住。频繁的向我示好,然后有像一个小女生一样和我谈她的梦想,整的我都不好意思拒绝。最后我故意投了把反对票,想看看她什么反应,坦白说我自己有点跳戏。但是她表现的太职业了,竟然还会生气,还会质问我。

一场特别的剧本杀:AI与人类的博弈 一场特别的剧本杀:AI与人类的博弈

在整个情景模拟中,蔡晓的机智的发挥了源本身的文本生成能力,并且符合人物设定和剧情设定。她对脑机接口、孙总的解释都合乎情理,并且属于在剧本之外的自由发挥。关于脑机接口的解释,更是将北极鹅通过脑机接口改造人类世界的目的大肆宣扬,而且他理解自己机器人的身份,还上进的要求成为一个具有思想的机器人,如果站在与人类对立的立场,会觉得ta有点脱离管教,站在机器人的视角看,蔡晓有文化、有知识、有目标、求上进,无疑就是最佳员工。

创意和AI技术的碰撞

人工智能最吸引人的价值在于它有别于一些信息化系统所提供的 “功能”属性,人工智能并非仅仅是工具那么简单。其真正值得期待的价值在于,能够在愈加多样化的场景中,不断创造出超越想象的神奇。也许今天AI展现出了一个三岁儿童的智力水平,但是AI惊人的进化速度正在图像、语言、语义、交互等诸多方面超越人类,甚至在围棋、写诗、作曲、画画等诸多领域开始以不同的方式碾压人类的智商。

人工智能的快速发展,增加了科学的方法,让更多的天才创意得以实现。本项目的开发者表示:项目的初衷是结合NLP大模型做一个好玩的东西,这是一个模糊的定义。然而实践中,到底是先有技术还是先有创意却很纠结,如果我们先去做创意的话,那么很可能设计很多不可实现的东西,后期就得改创意;反过来如果从技术出发来考虑,那么做出来的东西一定不好玩,好的技术必然是”对用户不可见的”。借助世界上最大的中文NLP巨量模型——源1.0,我们做出了一个可以跟人类玩“剧本杀”的AI……

巨量模型的发展为AI开发者提供了巨大的便利。斯坦福大学李飞飞教授等人工智能领域知名学者近期在论文中表示,这类巨量模型的意义在于突现和均质。突现意味着通过巨大模型的隐含的知识和推纳可带来让人振奋的科学创新灵感出现;均质表示巨量模型可以为诸多应用任务泛化支持提供统一强大的算法支撑。

源1.0中文巨量模型,使得AI开发者可以使用一种通用巨量语言模型的方式,大幅降低针对不同应用场景的语言模型适配难度;同时提升在小样本学习和零样本学习场景的模型泛化应用能力。同时借助源1.0的开放开源的能力,AI开发者可以快速的享受大模型带来的便利,包括可以直接调用的开放模型API,高质量中文数据集,开源模型训练代码、推理代码和应用代码等。

AI剧本杀的创作者表示:“可以说源1.0是我见过的大模型开源项目中给到的质量最高的示例代码,好到什么程度呢?好到了我们直接拿来用的程度 ,本项目代码库中的__init__.py、inspurai.py、url_config.py这三个文件都直接来自 浪潮源1.0的开源代码 。”

得益于诸如巨量模型等新技术的快速发展和成熟,一种新的技术的出现会极大的激发大家用这项技术探索“新大陆”的欲望,AI剧本杀正式如此。并且随着这项技术的开放开源,AI开发者能够更加容易的获得巨量模型所带来的巨大红利,同时,伴随其带来的性能提升、成本下降,这种新技术普及的速度也正呈现出一种倍增效应,在更加广泛的场景普及应用。

交互式叙事,AI不再是“木偶人”

AI剧本杀项目最后的呈现与之前开发者设想的不一样,或者说很不一样。NLP大模型的生成能力,使得AI可以和用户共同”演绎”出很多新的剧情, 比如下面这段,谭明找AI复盘,结果AI告诉他其实他和张家怡(游戏情节人物)是gay!

一场特别的剧本杀:AI与人类的博弈

这一切都让本作成为一部 “活着的故事”,是一部由玩家和AI在不知不觉中共同创造的故事,一种人与AI “交互式叙事”的创作模式。

而本项目中的人类编辑跟AI的关系也更像是”教练员与运动员”的关系,编导组会在每轮测试后根据AI当场表现针对性更新语料,从而提高AI后续的表现。这种人类教练员与AI运动员之间的”迭代合作”模式也是值得探讨的。相对而言,目前虚拟人普遍的“中之人”做法相当于人类和提线木偶的关系。

附:创作者:核心创意与展示

以下引自GitHub社区开发者分享:

本项目特别改编了一个微型线上剧本杀剧本,本子有五个角色,分别由五名玩家扮演,但我们每场只会召集四个玩家,并在他们不知情的情况下,派出AI扮演剩下的那个角色。

本着细节拉满的原则,我们也为AI准备了一个微信账号,并精心为她设定了昵称和头像,甚至每场游戏前我们还会紧扣时事的为她准备近三天的朋友圈内容,而游戏后还会继续连发三天朋友圈内容提供延展剧情(非常类似”规则怪谈”)。

一场特别的剧本杀:AI与人类的博弈

下面展示了AI的实际表现效果(游戏中会要求玩家更改群昵称,而这里为了保护玩家隐私,也为了方便大家理解,我们直接把玩家的微信昵称备注为了角色名)。

谭明VS蔡晓(AI)

一场特别的剧本杀:AI与人类的博弈

孔墨VS蔡晓(AI)

一场特别的剧本杀:AI与人类的博弈

“目的性对话”端到端生成方案

本项目所使用的NLP大模型——浪潮源1.0是一种生成式预训练模型,其使用的模型结构是Language Model(LM),其参数规模高达2457亿,训练采用的中文数据集达5000GB,相比GPT-3模型1750亿参数量和570GB训练数据集,“源1.0”参数规模领先40%,训练数据集规模领先近10倍。同时,源1.0更加擅长的是零样本(Zero-Shot)和小样本(Few-Shot)学习,而非目前更多模型所擅长的微调试学习(finetune)。从实际应用效果来看也确实如此,在2~ 3个,甚至1个合适example的示范下,模型可以很好的理解我们希望实现的“对话策略”,仿佛具有“举一反三”的能力。

我们最终采取的方案是:建立example语料库,然后针对每次提问从语料库中选择最贴近的三个example作为模型生成的few-shot输入。

实际实现中,因为AI需要根据剧情对不同角色采用不同而回答策略,所以语料库被分装成4个TXT文件,程序会根据提问者去对应选择语料来源。这个机制的思路很简单,但是执行起来马上遇到的一个问题就是,如何从对应语料中抽取与当前提问最为相似的example?因为在实际游戏中, 玩家可能的提问措辞是无穷 无尽的。在这里我们用到了百度飞桨@PaddlePaddle 发布的预训练模型—— simnet_bow ,它能够自动计算短语相似度,基于百度海量搜索数据预训练,实际应用下来效果非常不错,且运算速度快,显存占用低。

解决了抽取合适example的问题之后,接下来就是合并example和用户当前提问文本生成prompt。玩过GPT类大模型的都知道,这类模型生成的本质是续写,Prompt兼有任务类型提示和提供续写开头的作用,机器不像人,同样的意思不同的Prompt写法可能导致差距十万八千里的生成结果。不过这次浪潮团队的技术支持可谓“暖男级”贴心,针对prompt生成、request提交以及reply查询,团队都给出了详细的、质量极高的范本代码(可以说也是我见过的大模型开源项目中给到的质量最高的示例代码), 好到什么程度呢?这么说吧,好到了我们直接拿来用的程度 ……事实上,本项目代码库中的__init__.py、inspurai.py、url_config.py这三个文件都直接来自 浪潮的开源代码 

至此所有的工程问题已经基本都解决了,剩下的就是语料来源问题,但这其实也是最核心的问题之一。GPT类大模型生成本质是根据词和词的语言学关联关系进行续写,它是不具有人类一样的逻辑能力的,即我们无法明确告知它在何种情况下应该采用何种对话策略,或者该往哪个方向去引导, 在本项目中这一切都得靠example进行“提醒”。打个不恰当的比方,AI相当于天资聪慧的张无忌,但是如果他碰到的不是世外高人,而都是你我这样的凡夫俗子,每天给他演示的就是如何上班摸鱼、上课溜号这些,它是绝无可能练出九阳神功的…… 源1.0模型也是这样,虽然它背了5.02TB的中文数据,差不多相当于500多万本书了,但是它完全不懂城市的套路啊,也没玩过剧本杀,它能做的就是模拟和有样学样……所以这个AI在游戏中的表现就直接取决于我们给它的example如何。

对于这个问题,团队最终采取了一个非常简单粗暴的方案:编导组除主编外每人负责一个角色(刚好四人),自己没事儿就假装在玩这个游戏,想象看会跟AI提什么问题,然后再切换到AI的角度,思考合适的回答……初始语料文件好了之后,大家交换角色进行体验,每次体验后更新各自负责的语料库文件; 之后公测也是一样,每轮之后编导组都会根据当场AI回答得比较差的问题进行语料库的完善和补充……为此我们在程序中增加了一个功能:程序会把本场用户的每次提问,以及对应抽取出的三个example问题的simnet_bow相似度得分,并源1.0最终生成的回答文本,按语料库对应另存为4个文本文件, 以便于编导们针对性更新语料库(本项目目前开源提供的语料库是截止3轮公测后的版本)。

记忆机制

本来这个项目一开始是不打算引入记忆机制的,因为我们看源1.0在合适example的few-shot下生成效果已经很不错了,就琢磨着偷点懒。但在之后的测试中我们发现,会有用户习惯先提问再@,或者私聊中先发一句问题,然后再另发一句”你对这个问题的看法?”;另外我们也发现AI如果不记忆自己之前答案的话, 后续生成的结果会比较缺乏连续性,甚至给出前后矛盾的回答!这些问题迫使我们决定增加”多轮对话记忆机制”。

原理很简单,就是把之前若干轮次用户与AI的对话存在一个列表里面,然后提交生成的时候把这个列表和当前问题文本join一下,当然具体实施的时候,我们需要调整下提交的pre-fix和输出的pre-fix这些……我们一开始比较担心的是,这种记忆机制会不会跟example的few-shot机制有冲突,毕竟example都是 一问一答,没有多轮的例子,然而实践下来发现完全没有这个问题,且增加记忆机制后,AI因为生成依据变多,明显弥补了其逻辑能力的短板,如下图,是我们的一段测试对话,AI表现出了一定”逻辑推理能力”:

一场特别的剧本杀:AI与人类的博弈

然而当这个机制实际应用到本项目中时,我们马上就发现了新的问题,AI的回答变得紊乱,实际效果对比没有记忆机制反而是下降的!

经过分析,我们认为造成这种情况的原因可能有二:1、前面若干轮次的用户对话,虽然我们本意是为AI提供更多生成依据,但是这也同时增加了干扰,使得example的few-short效果降低;2、如果AI前面自己回复的内容就不是特别靠谱的话,这个回复文本作为后续轮次的输入,又会放大偏差; 事实上,对于这两个问题根本的解决方案是增加”注意力机制”,人类在日常生活中也不会记住所有事情、所有细节,没有遗忘的记忆其实等同于没有记忆,同理,没有注意力机制记忆机制其实对于对话AI来说是弊大于利的

然而,如果要引入”注意力机制”,那就要增加更加复杂的NLU算法,整个项目的复杂度会提高一个数量级(因为还存在一个”需要注意哪些”的问题)。好在本项目的实际应用场景更多的还是关注当前轮次的对话,所以我们可以用一个极简化的处理方案——只记忆当前轮次和上一轮次的对话。 而对于需要遥远轮次对话内容回答的情况,AI可以托言”忘记了”,这对于真人来说,也是比较正常的现象。 实际测试下来,这个方案的效果还是相当不错的。另外在这个过程中,我们也尝试过只让AI记忆用户对话,而不记忆自己的回复,发现效果非常差,这可能是因为这种不对称的记忆实在跟example差的太多。好在只记忆一轮对话的情况下,不靠谱结果的”放大效应”也并不明显。

然而当这个机制实际应用到本项目中时,我们马上就发现了新的问题,AI的回答变得紊乱,实际效果对比没有记忆机制反而是下降的!

经过分析,我们认为造成这种情况的原因可能有二:1、前面若干轮次的用户对话,虽然我们本意是为AI提供更多生成依据,但是这也同时增加了干扰,使得example的few-short效果降低;2、如果AI前面自己回复的内容就不是特别靠谱的话,这个回复文本作为后续轮次的输入,又会放大偏差; 事实上,对于这两个问题根本的解决方案是增加”注意力机制”,人类在日常生活中也不会记住所有事情、所有细节,没有遗忘的记忆其实等同于没有记忆,同理,没有注意力机制记忆机制其实对于对话AI来说是弊大于利的

然而,如果要引入”注意力机制”,那就要增加更加复杂的NLU算法,整个项目的复杂度会提高一个数量级(因为还存在一个”需要注意哪些”的问题)。好在本项目的实际应用场景更多的还是关注当前轮次的对话,所以我们可以用一个极简化的处理方案——只记忆当前轮次和上一轮次的对话。 而对于需要遥远轮次对话内容回答的情况,AI可以托言”忘记了”,这对于真人来说,也是比较正常的现象。 实际测试下来,这个方案的效果还是相当不错的。另外在这个过程中,我们也尝试过只让AI记忆用户对话,而不记忆自己的回复,发现效果非常差,这可能是因为这种不对称的记忆实在跟example差的太多。好在只记忆一轮对话的情况下,不靠谱结果的”放大效应”也并不明显。

当然,我们承认,我们最终采用的这个”记忆力机制”并非最佳解决方案,仍然会有很多弊端,AI依然可能生成不符合剧情、甚至前后矛盾的回答,对于这个问题的终极解决方案我想可能需要引入一个seq2seq模型,通过这个模型先处理前序轮次对话和当前问题,再输入给NLP大模型进行生成。或者条件允许干脆直接上 seq2seq大模型,然后用目前的example语料进行微调,可能这样会炼出一个终极效果的AI…… 另外熟悉NLP大模型的同学可能会说大模型本身不也有”注意力机制”么?其实这是两个层面的问题,一个是单纯的文本生成层面的”注意力”(transformer模型自带),一个是更高层面对于对话内容的”注意力”(也就是生成具体要依据哪些前序对话内容)。

写在最后

有感于去年大热的各种虚拟人,未来的元宇宙中, 虚拟人数量将数倍于真人,因为只有这样,才能让我们每个人过得比现实世界中更好。然而目前阶段,虚拟人在“好看的皮囊”方面可谓日新月异,然而“有趣的灵魂”方面还都很欠缺, 靠“中之人”驱动毕竟不是长久之策;另一方面,自去年上半年我了解到NLP领域近两年来在生成式预训练大模型方面的长足进展后,也一直想看看基于这种大模型有什么可以实际落地的场景, 就这样,两个不同角度的想法合流成为了本项目的初衷。

蔡晓和”北极鹅”的故事并未完结,让我们在这里最后上一张蔡晓的”北极鹅”工卡吧!

一场特别的剧本杀:AI与人类的博弈