跳到主要内容

版本 0.10 数据模型设计

生成时间: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 (用户基础表)

字段名类型说明约束
idUUID用户唯一标识PRIMARY KEY, DEFAULT gen_random_uuid()
nicknameVARCHAR(64)用户昵称NOT NULL
avatar_urlTEXT头像存储地址 (R2)-
created_atTIMESTAMPTZ注册时间NOT NULL, DEFAULT NOW()
last_loginTIMESTAMPTZ最后登录时间-
is_onboardedBOOLEAN是否完成冷启动问卷NOT NULL, DEFAULT FALSE

onboarding_surveys (问卷配置表)

字段名类型说明约束
idUUID问卷 IDPRIMARY KEY
titleVARCHAR(255)问卷标题NOT NULL
questionsJSONB题目列表 (含题干、选项、单多选类型)NOT NULL
is_activeBOOLEAN是否启用DEFAULT TRUE
versionINTEGER版本号NOT NULL

user_onboarding_responses (用户问卷结果表)

字段名类型说明约束
idUUID记录 IDPRIMARY KEY
user_idUUID用户 IDFOREIGN KEY users.id
survey_idUUID问卷 IDFOREIGN KEY onboarding_surveys.id
answersJSONB用户回答内容 (选项 ID 列表)NOT NULL
created_atTIMESTAMPTZ提交时间DEFAULT NOW()

topics (话题配置表)

字段名类型说明约束
idUUID话题 IDPRIMARY KEY
titleVARCHAR(128)话题标题NOT NULL
cover_imageTEXT话题封面图 (R2)-
button_textVARCHAR(32)按钮文案DEFAULT '开始对话'
priorityINTEGER权重级别 (用于 Banner 展示)DEFAULT 0
categoryVARCHAR(64)话题分类 (关系/健康/人生)INDEX
system_prompt_templateTEXT该话题的基础 System PromptNOT NULL
is_recommendedBOOLEAN是否作为冷启动推荐候选DEFAULT FALSE

user_memories (用户记忆表 - Module 1)

字段名类型说明约束
user_idUUID用户 IDPRIMARY KEY, FOREIGN KEY users.id
personaJSONB用户画像 (年龄/职业/风格/核心困扰)NOT NULL, DEFAULT ''
history_summaryTEXT历史对话全量总结-
information_boundaryJSONB已知信息列表 (避免重复提问)NOT NULL, DEFAULT '[]'
updated_atTIMESTAMPTZ最后更新时间DEFAULT NOW()

conversations (会话管理表)

字段名类型说明约束
idUUID会话 IDPRIMARY KEY
user_idUUID用户 IDFOREIGN KEY users.id, INDEX
topic_idUUID关联话题 IDFOREIGN KEY topics.id
titleVARCHAR(255)会话标题 (AI 自动生成或手动修改)-
is_starredBOOLEAN是否收藏DEFAULT FALSE
statusVARCHAR(20)状态 (active/archived)DEFAULT 'active'
created_atTIMESTAMPTZ创建时间INDEX
updated_atTIMESTAMPTZ最后活跃时间INDEX

messages (对话消息表)

字段名类型说明约束
idUUID消息 IDPRIMARY KEY
conversation_idUUID会话 IDFOREIGN KEY conversations.id, INDEX
roleVARCHAR(20)角色 (user/assistant/system)NOT NULL
contentTEXT文本内容NOT NULL
audio_urlTEXT语音文件地址 (R2)-
message_typeVARCHAR(20)类型 (text/voice/insight)DEFAULT 'text'
metadataJSONB扩展信息 (ASR 原始结果/Token 消耗等)-
created_atTIMESTAMPTZ发送时间DEFAULT NOW()

insights (对话总结/Artifacts 表)

字段名类型说明约束
idUUIDInsight IDPRIMARY KEY
conversation_idUUID会话 IDFOREIGN KEY conversations.id
contentTEXT总结内容 (Markdown)NOT NULL
user_feedbackINTEGER用户反馈 (1:有用, -1:无用, 0:未评价)DEFAULT 0
created_atTIMESTAMPTZ生成时间DEFAULT NOW()

2. 向量数据库设计 (Milvus)

knowledge_base (Module 2)

字段名类型说明备注
pkInt64主键 ID自动增长
vectorFloatVector(1536)知识片段向量使用 OpenAI text-embedding-3-small
contentString知识文本内容原始文本
topic_categoryString话题分类标签用于 Pre-filtering (如 "back_pain")
knowledge_typeString知识类型expert/case/skill
source_refString来源引用书名/链接/脚本库 ID

3. 关系与索引说明

  1. 一对一关系: usersuser_memories。每个用户拥有唯一的记忆画像,随对话增量更新。
  2. 一对多关系:
    • users -> conversations: 一个用户有多个历史会话。
    • conversations -> messages: 一个会话包含多条流式输出的消息。
    • conversations -> insights: 一个会话在不同阶段可能产生多个 Insight 组件。
  3. 多对多关系 (逻辑上): topicsusers。通过 conversations 表进行关联,记录用户参与过哪些话题。
  4. 核心索引:
    • conversations(user_id, is_starred, updated_at DESC): 用于侧边栏历史列表的高效渲染。
    • messages(conversation_id, created_at ASC): 用于对话页面的消息流加载。
    • user_onboarding_responses(user_id): 用于推荐引擎快速获取用户偏好。

4. 基础设施关联

  • 对象存储 (Cloudflare R2): 存储 users.avatar_urltopics.cover_image 以及 messages.audio_url (用户语音原件)。
  • RAG 检索: 后端 Golang (Eino) 在组装 Module 2 时,先根据 conversation.topic_id 获取分类,再在 Milvus 中进行相似度检索。
  • Memory 更新: 异步任务监听 messages 写入,当 conversation 结束或达到一定轮数时,调用 LLM 提取信息并更新 user_memories