Files
Mdeical_Sur_Report/工程分析/20260419_0359/实现方案.md
admin 9f73d8595c feat(ai): 修改模式自动锁定目标区域 + SystemPrompt模式语义强化
- handleAIGenerate开头增加自动修正目标区域逻辑:修改模式开启且未选区域时,自动选择文档中第一个AI区域
- systemPrompt明确标注'当前处于【修改模式】/【对话模式】',并细化字段要求
- diffModal的targetId改为使用actualTargetId,确保确认注入时使用实际修正后的区域ID
2026-04-19 04:02:05 +08:00

4.0 KiB
Raw Blame History

实现方案

修改文件

  • src/pages/ReportEditor.tsx

修改位置:handleAIGenerate 函数(约 line 860-950

修改 1自动修正目标区域

在获取 targetRegionEl 之前,增加自动修正逻辑:如果修改模式开启且未选定区域,自动选择文档中的第一个 AI 区域。

原代码line 877

      const targetRegionEl = editorRef.current?.querySelector(`.ai-region[data-ai-id="${aiTargetRegion}"] .ai-content`) as HTMLElement | null;

新代码

      let actualTargetId = aiTargetRegion;
      if (aiModifyEnabled && actualTargetId === 'none') {
        const availableRegions = checkAiRegions();
        if (availableRegions.length > 0) {
          actualTargetId = availableRegions[0].id;
          setAiTargetRegion(actualTargetId);
        }
      }
      const targetRegionEl = editorRef.current?.querySelector(`.ai-region[data-ai-id="${actualTargetId}"] .ai-content`) as HTMLElement | null;

变更点

  1. 引入 actualTargetId 变量,初始值为 aiTargetRegion
  2. aiModifyEnabled 为 true 且 actualTargetId === 'none',调用 checkAiRegions() 获取可用区域列表
  3. 若有可用区域,将 actualTargetId 设为第一个区域的 id并同步更新 React statesetAiTargetRegion
  4. 后续所有依赖目标区域 ID 的地方querySelector、diffModal targetId均使用 actualTargetId

修改 2优化 systemPrompt 文案

原代码line 897-899

      const systemPrompt = aiModifyEnabled
        ? '你是一名专业的外科医生助理。我为你提供了当前手术报告的【全局参考内容】作为背景知识,以及你需要修改的【目标区域 HTML 源码】。\n请根据全局内容和用户的【医生指令】直接重写或生成目标区域的 HTML。\n重要指令你必须严格返回合法的 JSON 对象,绝对不要包含任何 Markdown 标记(如 ```json。\nJSON 格式如下:\n{ "reply": "简短的回复话术", "updatedHtml": "修改后的完整内部 HTML 代码" }'
        : '你是一名专业的外科医生助理。请仔细阅读我提供的【全局手术报告参考内容】,并根据【医生指令】进行专业解答。\n重要指令严格返回合法的 JSON 对象。\nJSON 格式如下:\n{ "reply": "你的分析和回答" }';

新代码

      const systemPrompt = aiModifyEnabled
        ? '你是一名专业的外科医生助理。当前处于【修改模式】。\n我为你提供了当前手术报告的【全局参考内容】作为背景知识以及你需要修改的【目标区域 HTML 源码】。\n请根据全局内容和用户的【医生指令】直接重写并输出目标区域的 HTML。\n重要指令\n1. 必须返回合法的 JSON 对象\n2. 必须包含 "reply"(简短回复话术)和 "updatedHtml"(修改后的完整内部 HTML 代码)两个字段\n3. 绝对不要包含任何 Markdown 标记(如 ```json'
        : '你是一名专业的外科医生助理。当前处于【对话模式】。\n请仔细阅读我提供的【全局手术报告参考内容】并根据【医生指令】进行专业解答。\n重要指令\n1. 必须返回合法的 JSON 对象\n2. 仅包含 "reply"(你的专业回答)一个字段\n3. 不要返回任何 HTML 代码\n4. 绝对不要包含任何 Markdown 标记';

变更点

  1. 修改模式 systemPrompt 明确标注「当前处于【修改模式】」
  2. 明确要求必须包含 replyupdatedHtml 两个字段
  3. 对话模式 systemPrompt 明确标注「当前处于【对话模式】」
  4. 明确要求仅包含 reply 字段,不要返回 HTML

修改 3diffModal targetId 使用 actualTargetId

原代码line 936

            targetId: aiTargetRegion

新代码

            targetId: actualTargetId

变更点:确保 diff 弹窗确认注入时,使用实际修正后的区域 ID而非可能仍为 'none'aiTargetRegion