三维记忆系统
概述
工作空间的记忆系统采用三维架构,在账户、企业和会话三个维度存储和管理知识。记忆与对话深度集成 —— 每次对话都会查询相关记忆注入上下文,每轮交互结束后自动提取新的记忆。
技术基座:mem0 REST API + Neo4j 知识图谱。
三维架构
| 维度 | 作用域 | 写入方式 | 管理权限 | 对话注入 |
|---|---|---|---|---|
| 账户级 | userId(跨组织) | 手动添加 + 对话自动提取 | 用户自行管理 | "用户概况" 注入 system prompt |
| 企业级 | orgId(组织隔离) | 管理员手动维护 | 仅工作空间管理员 | "企业概况" 注入 system prompt |
| 会话级 | runId(单次会话) | 每轮自动提取 | 自动管理 | 会话内语义查询 |
账户级记忆
- 跨组织共享:绑定到 userId,在用户所有组织中可用
- 写入方式:
- 手动:在记忆管理界面或对话中通过命令添加
- 自动:对话中自动检测值得记住的信息
- 管理界面:APP 设置 → 记忆
- 详细文档:记忆管理
企业级记忆
- 组织隔离:绑定到 orgId,仅当前组织成员可见
- 管理权限:只有工作空间管理员可维护
- 管理界面:空间管理 → 高级设置 → 企业记忆
- 详细文档:高级设置 — 企业记忆
会话级记忆
- 单次会话:绑定到 runId,仅在当前会话内有效
- 每轮提取:每轮对话结束后自动分析并提取记忆
- 无需管理:系统自动处理
记忆提取机制
显式命令(置信度 0.99)
用户直接要求 Agent 记住或遗忘信息:
| 操作 | 触发关键词 |
|---|---|
| 添加记忆 | "记住"、"记下"、"保存记忆"、"保存到记忆"、"remember"、"store in memory" |
| 删除记忆 | "删除记忆"、"忘掉"、"忘记"、"forget this"、"remove from memory" |
隐式检测(置信度 0.5-0.93)
系统通过正则模式自动检测对话中的持久性事实:
| 信号类型 | 示例 | 置信度 |
|---|---|---|
| 个人档案 | "我叫张三"、"我是前端开发"、"my name is" | 0.93 |
| 个人所有 | "我有一只猫"、"我养了"、"I own" | 0.90 |
| 个人偏好 | "我喜欢用 TypeScript"、"I prefer" | 0.88 |
| 助手风格 | "以后请用中文回复"、"always use"、"响应格式偏好" | 0.86 |
置信度阈值
| 模式 | 阈值 | 说明 |
|---|---|---|
| strict | 0.85 | 保守模式,只提取高置信度记忆 |
| standard(默认) | 0.65 | 平衡模式 |
| relaxed | 0.50 | 积极模式,更多内容被记住 |
自动排除规则
以下内容不会被提取为记忆:
- 纯提问(问号结尾、疑问词开头)
- 闲聊/寒暄
- 代码块中的内容
- 时效性/时间绑定信息(日期、新闻、临时状态)
- 非持久性话题(bug 报告、错误信息)
知识图谱
后端存储(Neo4j)
记忆关系以三元组形式存储在 Neo4j 图数据库中:
(source 实体) --[relationship]--> (target 实体)
N-hop 邻域查询(1-4 跳):
MATCH path = (n {name: $entity})-[*1..depth]-(m)
WHERE ALL(node IN nodes(path) WHERE node.user_id = $user_id)
UNWIND relationships(path) AS rel
RETURN source, relationship, target
Cypher 查询保证永远不跨用户边界。
前端可视化
使用 react-force-graph-2d 渲染力导向图:
| 节点类型 | 颜色 | 说明 |
|---|---|---|
| Hub | 紫色 #6d28d9 |
用户/组织中心节点 |
| Fact | 蓝色 #2563eb |
记忆条目 |
| Entity | 琥珀色 #f59e0b(默认) |
提取的实体;具体颜色由 djb2 hash 映射到 10 色调色板 |
图谱渲染优化(2026-04 更新)NEW
新版图谱引入两个密度门阈值,避免节点过多导致标签重叠:
| 阈值常量 | 值 | 含义 |
|---|---|---|
PILL_READABILITY_MIN_SCALE |
1.5 | 缩放小于 1.5x 不渲染文字标签 |
PILL_MIN_SCREEN_AREA_PER_NODE |
3000 | 每节点屏幕面积少于 3000 像素不渲染标签 |
两个条件同时满足才显示标签。未达到时只渲染圆点。
Entity Type 颜色稳定化:
- 通过
djb2hash 计算实体类型 → 颜色索引 - 同一类型的实体在不同视图、不同时间都保持同一颜色
- 10 色调色板支持无限类型循环使用
Bug 修复:图谱关系映射时 sourceTypes / targetTypes 字段之前被丢弃,导致所有节点都回退到灰色 fallback。此 Bug 已修复(见 sidecar/src/mem0Service.ts)。
多级钻取
点击节点可展开其关联实体,逐层深入知识网络。图引擎支持:
neighborhood()— N-hop 邻域查询shortestPath()— 两实体间最短路径extractEntitiesFromText()— 从文本提取实体名
记忆与对话的协同
记忆查询时机
| 时机 | 动作 |
|---|---|
| 新建对话 | 查询账户概况记忆 + 企业概况记忆,拼接到 system prompt |
| 用户发送消息 | memory_query 工具语义检索相关记忆 |
| 图谱扩展 | searchWithGraphExpansion — 语义检索 + 1-hop 图扩展,返回相关实体和边 |
记忆注入位置
在 system prompt 中注入两段记忆概况:
你是 GPTBots AI 助手...
## 用户概况
- 用户是前端开发工程师
- 偏好使用 TypeScript
- ...
## 企业概况
- 公司使用 React 技术栈
- 项目代号 Project Alpha
- ...
记忆工具
Agent 可通过以下工具主动查询和管理记忆:
| 工具 | 操作 | 说明 |
|---|---|---|
| memory_query | list / search / graph_traverse | 列表、语义搜索、图谱遍历 |
| memory_manage | add / update / delete | 添加、修改、删除记忆 |
| conversation_search | search | 搜索历史对话 |
| recent_chats | list | 列出近期对话 |
跨账号 Gateway 隔离 NEW
当节点以 enterprise 范围被跨账号调用时:
- 账户级记忆(userId 绑定):❌ 不可访问
- 企业级记忆(orgId 绑定):✅ 可访问
- 会话级记忆(本次会话内):✅ 可访问
通过 isRemoteSession 标志在 mem0Service 查询阶段强制过滤 —— 跨账号调用无法读取目标节点所有者的个人记忆。
设计目的:保护个人隐私,同时不影响组织级知识的协同共享。详见 多节点架构。
mem0 能力
记忆后端基于 mem0 提供以下自动化能力:
| 能力 | 说明 |
|---|---|
| 自动更新 | 新信息覆盖旧信息(如"我喜欢 Python" → "我喜欢 TypeScript") |
| 自动合并 | 相似记忆合并为更完整的条目 |
| 自动遗忘 | 矛盾信息自动清理旧版本 |
超时保护
| 操作 | 超时 |
|---|---|
| 记忆查询/管理 | 25 秒 |
| 会话级记忆操作 | 5 秒(快速超时,不阻塞对话) |
| 图谱关系获取 | 3 秒(超时后优雅降级) |
对用户意味着什么
记忆系统让 Agent 能"认识你"。 没有记忆,每次对话 Agent 都像初次见面的陌生人;有了记忆,Agent 知道你的偏好、项目背景和工作习惯。
三个维度在实际中的体现:
- 账户记忆:"你说过喜欢 TypeScript" → Agent 在所有组织的对话中都优先使用 TypeScript
- 企业记忆:管理员添加了"公司使用 PostgreSQL 数据库" → 组织内所有成员与 Agent 讨论数据库时,Agent 默认推荐 PostgreSQL 方案
- 会话记忆:你在这次对话中说"当前项目叫 Project Alpha" → 这次对话中 Agent 记得,新对话中不一定
你可以这样管理记忆:
- 对于个人偏好:在对话中说"记住我偏好用 dark 主题",或在 APP 设置 → 记忆中手动添加
- 对于企业知识:联系管理员在空间管理 → 高级设置 → 企业记忆中添加
- 发现记忆有误:在对话中说"忘掉之前关于 Python 的偏好",或在记忆管理中直接删除
- 查看已有记忆:APP 设置 → 记忆,可以浏览列表和图谱
相关文档
- 记忆管理 — APP 端记忆管理界面
- 高级设置 — 企业记忆 — 企业级记忆管理
- 工具管理 — 记忆相关工具(memory_query、memory_manage)
- 多节点架构 — 跨账号 Gateway 隔离机制
