# App 前台应用数据模型 ## 📋 模型列表 本目录包含所有前台用户应用相关的数据模型,与管理后台的 `system` 模块完全独立。 ### 1. 用户相关模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `app_user.go` | `AppUser` | `app_users` | 前台用户表 | | `app_user_session.go` | `AppUserSession` | `app_user_sessions` | 用户会话表 | ### 2. AI 角色相关模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_character.go` | `AICharacter` | `ai_characters` | AI 角色表 | | `ai_character.go` | `AppUserFavoriteCharacter` | `app_user_favorite_characters` | 用户收藏角色表 | ### 3. 对话相关模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_chat.go` | `AIChat` | `ai_chats` | 对话表 | | `ai_chat.go` | `AIChatMember` | `ai_chat_members` | 群聊成员表 | | `ai_message.go` | `AIMessage` | `ai_messages` | 消息表 | | `ai_message.go` | `AIMessageSwipe` | `ai_message_swipes` | 消息变体表 | ### 4. 向量记忆模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_memory.go` | `AIMemoryVector` | `ai_memory_vectors` | 向量记忆表(使用 pgvector) | ### 5. AI 服务配置模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_provider.go` | `AIProvider` | `ai_providers` | AI 提供商配置表 | | `ai_provider.go` | `AIModel` | `ai_models` | AI 模型配置表 | ### 6. 文件管理模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_file.go` | `AIFile` | `ai_files` | 文件表 | ### 7. 其他模型 | 文件 | 模型 | 表名 | 说明 | |------|------|------|------| | `ai_preset.go` | `AIPreset` | `ai_presets` | 对话预设表 | | `ai_world_info.go` | `AIWorldInfo` | `ai_world_info` | 世界书表 | | `ai_usage_stat.go` | `AIUsageStat` | `ai_usage_stats` | 使用统计表 | ## 🔧 使用说明 ### 1. 数据库自动迁移 所有模型已在 `initialize/gorm.go` 中注册,启动服务时会自动创建表: ```go // 在 RegisterTables() 函数中已注册 app.AppUser{}, app.AppUserSession{}, app.AICharacter{}, app.AppUserFavoriteCharacter{}, app.AIChat{}, app.AIChatMember{}, app.AIMessage{}, app.AIMessageSwipe{}, app.AIMemoryVector{}, app.AIProvider{}, app.AIModel{}, app.AIFile{}, app.AIPreset{}, app.AIWorldInfo{}, app.AIUsageStat{}, ``` ### 2. PostgreSQL 向量扩展 向量记忆功能依赖 `pgvector` 扩展,已在 `initialize/gorm_pgsql_extension.go` 中自动安装: ```sql CREATE EXTENSION IF NOT EXISTS vector; CREATE INDEX idx_memory_vectors_embedding ON ai_memory_vectors USING hnsw (embedding vector_cosine_ops); ``` ### 3. 外键关系 模型之间的关系已通过 GORM 标签定义: - `AppUser` ← `AppUserSession`(一对多) - `AppUser` ← `AICharacter`(一对多,创建者) - `AppUser` ← `AIChat`(一对多) - `AppUser` ← `AppUserFavoriteCharacter`(多对多,通过中间表) - `AICharacter` ← `AppUserFavoriteCharacter`(多对多,通过中间表) - `AICharacter` ← `AIChat`(一对多) - `AIChat` ← `AIMessage`(一对多) - `AIChat` ← `AIChatMember`(多对多,通过中间表) - `AICharacter` ← `AIChatMember`(多对多,通过中间表) - `AIMessage` ← `AIMessageSwipe`(一对多) - `AIProvider` ← `AIModel`(一对多) ### 4. JSONB 字段 以下字段使用 PostgreSQL 的 JSONB 类型: - `AppUser.AISettings` - AI 相关配置 - `AppUser.Preferences` - 用户偏好设置 - `AICharacter.CardData` - 角色卡片数据 - `AICharacter.Tags` - 角色标签 - `AICharacter.ExampleMessages` - 消息示例 - `AIChat.Settings` - 对话设置 - `AIMessage.GenerationParams` - AI 生成参数 - `AIMessage.Metadata` - 消息元数据 - `AIMemoryVector.Metadata` - 记忆元数据 - `AIProvider.APIConfig` - API 配置 - `AIModel.Config` - 模型配置 - `AIFile.RelatedTo` - 文件关联对象 - `AIFile.Metadata` - 文件元数据 - `AIPreset.Config` - 预设配置 - `AIWorldInfo.TriggerConfig` - 触发条件配置 ### 5. 向量字段 `AIMemoryVector.Embedding` 使用 `pgvector.Vector` 类型,维度为 1536(OpenAI text-embedding-ada-002)。 ## ⚠️ 注意事项 1. **不要修改 system 包**:所有管理后台相关的模型在 `model/system/` 包中,**不要修改** 2. **表名前缀**: - 前台用户相关:`app_*` - AI 功能相关:`ai_*` - 系统管理相关:`sys_*`(不修改) 3. **UUID 生成**:`AppUser.UUID` 使用数据库自动生成(PostgreSQL 的 `gen_random_uuid()`) 4. **软删除**:所有模型继承 `global.GVA_MODEL`,自动支持软删除 5. **时间字段**:`CreatedAt`、`UpdatedAt`、`DeletedAt` 由 GORM 自动管理 ## 📊 ER 图关系 ``` AppUser (前台用户) ├── AppUserSession (会话) ├── AICharacter (创建的角色) ├── AIChat (对话) ├── AppUserFavoriteCharacter (收藏的角色) ├── AIMemoryVector (记忆) ├── AIProvider (AI 提供商配置) ├── AIFile (文件) ├── AIPreset (预设) ├── AIWorldInfo (世界书) └── AIUsageStat (使用统计) AICharacter (AI 角色) ├── AIChat (对话) ├── AIChatMember (群聊成员) ├── AppUserFavoriteCharacter (被收藏) └── AIMemoryVector (记忆) AIChat (对话) ├── AIMessage (消息) ├── AIChatMember (群聊成员) └── AIMemoryVector (记忆) AIMessage (消息) └── AIMessageSwipe (消息变体) AIProvider (AI 提供商) └── AIModel (AI 模型) ``` ## 🚀 快速开始 1. 确保 PostgreSQL 已安装 pgvector 扩展 2. 配置 `config.yaml` 中的数据库连接 3. 启动服务,AutoMigrate 会自动创建所有表 4. 检查日志确认表创建成功 ```bash # 启动服务 go run main.go # 查看日志 # [GVA] pgvector extension is ready # [GVA] vector indexes created successfully # [GVA] register table success ``` ## 📝 开发建议 1. 查询时使用预加载避免 N+1 问题: ```go db.Preload("User").Preload("Character").Find(&chats) ``` 2. 向量搜索示例: ```go db.Order("embedding <=> ?", queryVector).Limit(10).Find(&memories) ``` 3. JSONB 查询示例: ```go db.Where("ai_settings->>'model' = ?", "gpt-4").Find(&users) ``` --- **创建日期**: 2026-02-10 **维护者**: 开发团队