掘金 阅读 ( ) • 2024-04-22 13:56

代码总体结构分为:环境(不重要) + 假想世界。而假想世界包含后端[backend] + 前端,后端包含人物(persona) + 寻址(pathfind)

人物(persona)包含:认知(cognitive)和记忆(memory),共用的是promptTemplate( 137个prompt... )

在认知(cognitive)里,包含:反思 ( http://reflect.py )、规划( http://plan.py ),执行( http://execute.py) ,感知(http://perceive.py),抽取(http://retrieve.py),交流(http://converse.py)

在记忆( memory)里,包含:联想(associativememory)、空间记忆(spatialmemory)

18个Agent在虚拟世界运行的本质是背后ChatGPT在推理。我们可以假设整个世界里只放1个Agent,那么它就是有以下推理任务,我认为最重要的是:

  • 每天醒来,制定一日计划到小时级别.
  • 制定每个小时计划,到15分钟级别.
  • 执行,准备从哪里到哪里(新的地方).
  • 现在还没有其他人因此不需:决定要不要和人交谈.
  • 现在还没有其他人因此不需:决定聊天纪要总结.
  • 反思今日一天结果.

==> 实际上更全的是:

在http://plan.py中:

generatewakeup_hour:可能确定代理或用户应该醒来的时间。

generatefirstdaily_plan:生成任务或活动的初始每日计划。

generatehourlyschedule:创建一个计划,其中任务或事件分布在一天中的不同时间。

generatetaskdecomp:可能将较大的任务分解为更小、更易于管理的组件。

generateactionsector、generateactionarena、generateactiongame_object:这些函数可能涉及在模拟或游戏中的特定上下文或环境中生成或模拟动作。

generateactionpronunciatio:可能是“发音”的拼写错误; 可以为动作或命令生成正确的发音。

generateactionevent_triple、generateactobj_desc、generateactobjeventtriple:这些似乎生成动作、对象及其关系的描述,可能采用三元组(主语、谓语、宾语)等结构化格式。

generate_convo、generateconvosummary:生成对话或对话摘要。

generatedecideto_talk、generatedecideto_react:根据上下文或数据决定是否在对话中发起或做出反应的函数。

generatenewdecomp_schedule:创建新的分解时间表,分解任务或事件。

在 http://reflect.py 中:

generatefocalpoints:确定反思或讨论的关键点或主题。

generatepoigscore:可以在反思或分析过程中生成“兴趣点或重要性”的分数。

generateplanningthoughtonconvo:生成对先前对话的反思性想法。

run_reflect、reflect:执行反思进程。

reflection_trigger:启动反思序列。

resetreflectioncounter:重置反思过程中使用的计数器或跟踪器。

在 http://retrieve.py 中:

retrieve、new_retrieve:检索数据或信息,可能使用新方法或算法。

extract_recency、extract_importance、extract_relevance:提取数据或信息的新近度、重要性和相关性等属性。

在 http://converse.py 中:

generateagentchatsummarizeideas、generatesummarizeagent_relationship:生成对话中讨论的想法摘要或总结代理之间的关系动态。

generateoneutterance:生成单行或话语以在对话中使用。

agentchatv2:对话代理功能的更新或新版本。

generatesummarizeideas:总结想法,可能在对话或思想上下文中。

generateinnerthought:为代理生成内部独白或想法。

loadhistoryvia_whisper、openconvosession:管理对话历史记录并启动新的对话会话。

感知 nearby events 和 spaces:代码的主要作用是使 Persona 感知周围的事件和空间。它首先获取附近的 tiles,遍历这些 tiles,并将其保存在 Persona 的短期记忆(s_mem)中。随后,它会感知附近的事件,按距离排序,并选择最接近的事件。

对感知到的事件进行处理:对于感知到的事件,代码会对其进行处理,包括计算事件 poignancy 分数、获取事件 embedding、将事件添加到 Persona 的记忆中等。同时,如果事件是 Persona 自己的 chat 事件,还会将其添加到记忆中。

总的来说,这段代码实现了 Persona 感知周围环境和处理感知到的事件的功能。

代码地址:https://github.com/joonspk-research/generative_agents

论文地址:https://arxiv.org/pdf/2304.03442.pdf

GLsGhjCaAAA2CoP.jpg