在LLM的支持下使游戏NPC具有记忆化的方法

问题

使用GPT这样的LLM去处理游戏中的NPC和玩家的对话是个很好的点子,那么如何处理记忆化的问题呢。

因为LLM的输入tokens是有限制的,所以伴随着问题的记忆context是有窗口大小限制的,将所有的记忆输入LLM并不现实。

所以这里看到了stanford的一项研究,利用ChatGPT做的生成智能群体。

方法

Generative Agents: Interactive Simulacra of Human Behavior ----Stanford

在这里插入图片描述

Introduction

生成代理为交互式应用程序创建可信的人类行为模拟。在这项工作中,我们通过填充沙盒环境来演示生成代理,让人想起模拟人生,其中有 25 个代理,每个代理通过一段话进行初始化。 用户可以作为代理人,他们会观察和干预他们计划自己的日子、分享新闻、建立关系和协调小组活动。

生成型智能体的核心技术是基于深度学习的生成模型。生成模型是一种可以从数据中学习出潜在规律,并根据这些规律生成新数据的机器学习方法。

生成式智能体接受当前环境和过去经验作为输入,并将行为生成为输出。这种行为的基础是一种新颖的智能体架构,它将一个大型语言模型与合成和检索相关信息的机制相结合,以在语言模型的输出上进行条件控制。

主要包括三个组成部分:

(1)memory stream

(2)reflection

它将记忆合成为高层次的推理,使智能体能够在时间上得出关于自己和他人的结论,以更好地指导其行为

(3)schedule

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

Memory and Retrieval

challenge: 创建可以模拟人类行为的生成代理需要对一组远远大于提示中描述的经验进行推理,因为完整的内存流可以分散模型,甚至目前不适合有限的上下文窗口。

memory stream: a list of memory objects. 每个memory object包含:自然语言描述、创建时间戳和最近的访问时间戳。包括agent本身的行为或者代理感知到其他代理的行为。

主要做法:

我们的体系结构实现了一个检索功能,该功能将代理的当前情况作为输入,并返回内存流的一个子集以传递给语言模型。

在这里插入图片描述

Recency: 指数衰减函数。我们的衰减因子是0.99。

Importance:重要性来区分普通记忆和核心记忆。给agents认为比较重要的记忆对象分配更高的分数。(在创建memory objects的时候就得到了重要性评分)

​ Ex:房间里吃早饭这样的事件重要性得分很低,与另一半分手重要性得分很高。

​ 另外直接让LM输出对应的得分也是很有效的。

​ prompt:

On the scale of 1 to 10, where 1 is purely mundane (e.g., brushing teeth, making bed) and 10 is extremely poignant (e.g., a break up, college acceptance), rate the likely poignancy of the following piece of memory. Memory: buying groceries at The Willows Market and Pharmacy Rating: <fill in>

Relavance:与当前的情况相似度更高的memory object分配更高的分数。使用语言模型生成每个memory object的embeeding vector。然后计算memory object与query之间的余弦相似度。

最后将得分归一化到0-1之间。将三者的得分进行一个求和。然后取top ranked memory object作为prompt输入语言模型中。

Reflection

当只有原始的观察记忆时,生成式智能体很难进行泛化或推理。考虑这样一种情况,用户问Klaus Mueller:“如果你必须选择一个你认识的人与之共度一小时,你会选择谁?”只有观察性记忆的智能体只会选择和Klaus互动最频繁的人:他的大学宿舍邻居Wolfgang。不幸的是,Wolfgang和Klaus只是偶尔擦肩而过,没有深入的交流。更理想的回答需要智能体从Klaus在研究项目上花费的时间的记忆中进行泛化,生成一个更高层次的反思,即Klaus对研究充满热情,同时也能够认识到Maria在自己的研究中付出了努力(尽管在不同的领域),从而产生一个反思,即他们有共同的兴趣爱好。通过以下方法,当问及Klaus要和谁共度时光时,Klaus选择Maria而不是Wolfgang

使用一个reflection tree。当智能体感知到的最新事件的重要性分数之和超过一定阈值时,我们就会生成反思。在实践中,我们的智能体大约每天反思两到三次。

