feat: chat uploads, vision turn isolation, and MindSpace agent improvements
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>
This commit is contained in:
@@ -0,0 +1,526 @@
|
||||
# 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 现有生产功能体系。
|
||||
Reference in New Issue
Block a user