102 lines
3.4 KiB
Go
102 lines
3.4 KiB
Go
package model
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
// Persona 人设结构
|
||
type Persona struct {
|
||
ID uuid.UUID `json:"id" gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
|
||
UserID int64 `json:"user_id" gorm:"index;not null"`
|
||
Name string `json:"name" gorm:"type:varchar(64);not null"`
|
||
Description string `json:"description" gorm:"type:text"`
|
||
AvatarURL string `json:"avatar_url" gorm:"type:varchar(512)"`
|
||
TalkStyle string `json:"talk_style" gorm:"type:varchar(256)"`
|
||
SystemPrompt string `json:"system_prompt" gorm:"type:text;not null"`
|
||
IsDefault bool `json:"is_default" gorm:"default:false"`
|
||
CreatedAt int64 `json:"created_at" gorm:"autoCreateTime:milli"`
|
||
UpdatedAt int64 `json:"updated_at" gorm:"autoUpdateTime:milli"`
|
||
}
|
||
|
||
// TableName 指定表名
|
||
func (Persona) TableName() string {
|
||
return "ai_personas"
|
||
}
|
||
|
||
// UserMemory 用户长期记忆
|
||
type UserMemory struct {
|
||
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
|
||
UserID int64 `json:"user_id" gorm:"index;not null"`
|
||
Content string `json:"content" gorm:"type:text;not null"`
|
||
Keywords []string `json:"keywords" gorm:"type:text[]"`
|
||
Weight int `json:"weight" gorm:"default:50"`
|
||
IsCore bool `json:"is_core" gorm:"default:false"`
|
||
CreatedAt int64 `json:"created_at" gorm:"autoCreateTime:milli"`
|
||
UpdatedAt int64 `json:"updated_at" gorm:"autoUpdateTime:milli"`
|
||
}
|
||
|
||
// TableName 指定表名
|
||
func (UserMemory) TableName() string {
|
||
return "ai_user_memories"
|
||
}
|
||
|
||
// Config 配置结构
|
||
type Config struct {
|
||
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
|
||
ConfigKey string `json:"config_key" gorm:"type:varchar(128);uniqueIndex;not null"`
|
||
ConfigValue string `json:"config_value" gorm:"type:text;not null"`
|
||
ConfigType string `json:"config_type" gorm:"type:varchar(32);default:string"`
|
||
Category string `json:"category" gorm:"type:varchar(64);index"`
|
||
Description string `json:"description" gorm:"type:varchar(256)"`
|
||
IsEncrypted bool `json:"is_encrypted" gorm:"default:false"`
|
||
UpdatedAt int64 `json:"updated_at" gorm:"autoUpdateTime:milli"`
|
||
CreatedAt int64 `json:"created_at" gorm:"autoCreateTime:milli"`
|
||
}
|
||
|
||
// TableName 指定表名
|
||
func (Config) TableName() string {
|
||
return "ai_chat_configs"
|
||
}
|
||
|
||
// Message 对话消息
|
||
type Message struct {
|
||
Role string `json:"role"`
|
||
Content string `json:"content"`
|
||
}
|
||
|
||
// ChatContext 短期上下文(Redis 存储)
|
||
type ChatContext struct {
|
||
SessionID string `json:"session_id"`
|
||
Messages []Message `json:"messages"`
|
||
PersonaID string `json:"persona_id"`
|
||
CreatedAt time.Time `json:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at"`
|
||
}
|
||
|
||
// PersonaInfo 人设信息(API 返回)
|
||
type PersonaInfo struct {
|
||
ID string `json:"id"`
|
||
Name string `json:"name"`
|
||
Description string `json:"description"`
|
||
AvatarURL string `json:"avatar_url"`
|
||
TalkStyle string `json:"talk_style"`
|
||
IsDefault bool `json:"is_default"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
UpdatedAt int64 `json:"updated_at"`
|
||
}
|
||
|
||
// ToPersonaInfo converts Persona to PersonaInfo
|
||
func (p *Persona) ToPersonaInfo() PersonaInfo {
|
||
return PersonaInfo{
|
||
ID: p.ID.String(),
|
||
Name: p.Name,
|
||
Description: p.Description,
|
||
AvatarURL: p.AvatarURL,
|
||
TalkStyle: p.TalkStyle,
|
||
IsDefault: p.IsDefault,
|
||
CreatedAt: p.CreatedAt,
|
||
UpdatedAt: p.UpdatedAt,
|
||
}
|
||
} |