mirror of
https://github.com/RYDE-WORK/Langchain-Chatchat.git
synced 2026-01-23 15:29:59 +08:00
* 新功能: - 知识库管理界面支持查看、编辑、删除向量库文档。暂不支持增加(aggrid添加新行比较麻烦,需要另外实现) - 去除知识库管理界面中重建知识库和删除知识库按钮,建议用户到终端命令操作 修复: - 所有与知识库名称、文件名称有关的数据库操作函数都改成大小写不敏感,所有路径统一为 posix 风格,避免因路径文本不一致导致数据重复和操作失效 (close #2232) 开发者: - 添加 update_docs_by_id 函数与 API 接口。当前仅支持 FAISS,暂时未用到,未将来对知识库做更细致的修改做准备 - 统一 DocumentWithScore 与 DocumentWithVsId - FAISS 返回的 Document.metadata 中包含 ID, 方便后续查找比对 - /knowledge_base/search_docs 接口支持 file_name, metadata 参数,可以据此检索文档 * fix bug
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
from server.db.models.knowledge_base_model import KnowledgeBaseModel
|
|
from server.db.session import with_session
|
|
|
|
|
|
@with_session
|
|
def add_kb_to_db(session, kb_name, kb_info, vs_type, embed_model):
|
|
# 创建知识库实例
|
|
kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
|
|
if not kb:
|
|
kb = KnowledgeBaseModel(kb_name=kb_name, kb_info=kb_info, vs_type=vs_type, embed_model=embed_model)
|
|
session.add(kb)
|
|
else: # update kb with new vs_type and embed_model
|
|
kb.kb_info = kb_info
|
|
kb.vs_type = vs_type
|
|
kb.embed_model = embed_model
|
|
return True
|
|
|
|
|
|
@with_session
|
|
def list_kbs_from_db(session, min_file_count: int = -1):
|
|
kbs = session.query(KnowledgeBaseModel.kb_name).filter(KnowledgeBaseModel.file_count > min_file_count).all()
|
|
kbs = [kb[0] for kb in kbs]
|
|
return kbs
|
|
|
|
|
|
@with_session
|
|
def kb_exists(session, kb_name):
|
|
kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
|
|
status = True if kb else False
|
|
return status
|
|
|
|
|
|
@with_session
|
|
def load_kb_from_db(session, kb_name):
|
|
kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
|
|
if kb:
|
|
kb_name, vs_type, embed_model = kb.kb_name, kb.vs_type, kb.embed_model
|
|
else:
|
|
kb_name, vs_type, embed_model = None, None, None
|
|
return kb_name, vs_type, embed_model
|
|
|
|
|
|
@with_session
|
|
def delete_kb_from_db(session, kb_name):
|
|
kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
|
|
if kb:
|
|
session.delete(kb)
|
|
return True
|
|
|
|
|
|
@with_session
|
|
def get_kb_detail(session, kb_name: str) -> dict:
|
|
kb: KnowledgeBaseModel = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
|
|
if kb:
|
|
return {
|
|
"kb_name": kb.kb_name,
|
|
"kb_info": kb.kb_info,
|
|
"vs_type": kb.vs_type,
|
|
"embed_model": kb.embed_model,
|
|
"file_count": kb.file_count,
|
|
"create_time": kb.create_time,
|
|
}
|
|
else:
|
|
return {}
|