反思的第一步是让智能体确定要反思什么,通过识别基于最近经验可以提出的问题。我们使用智能体记忆流中最近的100个记录(例如,“Klaus Mueller正在阅读一本关于社区变迁的书”,“Klaus Mueller正在与图书馆员谈论他的研究项目”,“图书馆的桌子目前没有人占用”)向大型语言模型提出查询,提示语言模型:“只考虑上述信息,我们可以回答哪些关于主题的最重要的高层次问题?”。模型的响应生成候选问题,例如,“Klaus Mueller对哪个主题充满热情?”和“Klaus Mueller和Maria Lopez之间的关系是什么?”。我们使用这些生成的问题作为检索的查询,并收集与每个问题相关的记忆(包括其他反思)。然后,我们提示语言模型提取见解,并引用作为见解证据的特定记录

我们解析并将该语句作为反思存储在记忆流中,包括指向被引用的记忆对象的指针。

递归操作。

记忆保存

记忆来源:NPC通过设定、和虚拟世界进行对话和互动从而获得记忆。

记忆权重:NPC对获得的记忆进行评分,从而区分平凡记忆和深刻记忆。

记忆反思:NPC不断地回顾和提炼自己的记忆,从而形成核心记忆。

记忆检索

在需要的时候,NPC通过内部的表征向量检索到所需要的记忆信息,然后根据重要性和访问时间进行排序。

一定程度上提高了NPC的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习开源框架

文章目录 1. 深度学习框架1.1 概述1.2 深度学习框架—关于组件1.2.1 组件—张量1.2.2 基于张量的各种操作1.2.3 计算图1.2.4 自动微分工具1.2.5 拓展包 2. 主流深度学习框架2.1 市面上主流框架2.2 本土深度学习框架2.3 深度学习框架的标准化--ONNX 3. Tensorflow3.1 Tensorflow…

让人恶心的多线程代码,性能怎么优化!

Java 中最烦人的&#xff0c;就是多线程&#xff0c;一不小心&#xff0c;代码写的比单线程还慢&#xff0c;这就让人非常尴尬。 通常情况下&#xff0c;我们会使用 ThreadLocal 实现线程封闭&#xff0c;比如避免 SimpleDateFormat 在并发环境下所引起的一些不一致情况。其实…

【TiDB理论知识 03】TiKV-持久化与数据读取

目录 一 TiKV架构和作用 二 数据持久化 1 RocksDB&#xff1a;写入 写入过程 第一步 &#xff1a;WAL 写日志 &#xff08;磁盘日志&#xff09; 第二步&#xff1a;写MemTable (内存中) 第三步 &#xff1a; 转存为immutable MemTable&#xff08;内存中&#xff09; …

Web 3.0时代,重塑教育与学习方式的可能性

随着科技的快速发展和互联网的普及&#xff0c;教育领域也面临着巨大的机遇和挑战。Web 3.0时代的到来为教育与学习方式带来了全新的可能性。在这个数字化时代&#xff0c;我们可以探索和利用Web 3.0技术&#xff0c;重塑教育的方式&#xff0c;提供更个性化、互动性和灵活性的…

餐饮业油烟在线监测系统的具体应用 安科瑞 许敏

摘要&#xff1a;本文利用物联网技术&#xff0c;构建了一套餐饮企业智能油烟在线监测系统&#xff0c;该系统前台由厨房端和管道端组成&#xff0c;通过网关接入云平台管理系统&#xff0c;实时监控烟道阀门的启闭、变频风机的启停与风速及功率调节、油烟浓度数据等。结合动态…

RabbitMQ安装及简单使用

说明&#xff1a;RabbitMQ&#xff08;官网&#xff1a;&#xff09;是一门异步通讯技术&#xff0c;使用异步通讯技术&#xff0c;可解决同步通讯的一些问题。 安装 本文介绍在云服务器上安装RabbitMQ&#xff0c;操作系统是CentOS 7&#xff0c;远程连接工具是WindTerm&…

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和&#xff1f; 所谓图像加权和&#xff0c;就是在计算两幅图像的像素值之和时&#xff0c;将每幅图像的权重考虑进来&#xff0c;可以用公式表示为&#xff1a; dst saturate(src1 &#x1d6fc; src2 &#x1d6fd; &#x1d6fe;)式中&#xff0c;satu…

css通过子元素选择父元素

