当前位置:   article > 正文

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(2)——架构分析 - 核心思想&环境搭建&技术选型

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(2)——架构分析 - 核心思想&环境搭建&技术选型

3bfa8a3a9a4d4db5a8b5bd196b853e0a.png

 4.架构分析

4.1.核心思想

超越一阶提示,通过增加静态知识库和信息检索方案或简单的总结方案来扩展语言模型。

将这些想法扩展到构建一个代理架构,该架构处理检索,其中过去的经验在每个时步动态更新,并混合与npc当前上下文和计划,可能会相互强化或矛盾。

10d208b533c04ba4a0fa23b730253ef1.png

如上生成式NPC架构:NPC感知他们的环境,所有的感知都被保存在一个包含NPC经验的全面记录中,称为记忆流。基于NPC的感知,该架构检索相关的记忆,然后利用这些检索到的行为来确定一个动作。这些检索到的记忆还用于制定长期计划,并创建更高级别的反思,两者都被输入到记忆流中以备将来使用。

生成式NPC旨在为开放的世界提供一个行为框架:一个能够与其他NPC进行交互并能够对环境变化做出反应的框架。生成式NPC将它们当前的环境和过去的经验作为输入并产生行为作为输出。支撑这种行为的是一种新型NPC架构,它将大型语言模型与合成和检索相关信息的机制相结合,以使语言模型的输出具有条件性。如果没有这些机制,大型语言模型可以输出行为,但是结果可能不会基于NPC以往的经验做出反应、不会做出重要推理,也可能不会保持长期连贯性。即使是如GPT-4这样最表现良好的模型,长期规划和连贯性也存在挑战。由于生成式NPC产生大量需被保存的事件和记忆流,因此架构的主要挑战是确保NPC的记忆中最相关的部分在需要时被检索和综合。

架构的核心是记忆流,这是一个数据库,记录NPC的全部经历。从记忆流中检索记录,规划NPC的行动并对环境做出适当的反应,将记录递归地合成为更高级别的观察结果,指导行为。架构中的所有内容都以自然语言描述记录和推理,从而使架构能够利用大型语言模型。

架构包括三个主要组件。

第一个是记忆流,是一个长期记忆模块,以自然语言记录NPC经历的全面列表。检索模型将相关性、近期性和重要性相结合,以展现需要的记录,为NPC的及时行为提供信息。

第二个是反思,它将记忆综合成随着时间推移逐渐提高的推理,使NPC能够在指导其行为时对自身和他人进行结论。

第三个是规划,它将这些结论和当前环境转化为高层次的行动计划,然后递归地转化为详细的行为和反应。这些反思和计划被反馈到记忆流中,影响NPC未来的行为。

4.1.1.记忆与回忆

【挑战】创建能够模拟人类行为的生成式NPC需要对一个经验集合进行推理,这个集合比提示中描述的要大得多,因为完整的记忆流可能会分散模型的注意力,而且目前甚至无法适应有限的上下文窗口。考虑Isabella NPC回答“最近你热衷于什么?”这个问题。将所有的Isabella经验总结到语言模型有限的上下文窗口中,将得到一个无信息量的回答,Isabella会讨论一些关于活动与项目的合作、咖啡馆的清洁和组织等话题。而不是总结,下面描述的记忆流会呈现相关的记忆,从而产生更加信息丰富和具体的回答,提到Isabella热衷于让人们感到受欢迎和包容,策划活动并营造人们享受的氛围,比如情人节派对。

【方法】记忆流维护NPC经验的全面记录。它是一个存储记忆对象的列表,每个对象包含一个自然语言描述、一个创建时间戳和一个最近访问时间戳。记忆流的基本元素是一个观察,它是一个直接被NPC感知到的事件。常见的观察包括NPC自己执行的行为,或者NPC感知到其他NPC或非NPC对象执行的行为。例如,Isabella Rodriguez在咖啡馆工作,随着时间的推移,可能会积累以下观察:

(1) Isabella Rodriguez正在摆放糕点

(2) Maria Lopez正在喝咖啡复习化学考试

(3) Isabella Rodriguez和Maria Lopez正在谈论在霍布斯咖啡馆策划情人节派对

(4) 冰箱是空的。

ad2f151565f64711927f7e1d1650187d.png

记忆流包括许多与NPC当前情境相关和不相关的观察。检索确定了一部分这些观察,应该被传递给语言模型,以使它的回应对情境产生条件性

本架构实现了一个检索函数,将NPC的当前情境作为输入并返回一个子集的记忆流,以传递给语言模型。检索功能有许多可能的实现,这取决于NPC在决定如何行动时需要考虑的重要因素。在我们的情境中,我们关注三个主要组件,它们共同产生了有效的结果。

(1)最近性:将最近访问的记忆对象分配较高的分数,因此一段时间之前或今天早上的事件可能会留在NPC的注意力范围内。在此实现中,将最近性视为一个指数衰减函数,它是自上次检索记忆以来游戏时长的指数函数,衰减因子设定为 0.995。

(2)重要性:将普通记忆与核心记忆区分开来,通过对NPC认为重要的那些记忆对象分配较高的分数。例如,像在自己的房间里吃早餐这样的普通事件会得到较低的重要性分数,而与配偶分手这样的事件则会得到较高的分数。重要性分数的实现也有许多可能的方法;我们发现直接向语言模型输出整数分数是有效的。完整的提示如下:

在1到10的范围内,其中1是纯粹的日常事件(例如刷牙、整理床铺),10是极其深刻的事件(例如分手、被大学录取),请为下面的记忆片段评分,表示其可能的深刻程度 记忆: 在The Willows Market and Pharmacy购买杂货 评分: <填写>

此提示为“打扫房间”返回整数值2,为“向你的暗恋表白”返回整数值8。重要性分数是在创建记忆对象时生成的。

(3)相关性:为与当前情境相关的记忆对象分配较高的分数。什么是相关的取决于回答“相关于什么?”,因此我们会根据一个查询记忆对相关性进行限制。例如,如果查询是一个学生正在与同学讨论如何复习化学考试,他们的早餐记忆对象应该具有较低的相关性,而关于教师和功课的记忆对象应该具有较高的相关性。可使用语言模型生成文本描述的每个记忆的嵌入向量。然后将相关性计算为该记忆的嵌入向量与查询记忆的嵌入向量之间的余弦相似性。

为了计算最终权重得分,通过最大值最小值缩放将最近性、相关性和重要性分数归一化到[0,1]范围内。检索函数将所有记忆作为三个元素的加权组合进行评分:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/468408
推荐阅读
相关标签