MIRIX: 多智能体记忆系统

MIRIX: 多智能体记忆系统

MIRIX: 多智能体记忆系统

面向大语言模型智能体的革命性记忆架构

王宇,陈曦 | 加州大学圣地亚哥分校,纽约大学

研究背景与挑战

当前人工智能智能体面临记忆能力有限的挑战,它们依赖于扁平化、范围狭窄的记忆组件,这严重限制了个性化程度和长期记忆能力。传统记忆系统无法有效处理多模态信息,难以在真实场景中提供有价值的记忆支持。

MIRIX作为一种模块化多智能体记忆系统,使大语言模型能够真正实现记忆功能,超越文本范畴,拥抱丰富的视觉和多模态体验,使记忆在真实场景中真正发挥作用。

记忆架构设计

MIRIX采用六种专业化记忆类型,每种类型针对特定信息进行优化:

核心记忆

双模块设计(角色与人类),存储高优先级持久性信息,包括用户偏好、身份特征和关键背景信息

情节记忆

记录带时间戳的用户行为事件和交互,支持时序查询和上下文关联,形成连续的经验流

语义记忆

使用标准化模板的常识知识中心和社会关系图谱,提供概念性知识和关联推理能力

程序记忆

存储结构化的目标导向过程和操作知识,支持复杂任务分解和执行流程管理

资源记忆

处理文档、转录和多模态文件,支持多格式内容存储、索引和检索,实现跨媒体信息整合

知识保险库

安全存储敏感信息,具有访问控制机制,确保隐私数据的安全性和合规性

多智能体工作流程

MIRIX采用创新的两阶段主动检索机制和模块化多智能体架构:

两阶段主动检索机制

智能主题生成

基于上下文自动生成相关主题和关键词

多维记忆检索

跨记忆类型并行检索,整合多维度信息

信息融合与排序

智能融合多源信息,按相关性排序

模块化多智能体架构特点:

  • 中央元记忆管理器,协调各记忆组件
  • 针对每种记忆类型的专门化管理器
  • 并行更新和重复信息过滤机制
  • 动态资源分配和负载均衡

性能基准测试

ScreenshotVQA 测试

+35%

相比 SigLIP 的准确率提升

-99.9%

相比 SigLIP 的存储空间减少

相比 Gemini
+410%
准确率提升
相比 Gemini
-93.3%
存储空间减少

LOCOMO 测试

85.38%

准确率(达到当前最先进水平)

在长期对话记忆和上下文理解方面表现卓越,显著优于现有解决方案

多轮对话理解
+62%
性能提升
上下文保持能力
+78%
性能提升

应用场景与未来方向

个人AI助手

具备长期记忆能力的个人AI助手,能够记住用户偏好、习惯和历史交互,提供高度个性化的服务

AI可穿戴设备

AI别针和可穿戴设备,通过记忆系统增强情境感知能力,提供无缝的智能体验

智能机器人

具备情境理解能力的智能机器人,能够记住环境特征和用户指令,实现更自然的交互

未来研究方向

增强多模态处理能力、扩展记忆类型、改进安全机制,探索更高级的记忆组织与检索方法


MIRIX 使用方法

MIRIX 使用方法

全面掌握多智能体记忆系统的应用与开发

初始化代理

使用MIRIX的第一步是创建并初始化您的代理。以下是基本初始化方法:

Python
from mirix.agent import AgentWrapper

# 使用配置文件初始化代理
agent = AgentWrapper("./configs/mirix.yaml")
注意

在初始化代理之前,请确保您的 mirix.yaml 配置文件和 .env 文件已正确设置。

Python SDK 简化接口

为了提供更简单、更流畅的体验,您可以使用MIRIX Python SDK。这种方法非常适合快速原型开发和简单用例。

Python
from mirix import Mirix

# 初始化记忆代理(默认使用Google Gemini 2.0 Flash)
memory_agent = Mirix(api_key="your-google-api-key")

# 添加记忆
memory_agent.add("月球现在有一位总统")
memory_agent.add("约翰喜欢意大利菜,但对花生过敏")

# 带记忆上下文的聊天
response = memory_agent.chat("月球有总统吗?")
print(response)  # "根据我的记忆,月球有一位总统。"

response = memory_agent.chat("约翰喜欢吃什么?")
print(response)  # "约翰喜欢意大利菜。但是,他对花生过敏。"

SDK 初始化选项

SDK支持各种初始化参数,以适应不同的用例:

Python
from mirix import Mirix

# 基本初始化(Google Gemini)
agent = Mirix(api_key="your-google-api-key")

# 使用OpenAI模型
agent = Mirix(
    api_key="your-openai-api-key",
    model_provider="openai",
    model="gpt-4o"
)

# 使用Anthropic Claude
agent = Mirix(
    api_key="your-anthropic-api-key",
    model_provider="anthropic",
    model="claude-3-sonnet"
)

# 使用自定义配置文件(默认为'gemini-flash')
agent = Mirix(
    api_key="your-gemini-api-key",
    config_path="./configs/mirix_custom_model.yaml"
)

# 使用现有备份初始化
agent = Mirix(
    api_key="your-api-key",
    load_from="./my_backup_directory"
)

# 覆盖默认配置中的模型
agent = Mirix(
    api_key="your-gemini-api-key",
    model="gemini-2.0-flash"  # 覆盖默认模型
)

支持的模型提供商

MIRIX支持多种模型提供商,您可以根据需要选择合适的模型:

Google Gemini
“google_ai”, “google”, “gemini”
GEMINI_API_KEY
OpenAI
“openai”, “gpt”
OPENAI_API_KEY
Anthropic Claude
“anthropic”, “claude”
ANTHROPIC_API_KEY
自定义模型

您还可以使用自定义模型提供商。只需设置任何自定义字符串作为 model_provider 值,并设置相应的环境变量 {PROVIDER}_API_KEY

SDK 使用示例

个人助手
知识库构建

构建个人助手

Python
from mirix import Mirix

# 使用您的API密钥初始化
assistant = Mirix(api_key="your-google-api-key")

# 存储个人信息
assistant.add("我更喜欢咖啡而不是茶")
assistant.add("我的工作时间是上午9点到下午5点")
assistant.add("周五下午2点与客户的重要会议")

# 查询您的助手
response = assistant.chat("我这周的日程如何?")
print(response)

response = assistant.chat("我喜欢什么饮料?")
print(response)

知识库构建

Python
# 创建关于项目的知识库
project_memory = Mirix(api_key="your-google-api-key")

# 添加项目信息
project_memory.add("项目名称:MIRIX文档")
project_memory.add("技术栈:Python、MkDocs、Material主题")
project_memory.add("团队成员:Alice(PM)、Bob(开发)、Carol(设计)")
project_memory.add("截止日期:2024年12月底")

# 查询知识库
response = project_memory.chat("团队成员是谁?")
print(response)

response = project_memory.chat("我们使用什么技术?")
print(response)

内存管理

清除对话历史

Python
# 清除对话历史但保留记忆
result = agent.clear_conversation_history()
if result['success']:
    print(f"已清除 {result['messages_deleted']} 条对话消息")
    print("记忆仍然保留!")
else:
    print(f"失败:{result['error']}")

清除所有记忆

Python
# 清除所有记忆(需要手动重置数据库)
result = agent.clear()
if not result['success']:
    print(result['warning'])
    for instruction in result['instructions']:
        print(instruction)
    print(f"手动命令:{result['manual_command']}")

备份和恢复功能

保存当前状态

Python
# 使用自动生成的时间戳目录保存
result = agent.save()
if result['success']:
    print(f"备份已保存到:{result['path']}")

# 保存到特定目录
result = agent.save("./my_project_backup")
if result['success']:
    print(f"备份完成:{result['message']}")
else:
    print(f"备份失败:{result['error']}")

从备份加载

Python
# 从备份加载状态
result = agent.load("./my_project_backup")
if result['success']:
    print("记忆状态已成功恢复!")
    # 所有之前的记忆现在都可用
else:
    print(f"恢复失败:{result['error']}")

高级SDK功能

将代理作为可调用对象

您可以直接像函数一样调用代理:

Python
agent = Mirix(api_key="your-api-key")
agent.add("Python是我最喜欢的编程语言")

# 这些是等价的:
response1 = agent.chat("我最喜欢的语言是什么?")
response2 = agent("我最喜欢的语言是什么?")

# 可调用接口
print(response1)  # 与response2相同

链式操作

在一个流程中初始化并设置记忆:

Python
# 初始化并一次性设置记忆
agent = Mirix(api_key="your-api-key")

# 添加多个记忆
memories = [
    "团队每周一上午9点站会",
    "每月第一个周二进行冲刺规划",
    "周三下午代码审查会议",
    "每隔一个周五演示日"
]
for memory in memories:
    agent.add(memory)

# 查询知识
schedule = agent("我们团队会议安排是什么?")
print(schedule)

发送消息

简单文本消息
多模态内容
Python
# 发送基本文本信息
agent.send_message(
    message="月球现在有一位总统。",
    memorizing=True,
    force_absorb_content=True
)
Python
# MIRIX可以同时处理文本、图像和语音录音:
# 发送信息
agent.send_message(
    message="这是项目会议的截图和讨论要点",
    image_path="./meeting_screenshot.png",
    audio_path="./meeting_discussion.mp3",
    memorizing=True
)

发表评论

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