# AI意图识别JSON解析失败修复 ## 问题现象 用户输入:"想看张三数据" 错误:`JSON解析失败: Unexpected end of JSON input` ## 根本原因 原代码使用的正则表达式有问题: ```javascript const jsonMatch = jsonStr.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/) ``` 这个正则使用了**非贪婪匹配** `*?`,会在遇到第一个 `}` 时就停止,导致嵌套的JSON对象被截断。 例如,对于这样的JSON: ```json {"action":"analyzeProfile","params":{"keyword":"张三"},"confidence":0.95} ``` 非贪婪匹配会在第一个 `}` (params后面的) 就停止,得到: ```json {"action":"analyzeProfile","params":{"keyword":"张三"} ``` 这是一个不完整的JSON,导致解析失败。 ## 解决方案 使用更简单可靠的方法: ```javascript // 1. 移除markdown代码块标记 jsonStr = jsonStr.replace(/```(?:json)?/g, '').replace(/```/g, '').trim() // 2. 找到第一个{和最后一个} const firstBrace = jsonStr.indexOf('{') const lastBrace = jsonStr.lastIndexOf('}') // 3. 提取完整的JSON对象 if (firstBrace !== -1 && lastBrace !== -1 && lastBrace > firstBrace) { jsonStr = jsonStr.substring(firstBrace, lastBrace + 1) } // 4. 使用try-catch保护解析 try { intent = JSON.parse(jsonStr) } catch(e) { console.error('JSON解析失败:', e.message) console.log('失败的JSON字符串:', jsonStr) return null } ``` ## 已应用的修复 ✅ 改进了JSON提取逻辑 ✅ 添加了try-catch保护 ✅ 添加了详细的调试日志 ✅ 添加了空值检查 ## 测试建议 现在再次测试时,控制台会显示: 1. AI意图识别:原始响应 2. AI意图识别:响应类型 3. AI意图识别:提取的JSON 4. 如果失败:JSON解析失败的具体错误和完整的JSON字符串 这样可以准确定位问题所在。 ## 预期结果 用户输入:"想看张三数据" AI识别: ```json { "action": "analyzeProfile", "params": {"keyword": "张三"}, "confidence": 0.95, "reasoning": "用户想分析张三的个体画像数据" } ``` 系统执行:打开张三的个体画像页面