伪类:has选择父元素 td:has(> .unfoldTable){//可选中所有td下包含unfoldTable的class标签的td属性color: red; }td:has(> div){//可选中所有td下包含div标签的td属性color: red; } 特殊举例分析&#xff1a; 个别UI框架个别标签通过事件直接生成或者无法选中的情况。…

SpringAMQP使用

说明&#xff1a;SpringAMQP&#xff08;官网&#xff1a;https://spring.io/projects/spring-amqp&#xff09;是基于RabbitMQ封装的一套模板&#xff0c;并利用了SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。安装和原始使用参考&#xff1a;http://t.csdn.cn…

SpringCloud(五)Gateway 路由网关

一、路由网关 官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ 我们需要连接互联网&#xff0c;那么就需要将手机或是电脑连接到家里的路由器才可以&#xff0c;而路由器则连接光猫&#xff0c;光猫再通过光纤连接到互联网&a…

按键控制led变化

文章目录 按键控制led变化一、简介二、代码三、仿真代码四、仿真结果五、总结 按键控制led变化 一、简介 使用按键控制开发板上一个led灯的亮灭&#xff0c;当按键按下的时候led灯就亮&#xff0c;当再一次按下按键的时候led就不亮了。由于按键存在抖动&#xff0c;按键松开的…

idea 有时提示找不到类或者符号,日志报java: 找不到符号的解决

解决一&#xff1a; idea maven编译成功&#xff0c;运行失败提示找不到符号&#xff0c;主要是get和set方法找不到符号&#xff0c;此时就是idea的lombok版本冲突 IDEA版本导致的Lombok失效&#xff0c;需要更新lombok版本到1.18.14及之后版本得到解决 <dependency>&…

Linux:squid透明代理

在传统代理上进行修改并添加网卡 这次不使用手动代理&#xff0c;而是把网关搞成代理 在下面这个链接里的文章实验下进行修改 Linux&#xff1a;squid传统代理_鲍海超-GNUBHCkalitarro的博客-CSDN博客 完成以后不用再win10上去配置&#xff0c;代理的那一步&#xff0c;然后…

3、Java入门教程【数据类型】

一、概述 java中数据类型分为两大类&#xff1a;【基本数据类型】和【引用数据类型】 二、基础数据类型 数据类型含义默认值取值范围存储大小&#xff08;字节&#xff09;整型byte字节型0-128 到 1271整型short短整型0-2^15 到 2^15-12整型int【默认】整形0-2^31 到 2^31-14…

1186. 删除一次得到子数组最大和;1711. 大餐计数;1834. 单线程 CPU

1186. 删除一次得到子数组最大和 解题思路&#xff1a;如果没做过还不是很好想&#xff0c;当时自己第一反应是双指针&#xff0c;结果是个动态规划的题。 核心就是dp的定义&#xff0c;dp[i][k]表示以arr[i]结尾删除k次的最大和。看到这里其实就有一点思路了 dp[i][0]表示以…

⛳ Git安装与配置

Git安装配置目录 ⛳ Git安装与配置&#x1f3ed; 一&#xff0c;git的安装&#x1f3a8; 1&#xff0c;下载git&#x1f463; 2&#xff0c;下载完成之后&#xff0c;双击安装即可。&#x1f4bb; 3&#xff0c;更改安装目录&#xff08;没有中文且没有空格&#xff09;&#x…

Netty核心技术十一--用Netty 自己 实现 dubbo RPC

1. RPC基本介绍 RPC&#xff08;Remote Procedure Call&#xff09;:远程 过程调用&#xff0c;是一个计算机 通信协议。该协议允许运 行于一台计算机的程序调 用另一台计算机的子程序&#xff0c; 而程序员无需额外地为这 个交互作用编程 两个或多个应用程序都分 布在不同的服…

【已解决】html元素如何使字体占据相同的元素显得整齐

本博文源于自身的亲身实践&#xff0c;让html的文本元素对齐&#xff0c;如果不让其对齐就会变得很丑陋&#xff0c;如下图&#xff0c;那么如何设置才能让元素占据相同呢&#xff1f; 文章目录 1、问题来源2、问题解决思路3、问题解决方案4、问题完整源码及效果 1、问题来源 …

摩尔投票算法(Moore‘s Voting Algorithm)及例题

摩尔投票算法&#xff08;Moores Voting Algorithm&#xff09;及例题 摩尔投票算法简介摩尔投票算法算法思想摩尔投票算法经典题目169. 多数元素229. 多数元素 II6927. 合法分割的最小下标 上午打力扣第 354 场周赛最后十五分钟用摩尔投票算法直接秒了第三题。 摩尔投票算法简…

使用原生Redis命令实现分布式锁

推荐文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; ​ 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、java后端接口API性能优化技巧 4、SpringBootMyBatis流式查询,处理大规模数据,提高系统的性能和响应…