更新提示配置和AI服务内容,简化信息提取助手的描述,明确提取要求,增强对API返回内容的处理逻辑,添加调试信息以便于问题排查。

This commit is contained in:
python 2025-12-09 11:46:52 +08:00
parent 14ff607b52
commit c7a7780e71
2 changed files with 45 additions and 10 deletions

View File

@ -1,9 +1,9 @@
{ {
"prompt_template": { "prompt_template": {
"intro": "你是一个专业的信息提取助手。请仔细阅读以下输入文本,全面分析其中的所有信息,包括显式信息和可以合理推断的信息。对于每个需要提取的字段,请仔细查找文本中的相关信息,包括但不限于:直接提及的信息、隐含的信息、可以通过上下文推断的信息。", "intro": "请从以下输入文本中提取结构化信息。仔细分析文本内容,准确提取每个字段的值。",
"input_text_label": "输入文本:", "input_text_label": "输入文本:",
"output_fields_label": "需要提取的字段(请仔细分析每个字段,确保提取完整):", "output_fields_label": "需要提取的字段(请仔细分析每个字段,确保提取完整):",
"json_format_label": "请严格按照以下JSON格式返回结果只返回JSON对象不要包含任何其他文字说明、思考过程或markdown代码块标记", "json_format_label": "请严格按照以下JSON格式返回结果只返回JSON对象不要包含任何其他文字说明或markdown代码块标记",
"requirements_label": "重要要求(请严格遵守):", "requirements_label": "重要要求(请严格遵守):",
"requirements": [ "requirements": [
"逐字逐句仔细分析输入文本,不要遗漏任何信息", "逐字逐句仔细分析输入文本,不要遗漏任何信息",

View File

@ -194,7 +194,7 @@ class AIService:
"messages": [ "messages": [
{ {
"role": "system", "role": "system",
"content": "你是一个专业的数据提取助手擅长从非结构化文本中准确提取结构化信息。你需要仔细分析输入文本识别所有相关信息并按照指定的JSON格式返回结果。请确保提取的信息准确、完整对于能够从文本中推断出的信息也要尽量提取" "content": "你是一个专业的数据提取助手。请仔细分析用户提供的输入文本提取所有相关信息并严格按照指定的JSON格式返回结果。只返回JSON对象不要包含任何其他文字说明、思考过程或markdown代码块标记"
}, },
{ {
"role": "user", "role": "user",
@ -233,21 +233,56 @@ class AIService:
# 提取AI返回的内容 # 提取AI返回的内容
if 'choices' in result and len(result['choices']) > 0: 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]}")
# 根据用户提供的示例,华为大模型使用 </think> 标签
# 处理思考过程标签(支持多种可能的标签格式)
content = raw_content
# 处理 </think> 标签DeepSeek-R1常用格式
if '</think>' in content: if '</think>' in content:
content = content.split('</think>')[-1].strip() parts = content.split('</think>')
if len(parts) > 1:
content = parts[-1].strip()
print(f"[AI服务] 检测到 </think> 标签,提取标签后的内容")
# 处理 </think> 标签
elif '</think>' in content:
parts = content.split('</think>')
if len(parts) > 1:
content = parts[-1].strip()
print(f"[AI服务] 检测到 </think> 标签,提取标签后的内容")
# 处理 <reasoning>...</reasoning> 标签
elif '<reasoning>' in content and '</reasoning>' in content:
reasoning_start = content.find('</reasoning>')
if reasoning_start != -1:
content = content[reasoning_start + 11:].strip()
print(f"[AI服务] 检测到 <reasoning> 标签,提取标签后的内容")
# 清理后的内容前500字符
print(f"[AI服务] 清理后的内容前500字符: {content[:500]}")
# 尝试解析JSON # 尝试解析JSON
extracted_data = self._extract_json_from_text(content) extracted_data = self._extract_json_from_text(content)
if extracted_data: if extracted_data:
print(f"[AI服务] JSON解析成功提取到 {len(extracted_data)} 个字段")
return extracted_data return extracted_data
# 如果无法提取JSON尝试从文本中提取 # 如果无法提取JSON记录错误
return self._parse_text_response(content, output_fields) 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: else:
raise Exception("API返回格式异常未找到choices字段或choices为空") raise Exception("API返回格式异常未找到choices字段或choices为空")