From c7a7780e71bcc64c9d2ea57ca09030d88b8aad9f Mon Sep 17 00:00:00 2001 From: python Date: Tue, 9 Dec 2025 11:46:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=92=8CAI=E6=9C=8D=E5=8A=A1=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=8C=E7=AE=80=E5=8C=96=E4=BF=A1=E6=81=AF=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E7=9A=84=E6=8F=8F=E8=BF=B0=EF=BC=8C=E6=98=8E?= =?UTF-8?q?=E7=A1=AE=E6=8F=90=E5=8F=96=E8=A6=81=E6=B1=82=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E5=AF=B9API=E8=BF=94=E5=9B=9E=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF=E4=BB=A5=E4=BE=BF?= =?UTF-8?q?=E4=BA=8E=E9=97=AE=E9=A2=98=E6=8E=92=E6=9F=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/prompt_config.json | 4 +-- services/ai_service.py | 51 +++++++++++++++++++++++++++++++++------ 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/config/prompt_config.json b/config/prompt_config.json index a00be71..cddd7ec 100644 --- a/config/prompt_config.json +++ b/config/prompt_config.json @@ -1,9 +1,9 @@ { "prompt_template": { - "intro": "你是一个专业的信息提取助手。请仔细阅读以下输入文本,全面分析其中的所有信息,包括显式信息和可以合理推断的信息。对于每个需要提取的字段,请仔细查找文本中的相关信息,包括但不限于:直接提及的信息、隐含的信息、可以通过上下文推断的信息。", + "intro": "请从以下输入文本中提取结构化信息。仔细分析文本内容,准确提取每个字段的值。", "input_text_label": "输入文本:", "output_fields_label": "需要提取的字段(请仔细分析每个字段,确保提取完整):", - "json_format_label": "请严格按照以下JSON格式返回结果,只返回JSON对象,不要包含任何其他文字说明、思考过程或markdown代码块标记:", + "json_format_label": "请严格按照以下JSON格式返回结果,只返回JSON对象,不要包含任何其他文字说明或markdown代码块标记:", "requirements_label": "重要要求(请严格遵守):", "requirements": [ "逐字逐句仔细分析输入文本,不要遗漏任何信息", diff --git a/services/ai_service.py b/services/ai_service.py index 95b2f44..b68d9d7 100644 --- a/services/ai_service.py +++ b/services/ai_service.py @@ -194,7 +194,7 @@ class AIService: "messages": [ { "role": "system", - "content": "你是一个专业的数据提取助手,擅长从非结构化文本中准确提取结构化信息。你需要仔细分析输入文本,识别所有相关信息,并按照指定的JSON格式返回结果。请确保提取的信息准确、完整,对于能够从文本中推断出的信息也要尽量提取。" + "content": "你是一个专业的数据提取助手。请仔细分析用户提供的输入文本,提取所有相关信息,并严格按照指定的JSON格式返回结果。只返回JSON对象,不要包含任何其他文字说明、思考过程或markdown代码块标记。" }, { "role": "user", @@ -233,21 +233,56 @@ class AIService: # 提取AI返回的内容 if 'choices' in result and len(result['choices']) > 0: - content = result['choices'][0]['message']['content'] + raw_content = result['choices'][0]['message']['content'] - # 处理思考过程标签(华为大模型可能返回思考过程) - # 移除思考过程标签之前的内容,只保留实际回答 - # 根据用户提供的示例,华为大模型使用 标签 + # 调试:打印原始返回内容(前500字符) + print(f"[AI服务] API返回的原始内容(前500字符): {raw_content[:500]}") + + # 处理思考过程标签(支持多种可能的标签格式) + content = raw_content + + # 处理 标签(DeepSeek-R1常用格式) if '' in content: - content = content.split('')[-1].strip() + parts = content.split('') + if len(parts) > 1: + content = parts[-1].strip() + print(f"[AI服务] 检测到 标签,提取标签后的内容") + + # 处理 标签 + elif '' in content: + parts = content.split('') + if len(parts) > 1: + content = parts[-1].strip() + print(f"[AI服务] 检测到 标签,提取标签后的内容") + + # 处理 ... 标签 + elif '' in content and '' in content: + reasoning_start = content.find('') + if reasoning_start != -1: + content = content[reasoning_start + 11:].strip() + print(f"[AI服务] 检测到 标签,提取标签后的内容") + + # 清理后的内容(前500字符) + print(f"[AI服务] 清理后的内容(前500字符): {content[:500]}") # 尝试解析JSON extracted_data = self._extract_json_from_text(content) if extracted_data: + print(f"[AI服务] JSON解析成功,提取到 {len(extracted_data)} 个字段") return extracted_data - # 如果无法提取JSON,尝试从文本中提取 - return self._parse_text_response(content, output_fields) + # 如果无法提取JSON,记录错误 + print(f"[AI服务] 警告:无法从内容中提取JSON,尝试备用解析方法") + print(f"[AI服务] 完整内容: {content}") + + # 尝试从文本中提取 + parsed_data = self._parse_text_response(content, output_fields) + if parsed_data and any(v for v in parsed_data.values() if v): # 至少有一个非空字段 + print(f"[AI服务] 使用备用方法解析成功,提取到 {len(parsed_data)} 个字段") + return parsed_data + + # 如果所有方法都失败,抛出异常 + raise Exception(f"无法从API返回内容中提取JSON数据。原始内容长度: {len(raw_content)}, 清理后内容长度: {len(content)}。请检查API返回的内容格式是否正确。") else: raise Exception("API返回格式异常:未找到choices字段或choices为空")