diff --git a/rag/uapi_service.py b/rag/uapi_service.py index 0e9cf3b..edbbeed 100644 --- a/rag/uapi_service.py +++ b/rag/uapi_service.py @@ -1,6 +1,7 @@ from appPublic.log import debug, error from typing import Dict, Any, List import uuid +import json from ahserver.serverenv import ServerEnv from uapi.appapi import UAPI from appPublic.dictObject import DictObject @@ -15,7 +16,8 @@ class APIService: uapi = UAPI(request, DictObject(**globals())) debug(f'{uapi=}, {type(uapi.call)}') params_kw = {"input": texts} - d = await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) if d.get("object") != "list" or not d.get("data"): error(f"嵌入服务响应格式错误: {d}") raise RuntimeError("嵌入服务响应格式错误") @@ -34,7 +36,8 @@ class APIService: raise ValueError("查询文本不能为空") uapi = UAPI(request, DictObject(**globals())) params_kw = {"query": query} - d = await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) if d.get("object") != "list" or not d.get("data"): error(f"实体识别服务响应格式错误: {d}") raise RuntimeError("实体识别服务响应格式错误") @@ -54,7 +57,8 @@ class APIService: try: uapi = UAPI(request, DictObject(**globals())) params_kw = {"text": text} - d = await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) if d.get("object") != "list": error(f"request #{request_id} invalid response format: {d}") raise RuntimeError("三元组抽取服务响应格式错误") @@ -87,7 +91,8 @@ class APIService: "documents": documents, "top_n": top_n } - d = await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) if d.get("object") != "rerank.result" or not d.get("data"): error(f"重排序服务响应格式错误: {d}") raise RuntimeError("重排序服务响应格式错误") @@ -110,7 +115,8 @@ class APIService: try: uapi = UAPI(request, DictObject(**globals())) params_kw = {} - d = await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) if d.get("status") != 200: error(f"Neo4j 文档请求失败,状态码: {d.get('status')}") raise RuntimeError(f"Neo4j 文档请求失败: {d.get('status')}") @@ -125,7 +131,9 @@ class APIService: """初始化 Neo4j 服务""" uapi = UAPI(request, DictObject(**globals())) params_kw = {} - return await uapi.call(upappid, apiname, user, params_kw) + b = await uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def neo4j_insert_triples(self, request, triples: list, document_id: str, knowledge_base_id: str, userid: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """插入三元组到 Neo4j""" @@ -136,19 +144,25 @@ class APIService: "knowledge_base_id": knowledge_base_id, "userid": userid } - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def neo4j_delete_document(self, request, document_id: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """删除指定文档""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"document_id": document_id} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def neo4j_delete_knowledgebase(self, request, userid: str, knowledge_base_id: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """删除用户知识库""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"userid": userid, "knowledge_base_id": knowledge_base_id} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def neo4j_match_triplets(self, request, query: str, query_entities: list, userid: str, knowledge_base_id: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """根据实体匹配相关三元组""" @@ -159,20 +173,26 @@ class APIService: "userid": userid, "knowledge_base_id": knowledge_base_id } - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d # Milvus 服务 async def milvus_create_collection(self, request, upappid: str, apiname: str, user: str, db_type: str = "") -> Dict[str, Any]: """创建 Milvus 集合""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"db_type": db_type} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_delete_collection(self, request, upappid: str, apiname: str, user: str, db_type: str = "") -> Dict[str, Any]: """删除 Milvus 集合""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"db_type": db_type} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_insert_document(self, request, chunks: List[Dict], upappid: str, apiname: str, user: str, db_type: str = "") -> Dict[str, Any]: """添加 Milvus 记录""" @@ -181,11 +201,9 @@ class APIService: "chunks": chunks, "dbtype": db_type } - payload = json.dumps(params_kw) # 转换为 JSON 字符串 - payload_bytes = payload.encode() # 编码为字节 - payload_size = len(payload_bytes) # 获取字节数 - debug(f"request payload size for insertdocument: {payload_size} bytes") - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_delete_document(self, request, userid: str, file_path: str, knowledge_base_id: str, document_id: str, upappid: str, apiname: str, user: str, db_type: str = "") -> Dict[str, Any]: """删除 Milvus 记录""" @@ -197,13 +215,17 @@ class APIService: "document_id": document_id, "dbtype": db_type } - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_delete_knowledgebase(self, request, userid: str, knowledge_base_id: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """删除 Milvus 知识库""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"userid": userid, "knowledge_base_id": knowledge_base_id} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_search_query(self, request, query_vector: List[float], userid: str, knowledge_base_ids: list, limit: int, offset: int, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """根据用户知识库检索 Milvus""" @@ -215,19 +237,25 @@ class APIService: "limit": limit, "offset": offset } - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_list_user_files(self, request, userid: str, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """列出 Milvus 用户知识库列表""" uapi = UAPI(request, DictObject(**globals())) params_kw = {"userid": userid} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d async def milvus_list_all_knowledgebases(self, request, upappid: str, apiname: str, user: str) -> Dict[str, Any]: """列出 Milvus 数据库中所有数据""" uapi = UAPI(request, DictObject(**globals())) params_kw = {} - return await uapi.call(upappid, apiname, user, params_kw) + b = uapi.call(upappid, apiname, user, params_kw) + d = json.loads(b.decode('utf-8')) + return d # RAG 服务 async def rag_create_collection(self, request, upappid: str, apiname: str, user: str, db_type: str = "") -> Dict[str, Any]: