mirror of
https://github.com/RYDE-WORK/Langchain-Chatchat.git
synced 2026-01-21 22:33:53 +08:00
数据库表发生变化,需要重建知识库 新功能 - 增加FileDocModel库表,存储知识文件与向量库Document ID对应关系以及元数据,便于检索向量库 - 增加FileDocModel对应的数据库操作函数(这些函数主要是给KBService调用,用户一般无需使用): - list_docs_from_db: 根据知识库名称、文件名称、元数据检索对应的Document IDs - delete_docs_from_db: 根据知识库名称、文件名称删除对应的file-doc映射 - add_docs_to_db: 添加对应的file-doc映射 - KBService增加list_docs方法,可以根据文件名、元数据检索Document。当前仅支持FAISS,待milvus/pg实现get_doc_by_id方法后即自动支持。 - 去除server.utils对torch的依赖 待完善 - milvus/pg kb_service需要实现get_doc_by_id方法
41 lines
2.0 KiB
Python
41 lines
2.0 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, Float, Boolean, JSON, func
|
|
|
|
from server.db.base import Base
|
|
|
|
|
|
class KnowledgeFileModel(Base):
|
|
"""
|
|
知识文件模型
|
|
"""
|
|
__tablename__ = 'knowledge_file'
|
|
id = Column(Integer, primary_key=True, autoincrement=True, comment='知识文件ID')
|
|
file_name = Column(String(255), comment='文件名')
|
|
file_ext = Column(String(10), comment='文件扩展名')
|
|
kb_name = Column(String(50), comment='所属知识库名称')
|
|
document_loader_name = Column(String(50), comment='文档加载器名称')
|
|
text_splitter_name = Column(String(50), comment='文本分割器名称')
|
|
file_version = Column(Integer, default=1, comment='文件版本')
|
|
file_mtime = Column(Float, default=0.0, comment="文件修改时间")
|
|
file_size = Column(Integer, default=0, comment="文件大小")
|
|
custom_docs = Column(Boolean, default=False, comment="是否自定义docs")
|
|
docs_count = Column(Integer, default=0, comment="切分文档数量")
|
|
create_time = Column(DateTime, default=func.now(), comment='创建时间')
|
|
|
|
def __repr__(self):
|
|
return f"<KnowledgeFile(id='{self.id}', file_name='{self.file_name}', file_ext='{self.file_ext}', kb_name='{self.kb_name}', document_loader_name='{self.document_loader_name}', text_splitter_name='{self.text_splitter_name}', file_version='{self.file_version}', create_time='{self.create_time}')>"
|
|
|
|
|
|
class FileDocModel(Base):
|
|
"""
|
|
文件-向量库文档模型
|
|
"""
|
|
__tablename__ = 'file_doc'
|
|
id = Column(Integer, primary_key=True, autoincrement=True, comment='ID')
|
|
kb_name = Column(String(50), comment='知识库名称')
|
|
file_name = Column(String(255), comment='文件名称')
|
|
doc_id = Column(String(50), comment="向量库文档ID")
|
|
meta_data = Column(JSON, default={})
|
|
|
|
def __repr__(self):
|
|
return f"<FileDoc(id='{self.id}', kb_name='{self.kb_name}', file_name='{self.file_name}', doc_id='{self.doc_id}', metadata='{self.metadata}')>"
|