Build lightweight AI agent admin
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""
|
||||
知识库分段模型
|
||||
"""
|
||||
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'),
|
||||
)
|
||||
Reference in New Issue
Block a user