MetaGPT 中的记忆:让你的 AI 智能体拥有记忆力

在之前的教程中,我们已经了解了智能体和多智能体系统。但一个真正强大的 AI 智能体,还需要拥有记忆能力。记忆可以帮助智能体积累经验,并根据过去的经验进行决策和行动。

本教程将带你了解 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 教程,了解如何使用记忆来真正提升你的智能体的性能。

发表评论