From c25a9c05ca40ce6af43ed370827360e28b701f07 Mon Sep 17 00:00:00 2001 From: wangmeihua <13383952685@163.com> Date: Wed, 13 Aug 2025 15:50:31 +0800 Subject: [PATCH] rag --- rag/uapi_service.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/rag/uapi_service.py b/rag/uapi_service.py index 7b1c81f..80cbaf5 100644 --- a/rag/uapi_service.py +++ b/rag/uapi_service.py @@ -68,21 +68,39 @@ class APIService: async def extract_triples(self, request, text: str, upappid: str, apiname: str, user: str) -> list: """调用三元组抽取服务""" request_id = str(uuid.uuid4()) - debug(f"Request #{request_id} started for triples extraction") + debug(f"Request #{request_id} started for triples extraction, text={text[:100]}") try: + # 清理输入文本,移除控制字符 + import re + text = re.sub(r'[\x00-\x1F\x7F]', '', text) # 移除 ASCII 控制字符 uapi = UAPI(request, DictObject(**globals())) params_kw = {"text": text} 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}") + if not b: + error(f"request #{request_id} 三元组抽取服务返回空响应: upappid={upappid}, apiname={apiname}") + raise RuntimeError("三元组抽取服务返回空响应") + try: + response_text = b.decode('utf-8') + except UnicodeDecodeError as decode_err: + error(f"request #{request_id} 响应解码失败: {str(decode_err)}, 原始响应: {b[:100]}") + raise RuntimeError(f"响应解码失败: {str(decode_err)}") + debug(f"request #{request_id} 三元组抽取服务原始响应: {response_text[:500]}") + # 清理响应字符串,移除控制字符 + response_text = re.sub(r'[\x00-\x1F\x7F]', '', response_text) + try: + d = json.loads(response_text) + except json.JSONDecodeError as json_err: + error(f"request #{request_id} JSON 解析失败: {str(json_err)}, 响应内容: {response_text[:500]}") + raise RuntimeError(f"JSON 解析失败: {str(json_err)}") + if d.get("object") != "list" or not d.get("data"): + error(f"request #{request_id} 三元组抽取服务响应格式错误: {d}") raise RuntimeError("三元组抽取服务响应格式错误") triples = d["data"] debug(f"request #{request_id} extracted {len(triples)} triples") return triples except Exception as e: - error(f"request #{request_id} failed to extract triples: {str(e)}") - raise RuntimeError(f"三元组抽取服务调用失败: {str(e)}") + error(f"request #{request_id} failed to extract triples: {str(e)}, upappid={upappid}, apiname={apiname}") + return [] # 根据业务需求返回空列表 # 重排序服务 (BAAI/bge-reranker-v2-m3) async def rerank_results(self, request, query: str, results: list, top_n: int, upappid: str, apiname: str, user: str) -> list: