研究背景与挑战
当前人工智能智能体面临记忆能力有限的挑战,它们依赖于扁平化、范围狭窄的记忆组件,这严重限制了个性化程度和长期记忆能力。传统记忆系统无法有效处理多模态信息,难以在真实场景中提供有价值的记忆支持。
MIRIX作为一种模块化多智能体记忆系统,使大语言模型能够真正实现记忆功能,超越文本范畴,拥抱丰富的视觉和多模态体验,使记忆在真实场景中真正发挥作用。
记忆架构设计
MIRIX采用六种专业化记忆类型,每种类型针对特定信息进行优化:
核心记忆
双模块设计(角色与人类),存储高优先级持久性信息,包括用户偏好、身份特征和关键背景信息
情节记忆
记录带时间戳的用户行为事件和交互,支持时序查询和上下文关联,形成连续的经验流
语义记忆
使用标准化模板的常识知识中心和社会关系图谱,提供概念性知识和关联推理能力
程序记忆
存储结构化的目标导向过程和操作知识,支持复杂任务分解和执行流程管理
资源记忆
处理文档、转录和多模态文件,支持多格式内容存储、索引和检索,实现跨媒体信息整合
知识保险库
安全存储敏感信息,具有访问控制机制,确保隐私数据的安全性和合规性
多智能体工作流程
MIRIX采用创新的两阶段主动检索机制和模块化多智能体架构:
两阶段主动检索机制
智能主题生成
基于上下文自动生成相关主题和关键词
多维记忆检索
跨记忆类型并行检索,整合多维度信息
信息融合与排序
智能融合多源信息,按相关性排序
模块化多智能体架构特点:
- 中央元记忆管理器,协调各记忆组件
- 针对每种记忆类型的专门化管理器
- 并行更新和重复信息过滤机制
- 动态资源分配和负载均衡
性能基准测试
ScreenshotVQA 测试
相比 SigLIP 的准确率提升
相比 SigLIP 的存储空间减少
LOCOMO 测试
准确率(达到当前最先进水平)
在长期对话记忆和上下文理解方面表现卓越,显著优于现有解决方案
应用场景与未来方向
个人AI助手
具备长期记忆能力的个人AI助手,能够记住用户偏好、习惯和历史交互,提供高度个性化的服务
AI可穿戴设备
AI别针和可穿戴设备,通过记忆系统增强情境感知能力,提供无缝的智能体验
智能机器人
具备情境理解能力的智能机器人,能够记住环境特征和用户指令,实现更自然的交互
未来研究方向
增强多模态处理能力、扩展记忆类型、改进安全机制,探索更高级的记忆组织与检索方法
MIRIX 使用方法
全面掌握多智能体记忆系统的应用与开发
初始化代理
使用MIRIX的第一步是创建并初始化您的代理。以下是基本初始化方法:
from mirix.agent import AgentWrapper
# 使用配置文件初始化代理
agent = AgentWrapper("./configs/mirix.yaml")
在初始化代理之前,请确保您的 mirix.yaml 配置文件和 .env 文件已正确设置。
Python SDK 简化接口
为了提供更简单、更流畅的体验,您可以使用MIRIX Python SDK。这种方法非常适合快速原型开发和简单用例。
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支持各种初始化参数,以适应不同的用例:
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支持多种模型提供商,您可以根据需要选择合适的模型:
您还可以使用自定义模型提供商。只需设置任何自定义字符串作为 model_provider 值,并设置相应的环境变量 {PROVIDER}_API_KEY。
SDK 使用示例
构建个人助手
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)
知识库构建
# 创建关于项目的知识库
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)
内存管理
清除对话历史
# 清除对话历史但保留记忆
result = agent.clear_conversation_history()
if result['success']:
print(f"已清除 {result['messages_deleted']} 条对话消息")
print("记忆仍然保留!")
else:
print(f"失败:{result['error']}")
清除所有记忆
# 清除所有记忆(需要手动重置数据库)
result = agent.clear()
if not result['success']:
print(result['warning'])
for instruction in result['instructions']:
print(instruction)
print(f"手动命令:{result['manual_command']}")
备份和恢复功能
保存当前状态
# 使用自动生成的时间戳目录保存
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']}")
从备份加载
# 从备份加载状态
result = agent.load("./my_project_backup")
if result['success']:
print("记忆状态已成功恢复!")
# 所有之前的记忆现在都可用
else:
print(f"恢复失败:{result['error']}")
高级SDK功能
将代理作为可调用对象
您可以直接像函数一样调用代理:
agent = Mirix(api_key="your-api-key")
agent.add("Python是我最喜欢的编程语言")
# 这些是等价的:
response1 = agent.chat("我最喜欢的语言是什么?")
response2 = agent("我最喜欢的语言是什么?")
# 可调用接口
print(response1) # 与response2相同
链式操作
在一个流程中初始化并设置记忆:
# 初始化并一次性设置记忆
agent = Mirix(api_key="your-api-key")
# 添加多个记忆
memories = [
"团队每周一上午9点站会",
"每月第一个周二进行冲刺规划",
"周三下午代码审查会议",
"每隔一个周五演示日"
]
for memory in memories:
agent.add(memory)
# 查询知识
schedule = agent("我们团队会议安排是什么?")
print(schedule)
发送消息
# 发送基本文本信息
agent.send_message(
message="月球现在有一位总统。",
memorizing=True,
force_absorb_content=True
)
# MIRIX可以同时处理文本、图像和语音录音:
# 发送信息
agent.send_message(
message="这是项目会议的截图和讨论要点",
image_path="./meeting_screenshot.png",
audio_path="./meeting_discussion.mp3",
memorizing=True
)