""" 知识库文档模型 """ from sqlalchemy import Column, String, Text, Integer, Boolean, DateTime, BigInteger from app.base_model import BaseModel class KnowledgeDocument(BaseModel): """ 知识库文档 记录上传到知识库的文档信息及处理状态 """ __tablename__ = "ai_knowledge_document" knowledge_base_id = Column(String(21), nullable=False, index=True, comment="所属知识库ID(逻辑外键关联ai_knowledge_base)") file_id = Column(String(21), nullable=True, comment="关联文件ID(逻辑外键关联core_file_manager)") name = Column(String(255), nullable=False, comment="文档名称") file_type = Column(String(20), nullable=True, comment="文件类型: pdf/docx/txt/md/xlsx/csv/html/pptx") file_size = Column(BigInteger, default=0, comment="文件大小(字节)") content_hash = Column(String(64), nullable=True, index=True, comment="内容MD5(用于去重)") # 处理结果 segment_count = Column(Integer, default=0, comment="分段数量") token_count = Column(Integer, default=0, comment="Token 总数") char_count = Column(Integer, default=0, comment="字符总数") # 处理状态 status = Column(String(20), default="pending", index=True, comment="状态: pending/indexing/completed/failed/disabled") error_message = Column(Text, nullable=True, comment="错误信息") indexing_started_at = Column(DateTime, nullable=True, comment="索引开始时间") indexing_completed_at = Column(DateTime, nullable=True, comment="索引完成时间") # 去重 duplicate_warning = Column(Text, nullable=True, comment="内容重复警告(跨知识库检测)") # 是否启用 enabled = Column(Boolean, default=True, comment="是否启用(禁用后不参与检索)")