Amrita 长期记忆插件 —— 基于 ChromaDB 向量数据库的智能记忆管理系统,让 AI 助手能够持久化地记住关于用户的重要信息。
| 组件 | 技术 |
|---|---|
| 后端框架 | Python 3.10+ / NoneBot2 / Amrita Core |
| 向量数据库 | ChromaDB(支持本地 PersistentClient 与远程 HttpClient) |
| 嵌入模型 | OpenAI Embedding API / Ollama Embedding API |
| 配置管理 | Pydantic + TOML |
| 异步处理 | asyncio + aiologic + aiohttp |
| 代码质量 | Ruff + Pyright |
amrita_plugin_memory/
├── __init__.py # 插件入口,注册依赖
├── config.py # 配置模型(ConfigFile / EnvConfig / DataManager)
├── embed.py # Ollama 嵌入适配器
├── vector.py # ChromaDB 异步封装(WrappedClientAPI / AsyncUserMemory)
└── tools.py # 工具函数定义与注册(write/read/update/delete/list)
- config.py: 定义配置文件(过期天数、记忆上限)和环境变量(数据库类型、嵌入模型地址等),通过 Pydantic 模型校验。
- embed.py: 实现 Ollama 协议的嵌入适配器,通过 HTTP API 调用
/api/embed端点。 - vector.py: 对 ChromaDB 原生 API 进行
asyncio.to_thread封装,提供异步的集合管理与记忆 CRUD。使用aiologic.Lock按用户粒度加锁,保证并发安全。 - tools.py: 定义 5 个 Function Calling 工具(
write_memory/read_memory/update_memory/delete_memory/list_memory),注册到 Amrita 的工具系统中。通过scope参数支持群共享记忆与用户专属记忆的分区隔离。
- 长期记忆存储:将用户偏好、项目信息等持久化存入 ChromaDB 向量数据库
- 群/用户记忆隔离:LLM 可通过
scope参数选择存入群共享记忆(群内所有人可见)或用户专属记忆(仅自己可见) - 语义检索:基于嵌入向量的语义相似度检索,支持中英文关键词
- 智能标签:支持使用自定义标签对记忆进行分类(如
preference、project) - 重要性分级:三级重要程度(
low/medium/high),支持按级别过滤检索 - 完整 CRUD:支持记忆的创建、查询、更新、删除和列表查看
- 并发安全:按用户 ID 粒度加锁,确保同一用户的操作串行化
- 多租户支持:通过 ChromaDB remote 模式支持远程向量数据库
将当前用户(或群组)的重要信息存入长期记忆。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
content |
string | ✅ | 记忆内容,简洁明了 |
tags |
string | ✅ | 分类标签,如 preference、project |
importance |
"low" / "medium" / "high" |
✅ | 重要性等级 |
scope |
"group" / "user" |
✅ | group=群共享,user=个人专属(私聊不可用 group) |
从记忆库中按语义相似度检索用户相关信息。
| 参数 | 类型 | 必需 | 默认值 | 描述 |
|---|---|---|---|---|
query |
string | ✅ | — | 关键词字符串,空格分隔 |
top_k |
integer | ❌ | 5 |
返回结果数量 |
importance |
"low" / "medium" / "high" |
❌ | — | 按重要性过滤 |
scope |
"group" / "user" |
✅ | — | 检索范围:群共享或个人专属 |
更新指定 ID 的记忆内容、标签或重要性。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
string | ✅ | 要更新的记忆 ID |
scope |
"group" / "user" |
✅ | 记忆所属范围 |
content |
string | ❌ | 新的记忆内容 |
tags |
string | ❌ | 新的标签 |
importance |
"low" / "medium" / "high" |
❌ | 新的重要性等级 |
删除指定 ID 的记忆。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
string | ✅ | 要删除的记忆 ID |
scope |
"group" / "user" |
✅ | 记忆所属范围 |
列出当前用户的所有记忆(返回 scope、标签和 ID)。
| 参数 | 类型 | 必需 | 默认值 | 描述 |
|---|---|---|---|---|
limit |
integer | ❌ | 5 |
返回数量限制 |
scope |
"group" / "user" |
✅ | — | 列出范围:群共享或个人专属 |
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
short_term_expiry_days |
int | 3 |
短期记忆过期天数 |
long_term_expiry_days |
int | 30 |
长期记忆过期天数 |
permanent_expiry_days |
int | 365 |
永久记忆过期天数 |
per_session_memory_limit |
int | 50 |
每个会话的记忆数量上限 |
| 变量 | 类型 | 默认值 | 描述 |
|---|---|---|---|
VECTOR_DB_TYPE |
local / remote |
local |
ChromaDB 数据库类型 |
VECTOR_DB_SERVER |
string | 127.0.0.1 |
远程 ChromaDB 地址 |
VECTOR_DB_PORT |
int | 8000 |
远程 ChromaDB 端口 |
VECTOR_DB_SERVER_SSL |
bool | false |
是否启用 SSL |
VECTOR_DB_REMOTE_HEADERS |
dict | {} |
远程请求头 |
VECTOR_DB_TENANT |
string | default |
租户名称 |
VECTOR_DB_DATABASE |
string | default |
数据库名称 |
EMBEDDING_MODEL_URL |
string | http://127.0.0.1:11434 |
嵌入模型地址 |
EMBEDDING_MODEL_NAME |
string | auto |
嵌入模型名称 |
EMBEDDING_PROCTOL |
openai / ollama-embed |
ollama-embed |
嵌入模型协议 |
EMBEDDING_MODEL_API_KEY |
string | (空) | 嵌入模型 API 密钥(可选) |
- Python 3.10 ~ 3.13
- 已部署的 AmritaBot 实例
- (本地模式)无需额外组件
- (远程模式)已运行的 ChromaDB 服务端
- 已运行的嵌入模型服务(如 Ollama)
ambot plugin install amrita_plugin_memory插件安装后会自动生成配置文件。你可以通过以下方式配置:
- WebUI 配置:在 Amrita 的 Web 管理界面中直接修改
- 手动编辑:修改
config/amrita_plugin_memory/config.toml - 环境变量:通过
.env文件或系统环境变量设置数据库和嵌入模型参数
启动后查看日志,确认向量数据库连接成功:
正在尝试向量数据库连接...
当前向量数据库类型: local
创建了向量数据库客户端!
向量数据库版本:x.x.x
完成。
# 安装开发依赖
uv sync
# 代码格式化与检查
ruff format .
ruff check .
# 类型检查
pyright