Files
Mdeical_Sur_Report/工程分析/20260419_0344/需求分析.md
admin c1d2438d2b fix(editor): AI只聊天不修改——解绑SystemPrompt目标区域依赖 + 增加光标插入降级
- systemPrompt条件从'aiModifyEnabled && targetRegionEl'改为'aiModifyEnabled',确保开启修改模式后大模型始终返回updatedHtml
- 接收updatedHtml逻辑增加if/else分支:targetRegionEl存在时走diff弹窗,不存在时调用execCmd('insertHTML')降级插入光标位置
- 参考参考-ReportEditor.tsx中injectAIText的降级机制
2026-04-19 03:47:14 +08:00

1.8 KiB
Raw Blame History

需求分析

时间戳

2026-04-19 03:44

需求来源

用户在 report-editor 中输入「请随机填充文本内容」AI 在聊天气泡中正常回复,但编辑器中的「手术步骤-AI可编辑部分」没有修改。

现象

  1. AI 聊天面板有输出reply
  2. 编辑器中的 AI 可编辑区域内容未更新
  3. 没有触发 diff 确认弹窗

根因分析

对比当前代码与 参考-ReportEditor.tsx,问题有两个层面:

层面 1System Prompt 条件过于严苛

当前代码:

const systemPrompt = aiModifyEnabled && targetRegionEl ? '...修改HTML...' : '...纯聊天...'

targetRegionEl 的获取依赖 aiTargetRegion(默认 'none')。如果用户未在下拉框中选中具体区域,targetRegionElnullsystemPrompt 降级为纯聊天模式,大模型根本不会返回 updatedHtml 字段。

参考代码:

const systemPrompt = aiModifyEnabled ? '...修改HTML...' : '...纯聊天...'

只依赖 aiModifyEnabled,只要用户开启「允许修改正文」,大模型就会返回 updatedHtml

层面 2接收逻辑缺少降级插入

当前代码:

if (responseJson.updatedHtml && aiModifyEnabled && targetRegionEl) {
  setDiffModal({...})
}

同样因为 targetRegionElnull,即使大模型返回了 updatedHtml,也会被丢弃。

参考代码 injectAIText

if (targetRegion) {
  targetRegion.innerHTML = ... // 注入目标区域
} else {
  execCmd('insertHTML', htmlContent); // 降级:插入光标位置
}

找不到目标区域时,直接将内容插入编辑器当前光标位置。

约束条件

  • 当前代码已有 execCmd 辅助函数,可直接复用
  • 需要保留 diff 弹窗流程(目标区域存在时)
  • aiTargetRegion 默认值 'none' 可保留,但需通过降级逻辑补偿