92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
"""
|
||
虚拟用户模型
|
||
"""
|
||
from sqlalchemy import Column, Integer, String, DateTime, Boolean, Enum, Text, JSON, Float
|
||
from sqlalchemy.sql import func
|
||
from enum import Enum as PyEnum
|
||
import enum
|
||
|
||
from .base import Base
|
||
|
||
|
||
class ActivityLevel(str, enum.Enum):
|
||
"""活跃度枚举"""
|
||
LOW = "low" # 低:每日 1-2 次
|
||
MEDIUM = "medium" # 中:每日 2-5 次
|
||
HIGH = "high" # 高:每日 5-10 次
|
||
|
||
|
||
class UserStatus(str, enum.Enum):
|
||
"""用户状态枚举"""
|
||
ACTIVE = "active" # 启用
|
||
DISABLED = "disabled" # 禁用
|
||
|
||
|
||
class VirtualUser(Base):
|
||
"""虚拟用户表"""
|
||
__tablename__ = "virtual_users"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True, comment="用户 ID")
|
||
|
||
# 基本信息
|
||
username = Column(String(100), unique=True, nullable=False, index=True, comment="用户名(账号)")
|
||
password = Column(String(200), nullable=False, comment="密码(加密存储)")
|
||
nickname = Column(String(100), nullable=False, comment="昵称")
|
||
avatar_url = Column(String(500), comment="头像 URL")
|
||
|
||
# 人格特征
|
||
writing_style = Column(String(50), comment="写作风格")
|
||
activity_level = Column(Enum(ActivityLevel), default=ActivityLevel.MEDIUM, comment="活跃度")
|
||
persona_description = Column(Text, comment="人格描述(AI 生成)")
|
||
|
||
# 状态控制
|
||
status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, comment="状态")
|
||
is_logged_in = Column(Boolean, default=False, comment="是否已登录")
|
||
session_token = Column(String(500), comment="会话 Token(登录后)")
|
||
token_expire_time = Column(DateTime, comment="Token 过期时间")
|
||
|
||
# 互动统计
|
||
total_interactions = Column(Integer, default=0, comment="总互动次数")
|
||
today_comments = Column(Integer, default=0, comment="今日评论数")
|
||
today_replies = Column(Integer, default=0, comment="今日回复数")
|
||
last_interaction_time = Column(DateTime, comment="最后互动时间")
|
||
|
||
# 扩展信息
|
||
extra_info = Column(JSON, default=dict, comment="扩展信息")
|
||
|
||
# 时间戳
|
||
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")
|
||
|
||
def __repr__(self):
|
||
return f"<VirtualUser(id={self.id}, nickname='{self.nickname}', status='{self.status}')>"
|
||
|
||
|
||
class VirtualUserPersona(Base):
|
||
"""虚拟用户人格模板表"""
|
||
__tablename__ = "virtual_user_personas"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True, comment="ID")
|
||
|
||
# 人格特征
|
||
name = Column(String(100), unique=True, nullable=False, comment="人格名称")
|
||
description = Column(Text, comment="人格描述")
|
||
|
||
# 风格配置
|
||
writing_styles = Column(JSON, comment="写作风格列表")
|
||
personality_traits = Column(JSON, comment="性格特征列表")
|
||
speech_patterns = Column(JSON, comment="说话模式列表")
|
||
|
||
# AI 提示词
|
||
system_prompt = Column(Text, comment="系统提示词(用于 AI 生成)")
|
||
|
||
# 状态
|
||
is_active = Column(Boolean, default=True, comment="是否启用")
|
||
|
||
# 时间戳
|
||
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")
|
||
|
||
def __repr__(self):
|
||
return f"<VirtualUserPersona(id={self.id}, name='{self.name}')>"
|