生成时间:2026-01-09 18:53:39
使用模型:google/gemini-3-flash-preview
YOLOX 技术方案:数据模型设计 (V0.10)
本方案基于 React Native + Golang (Eino) + PostgreSQL/Supabase + Milvus 架构,针对用户冷启动、动态 Prompt 组装、Memory 系统及知识库需求进行数据建模。
1. 核心数据表设计
users (用户基础表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 用户唯一标识 | PRIMARY KEY, DEFAULT gen_random_uuid() |
| nickname | VARCHAR(64) | 用户昵称 | NOT NULL |
| avatar_url | TEXT | 头像存储地址 (R2) | - |
| created_at | TIMESTAMPTZ | 注册时间 | NOT NULL, DEFAULT NOW() |
| last_login | TIMESTAMPTZ | 最后登录时间 | - |
| is_onboarded | BOOLEAN | 是否完成冷启动问卷 | NOT NULL, DEFAULT FALSE |
onboarding_surveys (问卷配置表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 问卷 ID | PRIMARY KEY |
| title | VARCHAR(255) | 问卷标题 | NOT NULL |
| questions | JSONB | 题目列表 (含题干、选项、单多选类型) | NOT NULL |
| is_active | BOOLEAN | 是否启用 | DEFAULT TRUE |
| version | INTEGER | 版本号 | NOT NULL |
user_onboarding_responses (用户问卷结果表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 记录 ID | PRIMARY KEY |
| user_id | UUID | 用户 ID | FOREIGN KEY users.id |
| survey_id | UUID | 问卷 ID | FOREIGN KEY onboarding_surveys.id |
| answers | JSONB | 用户回答内容 (选项 ID 列表) | NOT NULL |
| created_at | TIMESTAMPTZ | 提交时间 | DEFAULT NOW() |
topics (话题配置表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 话题 ID | PRIMARY KEY |
| title | VARCHAR(128) | 话题标题 | NOT NULL |
| cover_image | TEXT | 话题封面图 (R2) | - |
| button_text | VARCHAR(32) | 按钮文案 | DEFAULT '开始对话' |
| priority | INTEGER | 权重级别 (用于 Banner 展示) | DEFAULT 0 |
| category | VARCHAR(64) | 话题分类 (关系/健康/人生) | INDEX |
| system_prompt_template | TEXT | 该话题的基础 System Prompt | NOT NULL |
| is_recommended | BOOLEAN | 是否作为冷启动推荐候选 | DEFAULT FALSE |
user_memories (用户记忆表 - Module 1)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| user_id | UUID | 用户 ID | PRIMARY KEY, FOREIGN KEY users.id |
| persona | JSONB | 用户画像 (年龄/职业/风格/核心困扰) | NOT NULL, DEFAULT '' |
| history_summary | TEXT | 历史对话全量总结 | - |
| information_boundary | JSONB | 已知信息列表 (避免重复提问) | NOT NULL, DEFAULT '[]' |
| updated_at | TIMESTAMPTZ | 最后更新时间 | DEFAULT NOW() |
conversations (会话管理表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 会话 ID | PRIMARY KEY |
| user_id | UUID | 用户 ID | FOREIGN KEY users.id, INDEX |
| topic_id | UUID | 关联话题 ID | FOREIGN KEY topics.id |
| title | VARCHAR(255) | 会话标题 (AI 自动生成或手动修改) | - |
| is_starred | BOOLEAN | 是否收藏 | DEFAULT FALSE |
| status | VARCHAR(20) | 状态 (active/archived) | DEFAULT 'active' |
| created_at | TIMESTAMPTZ | 创建时间 | INDEX |
| updated_at | TIMESTAMPTZ | 最后活跃时间 | INDEX |
messages (对话消息表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | 消息 ID | PRIMARY KEY |
| conversation_id | UUID | 会话 ID | FOREIGN KEY conversations.id, INDEX |
| role | VARCHAR(20) | 角色 (user/assistant/system) | NOT NULL |
| content | TEXT | 文本内容 | NOT NULL |
| audio_url | TEXT | 语音文件地址 (R2) | - |
| message_type | VARCHAR(20) | 类型 (text/voice/insight) | DEFAULT 'text' |
| metadata | JSONB | 扩展信息 (ASR 原始结果/Token 消耗等) | - |
| created_at | TIMESTAMPTZ | 发送时间 | DEFAULT NOW() |
insights (对话总结/Artifacts 表)
| 字段名 | 类型 | 说明 | 约束 |
|---|
| id | UUID | Insight ID | PRIMARY KEY |
| conversation_id | UUID | 会话 ID | FOREIGN KEY conversations.id |
| content | TEXT | 总结内容 (Markdown) | NOT NULL |
| user_feedback | INTEGER | 用户反馈 (1:有用, -1:无用, 0:未评价) | DEFAULT 0 |
| created_at | TIMESTAMPTZ | 生成时间 | DEFAULT NOW() |
2. 向量数据库设计 (Milvus)
knowledge_base (Module 2)
| 字段名 | 类型 | 说明 | 备注 |
|---|
| pk | Int64 | 主键 ID | 自动增长 |
| vector | FloatVector(1536) | 知识片段向量 | 使用 OpenAI text-embedding-3-small |
| content | String | 知识文本内容 | 原始文本 |
| topic_category | String | 话题分类标签 | 用于 Pre-filtering (如 "back_pain") |
| knowledge_type | String | 知识类型 | expert/case/skill |
| source_ref | String | 来源引用 | 书名/链接/脚本库 ID |
3. 关系与索引说明
- 一对一关系:
users 与 user_memories。每个用户拥有唯一的记忆画像,随对话增量更新。
- 一对多关系:
users -> conversations: 一个用户有多个历史会话。
conversations -> messages: 一个会话包含多条流式输出的消息。
conversations -> insights: 一个会话在不同阶段可能产生多个 Insight 组件。
- 多对多关系 (逻辑上):
topics 与 users。通过 conversations 表进行关联,记录用户参与过哪些话题。
- 核心索引:
conversations(user_id, is_starred, updated_at DESC): 用于侧边栏历史列表的高效渲染。
messages(conversation_id, created_at ASC): 用于对话页面的消息流加载。
user_onboarding_responses(user_id): 用于推荐引擎快速获取用户偏好。
4. 基础设施关联
- 对象存储 (Cloudflare R2): 存储
users.avatar_url、topics.cover_image 以及 messages.audio_url (用户语音原件)。
- RAG 检索: 后端 Golang (Eino) 在组装 Module 2 时,先根据
conversation.topic_id 获取分类,再在 Milvus 中进行相似度检索。
- Memory 更新: 异步任务监听
messages 写入,当 conversation 结束或达到一定轮数时,调用 LLM 提取信息并更新 user_memories。