'''
知识段管理模块api
'''
from flask import jsonify, request
from flask import Blueprint
from utils.auth import validate_user, validate_permissions
from utils.web_utils import get_req_para, validate_params
from utils.common_utils import gen_json_response
from web_apps.rag.services.chunk_api_services import ChunkApiService
from web_apps.rag.services.rag_service import train_qa_info, get_knowledge
chunk_bp = Blueprint('chunk', __name__)
@chunk_bp.route('/retrieval', methods=['GET'])
@validate_user
@validate_permissions([])
def chunk_retrieval_list():
'''
检索查询接口
'''
req_dict = get_req_para(request)
verify_dict = {}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
query = req_dict.get('query')
if query in [None, '']:
res_data = {
'total': 0,
'records': []
}
return gen_json_response(res_data)
documents = get_knowledge(query, req_dict, res_type='documents')
print(documents)
data_li = [{'page_content': i.page_content, **i.metadata} for i in documents]
print(data_li)
res_data = {
'total': len(documents),
'records': data_li
}
return gen_json_response(res_data)
@chunk_bp.route('/list', methods=['GET'])
@validate_user
@validate_permissions([])
def chunk_list():
'''
列表查询接口
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.get_obj_list(req_dict)
return jsonify(res_data)
@chunk_bp.route('/queryById', methods=['GET'])
@validate_user
@validate_permissions([])
def chunk_detail():
'''
详情
'''
req_dict = get_req_para(request)
verify_dict = {
"id": {
"name": "id",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.get_obj_detail(req_dict)
return jsonify(res_data)
@chunk_bp.route('/add', methods=['POST'])
@validate_user
@validate_permissions([])
def chunk_add():
'''
添加
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.add_obj(req_dict)
return jsonify(res_data)
@chunk_bp.route('/edit', methods=['POST', 'PUT'])
@validate_user
@validate_permissions([])
def chunk_edit():
'''
编辑
'''
req_dict = get_req_para(request)
verify_dict = {
"id": {
"name": "id",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.edit_obj(req_dict)
return jsonify(res_data)
@chunk_bp.route('/delete', methods=['POST', 'DELETE'])
@validate_user
@validate_permissions([])
def chunk_delete():
'''
删除
'''
req_dict = get_req_para(request)
verify_dict = {
"id": {
"name": "id",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.delete_obj(req_dict)
return jsonify(res_data)
@chunk_bp.route('/deleteBatch', methods=['POST', 'DELETE'])
@validate_user
@validate_permissions([])
def chunk_deleteBatch():
'''
批量删除
'''
req_dict = get_req_para(request)
verify_dict = {
"ids": {
"name": "id列表",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChunkApiService.delete_batch(req_dict)
return jsonify(res_data)
@chunk_bp.route('/qa/star', methods=['POST'])
@validate_user
def chunk_qa_star():
'''
保存问答对到知识库
'''
req_dict = get_req_para(request)
print(req_dict)
verify_dict = {
'question': {
'name': '问题',
'required': True,
},
'answer': {
'name': '回答',
'required': True,
},
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return gen_json_response(code=400, msg=not_valid)
question = req_dict.get('question')
answer = req_dict.get('answer')
metadata = req_dict.get('metadata', {})
try:
train_qa_info(question, answer, metadata)
return gen_json_response(msg='标记成功', extends={'success': True})
except Exception as e:
return gen_json_response(code=400, msg=f'标记失败:{e}')