mirror of
https://github.com/RYDE-WORK/Langchain-Chatchat.git
synced 2026-01-19 13:23:16 +08:00
新功能: - 优化 PDF 文件的 OCR,过滤无意义的小图片 by @liunux4odoo #2525 - 支持 Gemini 在线模型 by @yhfgyyf #2630 - 支持 GLM4 在线模型 by @zRzRzRzRzRzRzR - elasticsearch更新https连接 by @xldistance #2390 - 增强对PPT、DOC知识库文件的OCR识别 by @596192804 #2013 - 更新 Agent 对话功能 by @zRzRzRzRzRzRzR - 每次创建对象时从连接池获取连接,避免每次执行方法时都新建连接 by @Lijia0 #2480 - 实现 ChatOpenAI 判断token有没有超过模型的context上下文长度 by @glide-the - 更新运行数据库报错和项目里程碑 by @zRzRzRzRzRzRzR #2659 - 更新配置文件/文档/依赖 by @imClumsyPanda @zRzRzRzRzRzRzR - 添加日文版 readme by @eltociear #2787 修复: - langchain 更新后,PGVector 向量库连接错误 by @HALIndex #2591 - Minimax's model worker 错误 by @xyhshen - ES库无法向量检索.添加mappings创建向量索引 by MSZheng20 #2688
66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
import urllib
|
|
from server.utils import BaseResponse, ListResponse
|
|
from server.knowledge_base.utils import validate_kb_name
|
|
from server.knowledge_base.kb_service.base import KBServiceFactory
|
|
from server.db.repository.knowledge_base_repository import list_kbs_from_db
|
|
from configs import EMBEDDING_MODEL, logger, log_verbose
|
|
from fastapi import Body
|
|
|
|
|
|
def list_kbs():
|
|
# Get List of Knowledge Base
|
|
return ListResponse(data=list_kbs_from_db())
|
|
|
|
|
|
def create_kb(knowledge_base_name: str = Body(..., examples=["samples"]),
|
|
vector_store_type: str = Body("faiss"),
|
|
embed_model: str = Body(EMBEDDING_MODEL),
|
|
) -> BaseResponse:
|
|
# Create selected knowledge base
|
|
if not validate_kb_name(knowledge_base_name):
|
|
return BaseResponse(code=403, msg="Don't attack me")
|
|
if knowledge_base_name is None or knowledge_base_name.strip() == "":
|
|
return BaseResponse(code=404, msg="知识库名称不能为空,请重新填写知识库名称")
|
|
|
|
kb = KBServiceFactory.get_service_by_name(knowledge_base_name)
|
|
if kb is not None:
|
|
return BaseResponse(code=404, msg=f"已存在同名知识库 {knowledge_base_name}")
|
|
|
|
kb = KBServiceFactory.get_service(knowledge_base_name, vector_store_type, embed_model)
|
|
try:
|
|
kb.create_kb()
|
|
except Exception as e:
|
|
msg = f"创建知识库出错: {e}"
|
|
logger.error(f'{e.__class__.__name__}: {msg}',
|
|
exc_info=e if log_verbose else None)
|
|
return BaseResponse(code=500, msg=msg)
|
|
|
|
return BaseResponse(code=200, msg=f"已新增知识库 {knowledge_base_name}")
|
|
|
|
|
|
def delete_kb(
|
|
knowledge_base_name: str = Body(..., examples=["samples"])
|
|
) -> BaseResponse:
|
|
# Delete selected knowledge base
|
|
if not validate_kb_name(knowledge_base_name):
|
|
return BaseResponse(code=403, msg="Don't attack me")
|
|
knowledge_base_name = urllib.parse.unquote(knowledge_base_name)
|
|
|
|
kb = KBServiceFactory.get_service_by_name(knowledge_base_name)
|
|
|
|
if kb is None:
|
|
return BaseResponse(code=404, msg=f"未找到知识库 {knowledge_base_name}")
|
|
|
|
try:
|
|
status = kb.clear_vs()
|
|
status = kb.drop_kb()
|
|
if status:
|
|
return BaseResponse(code=200, msg=f"成功删除知识库 {knowledge_base_name}")
|
|
except Exception as e:
|
|
msg = f"删除知识库时出现意外: {e}"
|
|
logger.error(f'{e.__class__.__name__}: {msg}',
|
|
exc_info=e if log_verbose else None)
|
|
return BaseResponse(code=500, msg=msg)
|
|
|
|
return BaseResponse(code=500, msg=f"删除知识库失败 {knowledge_base_name}")
|