feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

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

View File

@@ -1,22 +1,22 @@
# Tool C 技术债务清单
> **创建日期**: 2025-12-06
> **譛€蜷取峩譁?*: 2025-12-06
> **最后更新**: 2025-12-06
> **当前版本**: Day 3 MVP完成
> **莨伜<EFBFBD>郤ァ蛻<EFBFBD>コ?*: P0-邏ァ諤?| P1-驥崎ヲ<EFBFBD> | P2-荳ュ譛滉シ伜喧 | P3-髟ソ譛溯ァ<E6BAAF><EFBDA7>
> **优先级分级**: P0-紧急 | P1-重要 | P2-中期优化 | P3-长期规划
---
## 📋 技术债务概览
| 郛門捷 | 蛟コ蜉。鬘?| 莨伜<E88EA8>郤?| 鬚<>ョ。蟾・譌カ | 蠖ア蜩崎激蝗エ | 隶。蛻呈慮髣エ |
| 编号 | 债务项 | 优先级 | 预计工时 | 影响范围 | 计划时间 |
|------|-------|--------|---------|---------|---------|
| TD-C-001 | Python Session迥カ諤∵戟荵<EFBFBD> | P1 | 1螟?| 遞ウ螳壽€?| Day 5-6 |
| TD-C-002 | 謨ー謐ョ迚域悽邂。逅<EFBFBD>ク主屓貊?| P2 | 2螟?| 蜉溯<E89C89> | Week 3 |
| TD-C-003 | 螟ァ譁<EFBFBD>サカ諤ァ閭ス莨伜喧 | P2 | 1.5螟?| 諤ァ閭ス | Week 3 |
| TD-C-001 | Python Session状态持久化 | P1 | 1天 | 稳定性 | Day 5-6 |
| TD-C-002 | 数据版本管理与回滚 | P2 | 2天 | 功能 | Week 3 |
| TD-C-003 | 大文件性能优化 | P2 | 1.5天 | 性能 | Week 3 |
| TD-C-004 | AI Prompt持续优化 | P1 | 持续 | 质量 | 持续 |
| TD-C-005 | 蜑咲ォッ蟇ケ隸拔I蠑€蜿?| P0 | 3螟?| 蜉溯<E89C89> | Day 4-5 |
| TD-C-006 | 螟肴揩蝨コ譎ッPrompt莨伜喧 | P2 | 0.5螟?| 雍ィ驥<EFBDA8> | Day 4 |
| TD-C-005 | 前端对话UI开发 | P0 | 3天 | 功能 | Day 4-5 |
| TD-C-006 | 复杂场景Prompt优化 | P2 | 0.5天 | 质量 | Day 4 |
---
@@ -26,19 +26,26 @@
**当前问题**:
```python
# 蠖灘燕螳樒鴫<EFBFBD><EFBFBD>蟄倡サエ謚、Session迥カ諤?session_data = {} # 蟄伜惠蜀<E683A0>ュ倅ク?
# 髣ョ鬚假シ?# 1. Python譛榊苅驥榊星 竊?Session謨ー謐ョ荳「螟ア
# 2. 螟壼ョ樔セ矩Κ鄂?竊?雍溯スス蝮<EFBDBD>。。莨壼ッシ閾エ迥カ諤∽ク堺ク€閾?# 3. 譌<>豕募屓貊壼芦蜴<E88AA6>彰迚域<E8BF9A>?```
# 当前实现内存维护Session状态
session_data = {} # 存在内存中
# 问题:
# 1. Python服务重启 → Session数据丢失
# 2. 多实例部署 → 负载均衡会导致状态不一致
# 3. 无法回滚到历史版本
```
**影响**:
- 用户体验差:重启服务后需重新上传文件
- 无法云原生部署:不支持多实例
- 謨ー謐ョ螳牙<EFBFBD>諤ァ<EFBFBD><EFBFBD>蟄俶妙逕オ蜊ウ荳?
- 数据安全性:内存断电即丢失
**优化方案**:
**譁ケ譯<EFBFBD>: Redis謖<EFBFBD><EFBFBD>?*<EFBFBD>域耳闕撰シ<EFBFBD>
**方案A: Redis持久化**(推荐)
```python
# 菴ソ逕ィRedis蟄伜おSession迥カ諤?import redis
# 使用Redis存储Session状态
import redis
import pickle
class SessionManager:
@@ -49,7 +56,7 @@ class SessionManager:
# 序列化DataFrame
serialized = pickle.dumps(dataframe)
# 蟄伜お蛻ーRedis<EFBFBD>?0蛻<30>帖霑<E5B896>
# 存储到Redis10分钟过期
self.redis_client.setex(
f"session:{session_id}",
600, # 10分钟
@@ -63,7 +70,7 @@ class SessionManager:
return None
```
**譁ケ譯<EFBFBD>: OSS謖∽ケ<EFBFBD><EFBFBD>?*
**方案B: OSS持久化**
```python
# 每次操作后保存到OSS
def save_to_oss(session_id, dataframe):
@@ -78,34 +85,40 @@ def save_to_oss(session_id, dataframe):
**实施计划**:
- Day 5: 实现Redis集成
- Day 6: 豬玖ッ穂ク朱Κ鄂?
- Day 6: 测试与部署
---
### TD-C-004: AI Prompt持续优化
**当前问题**:
- 10荳ェFew-shot遉コ萓句庄閭ス荳榊、溯ヲ<EFBFBD>尠謇€譛牙惻譎?- 譟蝉コ帛、肴揩蛹サ逍怜惻譎ッAI逅<49>ァ」荳榊㊥遑?- 莉」遐∫函謌占エィ驥丈セ晁オ縫eepSeek-V3諤ァ閭ス
- 10Few-shot示例可能不够覆盖所有场景
- 某些复杂医疗场景AI理解不准确
- 代码生成质量依赖DeepSeek-V3性能
**优化方向**:
**1. 謇ゥ螻彦ew-shot蠎?*
**1. 扩展Few-shot**
```python
# 蠖灘燕<EFBFBD>?0荳ェ遉コ萓?# 逶ョ譬<EFBDAE>シ?0-30荳ェ遉コ萓具シ悟<EFBDBC>邀サ蟄伜お
# 当前10个示例
# 目标20-30个示例分类存储
few_shot_library = {
"basic": [...], # 蝓コ遑€<EFBFBD>エ暦シ?0荳ェ<E88DB3><EFBDAA>
"medical": [...], # 蛹サ逍嶺ク謎ク夲シ?0荳ェ<E88DB3><EFBDAA>
"advanced": [...] # 鬮倡コァ蛻<EFBFBD><EFBFBD>?0荳ェ<E88DB3><EFBDAA>
"basic": [...], # 基础清洗10个
"medical": [...], # 医疗专业10个
"advanced": [...] # 高级分析10个
}
# 根据用户需求动态选择相关示例
def select_relevant_examples(user_message):
# 隸ュ荵牙源驟肴怙逶ク蜈ウ逧?荳ェ遉コ萓? ...
# 语义匹配最相关的5个示例
...
```
**2. 用户反馈收集**
```python
# 隶ー蠖柊I逕滓<EFBFBD>螟ア雍・逧<EFBFBD>惻譎?failed_cases = []
# 记录AI生成失败的场景
failed_cases = []
# 定期分析,添加新示例
def analyze_failures():
@@ -114,9 +127,12 @@ def analyze_failures():
# 更新System Prompt
```
**3. 螟壽ィ。蝙句、<EFBFBD>€?*
**3. 多模型备选**
```python
# 荳サ<EFBFBD>eepSeek-V3<EFBFBD>€ァ莉キ豈秘ォ假シ?# 螟<>シ哦PT-4<>郁エィ驥城ォ假シ梧<EFBDBC>譛ャ鬮假シ?# 螟<>シ咾laude-3.5<EFBFBD>井サ」遐∬<EFBFBD>蜉帛シコ<EFBFBD>?
# DeepSeek-V3(性价比高)
# 备GPT-4质量高成本高
# 备Claude-3.5(代码能力强)
if deepseek_fails:
retry_with_gpt4()
```
@@ -128,16 +144,21 @@ if deepseek_fails:
---
## <EFBFBD> P2: 荳ュ譛滉シ伜喧<EFBFBD>?-2荳ェ譛茨シ?
### TD-C-002: 謨ー謐ョ迚域悽邂。逅<EFBDA1>ク主屓貊?
## 🟡 P2: 中期优化1-2个月
### TD-C-002: 数据版本管理与回滚
**当前问题**:
- AI豈乗ャ。謫堺ス憺<EFBFBD>逶エ謗・菫ョ謾ケ蠖灘燕謨ー謐?- 譌<>豕墓彫髞€/蝗樊サ壼芦荵句燕迥カ諤?- 譌<>豕募ッケ豈比ク榊酔迚域悽
- AI每次操作都直接修改当前数据
- 无法撤销/回滚到之前状态
- 无法对比不同版本
**优化方案**:
**版本管理架构**:
```python
# 豈乗ャ。謫堺ス懷錘菫晏ュ伜ソォ辣?class DataVersionManager:
# 每次操作后保存快照
class DataVersionManager:
def save_version(self, session_id, dataframe, operation_desc):
version_id = str(uuid.uuid4())
@@ -145,7 +166,8 @@ if deepseek_fails:
oss_key = f"dc/tool-c/sessions/{session_id}/versions/{version_id}.parquet"
dataframe.to_parquet(oss_key)
# <EFBFBD>焚謐ョ蟄俶焚謐ョ蠎? db.save({
# 元数据存数据库
db.save({
"session_id": session_id,
"version_id": version_id,
"operation": operation_desc,
@@ -165,20 +187,20 @@ if deepseek_fails:
// 版本历史列表
<Timeline>
<TimelineItem>
迚域悽1: 荳贋シ<EFBFBD> (100?
版本1: 上传原始文件 (100)
</TimelineItem>
<TimelineItem>
迚域悽2: <EFBFBD>?(95? [
版本2: 删除缺失值 (95) []
</TimelineItem>
<TimelineItem>
迚域悽3: MI (95? []
版本3: 计算BMI (95) []
</TimelineItem>
</Timeline>
```
**成本估算**:
- 每个版本~1-5MBParquet压缩后
- 10荳ェ迚域<EFBFBD>?= 10-50MB
- 10个版本 = 10-50MB
- OSS成本¥0.01-0.05/Session
**实施计划**:
@@ -190,16 +212,21 @@ if deepseek_fails:
### TD-C-003: 大文件性能优化
**当前限制**:
- <EFBFBD>サカ螟ァ蟆擾シ?0MB
- 陦梧焚髯仙宛<EFBFBD>嘸50,000陦?- 蜑咲ォッ鬚<EFBDAF>ァ茨シ?00陦?
- 文件大小10MB
- 行数限制:~50,000行
- 前端预览100行
**优化目标**:
- <EFBFBD>サカ螟ァ蟆擾シ?0MB
- 陦梧焚髯仙宛<EFBFBD>?00,000陦?- 蜑咲ォッ鬚<EFBDAF>ァ茨シ夊劒諡滓サ壼<EFBDBB>?
**謚€譛ッ譁ケ譯?*:
- 文件大小50MB
- 行数限制500,000行
- 前端预览:虚拟滚动
**技术方案**:
**1. 流式处理**
```python
# <EFBFBD>摎隸サ蜿門、ァ譁<EFBFBD>サ?def process_large_file(file_path):
# 分块读取大文件
def process_large_file(file_path):
chunk_size = 10000 # 每次处理1万行
for chunk in pd.read_csv(file_path, chunksize=chunk_size):
@@ -213,13 +240,14 @@ if deepseek_fails:
import pyarrow as pa
import pyarrow.parquet as pq
# Node.js 竊?Python 謨ー謐ョ莨<EFBFBD><EFBFBD>
# 菴ソ逕ィArrow IPC譬シ蠑擾シ域ッ寧SON蠢?0-100蛟搾シ<EFBFBD>
# Node.js Python 数据传输
# 使用Arrow IPC格式比JSON快10-100倍)
```
**3. 前端虚拟滚动**
```typescript
// 菴ソ逕ィAG Grid<EFBFBD>劒諡滓サ壼<EFBFBD>?<AgGridReact
// 使用AG Grid的虚拟滚动
<AgGridReact
rowModelType="infinite"
cacheBlockSize={100}
maxBlocksInCache={10}
@@ -232,23 +260,31 @@ import pyarrow.parquet as pq
---
## <EFBFBD> P2: 荳ュ譛滉シ伜喧<EFBFBD>?-2荳ェ譛茨シ?
### TD-C-006: 螟肴揩蝨コ譎ッPrompt莨伜喧<E4BC9C><E596A7>ay 3豬玖ッ暮逡呻シ?
## 🟡 P2: 中期优化1-2个月
### TD-C-006: 复杂场景Prompt优化Day 3测试遗留
**当前问题**:
Day 3测试中2个复杂场景持续超时失败3次重试都失败
- **示例2数值列清洗**creatinine列处理包含`<0.1`等特殊符号)
- **遉コ萓<EFBFBD>7<EFBFBD>壽匱閭ス蜴サ驥?*<2A>域律譛溯ァ」譫?+ 謗貞コ<E8B29E> + 蜴サ驥搾シ?
- **示例7智能去重**(日期解析 + 排序 + 去重)
**失败原因分析**:
```
笶?遉コ萓<EFBDBA>2螟ア雍・: timeout of 60000ms exceeded
逕ィ謌キ髴€豎? 謚劃reatinine蛻鈴㈹逧<E388B9>撼謨ー蟄礼ャヲ蜿キ蜴サ謗会シ?0.1謖?.05<EFBFBD><EFBFBD>瑚スャ荳コ謨ー蛟シ邀サ蝙?
髣ョ鬚假シ? - 髴€豎よ緒霑ー螟肴揩<E882B4><E68FA9>3荳ェ蟄蝉ササ蜉。<E89C89>壼悉隨ヲ蜿キ + 迚ケ谿雁€シ螟<EFBDBC><E89E9F>?+ 邀サ蝙玖スャ謐「<E8AC90>? - AI逅<49>ァ」荳榊㊥遑ョ<E98191>檎函謌千噪莉」遐∵怏騾サ霎鷹漠隸ッ
❌ 示例2失败: timeout of 60000ms exceeded
用户需求: 把creatinine列里的非数字符号去掉<0.1按0.05处理,转为数值类型
问题:
- 需求描述复杂3个子任务去符号 + 特殊值处理 + 类型转换)
- AI理解不准确生成的代码有逻辑错误
- 3次重试仍无法修正
笶?遉コ萓<EFBDBA>7螟ア雍・: timeout of 60000ms exceeded
逕ィ謌キ髴€豎? 謖英atient_id蜴サ驥搾シ御ソ晉蕗check_date譛€譁ー逧<EFBDB0>ョー蠖<EFBDB0>
❌ 示例7失败: timeout of 60000ms exceeded
用户需求: 按patient_id去重保留check_date最新的记录
髣ョ鬚假シ? - 譌・譛溷<E8AD9B>蜿ッ閭ス蛹<EFBDBD>性螟夂ァ肴<EFBDA7>シ蠑? - 謗貞コ<E8B29E> + 蜴サ驥咲噪扈<E599AA>粋騾サ霎大、肴揩
问题:
- 日期列可能包含多种格式
- 排序 + 去重的组合逻辑复杂
- AI生成的代码执行出错后难以自我修正
```
@@ -259,17 +295,20 @@ Day 3测试中2个复杂场景持续超时失败3次重试都失败
# 为这两个场景添加更详细的Few-shot示例
### 示例: 复杂数值清洗(含特殊符号)
逕ィ謌キ: 謚願l驟仙<EFBFBD>驥檎噪髱樊焚蟄礼ャヲ蜿キ<EFBFBD><EFBFBD>>?<EFBFBD>牙悉謗会シ<EFBFBD><0.1?.05<EFBFBD><EFBFBD>瑚スャ荳コ謨ー蛟?<EFBFBD>:
用户: 把肌酐列里的非数字符号><去掉<0.1按0.05处理转为数值
代码:
\`\`\`python
try:
# 隨?豁・<E8B181>壼悉髯、隨ヲ蜿キ
# 第1步去除符号
df['creatinine_clean'] = df['creatinine'].astype(str).str.replace('>', '').str.replace('<', '')
# 隨?豁・<E8B181>壼、<E5A3BC>炊迚ケ谿雁€? df.loc[df['creatinine_clean'] == '0.1', 'creatinine_clean'] = '0.05'
# 第2步处理特殊值
df.loc[df['creatinine_clean'] == '0.1', 'creatinine_clean'] = '0.05'
# 隨?豁・<E8B181>夊スャ荳コ謨ー蛟? df['creatinine_numeric'] = pd.to_numeric(df['creatinine_clean'], errors='coerce')
# 第3步转为数值
df['creatinine_numeric'] = pd.to_numeric(df['creatinine_clean'], errors='coerce')
print(f'<EFBFBD>エ怜ョ梧<EFBFBD><EFBFBD>嘴df["creatinine_numeric"].notna().sum()}荳ェ譛画譜蛟?)
print(f'清洗完成:{df["creatinine_numeric"].notna().sum()}个有效值')
except Exception as e:
print(f'错误: {e}')
\`\`\`
@@ -279,13 +318,16 @@ except Exception as e:
**方案B: 优化System Prompt**
```typescript
##
1. **<EFBFBD>?*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>??<EFBFBD>谿€??<EFBFBD>?2. **<EFBFBD>**<EFBFBD><EFBFBD>pd.to_datetime()€<EFBFBD><EFBFBD>
1. ****
2. ****pd.to_datetime()
3. ****便
4. **<EFBFBD>**<EFBFBD>ソtry-except<EFBFBD>?```
4. ****使try-except包裹每个子步骤
```
**方案C: 调整重试策略**
```typescript
// 髓亥ッケ迚ケ螳夐漠隸ッ邀サ蝙具シ梧署萓帶峩譏守。ョ逧<EFBFBD>ソョ豁」謠千、?if (error.includes('譌・譛<EFBDA5>') || error.includes('datetime')) {
// 针对特定错误类型,提供更明确的修正提示
if (error.includes('日期') || error.includes('datetime')) {
enhancedMessage = `${userMessage}
注意:日期列可能包含缺失值或格式不一致,请:
@@ -296,177 +338,399 @@ except Exception as e:
```
**实施计划**:
- Day 4: 螳樒鴫譁ケ譯<EFBFBD><EFBFBD>亥「槫シコFew-shot遉コ萓具シ?- Day 4: 螳樒鴫譁ケ譯<EFBDB9><E8ADAF>井シ伜喧System Prompt<70>?- Day 5: 豬玖ッ穂シ伜喧謨域棡<E59F9F>育岼譬<E5B2BC>シ夐€夊ソ<E5A48A>紫霎セ蛻?5%+<2B>?
- Day 4: 实现方案A增强Few-shot示例
- Day 4: 实现方案B优化System Prompt
- Day 5: 测试优化效果目标通过率达到95%+
**预期效果**:
- 騾夊ソ<EFBFBD>紫莉<EFBFBD>81.8%謠仙合蛻?5%+
- 通过率从81.8%提升到95%+
- 复杂场景一次成功率提升50%
- 用户体验改善(减少等待时间)
---
## <EFBFBD> P3: 髟ソ譛溯ァ<EFBFBD><EFBFBD><EFBFBD>?荳ェ譛<EFBDAA>+<2B>?
## 🟢 P3: 长期规划3个月+
### TD-C-007: 医学专业功能增强
> **创建日期**: 2025-12-08
> **来源**: 医学统计分析专家审查反馈
> **莨伜<EFBFBD>郤?*: P3<50>亥粥閭ス謖蛾聴MVP螳梧<E89EB3>蜷惹シ伜<EFBDBC>螳樊命<E6A88A><E591BD>
> **优先级**: P3功能按钮MVP完成后优先实施
**背景**
当前工具C功能按钮开发计划V1.0)主要面向通用数据清洗场景。医学专业审查发现,针对临床研究数据的特殊需求,需要增加以下专业功能。
**閭梧勹**<EFBFBD>?蠖灘燕蟾・蜈キC蜉溯<E89C89>謖蛾聴蠑€蜿題ョ。蛻抵シ<E68AB5>1.0<EFBFBD>我クサ隕<EFBFBD>擇蜷鷹€夂畑謨ー謐ョ貂<EFBFBD>エ怜惻譎ッ縲ょ現蟄ヲ荳謎ク壼ョ。譟・蜿醍鴫<EFBFBD>碁宙蟇ケ荳エ蠎顔<EFBFBD>皮ゥカ謨ー謐ョ逧<EFBFBD>音谿企怙豎ゑシ碁怙隕∝「槫刈莉・荳倶ク謎ク壼粥閭ス縲?
---
#### 7.1 蠑ょクク蛟シ譽€豬句勣<EFBFBD>井シ伜<EFBFBD>郤ァ<EFBFBD>夐ォ假シ?
**蛹サ蟄ヲ閭梧勹**<2A>?- 荳エ蠎頑焚謐ョ蟶ク蟄伜惠蠖募<E8A096>髞呵ッッ<EFBDAF>亥ヲゑシ壼ケエ鮴<EFBDB4>999蟯√€∽ス馴<EFBDBD>?00kg<6B>?- 莉ェ蝎ィ謨<EFBDA8>囿蟇シ閾エ逧<EFBDB4>シょクク隸サ謨?- 髴€隨ヲ蜷井クエ蠎願激蝗エ逧<EFBDB4>焚謐ョ鬪瑚ッ?
**蜉溯<E89C89>隶セ隶。**<EFBFBD>?```
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蠑ょクク蛟シ譽€豬? 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 騾画叫蛻暦シ喙陦€邉?笆シ] 笏?笏? 笏?笏? 譽€豬区婿豕包シ<E58C85> 笏?笏? 笳?荳エ蠎願激蝗エ<E89D97>域耳闕撰シ<E692B0> 笏?笏? 豁」蟶ク闌<EFBDB8><EFBFBD>喙3.9___] - [6.1___] 笏?笏? 譚・貅撰シ喙ADA謖<41>漉 笆シ] 笏?笏? 笏?笏? 笳?扈溯ョ。蟄ヲ譁ケ豕? 笏?笏? IQR豕包シ<E58C85>1.5蛟榊屁蛻<EFBFBD>ス崎キ晢シ<EFBFBD> 笏?笏? Z-score豕包シ按ア3譬<33>㊥蟾ョ<E89FBE><EFBDAE> 笏?笏? 笏?笏? 螟<>炊譁ケ蠑擾シ? 笏?笏? 笳?莉<><E88E89><EFBFBD>ョ? 笳?蛻<>髯、 笳?譖ソ謐「荳コ郛コ螟? 笏?笏? 笏?笏? 譽€豬句芦<E58FA5>?3荳ェ蠑ょクク蛟? 笏?笏? [譟・逵玖ッヲ諠<EFBDA6> 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謇ァ陦珪 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
#### 7.1 异常值检测器(优先级:高)
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ蟶ク逕ィ荳エ蠎願激蝗エ<E89D97>亥ケエ鮴?-120縲。MI 10-80縲∬。€邉?-30遲会シ<E4BC9A>
- 謾ッ謖∬<E8AC96>螳壻ケ芽激蝗?- 蜿ッ隗<EFBDAF>喧蠑ょクク蛟シ蛻<EFBDBC><EFBFBD>シ育ョア郤ソ蝗セ<E89D97><EFBDBE>
**医学背景**
- 临床数据常存在录入错误年龄999岁、体重500kg
- 仪器故障导致的异常读数
- 需符合临床范围的数据验证
**功能设计**
```
┌─────────────────────────────────────┐
│ 异常值检测 │
├─────────────────────────────────────┤
│ 选择列:[血糖 ▼] │
│ │
│ 检测方法: │
│ ● 临床范围(推荐) │
│ 正常范围:[3.9___] - [6.1___] │
│ 来源:[ADA指南 ▼] │
│ │
│ ○ 统计学方法 │
│ IQR法1.5倍四分位距) │
│ Z-score法±3标准差
│ │
│ 处理方式: │
│ ○ 仅标记 ● 删除 ○ 替换为缺失 │
│ │
│ 检测到23个异常值 │
│ [查看详情] │
│ │
│ [取消] [执行] │
└─────────────────────────────────────┘
```
**实现要点**
- 内置常用临床范围年龄0-120、BMI 10-80、血糖2-30等
- 支持自定义范围
- 可视化异常值分布(箱线图)
---
#### 7.2 单位转换器(优先级:高)
**蛹サ蟄ヲ閭梧勹**<2A>?- 荳榊酔蝗ス螳カ/蛹サ髯「菴ソ逕ィ荳榊酔蜊穂ス<E7A982>
**医学背景**
- 不同国家/医院使用不同单位
- 文献meta分析需要统一单位
- 蟶ク隗∬スャ謐「髞呵ッッ蟇シ閾エ謨ー謐ョ荳榊庄逕?
**蜉溯<E89C89>隶セ隶。**<2A>?```
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蛹サ蟄ヲ蜊穂ス崎スャ謐「 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 騾画叫蛻暦シ喙陦€邉?笆シ] 笏?笏? 笏?笏? 蠖灘燕蜊穂ス搾シ喙mg/dL 笆シ] 笏?笏? 逶ョ譬<EFBDAE>黒菴搾シ喙mmol/L 笆シ] 笏?笏? 笏?笏? 蟶ク逕ィ霓ャ謐「<E8AC90>? 笏?笏? 窶?陦€邉? mg/dL 竊?mmol/L (テキ18.018) 笏?笏? 窶?陦€閼? mg/dL 竊?mmol/L 笏?笏? 窶?菴馴㍾: kg 竊?lb (テ<>2.20462) 笏?笏? 窶?霄ォ鬮<EFBDAB>: cm 竊?inch 笏?笏? 窶?閧碁<E996A7>: mg/dL 竊?ホシmol/L 笏?笏? 笏?笏? 笘托ク<E68998> 蛻帛サコ譁ー蛻<EFBDB0> 笏?笏? 譁ー蛻怜錐<E6809C>喙陦€邉棒mmol_L_________] 笏?笏? 笏?笏? 鬚<>ァ茨シ?.5 mg/dL 竊?0.31 mmol/L 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謇ァ陦珪 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
- 常见转换错误导致数据不可用
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ蛹サ蟄ヲ蟶ク逕ィ霓ャ謐「蜈ャ蠑<EFBDAC>
**功能设计**
```
┌─────────────────────────────────────┐
│ 医学单位转换 │
├─────────────────────────────────────┤
│ 选择列:[血糖 ▼] │
│ │
│ 当前单位:[mg/dL ▼] │
│ 目标单位:[mmol/L ▼] │
│ │
│ 常用转换: │
│ • 血糖: mg/dL ↔ mmol/L (÷18.018) │
│ • 血脂: mg/dL ↔ mmol/L │
│ • 体重: kg ↔ lb (×2.20462) │
│ • 身高: cm ↔ inch │
│ • 肌酐: mg/dL ↔ μmol/L │
│ │
│ ☑️ 创建新列 │
│ 新列名:[血糖_mmol_L_________] │
│ │
│ 预览5.5 mg/dL → 0.31 mmol/L │
│ │
│ [取消] [执行] │
└─────────────────────────────────────┘
```
**实现要点**
- 内置医学常用转换公式
- 支持批量转换
- 閾ェ蜉ィ鬪瑚ッ∬スャ謐「蜷守噪蜷育炊諤?
- 自动验证转换后的合理性
---
#### 7.3 日期计算器(优先级:高)
**蛹サ蟄ヲ閭梧勹**<2A>?- 隶。邂怜ケエ鮴<EFBDB4>€<EFBFBD>囂隶ソ譌カ髣エ縲∫函蟄俶慮髣エ譏ッ鬮倬「鷹怙豎?- 譌・譛滓<E8AD9B>シ蠑丈ク咲サ滉ク€<EFBDB8>?025-01-01 vs 2025/1/1<>?- 髴€隕∝、<E2889D>炊髣ー蟷エ縲∵慮髣エ遯礼ュ牙、肴揩蝨コ譎?
**蜉溯<E89C89>隶セ隶。**<2A>?```
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 譌・譛<EFBDA5>/譌カ髣エ隶。邂<EFBDA1> 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 隶。邂礼アサ蝙具シ? 笏?笏? 笳?隶。邂怜ケエ鮴<EFBDB4>シ井サ主<EFBDBB>逕滓律譛滂シ? 笏?笏? 蜃コ逕滓律譛溷<E8AD9B><E6BAB7>喙birth_date 笆シ] 笏?笏? 蜿り€<E3828A>律譛滂シ壺<EFBDBC>?莉雁、ゥ 笳?謖<>ョ壼<EFBDAE>? 笏?笏? 譁ー蛻怜錐<E6809C>喙蟷エ鮴Ю________] 笏?笏? 笏?笏? 笳?隶。邂玲慮髣エ髣エ髫<EFBDB4> 笏?笏? 蠑€蟋区律譛滂シ喙蜈・髯「譌・譛<EFBDA5> 笆シ] 笏?笏? 扈捺據譌・譛滂シ喙蜃コ髯「譌・譛<EFBDA5> 笆シ] 笏?笏? 蜊穂ス搾シ喙螟?笆シ]<5D>亥、ゥ/蜻?譛?蟷エ<E89FB7><EFBDB4> 笏?笏? 譁ー蛻怜錐<E6809C>喙菴城劼螟ゥ謨ー_____] 笏?笏? 笏?笏? 笳?蛻、譁ュ譌カ髣エ遯暦シ域弍蜷ヲ蝨ィX螟ゥ蜀<EFBDA9>シ? 笏?笏? 莠倶サカ譌・譛滂シ喙髫剰ョソ譌・譛<EFBDA5> 笆シ] 笏?笏? 蝓コ郤ソ譌・譛滂シ喙蜈・扈<EFBDA5>律譛<E5BE8B> 笆シ] 笏?笏? 譌カ髣エ遯暦シ喙30____] 螟ゥ蜀<EFBDA9> 笏?笏? 譁ー蛻怜錐<E6809C>喙30螟ゥ蜀<EFBDA9>囂隶ソ____] 笏?笏? 笏?笏? [蜿匁カ<E58C81> [鬚<><EFBFBD> [謇ァ陦珪 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
**医学背景**
- 计算年龄、随访时间、生存时间是高频需求
- 日期格式不统一2025-01-01 vs 2025/1/1
- 需要处理闰年、时间窗等复杂场景
**螳樒鴫隕∫せ**<2A>?- 閾ェ蜉ィ譽€豬区律譛滓<E8AD9B>シ蠑?- 螟<>炊郛コ螟ア譌・譛<EFBDA5>
**功能设计**
```
┌─────────────────────────────────────┐
│ 日期/时间计算 │
├─────────────────────────────────────┤
│ 计算类型: │
│ ● 计算年龄(从出生日期) │
│ 出生日期列:[birth_date ▼] │
│ 参考日期:● 今天 ○ 指定列 │
│ 新列名:[年龄_________] │
│ │
│ ○ 计算时间间隔 │
│ 开始日期:[入院日期 ▼] │
│ 结束日期:[出院日期 ▼] │
│ 单位:[天 ▼](天/周/月/年) │
│ 新列名:[住院天数_____] │
│ │
│ ○ 判断时间窗是否在X天内
│ 事件日期:[随访日期 ▼] │
│ 基线日期:[入组日期 ▼] │
│ 时间窗:[30____] 天内 │
│ 新列名:[30天内随访____] │
│ │
│ [取消] [预览] [执行] │
└─────────────────────────────────────┘
```
**实现要点**
- 自动检测日期格式
- 处理缺失日期
- 支持多种时间单位
---
#### 7.4 临床截断值分箱(优先级:中)
**蛹サ蟄ヲ閭梧勹**<2A>?- 蛹サ蟄ヲ蛻<EFBDA6>アサ蠎泌渕莠主セェ隸∝現蟄ヲ隸∵紺<E288B5>亥ヲゑシ啗HO縲、DA謖<41><EFBFBD>?- 莉サ諢丞<E8ABA2>邂ア莨壽此螟ア菫。諱ッ荳疲裏荳エ蠎頑э荵?- 髴€隕∝庄霑ス貅ッ逧<EFBDAF><E980A7>邀サ譬<EFBDBB><E8ADAC>?
**蜉溯<E89C89>謾ケ霑<EFBDB9>**<2A>?```
蝨ィ邇ー譛?逕滓<E98095><EFBFBD>アサ蜿倬㍼"蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
**医学背景**
- 医学分类应基于循证医学证据WHO、ADA指南
- 任意分箱会损失信息且无临床意义
- 需要可追溯的分类标准
**功能改进**
```
在现有"生成分类变量"功能中增加:
┌─────────────────────────────────────┐
│ 连续变量分箱 │
├─────────────────────────────────────┤
│ 选择数值列:[BMI ▼] │
│ │
│ 分箱方式: │
│ ● 临床截断值(推荐)⭐ │
│ 标准:[WHO标准 ▼] │
│ <18.5: 低体重 │
│ 18.5-24.9: 正常 │
│ 25-29.9: 超重 │
│ ≥30: 肥胖 │
│ 参考WHO 2000 │
│ │
│ [切换为中国标准 ▼] │
│ │
│ ○ 自定义切点(需注明依据) │
│ ○ 等宽/等频分箱(⚠️会损失信息) │
│ │
│ [取消] [预览分布] [执行] │
└─────────────────────────────────────┘
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 霑樒サュ蜿倬㍼蛻<E38DBC>ョア 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 騾画叫謨ー蛟シ蛻暦シ喙BMI 笆シ] 笏?笏? 笏?笏? 蛻<>ョア譁ケ蠑擾シ? 笏?笏? 笳?荳エ蠎頑穐譁ュ蛟シ<E89B9F>域耳闕撰シ俄ュ<E4BF84> 笏?笏? 譬<><EFBFBD>喙WHO譬<4F>㊥ 笆シ] 笏?笏? <18.5: 菴惹ス馴<EFBDBD>? 笏?笏? 18.5-24.9: 豁」蟶ク 笏?笏? 25-29.9: 雜<>㍾ 笏?笏? 竕?0: 閧・閭<EFBDA5> 笏?笏? 蜿り€<E3828A>シ啗HO 2000 笏?笏? 笏?笏? [蛻<>困荳コ荳ュ蝗ス譬<EFBDBD><E8ADAC>?笆シ] 笏?笏? 笏?笏? 笳?閾ェ螳壻ケ牙<EFBDB9>轤ケ<E8BDA4>磯怙豕ィ譏惹セ晄紺<E69984>? 笏?笏? 笳?遲牙ョス/遲蛾「大<EFBDA2>邂ア<E98282>遺國<E981BA>丈シ壽此螟ア菫。諱ッ<E8ABB1>? 笏?笏? 笏?笏? [蜿匁カ<E58C81> [鬚<>ァ亥<EFBDA7>蟶ゾ [謇ァ陦珪 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?
支持的临床标准:
- BMI<EFBFBD>アサ<EFBFBD>啗HO縲∽クュ蝗ス謌蝉ココ縲∝<EFBFBD>遶・譬<EFBFBD><EFBFBD>?- 陦€蜴句<E89CB4>郤ァ<E983A4>哘SH/ESC鬮倩。€蜴区欠蜊?- 閧セ蜉溯<E89C89><EFBFBD><EFBFBD>哮DIGO CKD蛻<44>
- 蟷エ鮴<EFBFBD><EFBFBD><EFBFBD>シ啗HO譬<EFBFBD>㊥縲∽クエ蠎願ッ暮ェ悟クク逕?- 陦€邉門<E98289>邀サ<E98280>哂DA邉門ーソ逞<EFBDBF>ッ頑妙譬<E5A699><E8ADAC>?```
- BMI分类WHO、中国成人、儿童标准
- 血压分级ESH/ESC高血压指南
- 肾功能分期KDIGO CKD分期
- 年龄分组WHO标准、临床试验常用
- 血糖分类ADA糖尿病诊断标准
```
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ10+蟶ク逕ィ荳エ蠎頑<E8A08E><E9A091>
**实现要点**
- 内置10+常用临床标准
- 可导出分类依据(供论文写作)
- 謠千、コ遲牙ョス蛻<EFBDBD>ョア逧<EFBDB1>€髯先€?
- 提示等宽分箱的局限性
---
#### 7.5 高级缺失值填补(优先级:中)
**蛹サ蟄ヲ閭梧勹**<2A>?- MICE蛛<45>ョセ謨ー謐ョMAR<41>磯囂譛コ郛コ螟ア<E89E9F>会シ御ス<E5BEA1>クエ蠎頑焚謐ョ蟶ク荳コMNAR<41>磯撼髫乗惻郛コ螟ア<E89E9F>?- 逞<>ュ荳・驥肴ぅ閠<E38185>峩譏灘、ア隶ソ<E99AB6>育シコ螟ア髱樣囂譛コ<E8AD9B><EFBDBA>
- 髴€隕∵撫諢滓€ァ蛻<EFBDA7><E89BBB>?
**蜉溯<E89C89>謾ケ霑<EFBDB9>**<2A>?```
蝨ィ邇ー譛?郛コ螟ア蛟シ蝪ォ陦?蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
**医学背景**
- MICE假设数据MAR随机缺失但临床数据常为MNAR非随机缺失
- 病情严重患者更易失访(缺失非随机)
- 需要敏感性分析
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 郛コ螟ア蛟シ蝪ォ陦・<E999A6>亥現蟄ヲ荳鍋畑<E98D8B>? 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 騾画叫蛻暦シ喙FMA隸<41><E99AB8> 笆シ] [+] 笏?笏? 笏?笏? 蝪ォ陦・譁ケ豕包シ? 笏?笏? 笳?譛ォ谺。隗よオ句€シ扈楢スャ<EFBDBD><EFBDAC>OCF<43>俄ュ<E4BF84> 笏?笏? 騾ら畑<E38289>夂コオ蜷第焚謐ョ<E8AC90>悟∞隶セ譌<EFBDBE>蜿伜<E89CBF>? 笏?笏? 笏?笏? 笳?蝓コ郤ソ隗よオ句€シ扈楢スャ<EFBDBD><EFBDAC>OCF<43>? 笏?笏? 騾ら畑<E38289>壻ソ晏ョ井シー隶。<E99AB6>悟∞隶セ譌<EFBDBE>謾ケ蝟? 笏?笏? 笏?笏? 笳?譛€蝮乗ュ蜀オ謠定。・<EFBDA1><EFBDA5>orst Case<73>? 笏?笏? 騾ら畑<E38289>壽撫諢滓€ァ蛻<EFBDA7><E89BBB>? 笏?笏? 譛€蝮丞€<C280>喙0____] 笏?笏? 笏?笏? 笳?荳ュ菴肴<E88FB4>?蝮<>€シ蝪ォ陦? 笏?笏? 笘托ク<E68998> 謖牙<E8AC96><EFBFBD>。ォ陦? 笏?笏? 蛻<><EFBFBD><EFBDBB><EFBFBD>喙諤ァ蛻ォ笆シ][蟷エ鮴<EFBDB4><EFBFBD>名] 笏?笏? 笏?笏? 笳?螟夐㍾謠定。・<EFBDA1><EFBDA5>ICE<43>? 笏?笏? 笞<><E7AC9E><EFBFBD><>ョセ謨ー謐ョMAR<41>碁怙譽€鬪碁€ら畑諤? 笏?笏? 笏?笏? 鬚<>ァ茨シ壼ー<E5A3BC>。ォ陦・ 32 荳ェ郛コ螟ア蛟? 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謨乗─諤ァ蛻<EFBDA7>梵] [謇ァ陦珪 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?```
**功能改进**
```
在现有"缺失值填补"功能中增加:
**螳樒鴫隕∫せ**<2A>?- 譏守。ョ蜷<EFBDAE>婿豕慕噪騾ら畑蜑肴署
- 謠蝉セ帶撫諢滓€ァ蛻<EFBDA7><EFBFBD>亥ッケ豈比ク榊酔譁ケ豕慕サ捺棡<E68DBA>?- 逕滓<E98095>蝪ォ陦・謚・蜻奇シ井セ幄ョコ譁<EFBDBA>婿豕募ュヲ謠剰ソー<EFBDBF><EFBDB0>
┌─────────────────────────────────────┐
│ 缺失值填补(医学专用) │
├─────────────────────────────────────┤
│ 选择列:[FMA评分 ▼] [+] │
│ │
│ 填补方法: │
│ ● 末次观测值结转LOCF⭐ │
│ 适用:纵向数据,假设无变化 │
│ │
│ ○ 基线观测值结转BOCF
│ 适用:保守估计,假设无改善 │
│ │
│ ○ 最坏情况插补Worst Case
│ 适用:敏感性分析 │
│ 最坏值:[0____] │
│ │
│ ○ 中位数/均值填补 │
│ ☑️ 按分组填补 │
│ 分组列:[性别▼][年龄组▼] │
│ │
│ ○ 多重插补MICE
│ ⚠️ 假设数据MAR需检验适用性 │
│ │
│ 预览:将填补 32 个缺失值 │
│ │
│ [取消] [敏感性分析] [执行] │
└─────────────────────────────────────┘
```
**实现要点**
- 明确各方法的适用前提
- 提供敏感性分析(对比不同方法结果)
- 生成填补报告(供论文方法学描述)
---
#### 7.6 Codebook<EFBFBD>域焚謐ョ蟄怜<EFBFBD><EFBFBD>臥函謌撰シ井シ伜<EFBFBD>郤ァ<EFBFBD>壻クュ<EFBFBD>?
**蛹サ蟄ヲ閭梧勹**<2A>?- GCP<43>郁艮迚ゥ荳エ蠎願ッ暮ェ瑚エィ驥冗ョ。逅<EFBDA1><EFBFBD><EFBFBD>芽ヲ∵アょ庄霑ス貅ッ諤?- 譛溷<E8AD9B>隕∵アよ署萓帶焚謐ョ蟄怜<E89F84>
- 莨ヲ逅<EFBDA6>ョ。譟・髴€隕∝序驥剰ッエ譏?
**蜉溯<E89C89>隶セ隶。**<2A>?```
閾ェ蜉ィ逕滓<EFBFBD>謨ー謐ョ蟄怜<EFBFBD><EFBFBD>?
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏?蜿倬㍼蜷?笏?蜴溷序驥?笏?郛也<E9839B>∬ァ<E288AC><EFBDA7> 笏?蛻帛サコ譌カ髣エ笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏ら<E7AC8F>皮ゥカ荳ュ蠢<EFBDAD>狽遐皮ゥカ荳ュ蠢<EFBDAD><E8A0A2>?=鮟鷹セ呎ア? 笏?2-08 笏?笏<>郛也<E9839B><E4B99F> 笏? 笏?=螻ア荳<EFBDB1> 笏?0:30 笏?笏? 笏? 笏?=蟷ソ蟾<EFBDBF> 笏? 笏?笏懌楳笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏シ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏<>MI蛻<49>アサ 笏<>MI 笏?=豁」蟶ク 笏?2-08 笏?笏? 笏? 笏?=雜<>㍾ 笏?0:35 笏?笏? 笏? 笏?=閧・閭<EFBDA5> 笏? 笏?笏? 笏? 笏ょ盾閠<E79BBE>シ啗HO 笏? 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏エ笏€笏€笏€笏€笏€笏€笏€笏€笏エ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏エ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?
蟇シ蜃コ騾蛾。ケ<EFBFBD>?- Excel譬シ蠑擾シ亥クク逕ィ<E98095><EFBDA8>
- Word譬シ蠑擾シ井シヲ逅<EFBDA6>冠蜻奇シ<E5A587>
- CSV譬シ蠑擾シ<E693BE>PSS蟇シ蜈・<E89C88>?```
#### 7.6 Codebook(数据字典)生成(优先级:中)
**螳樒鴫隕∫せ**<2A>?- 豈乗ャ。驥咲シ也<EFBDBC>?蛻<>ョア閾ェ蜉ィ譖エ譁ー
**医学背景**
- GCP药物临床试验质量管理规范要求可追溯性
- 期刊要求提供数据字典
- 伦理审查需要变量说明
**功能设计**
```
自动生成数据字典:
┌──────────────────────────────────────┐
│ 变量名 │ 原变量 │ 编码规则 │ 创建时间│
├────────┼────────┼──────────┼─────────┤
│研究中心│研究中心│1=黑龙江 │12-08 │
│_编码 │ │2=山东 │10:30 │
│ │ │3=广州 │ │
├────────┼────────┼──────────┼─────────┤
│BMI分类 │BMI │1=正常 │12-08 │
│ │ │2=超重 │10:35 │
│ │ │3=肥胖 │ │
│ │ │参考WHO │ │
└────────┴────────┴──────────┴─────────┘
导出选项:
- Excel格式常用
- Word格式伦理报告
- CSV格式SPSS导入
```
**实现要点**
- 每次重编码/分箱自动更新
- 记录操作人和时间
- 支持手动添加注释
---
#### 7.7 譬キ譛ャ遲幃€画オ∫ィ句崟<EFBFBD>井シ伜<EFBFBD>郤ァ<EFBFBD>壻ス趣シ?
**蛹サ蟄ヲ閭梧勹**<2A>?- CONSORT螢ー譏手ヲ∵アよ冠蜻顔ュ幃€画オ∫ィ?- 譛溷<E8AD9B>螳。遞ソ隕∵アよ署萓帶オ∫ィ句<EFBDA8>?- 譛牙勧莠主書邇ー遲幃€蛾€サ霎鷹漠隸ッ
#### 7.7 样本筛选流程图(优先级:低)
**蜉溯<EFBFBD>隶セ隶。**<2A>?```
蝨?鬮倡コァ遲幃€?蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
**医学背景**
- CONSORT声明要求报告筛选流程
- 期刊审稿要求提供流程图
- 有助于发现筛选逻辑错误
**功能设计**
```
在"高级筛选"功能中增加:
自动生成筛选流程:
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蜴溷ァ区焚謐ョ: 1000萓? 笏?笏披楳笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 竊?謗帝勁蟷エ鮴<EFBDB4><18蟯?笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蜑ゥ菴<EFBDA9>: 950萓?(-50) 笏?笏披楳笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 竊?謗帝勁荳サ隕∫サ灘ア€郛コ螟ア
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 蜑ゥ菴<EFBDA9>: 920萓?(-30) 笏?笏披楳笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏? 笏? 竊?謗帝勁驥榊、崎ョー蠖<EFBDB0>
笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?笏? 譛€扈育コウ蜈? 910萓? 笏?笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏?
┌──────────────────────┐
│ 原始数据: 1000例 │
└──────┬───────────────┘
↓ 排除年龄<18岁
┌──────────────────────┐
│ 剩余: 950例 (-50) │
└──────┬───────────────┘
↓ 排除主要结局缺失
┌──────────────────────┐
│ 剩余: 920例 (-30) │
└──────┬───────────────┘
↓ 排除重复记录
┌──────────────────────┐
│ 最终纳入: 910例 │
└──────────────────────┘
[导出为图片] [导出为Word]
```
**螳樒鴫隕∫せ**<2A>?- 隶ー蠖墓ッ乗ュ・遲幃€臥噪譚。莉カ蜥檎サ捺<EFBDBB>?- 逕滓<E98095>蜿ッ蜿題。ィ逧<EFBDA8>オ∫ィ句<EFBDA8>?- 謾ッ謖∝ッシ蜃コ荳コ鬮伜<E9ACAE>霎ィ邇<EFBDA8>崟迚?
**实现要点**
- 记录每步筛选的条件和结果
- 生成可发表的流程图
- 支持导出为高分辨率图片
---
#### 7.8 謨ー謐ョ雍ィ驥乗冠蜻奇シ井シ伜<EFBFBD>郤ァ<EFBFBD>壻ス趣シ?
**蛹サ蟄ヲ閭梧勹**<2A>?- 謨ー謐ョ雍ィ驥冗峩謗・蠖ア蜩咲<E89CA9>皮ゥカ扈楢ョコ
- 髴€隕∝惠蛻<E683A0>梵蜑崎ソ幄。瑚エィ驥剰ッ<E589B0>シ?- 譛溷<E8AD9B>隕∵アよ緒霑ー謨ー謐ョ雍ィ驥<EFBDA8>
#### 7.8 数据质量报告(优先级:低)
**医学背景**
- 数据质量直接影响研究结论
- 需要在分析前进行质量评估
- 期刊要求描述数据质量
**功能设计**
```
点击"生成数据质量报告"
**蜉溯<E89C89>隶セ隶。**<2A>?```
轤ケ蜃サ"逕滓<E98095>謨ー謐ョ雍ィ驥乗冠蜻<E586A0>"<22>?
生成PDF报告包含
1. 数据概况
- 样本量、变量数
- 数据收集时间跨度
2. 螳梧紛諤ァ蛻<EFBFBD><EFBFBD>? - 蜷<>序驥冗シコ螟ア邇<EFBDB1>
2. 完整性分析
- 各变量缺失率
- 缺失模式MCAR/MAR/MNAR检验
3. 荳€閾エ諤ァ譽€譟? - 騾サ霎鷹漠隸ッ<E99AB8>亥ヲゑシ壼<EFBDBC>逕滓律譛?豁サ莠。譌・譛滂シ? - 驥榊、崎ョー蠖<EFBDB0>
3. 一致性检查
- 逻辑错误(如:出生日期>死亡日期)
- 重复记录
4. 分布分析
- 连续变量分布(直方图+Q-Q图
- <EFBFBD>アサ蜿倬㍼鬚第焚陦?
5. 蠑ょクク蛟シ譽€豬? - 邂ア郤ソ蝗? - 蠑ょクク蛟シ蛻苓。?
- 分类变量频数表
5. 异常值检测
- 箱线图
- 异常值列表
6. 建议操作
- 需要处理的问题清单
- 莨伜<EFBFBD>郤ァ謗貞コ?```
- 优先级排序
```
**螳樒鴫隕∫せ**<2A>?- 閾ェ蜉ィ逕滓<E98095>蜿ッ蜿題。ィ逧<EFBDA8>。ィ譬シ/蝗?- 謾ッ謖∝ッシ蜃コ荳コWord/PDF
**实现要点**
- 自动生成可发表的表格/图
- 支持导出为Word/PDF
- 符合临床研究报告规范
---
### 实施计划
| 蜉溯<EFBFBD> | 莨伜<E88EA8>郤?| 鬚<>ョ。蟾・譌カ | 隶。蛻呈慮髣エ |
| 功能 | 优先级 | 预计工时 | 计划时间 |
|------|--------|---------|---------|
| 7.1 蠑ょクク蛟シ譽€豬句勣 | 鬮?| 2螟?| Phase 4 |
| 7.2 蜊穂ス崎スャ謐「蝎?| 鬮?| 1.5螟?| Phase 4 |
| 7.3 譌・譛溯ョ。邂怜<EFBFBD>?| 鬮?| 2螟?| Phase 4 |
| 7.4 荳エ蠎頑穐譁ュ蛟シ蛻<EFBFBD>ョ?| 荳?| 1螟?| Phase 3蠅槫シコ |
| 7.5 鬮倡コァ郛コ螟ア蛟シ蝪ォ陦?| 荳?| 1.5螟?| Phase 3蠅槫シコ |
| 7.6 Codebook逕滓<EFBFBD> | 荳?| 1螟?| Phase 5 |
| 7.7 遲幃€画オ∫ィ句崟 | 菴?| 1.5螟?| Phase 5 |
| 7.8 謨ー謐ョ雍ィ驥乗冠蜻<EFBFBD> | 菴?| 2螟?| Phase 5 |
| 7.1 异常值检测器 | | 2| Phase 4 |
| 7.2 单位转换器 | 高 | 1.5| Phase 4 |
| 7.3 日期计算器 | 高 | 2| Phase 4 |
| 7.4 临床截断值分箱 | 中 | 1| Phase 3增强 |
| 7.5 高级缺失值填补 | 中 | 1.5| Phase 3增强 |
| 7.6 Codebook生成 | | 1| Phase 5 |
| 7.7 筛选流程图 | | 1.5| Phase 5 |
| 7.8 数据质量报告 | | 2| Phase 5 |
**总计**12.5天工时
**諤サ隶。**<2A>?2.5螟ゥ蟾・譌?
---
### TD-C-008: 自定义函数库
**諢ソ譎ッ**: 逕ィ謌キ蜿ッ菫晏ュ伜クク逕ィ莉」遐∽クコ蜃ス謨ー<EFBFBD>御ク€髞ョ螟咲<EFBFBD>?
**愿景**: 用户可保存常用代码为函数,一键复用
```python
# 用户保存的自定义函数
my_functions = {
"陦€蜴句<E89CB4>邀?: "df['bp_category'] = ...",
"血压分类": "df['bp_category'] = ...",
"年龄分组": "df['age_group'] = ...",
}
# €髞ョ蠎皮<EFBFBD>?apply_function("陦€蜴句<E89CB4>邀?)
# 一键应用
apply_function("血压分类")
```
---
@@ -475,8 +739,9 @@ my_functions = {
**愿景**: 多人协作数据清洗
- 譚<>剞邂。逅<EFBDA1>シ壽衍逵?郛冶セ<E586B6>/螳。譬ク
- 謫堺ス懈律蠢暦シ夊ー∝惠莉€荵域慮蛟吝★莠<E29885>€荵?- 隸<>ョコ蜉溯<E89C89><E6BAAF>壼ッケ迚ケ螳壽桃菴懈キサ蜉<EFBDBB><EFBFBD>ウィ
- 权限管理:查看/编辑/审核
- 操作日志:谁在什么时候做了什么
- 评论功能:对特定操作添加备注
---
@@ -486,9 +751,9 @@ my_functions = {
```python
quality_check = {
"蜿醍鴫23荳ェ蠑ょクク蛟?: "蟒コ隶ョ菴ソ逕ィ蠑ょクク蛟シ譽€豬句勣",
"蟷エ鮴<EFBDB4><E9AEB4>郛コ螟?2%": "蟒コ隶ョ菴ソ逕ィLOCF蝪ォ陦・",
"BMI譛ェ蛻<EFBDAA>ア?: "蟒コ隶ョ菴ソ逕ィWHO譬<4F>㊥蛻<E38AA5>ョア",
"发现23个异常值": "建议使用异常值检测器",
"年龄列缺失32%": "建议使用LOCF填补",
"BMI未分类": "建议使用WHO标准分箱",
}
```
@@ -498,25 +763,37 @@ quality_check = {
### 按优先级
- P0: 1项前端UI阻塞发布
- P1: 2鬘ケ<EFBFBD><EFBFBD>ession謖∽ケ<EFBFBD>喧縲 ̄rompt莨伜喧<EFBFBD>?- P2: 3鬘ケ<E9AC98>育沿譛ャ邂。逅<EFBDA1>€∝、ァ譁<EFBDA7>サカ縲∝、肴揩蝨コ譎ッ莨伜喧<E4BC9C><E596A7>
- P3: 4鬘ケ<EFBFBD>磯柄譛溯ァ<EFBFBD><EFBFBD> + 蛹サ蟄ヲ荳謎ク壼粥閭ス蠅槫シコ<EFBDBC>?
### 謖牙キ・譌?- 0.5螟? 1鬘ケ<E9AC98>亥、肴揩蝨コ譎ッ莨伜喧<E4BC9C>?- 1螟? 1鬘ケ<E9AC98><EFBDB9>ession謖∽ケ<E288BD><EFBFBD><E596A7>
- 1-2螟? 2鬘ケ<E9AC98>育沿譛ャ邂。逅<EFBDA1>€∝、ァ譁<EFBDA7>サカ<EFBDBB>?- 3螟ゥ莉・荳? 1鬘ケ<E9AC98>亥燕遶ッUI<55>?- 謖∫サュ莨伜喧: 1鬘ケ<E9AC98><EFBDB9>rompt莨伜喧<E4BC9C>?- **蛹サ蟄ヲ荳謎ク壼粥閭ス**: 12.5螟ゥ<EFBFBD><EFBFBD>8荳ェ蟄仙粥閭ス<EFBFBD>?
- P1: 2Session持久化、Prompt优化
- P2: 3项版本管理、大文件、复杂场景优化
- P3: 4项长期规划 + 医学专业功能增强)
### 按工时
- 0.5天: 1项复杂场景优化
- 1天: 1项Session持久化
- 1-2天: 2项版本管理、大文件
- 3天以上: 1项前端UI
- 持续优化: 1项Prompt优化
- **医学专业功能**: 12.5天8个子功能
### 总计
- **謚€譛ッ蛟コ蜉。諤サ謨ー**: 13鬘ケ<E9AC98>亥性蛹サ蟄ヲ荳謎ク壼粥閭?荳ェ蟄宣。ケ<EFBDA1><EFBDB9>
- **霑第悄蠢<EFBFBD>**: 4鬘ケ<EFBFBD><EFBFBD>0-P1 + 螟肴揩蝨コ譎ッ<EFBFBD>?- **鬚<>ョ。諤サ蟾・譌?*: ~23-25螟? - MVP逶ク蜈ウ<E89C88>嘸10.5-12.5螟? - 蛹サ蟄ヲ荳謎ク壼「槫シコ<EFBDBC>嘸12.5螟?
- **技术债务总数**: 13项含医学专业功能8个子项
- **近期必做**: 4P0-P1 + 复杂场景)
- **预计总工时**: ~23-25天
- MVP相关~10.5-12.5天
- 医学专业增强:~12.5天
---
## 🔄 更新记录
| 譌・譛<EFBFBD> | 迚域悽 | 譖エ譁ー蜀<EFBDB0>ョケ | 譖エ譁ー莠?|
| 日期 | 版本 | 更新内容 | 更新人 |
|------|------|---------|--------|
| 2025-12-08 | V1.2 | 譁ー蠅杁D-C-007<EFBFBD>亥現蟄ヲ荳謎ク壼粥閭ス蠅槫シ?鬘ケ<E9AC98><EFBDB9> | AI Assistant |
| 2025-12-07 | V1.1 | 譁ー蠅杁D-C-006<EFBFBD>亥、肴揩蝨コ譎ッPrompt莨伜喧<EFBFBD>?| AI Assistant |
| 2025-12-06 | V1.0 | 蛻晏ァ句<EFBFBD>蟒コ<EFBFBD>轡ay 3 MVP螳梧<E89EB3>蜷取「ウ逅?| AI Assistant |
| 2025-12-08 | V1.2 | 新增TD-C-007医学专业功能增强8项 | AI Assistant |
| 2025-12-07 | V1.1 | 新增TD-C-006(复杂场景Prompt优化) | AI Assistant |
| 2025-12-06 | V1.0 | 初始创建Day 3 MVP完成后梳理 | AI Assistant |
---
**<EFBFBD>。」迥カ諤?*: 笨?蟾イ譖エ譁?
**文档状态**: ✅ 已更新
**下次更新**: Phase 4开发完成后