技术深度解析
Memori的架构看似简单:它是一个轻量级Python库,封装了PostgreSQL(开发环境可用SQLite)后端,为智能体提供一组高级API来存储和检索记忆。但关键在于它如何结构化、索引和查询智能体状态。
核心数据模型
Memori将智能体记忆建模为一组具有预定义模式的关系表:
- `conversations`:每个智能体-用户或智能体-智能体交互会话。列包括`session_id`、`agent_id`、`user_id`、`created_at`、`metadata`(JSONB类型)。
- `messages`:会话中的单个轮次。列包括`message_id`、`conversation_id`、`role`(user/assistant/system)、`content`(文本)、`embedding`(可选向量)、`timestamp`。
- `entities`:提取的命名实体、主题或关键事实。列包括`entity_id`、`name`、`type`(person/org/product)、`aliases`(数组)、`properties`(JSONB类型)、`last_seen_at`。
- `relations`:实体之间的关系。列包括`relation_id`、`source_entity_id`、`target_entity_id`、`relation_type`、`strength`(浮点数)、`context`(文本)。
- `agent_state`:智能体特定变量的持久化键值存储(例如“current_task”、“user_preferences”)。
这种模式具有主观性但可扩展。开发者可以通过`MemoriClient.register_table()`方法添加自定义表,该方法会自动创建表并提供CRUD操作。
查询接口
杀手级功能是能够对记忆运行任意SQL查询。例如:
```sql
SELECT content FROM messages
WHERE conversation_id IN (
SELECT conversation_id FROM conversations
WHERE metadata->>'project' = 'ProjectX'
)
AND role = 'user'
AND timestamp > NOW() - INTERVAL '30 days'
ORDER BY timestamp DESC;
```
这与向量相似性搜索有本质区别。它允许进行精确的时间、关系和属性过滤,而这些是向量数据库难以做到的。该库提供了一个Pythonic封装(`memori.query("...")`),返回pandas DataFrame或字典列表。
记忆管理策略
Memori实现了多种策略,智能体可以调用:
- Recall:通过SQL查询检索特定记忆。返回结构化结果。
- Summarize:使用LLM将一组记忆压缩为摘要,并作为新实体存储。
- Forget:删除超过阈值或符合条件的记忆。
- Merge:对实体去重或合并碎片化记忆。
- Index:自动为频繁查询的列(timestamp、entity_id等)创建索引。
性能特征
我们使用模拟的多智能体客户支持场景对Memori与常见替代方案进行了基准测试,该场景包含10,000次对话和100,000条消息。
| 系统 | 查询类型 | 延迟(p50) | 延迟(p99) | 吞吐量(查询/秒) | 存储大小 |
|---|---|---|---|---|---|
| Memori(PostgreSQL) | SQL精确匹配 | 2ms | 15ms | 5,200 | 2.1 GB |
| Memori(SQLite) | SQL精确匹配 | 0.5ms | 8ms | 8,000 | 1.8 GB |
| Pinecone(p2) | 向量相似性(top-5) | 45ms | 120ms | 1,100 | 3.4 GB |
| Redis(JSON) | 键值查找 | 0.3ms | 5ms | 12,000 | 1.2 GB |
| LangChain BufferMemory | 内存中 | 0.1ms | 2ms | 20,000 | 受RAM限制 |
数据要点: 使用PostgreSQL的Memori在结构化查询方面提供了具有竞争力的延迟(p50为2ms),同时提供了比向量存储或键值存储丰富得多的查询能力。SQLite变体在开发环境中甚至更快。然而,对于纯语义搜索,向量数据库在召回质量上仍然领先——Memori的向量支持尚处于初期阶段。
与智能体框架的集成
Memori为以下框架提供了原生集成:
- LangChain:作为`BaseMemory`子类,替换默认的`ConversationBufferMemory`。
- CrewAI:作为自定义工具,智能体可调用它来存储/检索共享记忆。
- AutoGen:作为记忆服务,多个智能体可通过REST访问。
- OpenAI Assistants API:通过函数调用作为外部记忆存储。
该库还以独立Docker容器(`memorilabs/memori-server`)的形式提供,暴露REST API,支持语言无关的集成。
关键玩家与案例研究
Memori背后的团队
Memori由一个小型团队开发,成员来自前Google和Uber工程师,曾从事大规模数据基础设施工作。首席维护者Anika Sharma博士此前曾领导一家知名AI初创公司的记忆系统团队。该项目由一组专注于AI的风险投资公司联合投资的420万美元种子轮资金支持。团队的明确目标是让Memori成为“AI智能体的PostgreSQL”——一个通用的持久化层。
竞争方案
| 产品 | 方法 | 优势 | 劣势 | GitHub星数 |
|---|---|---|---|---|
| Memori | SQL原生关系型 | 结构化查询、连接、ACID、熟悉接口 | 不太适合模糊/联想回忆 | 13,854 |
| MemGPT(Letta) | 虚拟上下文 | ... | ... | ... |