character.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. """
  2. AI角色模型
  3. """
  4. from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, JSON, ForeignKey
  5. from sqlalchemy.orm import relationship
  6. from sqlalchemy.sql import func
  7. from app.core.database import Base
  8. class Character(Base):
  9. """AI角色表"""
  10. __tablename__ = "characters"
  11. id = Column(Integer, primary_key=True, index=True)
  12. user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
  13. # 基础信息
  14. name = Column(String(100), nullable=False)
  15. avatar_url = Column(String(500))
  16. personality = Column(Text) # 性格描述
  17. background_story = Column(Text) # 背景故事
  18. system_prompt = Column(Text, nullable=False) # 生成的系统提示词
  19. # AI配置
  20. llm_provider = Column(String(50), default="openai") # openai | claude | qwen | ernie
  21. llm_model = Column(String(100), default="gpt-3.5-turbo")
  22. config = Column(JSON, default={}) # temperature, max_tokens等
  23. # 语言
  24. language = Column(String(10), default="en")
  25. # 状态
  26. is_active = Column(Boolean, default=True)
  27. is_preset = Column(Boolean, default=False) # 是否为预设角色
  28. created_at = Column(DateTime(timezone=True), server_default=func.now())
  29. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  30. # 关系
  31. user = relationship("User", back_populates="characters")
  32. conversations = relationship("Conversation", back_populates="character", cascade="all, delete-orphan")
  33. affection_scores = relationship("AffectionScore", back_populates="character", cascade="all, delete-orphan")