内容
<div align="center">
[](README.md)
[](README.zh-CN.md)
[](README.ja.md)
</div>
# 记忆引擎 · MCP原生长期记忆,为AI伴侣提供跨会话记忆
> 给 AI 一层跨会话的长期记忆 · 任何MCP客户端都可以连接的长期记忆 · 为AI提供长期记忆
---
<div align="center">
### ☁️ 不想自己部署?使用托管的 **[mory](https://usemory.com)** 云记忆服务。
**Claude.ai 和 ChatGPT 应用无法在会话之间保存上下文。**
[**mory**](https://usemory.com) 运行着这个确切的引擎,作为一个**托管的云MCP服务器** —
**无需部署,无需数据库,无需运维**。连接你的AI一次,它就能在每个会话中记住你。
#### → [**在 usemory.com 获取你的云记忆**](https://usemory.com) ←
</div>
---
[](https://github.com/blanchexxxxx/mory-memory/actions/workflows/tests.yml)

[](./LICENSE)


一个记忆引擎,为AI助手提供持久的**身份识别**和**历史事件**,跨会话可用 — 完全通过
[模型上下文协议](https://modelcontextprotocol.io) 暴露,以便任何MCP客户端
(Claude Desktop,Claude.ai,Cursor,Cline等)都可以读写它。
三层结构,每层都有自己的更新频率、检索模式和生命周期 —
因此核心身份不会随着临时片段一起被遗忘:
- **身份识别** (`cards`) — 用户是谁:偏好、状态、关系。版本控制。
- **事件** (`memories`) — 发生了什么 / 有什么未解决的问题:情感坐标
(valence/arousal),重要性,和时间衰减,通过 **pgvector** 语义检索。
- **临时** (`conversations`, `chat_messages`, summary DAG) — 最近 / 当前。
完整文档: **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)**。
本仓库如何与AI代理一起构建: **[docs/AI_WORKFLOW.md](docs/AI_WORKFLOW.md)**。
## 为什么
聊天助手在会话之间会忘记一切。 在上面添加向量存储可以实现**检索**,但不是**记忆**:没有身份识别与事件之间的区别,没有情感权重,也没有遗忘。 `mory-memory` 将这些区别建模为一等结构,并通过MCP提供它们,因此记忆层与特定的聊天UI或模型解耦。
## MCP 工具
**记忆** — `save_memory` · `get_memories` · `search_memories` · `get_memory_detail` ·
`update_memory` · `delete_memory` · `restore_memory` · `batch_delete_memories` ·
`surface_memories`
**身份识别卡** — `get_cards` · `update_card` · `get_card_diff` · `get_card_history`
**对话** — `save_conversation` · `get_conversations` · `get_resume_context` ·
`get_archive`
**日记和评论** — `write_diary` · `get_diary` · `post_comment` · `get_comments`
**任务** — `save_task` · `get_tasks` · `update_task` · `complete_task` · `delete_task`
**保险库(摘要DAG)** — `search_vault` · `expand_vault` · `recall_chat`
## 自主部署快速开始
> 更喜欢零配置?使用托管的云服务 **[usemory.com](https://usemory.com)** 代替。
```bash
git clone https://github.com/blanchexxxxx/mory-memory
cd mory-memory
cp .env.example .env # 添加一个OPENAI_API_KEY用于嵌入(可选)
docker compose up --build # Postgres 16 + pgvector 和 MCP服务器
```
生成一个 bearer token,并将MCP客户端指向服务器:
```bash
docker compose exec server python -m scripts.create_token
# → bearer : mbr_xxxxxxxx...
```
配置你的MCP客户端:
- **URL** `http://localhost:8000/mcp/sse`
- **Header** `Authorization: Bearer mbr_...`
然后让助手执行 `save_memory` / `search_memories` — 它会通过
Postgres 完成。健康检查: `curl localhost:8000/health` → `{"status":"ok"}`。
## 配置
所有配置均通过环境变量(参见 [.env.example](.env.example)):
| 变量 | 目的 |
|---|---|
| `DATABASE_URL` | Postgres 16 + pgvector 连接字符串 |
| `OPENAI_API_KEY` | 嵌入(`text-embedding-3-small`,1536-dim)。可选。 |
| `DEEPSEEK_API_KEY` / `DEEPSEEK_BASE_URL` | 替代OpenAI兼容的嵌入端点 |
| `PUBLIC_BASE_URL` | MCP服务器的公共URL |
| `MEMORY_CAP` / `ARCHIVE_BYTES_CAP` | 可选的软配额(空白 = 无限制) |
## 范围和注意事项
这是**引擎核心**,从更大的 [mory](https://usemory.com) 产品中提取。一些诚实的边界:
- **身份验证** 是MCP bearer token(单用户友好;使用上面的开发脚本生成)。
对于多用户Web部署,请在 `backend/auth/dependencies.py` 中添加自己的OIDC/JWT验证 —
接口已经存在。
- **`recall_chat`** 开箱即用。 `search_vault` / `expand_vault` 读取一个摘要
DAG,由**不包含在此核心**的后台构建器填充 —
搜索/钻取侧和模式在此处;构建器cron不包含在此处。
- **隔离** 在应用程序层强制执行(`WHERE user_id = %s` 在每个查询上),
而不是通过数据库RLS。参见ARCHITECTURE。
## 许可证
[MIT](./LICENSE)