在之前的教程中,我们已经了解了智能体和多智能体系统。但一个真正强大的 AI 智能体,还需要拥有记忆能力。记忆可以帮助智能体积累经验,并根据过去的经验进行决策和行动。
友情链接:ACEJoy
本教程将带你了解 MetaGPT 中的记忆功能,以及如何使用它来提升你的 AI 智能体的能力。
MetaGPT 中的记忆
在 MetaGPT 中,Memory
类是智能体记忆的抽象表示。当一个角色被初始化时,它会获得一个 Memory
对象,用于存储它观察到的所有消息。这些消息会被保存在一个列表中,方便以后检索。
检索记忆
当你需要使用记忆时,例如将记忆作为 LLM 的上下文,可以使用 self.get_memories()
方法。该方法的定义如下:
def get_memories(self, k=0) -> list[Message]:
"""A wrapper to return the most recent k memories of this role, return all when k=0"""
return self.rc.memory.get(k=k)
该方法接受一个可选参数 k
,用于指定要检索的最近记忆数量。如果 k
为 0,则返回所有记忆。
例如,在之前的多智能体教程中,我们使用 get_memories()
方法将所有记忆作为上下文提供给测试者。这样,如果审查者提供了反馈,测试者可以参考之前的版本修改测试用例。代码片段如下:
async def _act(self) -> Message:
logger.info(f"{self._setting}: ready to {self.rc.todo}")
todo = self.rc.todo
# context = self.get_memories(k=1)[0].content # 使用最近的记忆作为上下文
context = self.get_memories() # 使用所有记忆作为上下文
code_text = await todo.run(context, k=5) # 指定参数
msg = Message(content=code_text, role=self.profile, cause_by=todo)
return msg
添加记忆
要添加记忆,可以使用 self.rc.memory.add(msg)
方法,其中 msg
必须是 Message
类的实例。
建议在定义 _act
方法时,将动作输出的消息添加到角色的记忆中。角色通常需要记住它之前说过的话或做过的事,才能采取下一步行动。
下一步
本教程介绍了 MetaGPT 中的“短期记忆”概念。记忆的检索是基于简单的最近性原则。然而,还有许多其他类型的记忆,以及各种各样的记忆生成和检索技术。你可以参考 Memory 教程,了解如何使用记忆来真正提升你的智能体的性能。