xinli/xinlidsj/AI分析指令修复说明.md
2026-02-26 18:18:03 +08:00

4.5 KiB
Raw Permalink Blame History

AI分析指令修复说明

问题描述

用户输入"分析张三"时AI能够正确识别意图为analyzeReport但系统没有使用AI识别的参数keyword: "张三"),而是继续使用正则匹配,导致无法获取报告数据,最终返回"暂不提供此服务"。

根本原因

  1. AI意图识别成功后对于分析类指令analyzeReport/analyzeProfile返回false继续处理
  2. 但后续代码仍然使用正则匹配parseAnalyzeReportKeyword(text)获取关键词
  3. AI识别的参数intent.params.keyword)被丢弃,没有传递给后续逻辑

解决方案

1. 保存AI识别的意图

在AI意图识别部分当识别到分析类指令时保存完整的intent对象

let aiRecognizedIntent = null
if (intent.action === 'analyzeReport' || intent.action === 'analyzeProfile' || intent.action === 'analyzeData') {
    aiRecognizedIntent = intent
    console.log('分析类指令保存AI识别的参数:', aiRecognizedIntent)
}

2. 优先使用AI识别的参数

在报告数据获取逻辑中优先使用AI识别的参数如果没有则回退到正则匹配

let reportId = ''
let reportKeyword = ''
let profileKeyword = ''

if (aiRecognizedIntent) {
    console.log('使用AI识别的参数:', aiRecognizedIntent.params)
    if (aiRecognizedIntent.action === 'analyzeReport') {
        reportId = aiRecognizedIntent.params.reportId || ''
        reportKeyword = aiRecognizedIntent.params.keyword || ''
    } else if (aiRecognizedIntent.action === 'analyzeProfile') {
        profileKeyword = aiRecognizedIntent.params.keyword || aiRecognizedIntent.params.userId || ''
    }
} else {
    // 回退到正则匹配
    console.log('回退到正则匹配')
    reportId = this.parseAnalyzeReportId(text)
    reportKeyword = this.parseAnalyzeReportKeyword(text)
    profileKeyword = ''
}

执行流程

用户输入:"分析张三"

  1. AI意图识别

    • 调用parseUserIntentWithAI("分析张三")
    • AI返回
      {
        "action": "analyzeReport",
        "params": {
          "keyword": "张三"
        },
        "confidence": 0.9,
        "reasoning": "用户想分析张三的测评报告"
      }
      
  2. 执行意图

    • 调用executeAIIntent(intent)
    • 识别为分析类指令,返回false继续处理
    • 保存aiRecognizedIntent = intent
  3. 获取报告数据

    • 检测到aiRecognizedIntent存在
    • 提取参数:reportKeyword = "张三"
    • 调用getStudentOptions({ keyword: "张三", limit: 1 })获取用户ID
    • 调用listReport({ userId })获取报告列表
    • 调用getReport(reportId)获取报告详情
  4. AI分析报告

    • 将报告数据作为context传递给AI
    • AI分析报告内容并返回分析结果
    • 在对话框中显示AI的分析结果

指令类型区分

analyzeReport分析报告

  • 关键词:分析、数据、报告
  • 示例:
    • "分析张三的报告"
    • "分析李四的数据"
    • "分析报告123"
  • 行为:获取报告数据 → AI分析 → 返回分析结果

analyzeProfile查看画像

  • 关键词:画像、档案、情况、了解
  • 示例:
    • "查看王五的画像"
    • "了解赵六的情况"
    • "打开张三的档案"
  • 行为:跳转到个体画像页面

goReport打开报告

  • 关键词:打开、查看
  • 示例:
    • "打开张三的报告"
    • "查看报告列表"
  • 行为:跳转到报告列表页面

修改文件

  • xinlidsj/pages/index/index.vue
    • 第1605-1625行保存AI识别的意图
    • 第1710-1740行优先使用AI识别的参数

测试建议

  1. 测试AI识别"分析张三" → 应该获取张三的报告并让AI分析
  2. 测试正则回退关闭AI意图识别 → 应该使用正则匹配
  3. 测试不同指令:
    • "分析李四的数据" → analyzeReport
    • "查看王五的画像" → analyzeProfile跳转页面
    • "打开赵六的报告" → goReport跳转页面
  4. 测试错误处理:
    • 用户不存在 → "没有查询到相关数据"
    • 用户无报告 → "没有查询到相关数据"

日志输出

关键日志点:

  • 尝试AI意图识别...
  • AI识别到意图: {action, params, confidence}
  • 分析类指令保存AI识别的参数: {...}
  • 使用AI识别的参数: {keyword: "张三"}
  • 最终使用的参数 - reportId: "", reportKeyword: "张三", profileKeyword: ""

通过这些日志可以追踪整个流程确认AI识别和参数传递是否正常。