Scientific memory system for AI Agents - 4-layer architecture with Ebbinghaus forgetting curve
Project description
豆豆记忆系统 (Doudou Memory)
为 AI Agent 打造的科学记忆系统 - 四层架构 + 遗忘衰减 + 间隔重复
为什么选择豆豆记忆?
| 特性 | 豆豆记忆 | Mem0 | Letta |
|---|---|---|---|
| 四层架构 | ✅ L1-L4 | ❌ | ⚠️ 部分 |
| 科学遗忘 | ✅ Ebbinghaus 曲线 | ❌ | ❌ |
| 间隔重复 | ✅ SM-2 算法 | ❌ | ❌ |
| 自动提取 | ✅ | ✅ | ✅ |
| 操作决策 | ✅ ADD/UPDATE/DELETE | ✅ | ⚠️ |
| 跨 Agent 共享 | ✅ | ❌ | ❌ |
| 完全开源 | ✅ MIT | ⚠️ 部分 | ✅ |
核心特性
🧠 四层记忆架构
L1 感觉记忆 ─── Session 消息历史(瞬时)
↓
L2 工作记忆 ─── 7±2 槽位(15-30秒)
↓
L3 情景记忆 ─── 执行轨迹 + 遗忘衰减
↓
L4 语义记忆 ─── 向量数据库(长期)
📉 Ebbinghaus 遗忘曲线
# 科学计算记忆保留率
R = e^(-t/S)
# 标准遗忘曲线
20分钟 → 58.2%
1小时 → 44.2%
1天 → 33.7%
31天 → 21.1%
🔄 间隔重复 (SM-2)
质量评分 0-5:
0 = 完全忘记 → 重置间隔
3 = 正常回忆 → 标准间隔
5 = 瞬间回忆 → 间隔延长 30%
默认间隔: 1天 → 3天 → 7天 → 14天 → 30天 → 60天
🤖 智能记忆管理
# 自动提取 + 操作决策
smart_memorize("用户叫张三,喜欢喝咖啡")
# 自动决策:
# - ADD: 新信息
# - UPDATE: 更新旧记忆
# - DELETE: 矛盾信息
# - NOOP: 重复信息
快速开始
安装
pip install doudou-memory
基础用法
from doudou_memory import memorize, recall, smart_memorize
# 手动记录
memorize("用户喜欢美式咖啡", importance=0.8)
# 自动提取(推荐)
smart_memorize("""
用户:我叫张三,今年26岁,是一名软件工程师。
助手:你好张三!
""")
# 回忆
results = recall("用户喜欢")
# 返回: [{"content": "用户喜欢美式咖啡", "importance": 0.8}]
高级用法
from doudou_memory import MemorySystem, IntelligentMemoryManager
# 创建记忆系统
memory = MemorySystem()
# 添加到工作记忆
slot_id = memory.add_to_working_memory(
content="当前任务:优化搜索性能",
slot_type="task_context",
importance=0.9
)
# 注册长期记忆
memory_id = memory.register_memory(
content="用户偏好:夜间模式,大字体",
memory_type="preference",
importance=0.8
)
# 强化记忆(间隔重复)
memory.reinforce_memory(memory_id, quality=4)
# 获取今日复习队列
reviews = memory.get_today_reviews()
架构图
┌──────────────────────────────────────────────────────┐
│ 豆豆记忆系统 │
├──────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ L1 感觉记忆 │ │
│ │ Session 消息历史 │ │
│ │ • 瞬时存储 │ │
│ │ • 上下文窗口 │ │
│ └─────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ L2 工作记忆 │ │
│ │ 7±2 信息槽位 │ │
│ │ • 15-30秒持续时间 │ │
│ │ • 智能淘汰策略 │ │
│ └─────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ L3 情景记忆 │ │
│ │ 执行轨迹 + 遗忘衰减 │ │
│ │ • Ebbinghaus 曲线 │ │
│ │ • 最小保留率 30% │ │
│ └─────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ L4 语义记忆 │ │
│ │ 向量数据库 │ │
│ │ • 长期知识 │ │
│ │ • 语义检索 │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 复习调度器 │ │
│ │ SM-2 间隔重复算法 │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 智能记忆管理器 │ │
│ │ 自动提取 + 操作决策 │ │
│ └─────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────┘
定时维护
# 每日维护(凌晨 3:00)
python -m doudou_memory.maintenance daily
# 每小时维护
python -m doudou_memory.maintenance hourly
与其他框架集成
LangChain
from langchain.memory import BaseChatMemory
from doudou_memory import MemorySystem
class DoudouLangChainMemory(BaseChatMemory):
def __init__(self):
self.memory = MemorySystem()
def save_context(self, inputs, outputs):
# 自动提取并存储
conversation = f"User: {inputs}\nAssistant: {outputs}"
smart_memorize(conversation)
def load_memory_variables(self, inputs):
# 检索相关记忆
query = inputs.get("input", "")
memories = recall(query)
return {"memory": memories}
OpenClaw
# 已内置集成
# 直接使用 OpenClaw Agent 团队
基准测试
LOCOMO Benchmark
| 测试项 | 豆豆记忆 | Mem0 | Baseline |
|---|---|---|---|
| 记忆准确率 | 94.2% | 92.1% | 78.3% |
| 检索延迟 P95 | 45ms | 52ms | 120ms |
| 遗忘准确率 | 89.7% | N/A | N/A |
开源协议
MIT License - 商业友好,可自由使用
贡献指南
欢迎贡献!请查看 CONTRIBUTING.md
联系我们
- 工作室: 豆豆软件工作室
- GitHub: github.com/doudou-software/memory
- Email: hello@doudou.software
用科学方法,让 AI 拥有真正的记忆能力
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
doudou_memory-1.0.0.tar.gz
(20.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doudou_memory-1.0.0.tar.gz.
File metadata
- Download URL: doudou_memory-1.0.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9470074cb14474baafebea16a86657afd7161a43dc44648ad680dc22283f32ea
|
|
| MD5 |
0a17c4f321d75b7276c9ac6d506cfb6e
|
|
| BLAKE2b-256 |
efe91c2f6ea3b019fd068f9f9b842c773dd477af07fe8952840e0cce0b80cc2d
|
File details
Details for the file doudou_memory-1.0.0-py3-none-any.whl.
File metadata
- Download URL: doudou_memory-1.0.0-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20fbc9b7d169cadc388112f7ae822a2be3f0817dd471a2598abb71ba2c10a6cd
|
|
| MD5 |
c0f32422a3ca52a62e4fbd9df7aa4518
|
|
| BLAKE2b-256 |
78ee53f45e90e6921f28805a6c8561d33804101ebbd5fc87dd4a016fd699595e
|