Skip to content

Latest commit

 

History

History
71 lines (58 loc) · 2.69 KB

File metadata and controls

71 lines (58 loc) · 2.69 KB

Canon Bible JSON解析错误修复报告

问题描述

用户在创建新项目并生成Canon Bible时遇到JSON解析失败的错误:

[Canon Bible生成] JSON解析失败,尝试修复 (第1次)
[Canon Bible生成] JSON解析失败,尝试修复 (第2次)

最终显示的错误内容:

{'status': 'error', 'error_code': 'MISSING_CONTEXT', 'message': '无法完成修正请求,因为我没有访问之前对话历史的能力。请提供您希望我修正为严格JSON格式的具体内容。', 'suggestion': '请在下一次请求中,将需要修正的原始内容粘贴给我。'}

根本原因

  1. LLM服务的_make_json_request方法在JSON解析失败时,会发送修复请求
  2. 修复请求的prompt设计有问题,导致LLM返回关于"无法访问对话历史"的错误消息
  3. JSON解析逻辑不够强健,无法处理各种格式的响应

修复措施

1. 改进JSON解析逻辑

llm_service.py中添加了_try_parse_json方法,支持多种解析策略:

  • 直接JSON解析
  • 提取```json代码块
  • 提取```代码块(不带json标识)
  • 提取任何花括号包裹的内容
  • 修复引号问题的内联函数
  • Python字典格式解析(ast.literal_eval)
  • 单引号转双引号后解析

2. 改进错误修复prompt

修改了修复请求的prompt,避免LLM困惑:

original_prompt_type = "Canon Bible" if "canon" in task_name.lower() else "JSON数据"
prompt = f"请重新生成{original_prompt_type},严格按照JSON格式返回。不要包含任何解释文字,只返回纯JSON:\n\n{prompt}"

3. 添加默认Canon Bible结构

generate_canon_bible方法中添加了后备机制:

  • 如果JSON解析完全失败,返回一个默认的Canon Bible结构
  • 确保即使AI服务出现问题,用户也能获得基本的Canon Bible

4. 修复导入问题

添加了缺失的ui_utils导入,修复了linter错误。

测试结果

通过测试脚本验证了修复效果:

  • ✅ 正常JSON解析
  • ✅ 代码块JSON解析
  • ✅ 双引号问题修复
  • ✅ 混合格式解析
  • ✅ 默认Canon Bible生成
  • ✅ Python字典格式解析(已改进)

影响评估

  • 兼容性: 完全向后兼容,不影响现有功能
  • 性能: 轻微增加解析时间,但提高了成功率
  • 用户体验: 大幅改善,减少了JSON解析失败的情况
  • 维护性: 代码更加模块化,易于维护和扩展

建议后续改进

  1. 考虑添加更多的JSON修复策略
  2. 优化prompt模板以减少JSON解析失败的概率
  3. 添加更详细的错误日志以便调试
  4. 考虑实现JSON schema验证确保数据完整性

修复完成时间: 2025-01-16 修复分支: feature/prompts-v2-integration