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

71 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案
## 修改文件
- `src/pages/ReportEditor.tsx`
## 修改位置:`handleAIGenerate` 函数(约 line 860-950
### 修改 1自动修正目标区域
在获取 `targetRegionEl` 之前,增加自动修正逻辑:如果修改模式开启且未选定区域,自动选择文档中的第一个 AI 区域。
**原代码**line 877
```tsx
const targetRegionEl = editorRef.current?.querySelector(`.ai-region[data-ai-id="${aiTargetRegion}"] .ai-content`) as HTMLElement | null;
```
**新代码**
```tsx
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 state`setAiTargetRegion`
4. 后续所有依赖目标区域 ID 的地方querySelector、diffModal targetId均使用 `actualTargetId`
### 修改 2优化 systemPrompt 文案
**原代码**line 897-899
```tsx
const systemPrompt = aiModifyEnabled
? '你是一名专业的外科医生助理。我为你提供了当前手术报告的【全局参考内容】作为背景知识,以及你需要修改的【目标区域 HTML 源码】。\n请根据全局内容和用户的【医生指令】直接重写或生成目标区域的 HTML。\n重要指令你必须严格返回合法的 JSON 对象,绝对不要包含任何 Markdown 标记(如 ```json。\nJSON 格式如下:\n{ "reply": "简短的回复话术", "updatedHtml": "修改后的完整内部 HTML 代码" }'
: '你是一名专业的外科医生助理。请仔细阅读我提供的【全局手术报告参考内容】,并根据【医生指令】进行专业解答。\n重要指令严格返回合法的 JSON 对象。\nJSON 格式如下:\n{ "reply": "你的分析和回答" }';
```
**新代码**
```tsx
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. 明确要求必须包含 `reply``updatedHtml` 两个字段
3. 对话模式 systemPrompt 明确标注「当前处于【对话模式】」
4. 明确要求仅包含 `reply` 字段,不要返回 HTML
### 修改 3diffModal targetId 使用 actualTargetId
**原代码**line 936
```tsx
targetId: aiTargetRegion
```
**新代码**
```tsx
targetId: actualTargetId
```
**变更点**:确保 diff 弹窗确认注入时,使用实际修正后的区域 ID而非可能仍为 `'none'``aiTargetRegion`