59 lines
2.2 KiB
Go
59 lines
2.2 KiB
Go
package app
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/datatypes"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// Conversation 对话会话模型
|
|
type Conversation struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
UserID uint `gorm:"index;not null" json:"userId"` // 所属用户ID
|
|
CharacterID uint `gorm:"index;not null" json:"characterId"` // 角色卡ID
|
|
Title string `gorm:"type:varchar(200)" json:"title"` // 对话标题
|
|
|
|
// 对话配置
|
|
PresetID *uint `gorm:"index" json:"presetId"` // 使用的预设ID
|
|
WorldbookID *uint `gorm:"index" json:"worldbookId"` // 使用的世界书ID
|
|
AIProvider string `gorm:"type:varchar(50)" json:"aiProvider"` // AI提供商 (openai/anthropic)
|
|
Model string `gorm:"type:varchar(100)" json:"model"` // 使用的模型
|
|
Settings datatypes.JSON `gorm:"type:jsonb" json:"settings"` // 对话设置 (temperature等)
|
|
WorldbookEnabled bool `gorm:"default:false" json:"worldbookEnabled"` // 是否启用世界书
|
|
|
|
// 统计信息
|
|
MessageCount int `gorm:"default:0" json:"messageCount"` // 消息数量
|
|
TokenCount int `gorm:"default:0" json:"tokenCount"` // Token使用量
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (Conversation) TableName() string {
|
|
return "conversations"
|
|
}
|
|
|
|
// Message 消息模型
|
|
type Message struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
ConversationID uint `gorm:"index;not null" json:"conversationId"` // 所属对话ID
|
|
Role string `gorm:"type:varchar(20);not null" json:"role"` // 角色 (user/assistant/system)
|
|
Content string `gorm:"type:text;not null" json:"content"` // 消息内容
|
|
|
|
// 元数据
|
|
TokenCount int `gorm:"default:0" json:"tokenCount"` // Token数量
|
|
Metadata datatypes.JSON `gorm:"type:jsonb" json:"metadata"` // 额外元数据
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (Message) TableName() string {
|
|
return "messages"
|
|
}
|