|
@@ -18,7 +18,7 @@ from applications.config import (
|
|
)
|
|
)
|
|
from applications.resource import get_resource_manager
|
|
from applications.resource import get_resource_manager
|
|
from applications.search import HybridSearch
|
|
from applications.search import HybridSearch
|
|
-from applications.utils.chat import ChatClassifier
|
|
|
|
|
|
+from applications.utils.chat import RAGChatAgent
|
|
from applications.utils.mysql import Dataset, Contents, ContentChunks, ChatResult
|
|
from applications.utils.mysql import Dataset, Contents, ContentChunks, ChatResult
|
|
|
|
|
|
server_bp = Blueprint("api", __name__, url_prefix="/api")
|
|
server_bp = Blueprint("api", __name__, url_prefix="/api")
|
|
@@ -322,13 +322,33 @@ async def query_search(
|
|
sort_by=sort_by,
|
|
sort_by=sort_by,
|
|
milvus_size=milvus_size,
|
|
milvus_size=milvus_size,
|
|
)
|
|
)
|
|
- return response
|
|
|
|
case "strategy":
|
|
case "strategy":
|
|
return None
|
|
return None
|
|
case _:
|
|
case _:
|
|
return None
|
|
return None
|
|
except Exception as e:
|
|
except Exception as e:
|
|
return None
|
|
return None
|
|
|
|
+ if response is None:
|
|
|
|
+ return None
|
|
|
|
+ resource = get_resource_manager()
|
|
|
|
+ content_chunk_mapper = ContentChunks(resource.mysql_client)
|
|
|
|
+ res = []
|
|
|
|
+ for result in response["results"]:
|
|
|
|
+ content_chunks = await content_chunk_mapper.select_chunk_content(
|
|
|
|
+ doc_id=result["doc_id"], chunk_id=result["chunk_id"]
|
|
|
|
+ )
|
|
|
|
+ if content_chunks:
|
|
|
|
+ content_chunk = content_chunks[0]
|
|
|
|
+ res.append(
|
|
|
|
+ {
|
|
|
|
+ "docId": content_chunk["doc_id"],
|
|
|
|
+ "content": content_chunk["text"],
|
|
|
|
+ "contentSummary": content_chunk["summary"],
|
|
|
|
+ "score": result["score"],
|
|
|
|
+ "datasetId": content_chunk["dataset_id"],
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ return res
|
|
|
|
|
|
|
|
|
|
@server_bp.route("/query", methods=["GET"])
|
|
@server_bp.route("/query", methods=["GET"])
|
|
@@ -342,39 +362,13 @@ async def query():
|
|
search_type=search_type,
|
|
search_type=search_type,
|
|
)
|
|
)
|
|
resource = get_resource_manager()
|
|
resource = get_resource_manager()
|
|
- content_chunk_mapper = ContentChunks(resource.mysql_client)
|
|
|
|
dataset_mapper = Dataset(resource.mysql_client)
|
|
dataset_mapper = Dataset(resource.mysql_client)
|
|
- res = []
|
|
|
|
- for result in query_results["results"]:
|
|
|
|
- content_chunks = await content_chunk_mapper.select_chunk_content(
|
|
|
|
- doc_id=result["doc_id"], chunk_id=result["chunk_id"]
|
|
|
|
- )
|
|
|
|
- if not content_chunks:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "content_chunk not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- content_chunk = content_chunks[0]
|
|
|
|
- datasets = await dataset_mapper.select_dataset_by_id(
|
|
|
|
- content_chunk["dataset_id"]
|
|
|
|
- )
|
|
|
|
- if not datasets:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "dataset not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- dataset = datasets[0]
|
|
|
|
- dataset_name = None
|
|
|
|
- if dataset:
|
|
|
|
- dataset_name = dataset["name"]
|
|
|
|
- res.append(
|
|
|
|
- {
|
|
|
|
- "docId": content_chunk["doc_id"],
|
|
|
|
- "content": content_chunk["text"],
|
|
|
|
- "contentSummary": content_chunk["summary"],
|
|
|
|
- "score": result["score"],
|
|
|
|
- "datasetName": dataset_name,
|
|
|
|
- }
|
|
|
|
- )
|
|
|
|
- data = {"results": res}
|
|
|
|
|
|
+ for result in query_results:
|
|
|
|
+ datasets = await dataset_mapper.select_dataset_by_id(result["datasetId"])
|
|
|
|
+ if datasets:
|
|
|
|
+ dataset_name = datasets[0]["name"]
|
|
|
|
+ result["datasetName"] = dataset_name
|
|
|
|
+ data = {"results": query_results}
|
|
return jsonify({"status_code": 200, "detail": "success", "data": data})
|
|
return jsonify({"status_code": 200, "detail": "success", "data": data})
|
|
|
|
|
|
|
|
|
|
@@ -390,43 +384,20 @@ async def chat():
|
|
search_type=search_type,
|
|
search_type=search_type,
|
|
)
|
|
)
|
|
resource = get_resource_manager()
|
|
resource = get_resource_manager()
|
|
- content_chunk_mapper = ContentChunks(resource.mysql_client)
|
|
|
|
- dataset_mapper = Dataset(resource.mysql_client)
|
|
|
|
chat_result_mapper = ChatResult(resource.mysql_client)
|
|
chat_result_mapper = ChatResult(resource.mysql_client)
|
|
- res = []
|
|
|
|
- for result in query_results["results"]:
|
|
|
|
- content_chunks = await content_chunk_mapper.select_chunk_content(
|
|
|
|
- doc_id=result["doc_id"], chunk_id=result["chunk_id"]
|
|
|
|
- )
|
|
|
|
- if not content_chunks:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "content_chunk not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- content_chunk = content_chunks[0]
|
|
|
|
- datasets = await dataset_mapper.select_dataset_by_id(
|
|
|
|
- content_chunk["dataset_id"]
|
|
|
|
- )
|
|
|
|
- if not datasets:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "dataset not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- dataset = datasets[0]
|
|
|
|
- dataset_name = None
|
|
|
|
- if dataset:
|
|
|
|
- dataset_name = dataset["name"]
|
|
|
|
- res.append(
|
|
|
|
- {
|
|
|
|
- "docId": content_chunk["doc_id"],
|
|
|
|
- "content": content_chunk["text"],
|
|
|
|
- "contentSummary": content_chunk["summary"],
|
|
|
|
- "score": result["score"],
|
|
|
|
- "datasetName": dataset_name,
|
|
|
|
- }
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- chat_classifier = ChatClassifier()
|
|
|
|
- chat_res = await chat_classifier.chat_with_deepseek(query_text, res)
|
|
|
|
- data = {"results": res, "chat_res": chat_res["summary"]}
|
|
|
|
|
|
+ resource = get_resource_manager()
|
|
|
|
+ dataset_mapper = Dataset(resource.mysql_client)
|
|
|
|
+ for result in query_results:
|
|
|
|
+ datasets = await dataset_mapper.select_dataset_by_id(result["datasetId"])
|
|
|
|
+ if datasets:
|
|
|
|
+ dataset_name = datasets[0]["name"]
|
|
|
|
+ result["datasetName"] = dataset_name
|
|
|
|
+
|
|
|
|
+ rag_chat_agent = RAGChatAgent()
|
|
|
|
+ chat_res = await rag_chat_agent.chat_with_deepseek(query_text, query_results)
|
|
|
|
+ deepseek_search = await rag_chat_agent.search_with_deepseek(query_text)
|
|
|
|
+ select = await rag_chat_agent.select_with_deepseek(chat_res, deepseek_search)
|
|
|
|
+ data = {"results": query_results, "chat_res": select["result"]}
|
|
await chat_result_mapper.insert_chat_result(
|
|
await chat_result_mapper.insert_chat_result(
|
|
query_text,
|
|
query_text,
|
|
dataset_id_strs,
|
|
dataset_id_strs,
|
|
@@ -434,6 +405,9 @@ async def chat():
|
|
chat_res["summary"],
|
|
chat_res["summary"],
|
|
chat_res["relevance_score"],
|
|
chat_res["relevance_score"],
|
|
chat_res["status"],
|
|
chat_res["status"],
|
|
|
|
+ deepseek_search["answer"],
|
|
|
|
+ deepseek_search["source"],
|
|
|
|
+ deepseek_search["status"],
|
|
)
|
|
)
|
|
return jsonify({"status_code": 200, "detail": "success", "data": data})
|
|
return jsonify({"status_code": 200, "detail": "success", "data": data})
|
|
|
|
|
|
@@ -485,65 +459,6 @@ async def chunk_list():
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
-@server_bp.route("/chat/detail", methods=["POST"])
|
|
|
|
-async def chat_detail():
|
|
|
|
- body = await request.get_json()
|
|
|
|
- query_text = body.get("query")
|
|
|
|
- dataset_id_strs = "11,12"
|
|
|
|
- dataset_ids = dataset_id_strs.split(",")
|
|
|
|
- search_type = "hybrid"
|
|
|
|
- query_results = await query_search(
|
|
|
|
- query_text=query_text,
|
|
|
|
- filters={"dataset_id": dataset_ids},
|
|
|
|
- search_type=search_type,
|
|
|
|
- )
|
|
|
|
- resource = get_resource_manager()
|
|
|
|
- content_chunk_mapper = ContentChunks(resource.mysql_client)
|
|
|
|
- contents_mapper = Contents(resource.mysql_client)
|
|
|
|
- chat_result_mapper = ChatResult(resource.mysql_client)
|
|
|
|
- res = []
|
|
|
|
- for result in query_results["results"]:
|
|
|
|
- content_chunks = await content_chunk_mapper.select_chunk_content(
|
|
|
|
- doc_id=result["doc_id"], chunk_id=result["chunk_id"]
|
|
|
|
- )
|
|
|
|
- contents = await contents_mapper.select_content_by_doc_id(result["doc_id"])
|
|
|
|
- if not content_chunks:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "content_chunk not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- if not contents:
|
|
|
|
- return jsonify(
|
|
|
|
- {"status_code": 500, "detail": "contents not found", "data": {}}
|
|
|
|
- )
|
|
|
|
- content_chunk = content_chunks[0]
|
|
|
|
- content = contents[0]
|
|
|
|
- res.append(
|
|
|
|
- {
|
|
|
|
- "contentChunk": content_chunk["text"],
|
|
|
|
- "contentSummary": content_chunk["summary"],
|
|
|
|
- "content": content["text"],
|
|
|
|
- "score": result["score"],
|
|
|
|
- }
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- chat_classifier = ChatClassifier()
|
|
|
|
- chat_res = await chat_classifier.chat_with_deepseek(query_text, res)
|
|
|
|
- data = {
|
|
|
|
- "result": chat_res["summary"],
|
|
|
|
- "status": chat_res["status"],
|
|
|
|
- "metaData": res,
|
|
|
|
- }
|
|
|
|
- await chat_result_mapper.insert_chat_result(
|
|
|
|
- query_text,
|
|
|
|
- dataset_id_strs,
|
|
|
|
- json.dumps(data, ensure_ascii=False),
|
|
|
|
- chat_res["summary"],
|
|
|
|
- chat_res["relevance_score"],
|
|
|
|
- chat_res["status"],
|
|
|
|
- )
|
|
|
|
- return jsonify({"status_code": 200, "detail": "success", "data": data})
|
|
|
|
-
|
|
|
|
-
|
|
|
|
@server_bp.route("/auto_rechunk", methods=["GET"])
|
|
@server_bp.route("/auto_rechunk", methods=["GET"])
|
|
async def auto_rechunk():
|
|
async def auto_rechunk():
|
|
resource = get_resource_manager()
|
|
resource = get_resource_manager()
|