32fb2cdeaf
Add chat file/image upload UX, attachment proxying, vision thumbnails, and per-turn image scoping so agents only use the current upload. Extend MindSpace asset context, billing token state, OA/scenario verify scripts, and related runtime config. Co-authored-by: Cursor <cursoragent@cursor.com>
527 lines
15 KiB
Markdown
527 lines
15 KiB
Markdown
# AI Mind 与 Memind 整合架构分析文档
|
||
|
||
日期:2026-07-10
|
||
状态:架构分析与实施方案;未改代码、未碰生产、未读写用户数据
|
||
适用范围:Memind H5、服务号聊天、MindSpace、Memory V2、AI Mind 画像与 persona 能力
|
||
|
||
## 1. 核心结论
|
||
|
||
建议把 AI Mind 接成 Memind 的“画像与人格洞察旁路服务”,而不是接成新的聊天主链路、主记忆体或生产执行系统。
|
||
|
||
推荐边界:
|
||
|
||
- Memind 继续负责入口、账号、权限、会话、H5、服务号、MindSpace、页面发布、工具执行、计费和生产链路。
|
||
- Memory V2 继续负责 Memind 当前记忆入口,保持 pgvector resolve、legacy fallback 等现有体系。
|
||
- AI Mind 负责用户画像、性格分析、沟通偏好、长期目标、life_stream 分析、persona profile 和轻量上下文建议。
|
||
- Bridge Layer 负责身份映射、授权、限流、缓存、降级、审计和数据分级。
|
||
|
||
一句话方案:
|
||
|
||
```text
|
||
AI Mind 做“懂用户的人格画像脑”,Memind 继续做“入口、权限、会话、工具和生产执行系统”。
|
||
```
|
||
|
||
## 2. 当前担心与设计目标
|
||
|
||
当前主要担心是:AI Mind 一旦接入,会不会影响 Memind 已经稳定运行的 H5、服务号、MindSpace、Memory V2、pgvector、legacy 记忆和 goosed 会话体系。
|
||
|
||
因此设计目标不是“深度替换”,而是“可关闭的旁路增强”:
|
||
|
||
- 不替换现有聊天回复链路。
|
||
- 不替换现有 Memory V2 主链路。
|
||
- 不让 AI Mind 直接触发工具、写文件、发布页面或修改用户数据。
|
||
- 不让 AI Mind 成为 H5、服务号、MindSpace 的强依赖。
|
||
- AI Mind 不可用时,Memind 原功能必须正常。
|
||
- 所有接入能力必须用户级可开关、可灰度、可审计、可回滚。
|
||
|
||
## 3. 推荐总体架构
|
||
|
||
```text
|
||
用户
|
||
|
|
||
v
|
||
Memind H5 / 服务号 / MindSpace
|
||
|
|
||
| 现有主链路
|
||
v
|
||
Memind Chat / Session / Goose / Memory V2
|
||
|-- pgvector: 聊天语义召回
|
||
|-- legacy conversation-memory: 写入与回退
|
||
|-- mem0/letta/neo4j 等: 可用但不应默认接管主链路
|
||
|
|
||
v
|
||
正常回复、页面生成、工具执行、发布
|
||
|
||
|
||
旁路增强链路
|
||
|
||
Memind 重要摘要事件
|
||
|
|
||
v
|
||
AI Mind Bridge Layer
|
||
|-- 身份映射
|
||
|-- Token 管理
|
||
|-- 数据分级
|
||
|-- 调用限流
|
||
|-- 超时降级
|
||
|-- 审计日志
|
||
|
|
||
v
|
||
AI Mind
|
||
|-- user profile
|
||
|-- persona profile
|
||
|-- life_stream
|
||
|-- personality / preference analysis
|
||
|-- lightweight persona context
|
||
|
|
||
v
|
||
Memind 只读取摘要级画像上下文
|
||
```
|
||
|
||
## 4. 能力分层
|
||
|
||
### 4.1 Memind 保留的能力
|
||
|
||
Memind 不应让渡以下能力:
|
||
|
||
- 用户登录、权限、用户空间归属。
|
||
- H5 和服务号消息入口。
|
||
- goosed / agent session 创建、恢复、路由和工具策略。
|
||
- MindSpace 页面生成、保存、发布、公开链接。
|
||
- 生产数据写入和生产发布流程。
|
||
- 当前 Memory V2 的主配置和回退路径。
|
||
- 计费、额度、服务隔离和审计。
|
||
|
||
### 4.2 AI Mind 提供的能力
|
||
|
||
AI Mind 适合提供:
|
||
|
||
- 用户画像:长期偏好、沟通风格、兴趣、常见目标。
|
||
- 性格分析:表达方式、决策风格、风险偏好。
|
||
- 轻量 persona context:给 Memind 聊天提供简短、可审计的上下文提示。
|
||
- life_stream 分析:对重要摘要事件做长期沉淀。
|
||
- profile evidence:为画像结论保留证据来源。
|
||
- 可选 persona chat:只在用户主动进入人格/数字分身模式时使用。
|
||
|
||
### 4.3 Bridge Layer 的职责
|
||
|
||
Bridge Layer 是风险控制点,不应只是一个 HTTP client。
|
||
|
||
它需要负责:
|
||
|
||
- `memind_user_id` 与 `ai_mind_user_id/persona_id` 的绑定。
|
||
- external token 的服务端保存、加密、轮换和禁用。
|
||
- scopes 控制,例如 `profile_read`、`life_stream_write`、`persona_chat`。
|
||
- 每次调用的超时、重试、熔断和 fail-open。
|
||
- 数据投递前的摘要、脱敏和隐私分级。
|
||
- 审计日志:谁、何时、把什么摘要投给了 AI Mind,聊天注入了什么画像。
|
||
- 缓存 AI Mind profile,避免每条消息都实时请求。
|
||
|
||
## 5. 身份映射设计
|
||
|
||
身份映射是最大风险点。Memind 与 AI Mind 不应共享数据库表,也不应直接复用彼此的主键。
|
||
|
||
建议使用独立绑定关系:
|
||
|
||
```text
|
||
memind_ai_mind_bindings
|
||
```
|
||
|
||
建议字段:
|
||
|
||
- `id`
|
||
- `memind_user_id`
|
||
- `ai_mind_user_id`
|
||
- `default_persona_id`
|
||
- `persona_external_token`
|
||
- `external_user_id`
|
||
- `enabled`
|
||
- `scopes`
|
||
- `created_at`
|
||
- `updated_at`
|
||
- `last_profile_sync_at`
|
||
- `last_life_stream_event_at`
|
||
|
||
设计约束:
|
||
|
||
- `memind_user_id` 对应 Memind 的 `h5_users.id`。
|
||
- `ai_mind_user_id` 对应 AI Mind 用户。
|
||
- `default_persona_id` 对应 AI Mind 默认 persona。
|
||
- `external_user_id` 建议使用稳定格式:`memind:<h5_user_id>`。
|
||
- 前端永远不拿 external token。
|
||
- 禁止用邮箱、openid、昵称等非稳定字段做主映射。
|
||
- 所有调用前必须校验 binding 是否启用、scope 是否允许。
|
||
|
||
## 6. 数据流设计
|
||
|
||
### 6.1 Profile 读取流
|
||
|
||
目标:Memind 读取 AI Mind 的用户画像摘要,但不影响主聊天。
|
||
|
||
```text
|
||
Memind 用户进入 H5 / 服务号
|
||
-> Bridge 检查用户是否绑定 AI Mind
|
||
-> 若已绑定且 profile_read 允许
|
||
-> 拉取或读取缓存的 AI Mind profile summary
|
||
-> 返回 Memind 内部可用的轻量 Profile Context
|
||
```
|
||
|
||
建议 Profile Context 结构:
|
||
|
||
```json
|
||
{
|
||
"enabled": true,
|
||
"source": "ai_mind",
|
||
"confidence": 0.82,
|
||
"summary": "用户偏好直接、执行导向的建议,关注生产稳定性和边界控制。",
|
||
"communication_style": "先结论后细节,明确风险与边界",
|
||
"long_term_goals": ["稳定接入记忆系统", "保护现有生产链路"],
|
||
"do_not_assume": ["不要自动发布", "不要修改生产数据"],
|
||
"updated_at": "2026-07-10T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
注入聊天时必须限制长度,例如 300 到 800 字,并且只作为“理解用户偏好”的提示,不允许覆盖系统策略。
|
||
|
||
### 6.2 Life Stream 投递流
|
||
|
||
目标:让 AI Mind 逐步学习用户,但不把所有原始聊天无脑同步过去。
|
||
|
||
```text
|
||
Memind 产生高价值事件
|
||
-> 本地先生成摘要
|
||
-> 标记 source / privacy_class / event_type / user_id / session_id
|
||
-> Bridge 校验 scope 与隐私等级
|
||
-> 异步投递 AI Mind life_stream
|
||
-> 投递失败只记录,不影响用户体验
|
||
```
|
||
|
||
适合投递的事件:
|
||
|
||
- 用户主动保存的重要资料摘要。
|
||
- MindSpace 页面发布摘要。
|
||
- 用户明确表达的长期偏好或目标。
|
||
- 服务号中明显有长期价值的摘要。
|
||
- 用户主动要求“记住”的内容。
|
||
|
||
不建议投递的内容:
|
||
|
||
- 完整原始聊天流水。
|
||
- 临时任务细节。
|
||
- 一次性验证码、密钥、隐私内容。
|
||
- 未经过摘要和分级的服务号原文。
|
||
- 页面生成过程中的内部工具日志。
|
||
|
||
### 6.3 轻量聊天介入流
|
||
|
||
目标:让 AI Mind 影响语气和理解,不影响执行和主记忆。
|
||
|
||
```text
|
||
用户发起聊天
|
||
-> Memind 正常解析用户、会话、权限
|
||
-> Memory V2 正常 resolve 当前记忆
|
||
-> Bridge 获取短 Profile Context
|
||
-> 将 Profile Context 作为低优先级用户画像提示
|
||
-> 正常走 Memind / Goose 回复
|
||
```
|
||
|
||
硬约束:
|
||
|
||
- AI Mind context 不能覆盖系统提示。
|
||
- AI Mind context 不能增加工具权限。
|
||
- AI Mind context 不能改变发布、写文件、生产操作策略。
|
||
- AI Mind 超时或失败时直接跳过。
|
||
- 每次注入内容都应可审计。
|
||
|
||
### 6.4 Persona Chat 可选流
|
||
|
||
persona chat 不应默认替代普通聊天。
|
||
|
||
只在以下情况下使用:
|
||
|
||
- 用户进入“数字分身”或“人格陪伴”入口。
|
||
- 用户明确选择某个 persona。
|
||
- 内部灰度账号启用。
|
||
- 管理后台明确打开 `persona_chat` scope。
|
||
|
||
普通 H5 和服务号默认仍走 Memind 当前聊天链路。
|
||
|
||
## 7. 与 Memory V2 的关系
|
||
|
||
当前建议不是把 AI Mind 接到 Memory V2 主 backend。
|
||
|
||
推荐关系:
|
||
|
||
```text
|
||
legacy conversation-memory
|
||
-> 稳定记录和回退
|
||
|
||
pgvector
|
||
-> 当前聊天语义召回
|
||
|
||
mem0
|
||
-> 可作为候选记忆提取/压缩能力,但不负责 resolve
|
||
|
||
AI Mind
|
||
-> 用户画像、性格、人生流、persona profile
|
||
-> 通过 Bridge 产出轻量 Profile Context
|
||
```
|
||
|
||
AI Mind 的 Profile Context 可以作为聊天上下文的一小段附加信息,但不应直接替代:
|
||
|
||
- `memoryV2.resolve(...)`
|
||
- `conversationMemoryService`
|
||
- pgvector 检索
|
||
- legacy 写入与 compact
|
||
|
||
这样可以避免三类问题:
|
||
|
||
- 记忆来源混乱。
|
||
- 召回结果不可解释。
|
||
- 回滚时不知道关闭哪个系统。
|
||
|
||
## 8. 分阶段实施方案
|
||
|
||
### 阶段 0:只读画像验证
|
||
|
||
目标:验证 AI Mind 画像质量,不影响任何用户回复。
|
||
|
||
动作:
|
||
|
||
- 定义 AI Mind Profile Context 数据格式。
|
||
- 定义绑定关系和 scope 语义。
|
||
- 对内部测试用户建立绑定。
|
||
- Memind 后台只读拉取 AI Mind profile。
|
||
- 不注入聊天,不投递生产用户数据。
|
||
|
||
验收:
|
||
|
||
- 能正确绑定用户。
|
||
- 能拉取画像摘要。
|
||
- 画像不会串用户。
|
||
- AI Mind 不可用时 Memind 无感。
|
||
|
||
### 阶段 1:异步 life_stream 旁路
|
||
|
||
目标:让 AI Mind 开始基于摘要事件生成画像。
|
||
|
||
动作:
|
||
|
||
- 只对内部测试用户启用。
|
||
- 只投递摘要,不投递完整原文。
|
||
- 事件必须带 `source`、`event_type`、`privacy_class`、`external_user_id`。
|
||
- 失败只记录,不影响主链路。
|
||
|
||
验收:
|
||
|
||
- 投递不会阻塞 H5/服务号。
|
||
- AI Mind 能生成可解释 profile evidence。
|
||
- 可以按用户关闭投递。
|
||
- 可以追踪每条投递来源。
|
||
|
||
### 阶段 2:轻量聊天画像注入
|
||
|
||
目标:让 AI Mind 轻微影响聊天风格和上下文理解。
|
||
|
||
动作:
|
||
|
||
- 仅内部灰度。
|
||
- 每次聊天最多注入 300 到 800 字 Profile Context。
|
||
- 注入内容只包含偏好、风格、长期目标、注意事项。
|
||
- 不允许包含工具指令、权限指令、发布指令。
|
||
- 每次注入写审计记录。
|
||
|
||
验收:
|
||
|
||
- 回复质量提升可感知。
|
||
- 不影响工具权限和生产边界。
|
||
- AI Mind 失败时自动降级。
|
||
- 可以按用户、按入口关闭。
|
||
|
||
### 阶段 3:Persona 模式
|
||
|
||
目标:提供独立的人格/数字分身体验。
|
||
|
||
动作:
|
||
|
||
- 新增独立入口或显式模式。
|
||
- 调用 AI Mind persona external chat。
|
||
- 与普通聊天明确区分。
|
||
- 不默认接管服务号和 H5 普通聊天。
|
||
|
||
验收:
|
||
|
||
- persona 回复与普通 Memind 回复边界清楚。
|
||
- 用户知道自己进入了人格模式。
|
||
- 可以退出 persona 模式回到普通聊天。
|
||
- persona 不触发 Memind 工具执行。
|
||
|
||
### 阶段 4:更深融合前评审
|
||
|
||
只有当前三阶段稳定后,才讨论更深融合。
|
||
|
||
评审内容:
|
||
|
||
- 是否允许 AI Mind 画像进入 Memory V2 的某个只读 backend。
|
||
- 是否允许 AI Mind profile 参与 chat intent router。
|
||
- 是否允许 MindSpace 页面摘要成为 AI Mind knowledge。
|
||
- 是否需要用户可视化管理“AI Mind 记住了什么”。
|
||
- 是否需要数据删除、纠错、导出流程。
|
||
|
||
## 9. 开关与灰度建议
|
||
|
||
建议所有能力都具备独立开关。
|
||
|
||
```text
|
||
AI_MIND_ENABLED=0/1
|
||
AI_MIND_PROFILE_READ_ENABLED=0/1
|
||
AI_MIND_CHAT_INJECTION_ENABLED=0/1
|
||
AI_MIND_LIFE_STREAM_WRITE_ENABLED=0/1
|
||
AI_MIND_PERSONA_CHAT_ENABLED=0/1
|
||
AI_MIND_FAIL_OPEN=1
|
||
AI_MIND_TIMEOUT_MS=1500
|
||
AI_MIND_MAX_CONTEXT_CHARS=800
|
||
```
|
||
|
||
用户级 scope 建议:
|
||
|
||
```json
|
||
{
|
||
"profile_read": true,
|
||
"profile_inject": false,
|
||
"life_stream_write": false,
|
||
"persona_chat": false
|
||
}
|
||
```
|
||
|
||
灰度顺序:
|
||
|
||
1. 本地开发环境。
|
||
2. 内部测试用户。
|
||
3. 103 内部账号。
|
||
4. 少量真实用户 opt-in。
|
||
5. 正式用户分批启用。
|
||
|
||
任何阶段都必须能一键关闭 AI Mind,不影响 Memind 主功能。
|
||
|
||
## 10. 风险清单
|
||
|
||
### 10.1 用户串号
|
||
|
||
风险:错误绑定导致 A 用户画像注入 B 用户聊天。
|
||
|
||
缓解:
|
||
|
||
- 独立绑定表。
|
||
- 所有调用带 `external_user_id=memind:<h5_user_id>`。
|
||
- 调用前校验登录用户与 binding。
|
||
- 审计 profile 来源。
|
||
|
||
### 10.2 记忆污染
|
||
|
||
风险:临时信息、错误信息、敏感内容进入 AI Mind 长期画像。
|
||
|
||
缓解:
|
||
|
||
- 先摘要,再投递。
|
||
- 明确 privacy_class。
|
||
- 只投递高价值事件。
|
||
- 支持用户删除、纠错、关闭。
|
||
|
||
### 10.3 主链路被拖慢
|
||
|
||
风险:AI Mind 响应慢导致 H5 或服务号回复变慢。
|
||
|
||
缓解:
|
||
|
||
- 画像缓存。
|
||
- 短超时。
|
||
- fail-open。
|
||
- life_stream 异步投递。
|
||
|
||
### 10.4 权限污染
|
||
|
||
风险:AI Mind 输出被误当成系统指令,影响工具或生产操作。
|
||
|
||
缓解:
|
||
|
||
- Profile Context 只作为低优先级用户画像。
|
||
- 禁止 AI Mind 返回工具权限。
|
||
- 禁止 AI Mind context 覆盖系统提示。
|
||
- 明确上下文模板边界。
|
||
|
||
### 10.5 隐私与合规
|
||
|
||
风险:用户不知道哪些内容被用于画像。
|
||
|
||
缓解:
|
||
|
||
- 用户授权开关。
|
||
- 可查看、可删除、可纠错。
|
||
- 敏感内容默认不投递。
|
||
- 审计记录可追踪。
|
||
|
||
## 11. 验收指标
|
||
|
||
技术指标:
|
||
|
||
- AI Mind 故障时 Memind 主链路正常。
|
||
- profile 拉取 P95 小于目标阈值,超时自动跳过。
|
||
- life_stream 投递失败不影响用户请求。
|
||
- 注入上下文长度受控。
|
||
- 所有调用可按用户追踪。
|
||
|
||
产品指标:
|
||
|
||
- 用户感觉回复更懂自己。
|
||
- 沟通风格更稳定。
|
||
- 不出现明显串号、幻觉画像、过度推断。
|
||
- 服务号和 H5 的普通使用不受影响。
|
||
|
||
安全指标:
|
||
|
||
- external token 不出现在前端。
|
||
- 生产操作权限不受 AI Mind 影响。
|
||
- 用户可以关闭 AI Mind 增强。
|
||
- 删除/纠错路径明确。
|
||
|
||
## 12. 不建议方案
|
||
|
||
不建议:
|
||
|
||
- 直接合并 Memind 和 AI Mind 项目。
|
||
- 直接共享数据库表。
|
||
- 直接把 AI Mind 接成 Memory V2 主 backend。
|
||
- 直接替换 pgvector 或 legacy conversation-memory。
|
||
- 默认让 AI Mind 接管 H5/服务号普通聊天。
|
||
- 每条服务号消息都同步完整原文。
|
||
- 让 AI Mind 直接触发工具、发布页面或写生产数据。
|
||
- 没有审计和用户级开关就面向全量生产用户启用。
|
||
|
||
## 13. 推荐下一步
|
||
|
||
在不写代码前,建议先完成这些设计决策:
|
||
|
||
1. 明确 AI Mind 的第一阶段只做 profile read,还是同时做 life_stream write。
|
||
2. 明确默认 persona 是“用户数字分身”还是“陪伴型助手人格”。
|
||
3. 明确哪些事件可以投递 AI Mind,哪些永远不投递。
|
||
4. 明确用户是否需要显式授权。
|
||
5. 明确 Profile Context 的最大长度和字段。
|
||
6. 明确审计日志中记录哪些信息。
|
||
7. 明确 103 灰度账号和回滚开关。
|
||
8. 明确 AI Mind 故障时的 UI 表现。
|
||
|
||
建议第一版实施只做:
|
||
|
||
```text
|
||
AI Mind profile read + 内部测试用户绑定 + 画像摘要展示
|
||
```
|
||
|
||
确认画像质量和身份绑定可靠后,再进入:
|
||
|
||
```text
|
||
摘要级 life_stream 投递 + 轻量聊天画像注入
|
||
```
|
||
|
||
这条路线最稳:既能让 AI Mind 开始产生价值,又不会撬动 Memind 现有生产功能体系。
|