🎨 重构用户端前端为vue开发,完善基础类和角色相关接口
This commit is contained in:
213
server/model/app/README.md
Normal file
213
server/model/app/README.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# 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
|
||||
**维护者**: 开发团队
|
||||
Reference in New Issue
Block a user