feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,138 +1,138 @@
# Tool B - 鐥呭巻缁撴瀯鍖栨満鍣ㄤ汉 鎶€鏈<E282AC>€哄姟娓呭崟
> **创建日期:** 2025-12-03
> **状态:** 待处理
> **鍒涘缓鏃ユ湡锛?* 2025-12-03
> **鐘舵€侊細** 寰呭<E5AFB0>鐞?
> **浼樺厛绾э細** P1=楂樹紭鍏堢骇, P2=涓<>紭鍏堢骇, P3=浣庝紭鍏堢骇
---
## 馃搵 鎶€鏈<E282AC>€哄姟鍒楄〃
### **[P1] #1 - Excel导出与前端显示结果不一致**
### **[P1] #1 - Excel瀵煎嚭涓庡墠绔<EFBFBD>樉绀虹粨鏋滀笉涓€鑷?*
**问题描述:**
- 用户在步骤4交叉验证页面看到的提取结果与导出的Excel文件内容不一致
- 列顺序混乱,部分字段缺失或数据错位
**<EFBFBD><EFBFBD>鎻忚堪锛?*
- 鐢ㄦ埛鍦ㄦ<EFBFBD>楠?浜ゅ弶楠岃瘉椤甸潰鐪嬪埌鐨勬彁鍙栫粨鏋滐紝涓庡<E6B693>鍑虹殑Excel鏂囦欢鍐呭<E98D90>涓嶄竴鑷?
- 鍒楅『搴忔贩涔憋紝閮ㄥ垎瀛楁<EFBFBD>缂哄け鎴栨暟鎹<EFBFBD>敊浣?
**重现步骤:**
**閲嶇幇姝ラ<EFBFBD>锛?*
1. 瀹屾垚鍙屾ā鍨嬫彁鍙栧苟杩涘叆姝ラ<E5A79D>4
2. 鐐瑰嚮"瀵煎嚭褰撳墠缁撴灉"鎴栧湪姝ラ<E5A79D>5鐐瑰嚮"涓嬭浇缁撴灉Excel"
3. 鎵撳紑Excel锛屽<E9949B>姣斿墠绔<E5A2A0>樉绀虹殑缁撴灉
**根本原因:**
**鏍规湰鍘熷洜锛?*
- JavaScript瀵硅薄灞曞紑`...extractedData`鏃堕『搴忎笉鍥哄畾
- 未按模板定义的字段顺序构建Excel
- <EFBFBD>寜妯℃澘瀹氫箟鐨勫瓧娈甸『搴忔瀯寤篍xcel鍒?
**褰撳墠鐘舵€侊細**
- ✅ 已部分修复按targetFields顺序导出
- ❌ 仍需验证:多次导出结果是否稳定一致
- 鉁?宸查儴鍒嗕慨澶嶏細鎸塼argetFields椤哄簭瀵煎嚭
- 鉂?浠嶉渶楠岃瘉锛氬<E9949B>娆″<E5A886>鍑虹粨鏋滄槸鍚︾ǔ瀹氫竴鑷?
**解决方案:**
1. 严格按照`task.targetFields`定义的字段顺序导出
**喅鏂规<EFBFBD>锛?*
1. 涓ユ牸鎸夌収`task.targetFields`瀹氫箟鐨勫瓧娈甸『搴忓<EFBFBD>鍑?
2. 娣诲姞琛ㄥご鏍峰紡锛堝姞绮椼€佸喕缁撻<E7BC81>琛岋級
3. 添加数据验证(确保所有字段都存在)
3. 娣诲姞鏁版嵁楠岃瘉锛堢‘淇濇墍鏈夊瓧娈甸兘瀛樺湪锛?
4. 娣诲姞瀵煎嚭娴嬭瘯鐢ㄤ緥
**预计工时:** 2小时
**影响范围:** 后端 ExtractionController.exportResults方法
**棰勮<EFBFBD>宸ユ椂锛?* 2灏忔椂
**褰卞搷鑼冨洿锛?* 鍚庣<E98D9A> ExtractionController.exportResults鏂规硶
---
### **[P2] #2 - 步骤3进度条显示不够细腻**
### **[P2] #2 - 姝ラ<EFBFBD>3杩涘害鏉℃樉绀轰笉澶熺粏鑵?*
**问题描述:**
- 当前进度条直接从0%跳到100%,缺少中间过程
**<EFBFBD><EFBFBD>鎻忚堪锛?*
- 褰撳墠杩涘害鏉洿鎺ヤ粠0%璺冲埌100%锛岀己灏戜腑闂磋繃绋?
- 鐢ㄦ埛鏃犳硶鎰熺煡澶фā鍨嬫<E98DA8>鍦ㄥ<E98DA6>鐞嗙<E9909E>鍑犳潯璁板綍
- 没有实时反馈当前处理状态(如"正在处理第3/9条"
- 娌℃湁瀹炴椂鍙嶉<EFBFBD>褰撳墠澶勭悊鐘舵€侊紙濡?姝e湪澶勭悊绗?/9鏉?锛?
**期望效果:**
**鏈熸湜鏁堟灉锛?*
```
鎻愬彇杩涘害: 33% (3/9鏉″凡瀹屾垚)
日志输出:
鏃ュ織杈撳嚭锛?
[13:43:12] 姝e湪鍒涘缓鎻愬彇浠诲姟...
[13:43:12] 浠诲姟鍒涘缓鎴愬姛 (ID: xxx)
[13:43:12] 鍒濆<E98D92>鍖栧弻妯″瀷寮曟搸 (DeepSeek-V3 & Qwen-Max)...
[13:43:13] [1/9] 正在提取: 【右肺下叶】浸润性腺癌...
[13:43:18] [1/9] ✅ 提取完成 (DeepSeek: 549 tokens, Qwen: 627 tokens)
[13:43:19] [2/9] 正在提取: 【右肺上叶】浸润性腺癌...
[13:43:24] [2/9] ✅ 提取完成 (DeepSeek: 486 tokens, Qwen: 551 tokens)
[13:43:13] [1/9] 姝e湪鎻愬彇: 銆愬彸鑲轰笅鍙躲€戞蹈娑︽€ц吅鐧?..
[13:43:18] [1/9] 鉁?鎻愬彇瀹屾垚 (DeepSeek: 549 tokens, Qwen: 627 tokens)
[13:43:19] [2/9] 姝e湪鎻愬彇: 銆愬彸鑲轰笂鍙躲€戞蹈娑︽€ц吅鐧?..
[13:43:24] [2/9] 鉁?鎻愬彇瀹屾垚 (DeepSeek: 486 tokens, Qwen: 551 tokens)
...
[13:43:30] PII 鑴辨晱瀹屾垚
[13:43:30] ✅ 所有记录提取完成!
[13:43:30] 鉁?鎵€鏈夎<E98F88>褰曟彁鍙栧畬鎴愶紒
```
**解决方案:**
**喅鏂规<EFBFBD>锛?*
**后端改动:**
**鍚庣<EFBFBD>鏀瑰姩锛?*
1. 鍦╜DualModelExtractionService.batchExtract`鐨刦or寰<72>幆涓<E5B986>紝姣忓<E5A7A3>鐞嗗畬涓€鏉¤<E98F89>褰曞氨鏇存柊杩涘害
2. 娣诲姞`currentItem`瀛楁<EFBFBD>鍒癟ask琛<EFBFBD>紙鍙<EFBFBD>€夛紝鐢ㄤ簬瀹炴椂鏄剧ず褰撳墠澶勭悊鐨勮<EFBFBD>褰曪級
3. 鎴栬€呬娇鐢≧edis瀛樺偍瀹炴椂杩涘害淇℃伅锛堟洿浜戝師鐢燂級
**前端改动:**
**鍓嶇<EFBFBD>鏀瑰姩锛?*
1.<><E69D9E>API鏃讹紝瑙`processedCount`鍜宍totalCount`
2. 鍔ㄦ€佺敓鎴愭棩蹇楋細`[${processedCount}/${totalCount}] 姝e湪鎻愬彇...`
3. 进度条平滑过渡(CSS transition
3. 杩涘害鏉″钩婊戣繃娓★紙CSS transition锛?
**预计工时:** 3小时
**影响范围:**
**棰勮<EFBFBD>宸ユ椂锛?* 3灏忔椂
**褰卞搷鑼冨洿锛?*
- 鍚庣<E98D9A>锛欴ualModelExtractionService.batchExtract
- 鍓嶇<E98D93>锛歋tep3Processing.tsx
---
### **[P1] #3 - Excel文件预处理与脏数据清洗**
### **[P1] #3 - Excel鏂囦欢棰勫<EFBFBD>鐞嗕笌鑴忔暟鎹<EFBFBD>竻娲?*
**问题描述:**
医疗科研场景下Excel文件质量参差不齐存在大量脏数据导致解析失败或结果错误。
**<EFBFBD><EFBFBD>鎻忚堪锛?*
鍖荤枟绉戠爺鍦烘櫙涓嬶紝Excel鏂囦欢璐ㄩ噺鍙傚樊涓嶉綈锛屽瓨鍦ㄥぇ閲忚剰鏁版嵁瀵艰嚧瑙瀽澶辫触鎴栫粨鏋滈敊璇<EFBFBD>€?
#### **子问题1表头特殊字符**
- **现象:** 列名包含换行符`\n`、空格、制表符等,导致列名匹配失败
- **示例:** `"病人ID\n(Patient ID)"` → 前端下拉框显示异常
- **影响:** 用户无法选择正确的列
#### **瀛愰棶棰?锛氳〃澶寸壒娈婂瓧绗?*
- **鐜拌薄锛?* 鍒楀悕鍖呭惈鎹㈣<E98EB9><EFBFBD>\n`銆佺┖鏍笺€佸埗琛ㄧ<E7909B>绛夛紝瀵艰嚧鍒楀悕鍖归厤澶辫触
- **绀轰緥锛?* `"鐥呬汉ID\n(Patient ID)"` 鈫?鍓嶇<E98D93>涓嬫媺妗嗘樉绀哄紓甯?
- **褰卞搷锛?* 鐢ㄦ埛鏃犳硶閫夋嫨姝g‘鐨勫垪
#### **子问题2公式 (Formulas)**
- **现象:** 单元格包含公式`=A1+B1`xlsx库读取时返回公式文本而非计算结果
- **示例:**
#### **瀛愰棶棰?锛氬叕寮?(Formulas)**
- **鐜拌薄锛?* 鍗曞厓鏍煎寘鍚<E5AF98>叕寮廯=A1+B1`锛寈lsx搴撹<E690B4>鍙栨椂杩斿洖鍏<E6B496>紡鏂囨湰鑰岄潪璁畻缁撴灉
- **绀轰緥锛?*
- 鍘熷<E98D98>鍊硷細`=SUM(A1:A10)`
- 读取结果:字符串`"=SUM(A1:A10)"`(而非数字)
- 外部引用:`=[外部文件]Sheet1!A1``#REF!`
- **影响:** 数值型字段(如年龄、血糖值)变成文本,无法统计
- 璇诲彇缁撴灉锛氬瓧绗︿覆`"=SUM(A1:A10)"`锛堣€岄潪鏁板瓧锛?
- 澶栭儴寮曠敤锛歚=[澶栭儴鏂囦欢]Sheet1!A1` 鈫?`#REF!`
- **褰卞搷锛?* 鏁板€煎瀷瀛楁<E7809B>锛堝<E9949B>骞撮緞銆佽<E98A86>绯栧€硷級鍙樻垚鏂囨湰锛屾棤娉曠粺璁?
#### **子问题3合并单元格 (Merged Cells)**
- **现象:** 医生习惯合并"住院号"列,对应多行化验记录
- **示例:**
#### **瀛愰棶棰?锛氬悎骞跺崟鍏冩牸 (Merged Cells)**
- **鐜拌薄锛?* 鍖荤敓涔犳儻鍚堝苟"浣忛櫌鍙?鍒楋紝瀵瑰簲澶氳<E6BEB6>鍖栭獙璁板綍
- **绀轰緥锛?*
```
住院号 检查项目 结果
H001 血常规 正常 ← 只有这行有住院号
(合并) 肝功能 异常 ← 这行住院号为null
(合并) 肾功能 正常 ← 这行住院号为null
浣忛櫌鍙? 妫€鏌ラ」鐩? 缁撴灉
H001 琛€甯歌<EFBFBD> 姝e父 鈫?鍙<>湁杩欒<E69DA9>鏈変綇闄㈠彿
(鍚堝苟) 鑲濆姛鑳? 寮傚父 鈫?杩欒<E69DA9>浣忛櫌鍙蜂负null
(鍚堝苟) 鑲惧姛鑳? 姝e父 鈫?杩欒<E69DA9>浣忛櫌鍙蜂负null
```
- **影响:** 后续行的关联字段丢失,无法追溯到患者
- **褰卞搷锛?* 鍚庣画琛岀殑鍏宠仈瀛楁<E7809B>涓㈠け锛屾棤娉曡拷婧<E68BB7>埌鎮€?
#### **子问题4日期地狱 (Date Parsing Hell)**
- **现象:** Excel日期存储为数字(Serial Number),或多种文本格式
- **示例:**
- `44927` → 应该解析为 `2023-01-01`
#### **瀛愰棶棰?锛氭棩鏈熷湴鐙?(Date Parsing Hell)**
- **鐜拌薄锛?* Excel鏃ユ湡瀛樺偍涓烘暟瀛楋紙Serial Number锛夛紝鎴栧<EFBFBD>绉嶆枃鏈<EFBFBD>牸寮?
- **绀轰緥锛?*
- `44927` 鈫?搴旇<E690B4>瀽涓?`2023-01-01`
- `2023.1.1`锛堟枃鏈<E69E83>
- `2023年1月1日`(中文)
- `2023骞?鏈?鏃<>锛堜腑鏂囷級
- `Jan 1, 2023`锛堣嫳鏂囷級
- **影响:** 日期字段无法排序、筛选、统计
- **褰卞搷锛?* 鏃ユ湡瀛楁<E7809B>鏃犳硶鎺掑簭銆佺瓫閫夈€佺粺璁?
#### **子问题5不可见字符与脏文本 (Ghost Characters)**
- **现象:** 看起来是"男",实际包含不可见字符
- **示例:**
- `"男 "` (尾部空格)
#### **瀛愰棶棰?锛氫笉鍙<E7AC89><E98D99>瀛楃<E7809B>涓庤剰鏂囨湰 (Ghost Characters)**
- **鐜拌薄锛?* 鐪嬭捣鏉ユ槸"鐢?锛屽疄闄呭寘鍚<E5AF98>笉鍙<E7AC89><E98D99>瀛楃<E7809B>
- **绀轰緥锛?*
- `"鐢?"` (灏鹃儴绌烘牸)
- `"鐢穃u200b"` (闆跺<E99786>绌烘牸 Zero-Width Space)
- `"鐢穃ufeff"` (BOM瀛楃<E7809B>)
- **影响:** 条件判断失败:`if (sex === '男')` → false
- **医学场景特例:**
- 化验单复制粘贴时带入富文本格式
- **褰卞搷锛?* 鏉′欢鍒ゆ柇澶辫触锛歚if (sex === '鐢?)` 鈫?false
- **鍖诲<E98D96>鍦烘櫙鐗逛緥锛?*
- 鍖栭獙鍗曞<E98D97>鍒剁矘璐存椂甯﹀叆瀵屾枃鏈<E69E83>牸寮?
- 涓嶅悓鍖婚櫌HIS绯荤粺瀵煎嚭缂栫爜涓嶇粺涓€
**解决方案:**
**喅鏂规<EFBFBD>锛?*
#### **架构设计独立的Excel预处理服务**
#### **鏋舵瀯璁捐<EFBFBD>锛氱嫭绔嬬殑Excel棰勫<EFBFBD>鐞嗘湇鍔?*
```typescript
// backend/src/modules/dc/services/ExcelPreprocessor.ts
export class ExcelPreprocessor {
@@ -143,24 +143,24 @@ export class ExcelPreprocessor {
return headers.map(h => h
.replace(/[\n\r\t]/g, ' ') // 绉婚櫎鎹㈣<E98EB9>銆佸埗琛ㄧ<E7909B>
.trim() // 鍘婚櫎棣栧熬绌烘牸
.replace(/\s+/g, ' ') // 多个空格合并为一个
.replace(/\s+/g, ' ') // 澶氫釜绌烘牸鍚堝苟涓轰竴涓?
);
}
/**
* 处理公式单元格
* 澶勭悊鍏<EFBFBD>紡鍗曞厓鏍?
*/
processFormulas(worksheet: xlsx.WorkSheet): void {
// 使用 xlsx { cellFormula: false } 选项
// 或手动遍历单元格,计算公式结果
// 浣跨敤 xlsx 鐨?{ cellFormula: false } 閫夐」
// 鎴栨墜鍔ㄩ亶鍘嗗崟鍏冩牸锛岃<EFBFBD>绠楀叕寮忕粨鏋?
}
/**
* 展开合并单元格
* 灞曞紑鍚堝苟鍗曞厓鏍?
*/
unflattenMergedCells(worksheet: xlsx.WorkSheet): void {
// 1. 找到所有合并区域 worksheet['!merges']
// 2. 将主单元格的值填充到所有子单元格
// 1. 鎵惧埌鎵€鏈夊悎骞跺尯鍩?worksheet['!merges']
// 2. 灏嗕富鍗曞厓鏍肩殑鍊煎~鍏呭埌鎵€鏈夊瓙鍗曞厓鏍?
}
/**
@@ -168,7 +168,7 @@ export class ExcelPreprocessor {
*/
normalizeDates(value: any): string | null {
if (typeof value === 'number') {
// Excel Serial Number ISO Date
// Excel Serial Number 鈫?ISO Date
return this.excelSerialToDate(value);
}
if (typeof value === 'string') {
@@ -181,84 +181,84 @@ export class ExcelPreprocessor {
}
/**
* 清除不可见字符
* 娓呴櫎涓嶅彲瑙佸瓧绗?
*/
cleanInvisibleChars(text: string): string {
return text
.replace(/\u200b/g, '') // 闆跺<E99786>绌烘牸
.replace(/\ufeff/g, '') // BOM
.replace(/\u00a0/g, ' ') // 不间断空格 → 普通空格
.replace(/\u00a0/g, ' ') // 涓嶉棿鏂<EFBFBD>┖鏍?鈫?鏅<>€氱┖鏍?
.trim();
}
}
```
#### **使用位置:**
1. **uploadFile API** - 上传后立即预处理,返回清洗后的列名
2. **healthCheck API** - 使用清洗后的数据进行检查
#### **浣跨敤浣嶇疆锛?*
1. **uploadFile API** - 涓婁紶鍚庣珛鍗抽<EFBFBD>澶勭悊锛岃繑鍥炴竻娲楀悗鐨勫垪鍚?
2. **healthCheck API** - 浣跨敤娓呮礂鍚庣殑鏁版嵁杩涜<EFBFBD>妫€鏌?
3. **createTask API** - 浣跨敤娓呮礂鍚庣殑鏁版嵁鍒涘缓items
**预计工时:** 16小时复杂度高需要大量测试
**影响范围:**
- 新增:`ExcelPreprocessor.ts` (~400行)
**棰勮<EFBFBD>宸ユ椂锛?* 16灏忔椂锛堝<E9949B>鏉傚害楂橈紝闇€瑕佸ぇ閲忔祴璇曪級
**褰卞搷鑼冨洿锛?*
- 鏂板<E98F82>锛歚ExcelPreprocessor.ts` (~400琛?
-<>敼锛歚ExtractionController.ts` 鐨勬枃浠跺<E6B5A0>鐞嗛€昏緫
- 娴嬭瘯锛氳<E9949B>鐩栧悇绉嶈剰鏁版嵁鍦烘櫙
**依赖:**
- xlsx库的高级功能cellFormula、!merges等)
**渚濊禆锛?*
- xlsx搴撶殑楂樼骇鍔熻兘锛坈ellFormula銆?merges绛夛級
- dayjs鎴杁ate-fns锛堟棩鏈熻В鏋愶級
---
### **[P2] #4 - 支持用户自定义提取模板**
### **[P2] #4 - <EFBFBD>寔鐢ㄦ埛鑷<EFBFBD>畾涔夋彁鍙栨ā鏉?*
**问题描述:**
当前系统只支持3个预设模板肺癌病理、糖尿病入院、高血压门诊无法满足用户的多样化需求。
**<EFBFBD><EFBFBD>鎻忚堪锛?*
褰撳墠绯荤粺鍙<EFBFBD>敮鎸?涓<><E6B693>璁炬ā鏉匡紙鑲虹檶鐥呯悊銆佺硸灏跨梾鍏ラ櫌銆侀珮琛€鍘嬮棬璇婏級锛屾棤娉曟弧瓒崇敤鎴风殑澶氭牱鍖栭渶姹傘€?
**闇€姹傚満鏅<E6BA80>**
1. 科研人员研究罕见病(如:系统性红斑狼疮、重症肌无力)
2. 需要提取的字段与预设模板不同
3. 每个研究项目的数据规范可能不同
1. 绉戠爺浜哄憳鐮旂┒缃曡<E7BC83>鐥咃紙濡傦細绯荤粺鎬х孩鏂戠嫾鐤<E5ABBE>€侀噸鐥囪倢鏃犲姏锛?
2. 闇€瑕佹彁鍙栫殑瀛楁<E7809B>涓庨<E6B693>璁炬ā鏉夸笉鍚?
3. 姣忎釜鐮旂┒椤圭洰鐨勬暟鎹<E69A9F><E98EB9>鑼冨彲鑳戒笉鍚?
**期望功能:**
**鏈熸湜鍔熻兘锛?*
#### **1. 前端:自定义模板编辑器**
#### **1. 鍓嶇<EFBFBD>锛氳嚜瀹氫箟妯℃澘缂栬緫鍣?*
```
姝ラ<EFBFBD>2.1锛氶€夋嫨妯℃澘鏉ユ簮
- [ ] 浣跨敤绯荤粺棰勮<E6A3B0>妯℃澘
- [x] 创建自定义模板
- [x] 鍒涘缓鑷<EFBFBD>畾涔夋ā鏉?
步骤2.2:定义模板信息
姝ラ<EFBFBD>2.2锛氬畾涔夋ā鏉夸俊鎭?
- 妯℃澘鍚嶇О锛歔鎴戠殑鑲虹檶鐮旂┒妯℃澘]
- 鐤剧梾绫诲瀷锛歔鑷<E6AD94>畾涔夛細绯荤粺鎬х孩鏂戠嫾鐤甝
- 鎶ュ憡绫诲瀷锛歔鑷<E6AD94>畾涔夛細瀹為獙瀹ゆ<E780B9><EFBFBD>
姝ラ<EFBFBD>2.3锛氬畾涔夋彁鍙栧瓧娈碉紙鍙<EFBFBD><EFBFBD>鍖栫紪杈戯級
┌─────────────────────────────────────┐
│ 字段1: [抗核抗体滴度]
│ 描述: [1:320, 1:640]
│ 宽度: [w-32]
│ [ 删除 ]
├─────────────────────────────────────┤
│ 字段2: [补体C3]
│ 描述: [单位g/L]
│ [ 删除 ]
└─────────────────────────────────────┘
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?瀛楁<E7809B>1: [鎶楁牳鎶椾綋婊村害] 鈹?
鈹?鎻忚堪: [濡?1:320, 1:640] 鈹?
鈹?瀹藉害: [w-32] 鈻? 鈹?
鈹?[ 鍒犻櫎 ] 鈹?
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?瀛楁<E7809B>2: [琛ヤ綋C3] 鈹?
鈹?鎻忚堪: [鍗曚綅g/L] 鈹?
鈹?[ 鍒犻櫎 ] 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
[+ 娣诲姞瀛楁<E7809B>]
步骤2.4AI生成Prompt自动化
[ 🤖 让AI帮我生成提示词 ]
姝ラ<EFBFBD>2.4锛欰I鐢熸垚Prompt锛堣嚜鍔ㄥ寲锛?
[ <EFBFBD> 璁〢I甯<49>垜鐢熸垚鎻愮ず璇?]
后台自动生成:
鍚庡彴鑷<EFBFBD>姩鐢熸垚锛?
鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣
你是一名风湿免疫科专家。请从以下系统性红斑狼疮
患者的实验室检查报告中提取关键信息。
浣犳槸涓€鍚嶉<EFBFBD>婀垮厤鐤<EFBFBD><EFBFBD>涓撳<EFBFBD>銆傝<EFBFBD>浠庝互涓嬬郴缁熸€х孩鏂戠嫾鐤?
€呯殑瀹為獙瀹ゆ<EFBFBD>鏌ユ姤鍛婁腑鎻愬彇鍏抽敭淇℃伅銆?
提取字段(必须返回以下所有字段):
鎻愬彇瀛楁<EFBFBD>锛堝繀椤昏繑鍥炰互涓嬫墍鏈夊瓧娈碉級锛?
- 鎶楁牳鎶椾綋婊村害锛氬<E9949B> 1:320, 1:640
- 琛ヤ綋C3锛氬崟浣峠/L
**输出格式严格的JSON格式**
**杈撳嚭鏍煎紡锛氫弗鏍肩殑JSON鏍煎紡锛?*
```json
{
"鎶楁牳鎶椾綋婊村害": "...",
@@ -273,7 +273,7 @@ export class ExcelPreprocessor {
#### **2. 鍚庣<E98D9A>锛氭ā鏉跨<E98F89>鐞咥PI**
```typescript
// 鏂板<E98F82>API绔<49>
POST /api/v1/dc/tool-b/templates // 创建自定义模板
POST /api/v1/dc/tool-b/templates // 鍒涘缓鑷<EFBFBD>畾涔夋ā鏉?
PUT /api/v1/dc/tool-b/templates/:id // 鏇存柊妯℃澘
DELETE /api/v1/dc/tool-b/templates/:id // 鍒犻櫎妯℃澘
GET /api/v1/dc/tool-b/templates/:id // 鑾峰彇妯℃澘璇︽儏
@@ -282,10 +282,10 @@ GET /api/v1/dc/tool-b/templates/:id // 获取模板详情
POST /api/v1/dc/tool-b/templates/generate-prompt
Request:
{
"diseaseType": "系统性红斑狼疮",
"reportType": "实验室检查",
"diseaseType": "绯荤粺鎬х孩鏂戠嫾鐤?,
"reportType": "瀹為獙瀹ゆ<EFBFBD>鏌?,
"fields": [
{ "name": "抗核抗体滴度", "desc": "1:320, 1:640" },
{ "name": "鎶楁牳鎶椾綋婊村害", "desc": "濡?1:320, 1:640" },
{ "name": "琛ヤ綋C3", "desc": "鍗曚綅g/L" }
]
}
@@ -299,27 +299,27 @@ Response:
#### **3. AI Prompt鐢熸垚閫昏緫**
```typescript
// 使用元PromptMeta-Prompt
// 浣跨敤鍏働rompt锛圡eta-Prompt锛?
async generatePrompt(
diseaseType: string,
reportType: string,
fields: { name: string; desc: string }[]
): Promise<string> {
const metaPrompt = `
你是一名医学AI Prompt工程师。请为病历结构化提取任务生成专业的提示词。
浣犳槸涓€鍚嶅尰瀛<EFBFBD>I Prompt宸ョ▼甯堛€傝<E282AC>涓虹梾鍘嗙粨鏋勫寲鎻愬彇浠诲姟鐢熸垚涓撲笟鐨勬彁绀鸿瘝銆?
任务背景:
- 疾病类型:${diseaseType}
- 报告类型:${reportType}
浠诲姟鑳屾櫙锛?
- 鐤剧梾绫诲瀷锛?{diseaseType}
- 鎶ュ憡绫诲瀷锛?{reportType}
提取字段:
${fields.map((f, i) => `${i + 1}. ${f.name}${f.desc}`).join('\n')}
鎻愬彇瀛楁<EFBFBD>锛?
${fields.map((f, i) => `${i + 1}. ${f.name}锛?{f.desc}`).join('\n')}
要求:
瑕佹眰锛?
1. 妯℃嫙璇ョ柧鐥呴<E990A5>鍩熺殑涓撳<E6B693>瑙掕壊
2. 清晰说明每个字段的提取规则
2. 娓呮櫚璇存槑姣忎釜瀛楁<E7809B>鐨勬彁鍙栬<E98D99>鍒?
3. 瑕佹眰杈撳嚭涓ユ牸鐨凧SON鏍煎紡
4. 处理"未提及"的情况
4. 澶勭悊"鏈<>彁鍙?鐨勬儏鍐?
璇风敓鎴愬畬鏁寸殑Prompt銆俙;
@@ -334,103 +334,104 @@ ${fields.map((f, i) => `${i + 1}. ${f.name}${f.desc}`).join('\n')}
```
**鎶€鏈<E282AC>寒鐐癸細**
- ✨ **Prompt即代码(Prompt-as-Code**模板可版本控制、A/B测试
- ✨ **AI生成AI的PromptMeta-Prompt**:降低用户门槛
- ✨ **模板市场(未来)**:用户可分享、下载优质模板
- 鉁?**Prompt鍗充唬鐮侊紙Prompt-as-Code锛?*锛氭ā鏉垮彲鐗堟湰鎺у埗銆丄/B娴嬭瘯
- 鉁?**AI鐢熸垚AI鐨凱rompt锛圡eta-Prompt锛?*锛氶檷浣庣敤鎴烽棬妲?
- 鉁?**妯℃澘甯傚満锛堟湭鏉ワ級**锛氱敤鎴峰彲鍒嗕韩銆佷笅杞戒紭璐ㄦā鏉?
**预计工时:** 12小时
**影响范围:**
- 新增:`CustomTemplateService.ts` (~300行)
- 新增:`PromptGeneratorService.ts` (~200行)
**棰勮<EFBFBD>宸ユ椂锛?* 12灏忔椂
**褰卞搷鑼冨洿锛?*
- 鏂板<E98F82>锛歚CustomTemplateService.ts` (~300琛?
- 鏂板<E98F82>锛歚PromptGeneratorService.ts` (~200琛?
- 鍓嶇<E98D93>锛歋tep2Schema.tsx 鏂板<E98F82><EFBFBD>畾涔夋ā鏉跨紪杈慤I
- 鏁版嵁搴擄細DCTemplate琛ㄥ凡鏀<E587A1>寔锛屾棤闇€鏀瑰姩
---
## 📊 优先级评估
## 馃搳 浼樺厛绾ц瘎浼?
| 债务ID | 问题 | 优先级 | 工时 | 影响用户 | 技术风险 |
| 鍊哄姟ID | <EFBFBD><EFBFBD> | 浼樺厛绾?| 宸ユ椂 | 褰卞搷鐢ㄦ埛 | 鎶€鏈<E282AC><E98F88>闄?|
|--------|------|--------|------|----------|----------|
| #1 | Excel导出不一致 | P1 | 2h | 高(核心功能) | 低 |
| #2 | 进度条显示优化 | P2 | 3h | 中(体验优化) | 低 |
| #3 | Excel预处理 | P1 | 16h | 高(数据质量) | 中 |
| #4 | 自定义模板 | P2 | 12h | 中(扩展性) | |
| #1 | Excel瀵煎嚭涓嶄竴鑷?| P1 | 2h | 楂橈紙鏍稿績鍔熻兘锛?| 浣?|
| #2 | 杩涘害鏉℃樉绀轰紭鍖?| P2 | 3h | <EFBFBD>紙浣撻獙浼樺寲锛?| 浣?|
| #3 | Excel棰勫<EFBFBD>鐞?| P1 | 16h | 楂橈紙鏁版嵁璐ㄩ噺锛?| 涓?|
| #4 | <EFBFBD>畾涔夋ā鏉?| P2 | 12h | <EFBFBD>紙鎵╁睍鎬э級 | 涓?|
**总计:** 33小时约4个工作日
**鎬昏<EFBFBD>锛?* 33灏忔椂锛堢害4涓<34>伐浣滄棩锛?
---
## 馃幆 寤鸿<E5AFA4>澶勭悊椤哄簭
### **Sprint 1核心功能修复P1优先**
1. ✅ #1 - Excel导出修复2小时→ **立即处理**
2. #3 - Excel预处理16小时→ **分阶段实现**
- Phase 1表头清洗2小时
- Phase 2合并单元格展开4小时
- Phase 3公式处理3小时
- Phase 4日期统一3小时
- Phase 5不可见字符清理2小时
- Phase 6集成测试2小时
### **Sprint 1锛氭牳蹇冨姛鑳戒慨澶嶏紙P1浼樺厛锛?*
1. 鉁?#1 - Excel瀵煎嚭淇<EFBFBD><EFBFBD>锛?灏忔椂锛夆啋 **绔嬪嵆澶勭悊**
2. #3 - Excel棰勫<EFBFBD>鐞嗭紙16灏忔椂锛夆啋 **鍒嗛樁娈靛疄鐜?*
- Phase 1锛氳〃澶存竻娲楋紙2灏忔椂锛?
- Phase 2锛氬悎骞跺崟鍏冩牸灞曞紑锛?灏忔椂锛?
- Phase 3锛氬叕寮忓<EFBFBD>鐞嗭紙3灏忔椂锛?
- Phase 4锛氭棩鏈熺粺涓€锛?灏忔椂锛?
- Phase 5锛氫笉鍙<EFBFBD><EFBFBD>瀛楃<EFBFBD>娓呯悊锛?灏忔椂锛?
- Phase 6锛氶泦鎴愭祴璇曪紙2灏忔椂锛?
### **Sprint 2体验优化P2**
1. #2 - 进度条优化3小时
2. #4 - 自定义模板12小时
- Phase 1后端模板CRUD4小时
- Phase 2Prompt自动生成4小时
- Phase 3前端模板编辑器4小时
### **Sprint 2锛氫綋楠屼紭鍖栵紙P2锛?*
1. #2 - 杩涘害鏉紭鍖栵紙3灏忔椂锛?
2. #4 - <EFBFBD>畾涔夋ā鏉匡紙12灏忔椂锛?
- Phase 1锛氬悗绔<EFBFBD>ā鏉緾RUD锛?灏忔椂锛?
- Phase 2锛歅rompt<EFBFBD>姩鐢熸垚锛?灏忔椂锛?
- Phase 3锛氬墠绔<EFBFBD>ā鏉跨紪杈戝櫒锛?灏忔椂锛?
---
## 馃挕 闀挎湡浼樺寲寤鸿<E5AFA4>
### **1. 鏁版嵁璐ㄩ噺璇勫垎绯荤粺**
为上传的Excel文件打分0-100分
- ✅ 90-100优质数据直接处理
涓轰笂浼犵殑Excel鏂囦欢鎵撳垎锛?-100鍒嗭級锛?
- 鉁?90-100锛氫紭璐ㄦ暟鎹<E69A9F>紝鐩存帴澶勭悊
- 鈿狅笍 60-89锛氫竴鑸<E7ABB4>川閲忥紝鎻愮ず鍙<E3819A>兘闂<E58598><E99782>
- ❌ 0-59低质量强制要求用户清洗后再上传
- 鉂?0-59锛氫綆璐ㄩ噺锛屽己鍒惰<E98D92>姹傜敤鎴锋竻娲楀悗鍐嶄笂浼?
### **2. Excel模板标准化**
提供标准Excel模板下载用户按模板填写减少脏数据
### **2. Excel妯℃澘鏍囧噯鍖?*
鎻愪緵鏍囧噯Excel妯℃澘涓嬭浇锛岀敤鎴锋寜妯℃澘濉<EFBFBD>啓锛屽噺灏戣剰鏁版嵁锛?
```
病历结构化标准模板 v1.0.xlsx
- 表头行冻结
- 数据验证(下拉框)
鐥呭巻缁撴瀯鍖栨爣鍑嗘ā鏉?v1.0.xlsx
- 琛ㄥご琛屽喕缁?
- 鏁版嵁楠岃瘉锛堜笅鎷夋<EFBFBD>锛?
- 瀛楁<E7809B>璇存槑锛堟壒娉<E5A392>
- 绀轰緥鏁版嵁
```
### **3. 鏅鸿兘淇<E58598><E6B787>寤鸿<E5AFA4>**
检测到问题时AI给出修复建议
妫€娴嬪埌闂<EFBFBD><EFBFBD>鏃讹紝AI缁欏嚭淇<EFBFBD><EFBFBD>寤鸿<EFBFBD>锛?
```
⚠️ 检测到22个合并单元格可能导致数据丢失
建议操作:
[ 自动展开合并单元格 ] [ 忽略并继续 ]
鈿狅笍 妫€娴嬪埌22涓<32>悎骞跺崟鍏冩牸锛屽彲鑳藉<E991B3>鑷存暟鎹<E69A9F>涪澶?
寤鸿<EFBFBD>鎿嶄綔锛?
[ <EFBFBD>姩灞曞紑鍚堝苟鍗曞厓鏍?] [ 蹇界暐骞剁户缁?]
```
---
## 📝 开发记录
## 馃摑 寮€鍙戣<E98D99>褰?
| 日期 | 处理内容 | 状态 | 备注 |
| 鏃ユ湡 | 澶勭悊鍐呭<E98D90> | 鐘舵€?| 澶囨敞 |
|------|---------|------|------|
| 2025-12-03 | 创建技术债务文档 | ✅ | 初始记录4个问题 |
| 2025-12-03 | #1 Excel导出顺序修复 | 🔄 | 已修改代码,待验证 |
| - | #2 进度条优化 | ⏸️ | 待开发 |
| - | #3 Excel预处理 | ⏸️ | 待开发 |
| - | #4 自定义模板 | ⏸️ | 待开发 |
| 2025-12-03 | 鍒涘缓鎶€鏈<EFBFBD>€哄姟鏂囨。 | 鉁?| 鍒濆<E98D92>璁板綍4涓<34>棶棰?|
| 2025-12-03 | #1 Excel瀵煎嚭椤哄簭淇<EFBFBD><EFBFBD> | 馃攧 | 宸蹭慨鏀逛唬鐮侊紝寰呴獙璇?|
| - | #2 杩涘害鏉′紭鍖?| 鈴革笍 | 寰呭紑鍙?|
| - | #3 Excel棰勫<EFBFBD>鐞?| 鈴革笍 | 寰呭紑鍙?|
| - | #4 <EFBFBD>畾涔夋ā鏉?| 鈴革笍 | 寰呭紑鍙?|
---
## 馃敆 鐩稿叧鏂囨。
- [技术设计文档:工具 B](../02-技术设计/技术设计文档:工具%20B%20-%20病历结构化机器人%20(The%20AI%20Structurer).md)
- [API设计文档](../02-技术设计/API设计文档-DC模块完整版.md)
- [开发计划](../04-开发计划/DC模块Tool-B开发计划.md)
- [云原生开发规范](../../../04-开发规范/08-云原生开发规范.md)
- [鎶€鏈<EFBFBD><EFBFBD>璁℃枃妗細宸ュ叿 B](../02-鎶€鏈<E282AC><E98F88>璁?鎶€鏈<E282AC><E98F88>璁℃枃妗細宸ュ叿%20B%20-%20鐥呭巻缁撴瀯鍖栨満鍣ㄤ汉%20(The%20AI%20Structurer).md)
- [API璁捐<EFBFBD>鏂囨。](../02-鎶€鏈<EFBFBD><EFBFBD>璁?API璁捐<E79281>鏂囨。-DC妯″潡锛堝畬鏁寸増锛?md)
- [寮€鍙戣<EFBFBD>鍒抅(../04-寮€鍙戣<E98D99>鍒?DC妯″潡Tool-B寮€鍙戣<E98D99>鍒?md)
- [浜戝師鐢熷紑鍙戣<EFBFBD>鑼僝(../../../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
---
**文档维护:** 每次处理技术债务时更新此文档
**鏂囨。缁存姢锛?* 姣忔<E5A7A3>澶勭悊鎶€鏈<E282AC>€哄姟鏃舵洿鏂版<E98F82>鏂囨。