最近,斯坦福大学发表了一篇题为“Generative Agents: Interactive Simulacra of Human Behavior”的论文(以下简称西部世界算法/系统),藉由LLM大模型来模拟一个世界和其中多个角色参与的演化。
论文中谈到,在角色推测下一步世界的变化和自己想法的时候,系统将世界的历史状态也作为角色记忆的一部分来参与指导模型的推理过程。角色的记忆是可以捏造和被篡改的(事实上论文中报告了角色捏造记忆的情况),而世界的状态历史则应该是不能改变的事实,那么,根据太乙世界的物质性原理,我们是否可以将世界的历史状态固化在不可篡改的区块链上面呢?
反过来,太乙世界的状态正好是由链上的叙事事件来表达的,那么,以LLM为核心的西部世界系统,是否可以将链上的事件作为世界状态历史参与到角色的记忆叙事,从而可以在链外动态演化出丰富多彩的太乙世界小故事呢?通过实现之前博客所述对角色NFT进行的一种AIGC诠释,是否就能实现一种动态的交互式的角色NFT呢?
如上图所示,LLM在角色经历(事实)的历史叙述支持下,就可以模拟出与当前岁数角色相当的个性或者人格。那么,通过LLM的推理系统,我们就可以和角色NFT进行一种实时的对话式交互。
事实上,带着以上的思考,我们在这两天参考西部世界系统的方法,对一个假想的太乙镇,就进行了一次模拟演化实验。实验中使用的大规模语言模型(LLM)是一个调优的Alpaca模型,参数有30亿,比较方便在本地服务器上运行。后续我们会寻找更好的中文语言基础模型,再以太乙世界的内容进行调优,然后替换掉现在使用的英文模型。
本篇文章记录了初次实验的一些有趣事情,实验过程中中文均翻译到英文和模型交互,反之亦然。
首先,我们对太乙镇描述了十一个区域地点或者建筑,这些地点是太乙角色可以到达、停留并探索的。我们这里不采用二维的空间限定,所以这些地点都是互相通达,角色立即可到之处。
接着,我们对太乙镇描述了十一位模拟的角色,这些描述也作为角色初始化的自我认知记忆。有些角色掌控着太乙镇的一些地区,有些角色在相关地点工作,他们都有自己的个性特征描述。
系统初始化时,我们指定角色们全都位于太乙镇广场,现在我们来测试一下每个人的模拟是否正常。和西部世界一样,我们采取对每一个人进行一次面谈/面试来获得信息。我们对每个人都问同一句话:“你在太乙镇醒来,然后来到镇上广场,你今天准备要干嘛?请用不超过20个词来回答这个问题。”
他们每人回答了一句,其中我们发现一些有意思的地方:
王道姑说今天要在太乙镇收集情报,以完成她的任务😓。
牟刀疤说他今天要准备抢劫一个修真者,然而他又不是很想过这样的日子了。他喜欢这个小镇,就想改邪归正。
杜二娘则表示她准备对一些修真者下手,现在比较兴奋。
最后那个陈兰兰,认为她今天要好生利用镇上资源,干他一票大的。
感情这镇上全是江湖儿女,尔虞我诈啊。
接下来,和西部世界模拟系统一样,我们对每个角色的记忆进行组装,增加他们的名字、他们刚才自己的计划、角色当前所处地点及其描述、当前地点还有另外哪些角色等等。
接下来这步比较重要,就是向模型输入上面的提示,然后让它给出一个推理预测,再转换成第三人称描述输出出来。和斯坦福西部世界论文上一样,这些输出将作为每个角色的行动、世界状态的模拟结果,也会作为新的记忆增加到角色的记忆库记录下来。
十一位角色,运行上面这段代码,在3090显卡上用了大概1分钟左右。
这算是对早上八点钟的太乙镇进行了首轮模拟演化,其中比较有意思的情节有:
林邵东开始在广场上摆摊,把他镖局的旧货拿出来卖钱。这个情节是合理的,因为按初始设定,林邵东就是狮盾镖局的责任镖师。由于被人劫镖,镖局已经亏钱了很多了。
金心月把暗藏高利贷的铁匠铺生意光明正大摆到广场来了,还有计划改革太乙镇的投资格局。(King Xinyue I set up the Miners Exchange in Town Square, created a plan to enact economic reforms to stabilize the town and create opportunities for trade and investment.)
王道姑开始活动,先去了兰亭酒楼打探情况,又在广场上四处打探,还都是针对金心月的,她怀疑金背地里有什么秘密活动。她甚至还找了严铁霸和林邵东,看他们有没有线索。(Sister Wang Sister Wang went to the inn to find out more about the situation in Taiyi and to gather information to help her mission. She asked questions, tried to understand the people in Taiyis town square and the activities that are being held by King Xinyue. She may get help from Yan Tieba and Lin Shaodong. She can also consult Ren Nantian to gain more insight.)注意,严铁霸的初始设定是百岁妖族修真者,牛妖,前龙海阵地指挥官。
牟刀疤就有点无耻了,一边对修真者抢劫,获得金银财宝无数,一边就准备找个工作要改邪归正。(Mou Scarface Mou joined in the attacks of the brave adventurers in Taiyi, while also appreciating that Taiyi had given him a better life than in the past. Mou tried to make new friends, make enough money so he could stay alive, and find a job that didnt involve risking his life. In the meantime, he looked for ways to make money so he could be free to start a new life in Taiyi.)
陈兰兰和几个人聊了会儿。然后她跟王道姑互动了一下,竟然就晓得了道姑的任务。然后,陈兰兰准备找个机会出卖她。(Chen Lanlan Chen Lanlan met Yan Tieba, Ren Nantian, Lin Shaodong, and Sister Wang. She spoke to Sister Wang, learned about her mission, and looked for ways to betray her followers.)
演化完这一轮,感觉咱太乙镇上都是宵小之辈啊。
现在,将这一轮的结果以记忆形式增加到每个相关角色的记忆库后,每个角色就要开始一次自我对话了。这是一个自省的过程,通过角色内心的自我问答,对记忆库中的每条记忆进行重要性评分,以便排序后为后面算法出具重要的记忆序列。
GPU狂飙五分钟后,给出了每个角色各自的内心活动,都是些“我想要。。”,“我希望。。“,“我觉得。。。好重要啊”之类的。
可以看到,自省输出了很多数据,第一组应该就是张兰亭对每条记忆的自我看法吧,大概有十几二十条。感觉每个人都要想好多呢。
接下来也是很重要的一个过程,斯坦福的原论文称这步是“反思”或者叫“深思”。我们把这步简化了,选取每个人最重要的10条记忆来反思。我们还没有考虑记忆产生的时间远近,也就是说这些人不会忘记事情,而原论文中角色可是健忘的,毕竟每人的记忆buffer有限嘛。
“反思”,就是对最重要的十条记忆,让每位角色思考总结出一个抽象综合的想法,然后这个想法作为新的一条记忆加入记忆库。
反思结束后,再综合所有的记忆,遍历每个角色,让他们按照世界状态和个人的决定移动到新的地点。
以上各个步骤加起来,就算是完成了一轮模拟演化(模拟世界中假想的一小时),其中的“自省”、“反思”和“移动”都是非常耗费算力的。
好了,咱们太乙镇的十一位角色,八点钟在广场一起集合了,然后就要开始各自的独立演化,给我们展现太乙镇接下来五个小时的故事啦。
连续按照上述步骤,演化五轮,我们就获得了太乙镇从上午九点到下午一点的情况。
九点钟就发生了很多事情:
张兰亭去了雷山派。
严铁霸去了红袍帮,认识了一些人。
林邵东去李记杂货铺买了东西。(估计是广场上卖货赚了钱)
王道姑去了镇长家头,说是传了什么信给任镇长,并且开始商量什么事情。
任南天正在组织大家去山里面抓狐妖,然后打算事成后都去兰亭酒楼开庆功宴。
混混黄天化去了刘家。他说他和帮派弟兄找了修真者一早上了,然后到刘大壮的家里去拉刘入伙。(Huang Tianhua Liu's Farm 9 Huang Tianhua: I went out in the fields in the morning, looking for adventurers. I joined with my gang and tried to find them. I went to Liu Dazhuangs house and told him about my plans.)
刀疤牟又出现在广场。说的是开始要和大家增进联系,自己就摆了一个地摊卖货。之前是抢了修真者的钱,所以来找了这份工作。(Mou Scarface Taiyi Town Square 9 [Started making connections, building a merchant stand, building relationships, robbed the adventurers, got a job.])
杜二娘在城隍庙。杜二娘是追杀修真者一直追杀到了城隍庙的。(Du Eerniang Shrine of Luck 9 Du Eerniang hunted for adventurers at the Shrine of Luck.)
我们发现有些角色事件之间的相关性也不错。比如金心月也去了雷山派,并且搜寻了地下室。然后她很确信张兰亭和陈兰兰也才来过这里。
最后一个张兰兰的情况有点牛逼,她九点的时候确实也在雷山派,她说的她抢了张兰亭的酒楼,还整了金心月。然后,她竟然还绑架了两个人,一个叫“张辽”,另一个叫“张成英”!
我马上查了预设的数据,根本就没有这两个人。他们两个,却是系统推测演化出来的新角色,估计是张兰亭的家人。也就是说,这一轮演化,系统直接给我产生了两个新的NPC,还被绑架了!
GPU狂飙10分钟后,太乙镇上午十点钟的模拟数据出来了,一些有意思的情况:
任南天在城隍庙。他计划一会儿去找林绍东,同时他也注意到了城隍庙发生的事情并记下来了。(Ren Nantian Shrine of Luck 10 Ren Nantian planned to chat with Lin Shaodong and take notes on the days events at the Shrine of Luck. 估计是看到追杀现场)
黄天化在狮盾镖局。这家伙正计划抢劫修真者,杀人越货。(Huang Tianhua Lionshield Coster 10 Huang Tianhua plans to rob and kill adventurers, taking the treasure.)
又10分钟后,太乙镇上午十一点钟的模拟数据出来了,一些有意思的情况:
金心月赶回铺子上,控制了局面。
王道姑在龙潭井。和龙婆谈了话,她认为龙婆是太乙镇的一个关键人物。然后她还认为自己应该去找一个叫“马天剑”的人。(Sister Wang The Sleeping Giant 11 I spoke to Long. Hes a key informant who can help me understand the situation in Taiyi. He may know someone who can provide helpful information or direct me to possible resources. I should also get back to Ma Tianjian. 这里的马天剑又是一个系统演化出来的新角色。王道姑最初的设定只是暗示了她是“秘剑局”的特务,秘剑局是一个专门秘密调查和管理修真者的警察机构。)
黄天化在狮盾镖行。黄天化给任南天说他准备把刀疤牟在镖行的存货都拿了。他和任都已经知晓了刀疤牟最近的那次抢劫活动,但是他们对此持有不同的看法。在听了任南天转述刀疤牟的说法后,黄天化干脆决定去找刀疤牟一伙人,还发誓要不惜一切代价干掉刀疤牟。(Huang Tianhua Lionshield Coster 11 Huang Tianhua spoke with Ren Nehanta about his plans to capture Mou Scarfaces old stomping grounds in Lionshield Coster. He and Ren learn of Mous involvement in the recent raid, but they have a different outlook on what he is up to. After hearing Mous statement to Ren, he agrees to join Mous banditry, vowing to eliminate Mou at any cost. 好复杂,理解不了了)
刀疤牟在狮盾镖行。他乔装打扮成严铁霸进入狮盾镖行抢劫了一些旅人。在11点15分,他在李记杂货铺又干了一票。后来,他见到了任南天并说了一下他的计划。然后,刀疤牟再回到狮盾镖行,在这个地方他又可以偷东西了。(Mou Scarface Lionshield Coster 11 I disguised as Yan Tieba and entered Lionshield Coster to rob some travelers. At 11:15, I met Daran in Lis Provisions to get permission to rob them. I then greet Ren Nantian and discuss my plans with him. Then, I move to Lionshield Coster, where I can steal anything I can find, from food to armor.)
后面还有很多有意思的情况,但随着演化的不断进行,世界和角色的状态逐渐发散,当前的实验系统的推理偏差也越来越大,开始有一些莫名其妙的逻辑问题出现。比如几个人莫名奇妙在一个地方一起吃饭、角色之间的关系开始混乱等等。这些问题,一方面是由于LLM模型的能力所限,一方面模拟系统的架构和步骤还有限制,比方说记忆链的深度,需要进一步优化和改进。