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为空")