Files
ai-agent-admin/backend-fastapi/ai_platform/knowledge/models/segment_model.py
T
2026-06-08 18:14:59 +08:00

48 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
知识库分段模型
"""
from sqlalchemy import Column, String, Text, Integer, Boolean, JSON, Index
from app.base_model import BaseModel
class KnowledgeSegment(BaseModel):
"""
知识库分段(Chunk
文档经过分块后的最小检索单元
向量数据存储在 Qdrant 向量数据库中,此表只存业务数据
"""
__tablename__ = "ai_knowledge_segment"
knowledge_base_id = Column(String(21), nullable=False, index=True, comment="所属知识库ID(逻辑外键关联ai_knowledge_base")
document_id = Column(String(21), nullable=False, index=True, comment="所属文档ID(逻辑外键关联ai_knowledge_document")
# 内容
position = Column(Integer, default=0, comment="在文档中的位置序号")
content = Column(Text, nullable=False, comment="分段文本内容")
answer = Column(Text, nullable=True, comment="Q&A 模式的答案内容")
token_count = Column(Integer, default=0, comment="Token 数")
char_count = Column(Integer, default=0, comment="字符数")
word_count = Column(Integer, default=0, comment="词数")
# 元数据
page_number = Column(Integer, nullable=True, comment="来源页码(PDF/PPT")
keywords = Column(JSON, nullable=True, comment="关键词列表(用于全文检索增强)")
extra_metadata = Column(JSON, nullable=True, comment="元数据(标题/来源等)")
# 向量化状态(向量数据存在 Qdrant 中,这里只记录状态)
embedding_status = Column(String(20), default="pending", comment="向量化状态: pending/completed/failed")
# 父子分段(Small-to-Big
parent_segment_id = Column(String(21), nullable=True, index=True, comment="父分段ID(逻辑外键,用于 Small-to-Big 检索)")
# 状态
enabled = Column(Boolean, default=True, comment="是否启用(禁用后不参与检索)")
hit_count = Column(Integer, default=0, comment="命中次数")
__table_args__ = (
Index('idx_segment_kb_doc', 'knowledge_base_id', 'document_id'),
Index('idx_segment_kb_enabled', 'knowledge_base_id', 'enabled'),
)