logo
开发者文档
搜索
三维记忆系统

三维记忆系统

概述

工作空间的记忆系统采用三维架构,在账户、企业和会话三个维度存储和管理知识。记忆与对话深度集成 —— 每次对话都会查询相关记忆注入上下文,每轮交互结束后自动提取新的记忆。

技术基座: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 实体)
                      
                      (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
                      
                      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 颜色稳定化

  • 通过 djb2 hash 计算实体类型 → 颜色索引
  • 同一类型的实体在不同视图、不同时间都保持同一颜色
  • 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 - ...
                      
                      你是 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 设置 → 记忆,可以浏览列表和图谱

相关文档