架构简析| 一种Generative Agents

Generative Agents 架构简析

斯坦福《Generative Agents: Interactive Simulacra of Human Behavior》论文解读。
demo地址
论文原文地址

agent架构:

在这里插入图片描述
Agent记忆的的核心挑战是确保在需要时检索和合成agent内存中最相关的部分
我们的体系结构的中心是内存流,这是一个数据库,它维护了agent经验的全面记录。

Memory and Retrieval

Challenge: Agent存储的记忆会远大于LLM支持的prompt长度,且输入太长的记忆会分散模型注意力。
Approach: Memory Stream维护agent经验的全面记忆。它是一个内存对象的list,其中每个对象包含一个自然语言描述、一个创建时间戳和一个最近的访问时间戳。
在这里插入图片描述

通过Recency、Importance、Relevance三个维度来计算score,给每条记忆打分。用得分高的记忆来构建prompt。
在这里插入图片描述
1. Recency: 给最近访问过的内存对象赋一个更高的分数。
2. Importance 通过给agent认为重要的内存对象分配更高的分数来区分普通记忆和核心记忆。例如,在房间里吃早餐这样的普通事件的重要性得分很低,而与另一半分手的重要性得分很高。我们发现直接要求语言模型输出一个整数分数是有效的。完整的prompt如下:

在1到10的范围内,1是非常平凡的(例如,刷牙,铺床),10是非常痛苦的(例如,分手,大学录取),评估下面一段记忆可能的辛酸程度。  
记忆:在The Willows Market和药店买杂货  
评分:<fill in>

3. Relevance : 我们使用语言模型来生成每个内存的文本描述的嵌入向量,通过向量计算相关程度。

Reflection

Challenge: agent,当只有原始的观察记忆时,很难进行概括或推断。agent如果只用Steam Memory的信息,给出反应显得“没有灵魂”(个人理解)。

Approach: 我们引入第二种记忆,我们称之为Reflection。Reflection是由主体产生的更高层次、更抽象的思想。因为它们是一种记忆,所以当检索发生时,它们与原始的观察记忆一起包含。Reflection是定期产生的,在实践中,我们的agent每天大概会反思两到三次。Reflection产生流程如下:

  1. 用agent的Memory Stream中最近的100条记录询问LLM,“Given only the information above, what are 3 most salient high-level questions we can answer about the subjects in the statements?”(仅给定上述信息,我们可以回答关于语句中的主题的3个最突出的高级问题是什么?)
  2. 根据LLM提出的3个问题,我们检索相关记忆(包括其他Reflection)提交给LLM,让LLM对相关记忆抽象成“见解”,并标出每个“见解”引用都是那些记忆。
    最终,每个Reflection都会参数一个Reflection树,如下:
    在这里插入图片描述

Planning and Reacting

Challenge: 智能体需要在更长的时间范围内进行计划,以确保其行动序列是连贯、可信和充满细节的

Approach: 先让LLM写出一个大概的计划,再让LLM写出更多关于计划的细节。如下prompt

姓名:Eddy Lin(年龄:19) 
天生特质:友善、外向、好客 
Eddy Lin 是 Oak Hill 学院的一名学生,主修音乐理论和作曲。他热爱探索不同的音乐风格,并始终寻求扩展知识的方法。Eddy Lin 正在为他的大学课程进行一个作曲项目。他还在上课以了解更多关于音乐理论的知识。Eddy Lin 对他正在进行的新作曲感到兴奋,但他希望在接下来的几天里每天能有更多的时间来完成它。

2月12日星期二,Eddy 
1)早上7点起床并完成了早晨的日常活动。
[. . . ]
6)晚上10点左右准备睡觉。

今天是2月13日星期三。以下是 Eddy 今天的计划概述:1)

会输出一个计划表。agent将该计划保存在记忆流中,然后递归地将其分解以创建粒度更细的操作。

在每个时间间隔,把agent对周围的观察,和一些基本信息构建prompt,让LLM作出合适反应和更新计划。其中[Agent's Summary Description]代表一个动态生成的、段落长的代理总体目标和性格的总结。

[Agent’s Summary Description] 
现在是2023年2月13日,下午4点56分。 
John Lin的状态:John提前下班回到家里。 
观察:John看到Eddy在他工作地点附近散步。 
来自John记忆的相关背景总结:Eddy Lin是John Lin的儿子。Eddy Lin一直在为他的课程创作音乐作品。Eddy Lin喜欢在思考或聆听音乐时,在花园里散步。 
John是否应该对观察做出反应?如果需要,适当的反应是什么?

如果一个agent决定和另一个agent对话(反应的一种),会提取相关记忆,构建如一下prompt,获取第一句对话的内容:

[代理的总结描述] 
现在是2023年2月13日,下午4:56。
John Lin的状态:John提前下班回家了。 
观察:John看到Eddy在他的工作场所附近散步。 
来自John记忆的相关背景总结:Eddy Lin是John Lin的儿子。Eddy Lin一直在为他的课程创作音乐作品。Eddy Lin喜欢在思考或聆听音乐时在花园里散步。 
John正在询问Eddy关于他的音乐创作项目。他会对Eddy说什么?

另一agent会把这个视为观察,生成对应反应。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个手动编写的generative model用来二分类的示例: 假设我们有一个数据集包含两个类别:A和B。我们想要训练一个generative model来预测一个新的样本属于哪个类别。 首先,我们将假设类别A和B的分布分别服从高斯分布,并假设它们的协方差矩阵相等。我们可以通过计算训练集中每个类别的均值和协方差矩阵来估计这些参数。 然后,我们可以使用贝叶斯公式来计算给定一个新的样本$x$的类别概率: $P(A|x) = \frac{P(x|A)P(A)}{P(x)}$ $P(B|x) = \frac{P(x|B)P(B)}{P(x)}$ 其中,$P(A)$和$P(B)$是类别A和B的先验概率,$P(x|A)$和$P(x|B)$是样本$x$在类别A和B下的似然概率,$P(x)$是边缘概率。 我们可以使用高斯分布的密度函数来计算似然概率: $P(x|A) = \frac{1}{\sqrt{(2\pi)^d|\Sigma|}}exp(-\frac{1}{2}(x-\mu_A)^T\Sigma^{-1}(x-\mu_A))$ $P(x|B) = \frac{1}{\sqrt{(2\pi)^d|\Sigma|}}exp(-\frac{1}{2}(x-\mu_B)^T\Sigma^{-1}(x-\mu_B))$ 其中,$d$是样本的维度,$|\Sigma|$是协方差矩阵的行列式,$\mu_A$和$\mu_B$分别是类别A和B的均值,$\Sigma$是协方差矩阵。 我们可以通过最大化似然函数来估计先验概率$P(A)$和$P(B)$。假设我们有$N_A$个属于类别A的样本和$N_B$个属于类别B的样本,则: $P(A) = \frac{N_A}{N_A+N_B}$ $P(B) = \frac{N_B}{N_A+N_B}$ 最后,我们可以将$P(A|x)$和$P(B|x)$进行比较,将新的样本$x$分类到概率较大的类别中。 这是一个简单的generative model用来二分类的示例。在实际应用中,我们可能需要更复杂的模型来适应不同的数据分布和特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值