RAGflow/management/server/routes/knowledgebases/routes.py

197 lines
7.2 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 flask import Blueprint, request
from services.knowledgebases.service import KnowledgebaseService
from utils import success_response, error_response
from .. import knowledgebase_bp
@knowledgebase_bp.route('', methods=['GET'])
def get_knowledgebase_list():
"""获取知识库列表"""
try:
params = {
'page': int(request.args.get('currentPage', 1)),
'size': int(request.args.get('size', 10)),
'name': request.args.get('name', '')
}
result = KnowledgebaseService.get_knowledgebase_list(**params)
return success_response(result)
except ValueError as e:
return error_response("参数类型错误", code=400)
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/<string:kb_id>', methods=['GET'])
def get_knowledgebase_detail(kb_id):
"""获取知识库详情"""
try:
knowledgebase = KnowledgebaseService.get_knowledgebase_detail(
kb_id=kb_id
)
if not knowledgebase:
return error_response('知识库不存在', code=404)
return success_response(knowledgebase)
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('', methods=['POST'])
def create_knowledgebase():
"""创建知识库"""
try:
data = request.json
if not data.get('name'):
return error_response('知识库名称不能为空', code=400)
# 移除 created_by 参数
kb = KnowledgebaseService.create_knowledgebase(**data)
return success_response(kb, "创建成功", code=0)
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/<string:kb_id>', methods=['PUT'])
def update_knowledgebase(kb_id):
"""更新知识库"""
try:
data = request.json
kb = KnowledgebaseService.update_knowledgebase(
kb_id=kb_id,
**data
)
if not kb:
return error_response('知识库不存在', code=404)
return success_response(kb)
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/<string:kb_id>', methods=['DELETE'])
def delete_knowledgebase(kb_id):
"""删除知识库"""
try:
result = KnowledgebaseService.delete_knowledgebase(
kb_id=kb_id
)
if not result:
return error_response('知识库不存在', code=404)
return success_response(message='删除成功')
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/batch', methods=['DELETE'])
def batch_delete_knowledgebase():
"""批量删除知识库"""
try:
data = request.json
if not data or not data.get('ids'):
return error_response('请选择要删除的知识库', code=400)
result = KnowledgebaseService.batch_delete_knowledgebase(
kb_ids=data['ids']
)
return success_response(message=f'成功删除 {result} 个知识库')
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/<string:kb_id>/documents', methods=['GET'])
def get_knowledgebase_documents(kb_id):
"""获取知识库下的文档列表"""
try:
params = {
'kb_id': kb_id,
'page': int(request.args.get('currentPage', 1)),
'size': int(request.args.get('size', 10)),
'name': request.args.get('name', '')
}
result = KnowledgebaseService.get_knowledgebase_documents(**params)
return success_response(result)
except ValueError as e:
return error_response("参数类型错误", code=400)
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/<string:kb_id>/documents', methods=['POST'])
def add_documents_to_knowledgebase(kb_id):
"""添加文档到知识库"""
try:
print(f"[DEBUG] 接收到添加文档请求kb_id: {kb_id}")
data = request.json
if not data:
print("[ERROR] 请求数据为空")
return error_response('请求数据不能为空', code=400)
file_ids = data.get('file_ids', [])
print(f"[DEBUG] 接收到的file_ids: {file_ids}, 类型: {type(file_ids)}")
try:
result = KnowledgebaseService.add_documents_to_knowledgebase(
kb_id=kb_id,
file_ids=file_ids
)
print(f"[DEBUG] 服务层处理成功,结果: {result}")
return success_response(
data=result,
message="添加成功",
code=201
)
except Exception as service_error:
print(f"[ERROR] 服务层错误详情: {str(service_error)}")
import traceback
traceback.print_exc()
return error_response(str(service_error), code=500)
except Exception as e:
print(f"[ERROR] 路由层错误详情: {str(e)}")
import traceback
traceback.print_exc()
return error_response(str(e), code=500)
@knowledgebase_bp.route('/documents/<string:doc_id>', methods=['DELETE', 'OPTIONS'])
def delete_document(doc_id):
"""删除文档"""
# 处理 OPTIONS 预检请求
if request.method == 'OPTIONS':
response = success_response({})
# 添加 CORS 相关头
response.headers.add('Access-Control-Allow-Methods', 'DELETE')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
return response
try:
KnowledgebaseService.delete_document(doc_id)
return success_response(message="删除成功")
except Exception as e:
return error_response(str(e))
@knowledgebase_bp.route('/documents/<doc_id>/parse', methods=['POST'])
def parse_document(doc_id):
"""开始解析文档"""
# 处理 OPTIONS 预检请求
if request.method == 'OPTIONS':
response = success_response({})
# 添加 CORS 相关头
response.headers.add('Access-Control-Allow-Methods', 'POST')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
return response
try:
result = KnowledgebaseService.async_parse_document(doc_id)
return success_response(data=result)
except Exception as e:
return error_response(str(e), code=500)
@knowledgebase_bp.route('/documents/<doc_id>/parse/progress', methods=['GET'])
def get_parse_progress(doc_id):
"""获取文档解析进度"""
# 处理 OPTIONS 预检请求
if request.method == 'OPTIONS':
response = success_response({})
# 添加 CORS 相关头
response.headers.add('Access-Control-Allow-Methods', 'GET')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
return response
try:
result = KnowledgebaseService.get_document_parse_progress(doc_id)
if isinstance(result, dict) and 'error' in result:
return error_response(result['error'], code=404)
return success_response(data=result)
except Exception as e:
current_app.logger.error(f"获取解析进度失败: {str(e)}")
return error_response("解析进行中,请稍后重试", code=202)