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:
@@ -1,23 +1,23 @@
|
||||
# 宸ュ叿C Day 3 寮€鍙戣<EFBFBD>鍒?- AI浠g爜鐢熸垚鏈嶅姟
|
||||
# 工具C Day 3 开发计划 - AI代码生成服务
|
||||
|
||||
> **文档版本**: V1.0
|
||||
> **创建日期**: 2025-12-06
|
||||
> **寮€鍙戠洰鏍?*: AI浠g爜鐢熸垚 + Python鎵ц<E98EB5> + 鑷<>垜淇<E59E9C><E6B787>
|
||||
> **开发目标**: AI代码生成 + Python执行 + 自我修正
|
||||
> **预计工时**: 5.5-6小时
|
||||
> **渚濊禆**: Day 2宸插畬鎴愶紙Session绠$悊锛?
|
||||
> **依赖**: Day 2已完成(Session管理)
|
||||
|
||||
---
|
||||
|
||||
## 📋 核心决策总结
|
||||
|
||||
### 鍐崇瓥1: 瀵硅瘽瀛樺偍鏂瑰紡 鉁?
|
||||
### 决策1: 对话存储方式 ✅
|
||||
|
||||
**鏂规<EFBFBD>閫夋嫨**: 鍒涘缓鐙<EFBFBD>珛琛?`dc_tool_c_ai_history`
|
||||
**方案选择**: 创建独立表 `dc_tool_c_ai_history`
|
||||
|
||||
**理由**:
|
||||
- 未来模块可能独立销售或独立部署
|
||||
- 符合Schema隔离原则
|
||||
- Tool C鏈夌壒娈婂瓧娈甸渶姹傦紙code銆乪xecuteResult锛?
|
||||
- Tool C有特殊字段需求(code、executeResult)
|
||||
|
||||
**数据库Schema**:
|
||||
```prisma
|
||||
@@ -29,7 +29,7 @@ model DcToolCAiHistory {
|
||||
content String @db.Text
|
||||
|
||||
// Tool C特有字段
|
||||
generatedCode String? @db.Text // AI鐢熸垚鐨勪唬鐮?
|
||||
generatedCode String? @db.Text // AI生成的代码
|
||||
codeExplanation String? @db.Text // 代码解释
|
||||
executeStatus String? // success/failed/pending
|
||||
executeResult Json? // 执行结果
|
||||
@@ -48,80 +48,80 @@ model DcToolCAiHistory {
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥2: AI浠g爜鎵ц<EFBFBD>娴佺▼ 鉁?
|
||||
### 决策2: AI代码执行流程 ✅
|
||||
|
||||
**鏂规<EFBFBD>閫夋嫨**: 鐢ㄦ埛纭<EFBFBD><EFBFBD>鍚庢墽琛岋紙鏂规<EFBFBD>A锛?
|
||||
**方案选择**: 用户确认后执行(方案A)
|
||||
|
||||
**流程**:
|
||||
```
|
||||
用户输入自然语言
|
||||
鈫?
|
||||
↓
|
||||
AI生成代码 + 解释
|
||||
鈫?
|
||||
↓
|
||||
前端展示代码(高亮)
|
||||
鈫?
|
||||
鐢ㄦ埛鐐瑰嚮"鎵ц<E98EB5>"鎸夐挳 鈫?鐢ㄦ埛纭<E59F9B><E7BAAD>
|
||||
鈫?
|
||||
↓
|
||||
用户点击"执行"按钮 ← 用户确认
|
||||
↓
|
||||
Python服务执行代码
|
||||
鈫?
|
||||
↓
|
||||
返回结果 + 数据预览(前50行)
|
||||
```
|
||||
|
||||
**理由**:
|
||||
- 鉁?鐢ㄦ埛鍙<E59F9B><E98D99>鏌ヤ唬鐮侊紙瀹夊叏鍙<E58F8F>帶锛?
|
||||
- 鉁?绗﹀悎"AI杈呭姪"鑰岄潪"AI鑷<49>姩"鐨勫畾浣?
|
||||
- 鉁?闄嶄綆鎵ц<E98EB5>閿欒<E996BF>椋庨櫓
|
||||
- ✅ 用户可审查代码(安全可控)
|
||||
- ✅ 符合"AI辅助"而非"AI自动"的定位
|
||||
- ✅ 降低执行错误风险
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥3: System Prompt璁捐<EFBFBD> 鉁?
|
||||
### 决策3: System Prompt设计 ✅
|
||||
|
||||
**鏂规<EFBFBD>閫夋嫨**: 瀹屾暣鐗?0涓狥ew-shot绀轰緥
|
||||
**方案选择**: 完整版10个Few-shot示例
|
||||
|
||||
**示例分布**:
|
||||
| 级别 | 数量 | 示例编号 | 场景 |
|
||||
|------|------|---------|------|
|
||||
| Level 1 | 2涓?| 1-2 | 缂哄け鍊肩粺涓€銆佹暟鍊兼竻娲?|
|
||||
| Level 2 | 2涓?| 3-4 | 缂栫爜銆佸垎绠?|
|
||||
| Level 3 | 3涓?| 5-7 | BMI銆佹棩鏈熴€佺瓫閫?|
|
||||
| Level 4 | 3涓?| 8-10 | 绠€鍗曞~琛ャ€?*澶氶噸鎻掕ˉ**銆佸幓閲?|
|
||||
| Level 1 | 2个 | 1-2 | 缺失值统一、数值清洗 |
|
||||
| Level 2 | 2个 | 3-4 | 编码、分箱 |
|
||||
| Level 3 | 3个 | 5-7 | BMI、日期、筛选 |
|
||||
| Level 4 | 3个 | 8-10 | 简单填补、**多重插补**、去重 |
|
||||
|
||||
**核心亮点**:
|
||||
- 鉁?鍖呭惈缂哄け鍊煎<E98D8A>鐞嗭紙绀轰緥8锛?
|
||||
- 鉁?鍖呭惈澶氶噸鎻掕ˉMICE锛堢ず渚?锛夆瓙 閲嶇偣
|
||||
- 鉁?瑕嗙洊浠庡熀纭€鍒伴珮绾у叏姊<E58F8F>害
|
||||
- ✅ 包含缺失值处理(示例8)
|
||||
- ✅ 包含多重插补MICE(示例9)⭐ 重点
|
||||
- ✅ 覆盖从基础到高级全梯度
|
||||
|
||||
**鏂囨。浣嶇疆**: [宸ュ叿C_AI_Few-shot绀轰緥搴?md](./宸ュ叿C_AI_Few-shot绀轰緥搴?md)
|
||||
**文档位置**: [工具C_AI_Few-shot示例库.md](./工具C_AI_Few-shot示例库.md)
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥4: 鏁版嵁鐘舵€佺<E282AC>鐞?鉁?
|
||||
### 决策4: 数据状态管理 ✅
|
||||
|
||||
**鏂规<EFBFBD>閫夋嫨**: Python鍐呭瓨缁存姢锛堟柟妗圕锛?
|
||||
**方案选择**: Python内存维护(方案C)
|
||||
|
||||
**架构**:
|
||||
```
|
||||
Session鍒涘缓 鈫?鏁版嵁鍔犺浇鍒癙ython鍐呭瓨
|
||||
鈫?
|
||||
AI鎿嶄綔1 鈫?淇<>敼鍐呭瓨涓<E793A8>殑DataFrame
|
||||
鈫?
|
||||
AI鎿嶄綔2 鈫?缁х画淇<E794BB>敼DataFrame锛堢疮绉<EFBFBD>級
|
||||
鈫?
|
||||
AI鎿嶄綔N 鈫?...
|
||||
鈫?
|
||||
鐢ㄦ埛鐐瑰嚮"瀵煎嚭" 鈫?淇濆瓨鍒癘SS
|
||||
Session创建 → 数据加载到Python内存
|
||||
↓
|
||||
AI操作1 → 修改内存中的DataFrame
|
||||
↓
|
||||
AI操作2 → 继续修改DataFrame(累积)
|
||||
↓
|
||||
AI操作N → ...
|
||||
↓
|
||||
用户点击"导出" → 保存到OSS
|
||||
```
|
||||
|
||||
**技术债务**:
|
||||
- 馃摑 Python閲嶅惎浼氫涪澶辩姸鎬?
|
||||
- 📝 Python重启会丢失状态
|
||||
- 📝 未来优化:持久化到Redis或OSS
|
||||
- 📝 文档位置: [技术债务清单](../07-技术债务/Tool-C技术债务清单.md)
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥5: AI鑷<EFBFBD>垜淇<EFBFBD><EFBFBD>鏈哄埗 鉁?
|
||||
### 决策5: AI自我修正机制 ✅
|
||||
|
||||
**鏂规<EFBFBD>閫夋嫨**: 鏈€澶?娆¢噸璇曪紙鏂规<E98F82>B锛?
|
||||
**方案选择**: 最多3次重试(方案B)
|
||||
|
||||
**流程**:
|
||||
```python
|
||||
@@ -134,18 +134,18 @@ while attempt < 3:
|
||||
result = execute_code(code)
|
||||
|
||||
if result.success:
|
||||
return result # 鉁?鎴愬姛
|
||||
return result # ✅ 成功
|
||||
|
||||
error_feedback = result.error
|
||||
attempt += 1
|
||||
|
||||
# 鉂?3娆′粛澶辫触锛岃繑鍥炲弸濂介敊璇?
|
||||
# ❌ 3次仍失败,返回友好错误
|
||||
return "执行失败,请调整需求后重试"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥6: LLM妯″瀷閫夋嫨 鉁?
|
||||
### 决策6: LLM模型选择 ✅
|
||||
|
||||
**优先使用**: DeepSeek-V3
|
||||
|
||||
@@ -153,21 +153,21 @@ return "执行失败,请调整需求后重试"
|
||||
```typescript
|
||||
const llm = LLMFactory.createAdapter('deepseek-v3');
|
||||
const response = await llm.chat(messages, {
|
||||
temperature: 0.1, // 浣庢俯搴︼紝纭<EFBFBD>繚浠g爜鍑嗙‘鎬?
|
||||
temperature: 0.1, // 低温度,确保代码准确性
|
||||
maxTokens: 2000, // 足够生成代码+解释
|
||||
topP: 0.9
|
||||
});
|
||||
```
|
||||
|
||||
**澶囬€夋柟妗?*:
|
||||
**备选方案**:
|
||||
- Qwen3-72B: 中文理解更好
|
||||
- GPT-5-Pro: 代码质量最高(成本高)
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥7: 涓婁笅鏂囦紶閫?鉁?
|
||||
### 决策7: 上下文传递 ✅
|
||||
|
||||
**閰嶇疆**: 浼犻€掓渶杩?杞<><E69D9E>璇?
|
||||
**配置**: 传递最近5轮对话
|
||||
|
||||
**实现**:
|
||||
```typescript
|
||||
@@ -179,85 +179,85 @@ async getConversationHistory(sessionId: string, limit: number = 5) {
|
||||
});
|
||||
}
|
||||
|
||||
// 鏋勫缓娑堟伅涓婁笅鏂?
|
||||
// 构建消息上下文
|
||||
const messages = [
|
||||
{ role: 'system', content: systemPrompt },
|
||||
...history.reverse(), // 鏈€杩?杞?
|
||||
...history.reverse(), // 最近5轮
|
||||
{ role: 'user', content: userMessage }
|
||||
];
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥8: 鎵ц<E98EB5>缁撴灉灞曠ず 鉁?
|
||||
### 决策8: 执行结果展示 ✅
|
||||
|
||||
**閰嶇疆**: 杩斿洖鍓?0琛岄<E7909B>瑙?
|
||||
**配置**: 返回前50行预览
|
||||
|
||||
**原因**:
|
||||
- 50琛岃冻澶熸煡鐪嬫暟鎹<EFBFBD>彉鍖?
|
||||
- 50行足够查看数据变化
|
||||
- 不会过大影响性能
|
||||
- 绗﹀悎鍖荤枟鏁版嵁鍦烘櫙锛堥€氬父鍑犲崄鍒板嚑鐧捐<EFBFBD>锛?
|
||||
- 符合医疗数据场景(通常几十到几百行)
|
||||
|
||||
---
|
||||
|
||||
### 鍐崇瓥9: Few-shot绀轰緥纭<EFBFBD><EFBFBD> 鉁?
|
||||
### 决策9: Few-shot示例确认 ✅
|
||||
|
||||
**鏈€缁?0涓<30>ず渚?*:
|
||||
1. 缁熶竴缂哄け鍊兼爣璁?
|
||||
**最终10个示例**:
|
||||
1. 统一缺失值标记
|
||||
2. 数值列清洗(检验值符号处理)
|
||||
3. 鍒嗙被鍙橀噺缂栫爜锛堟€у埆鈫?/0锛?
|
||||
3. 分类变量编码(性别→1/0)
|
||||
4. 连续变量分箱(年龄分组)
|
||||
5. BMI璁$畻涓庡垎绫?
|
||||
5. BMI计算与分类
|
||||
6. 日期计算(住院天数)
|
||||
7. 鏉′欢绛涢€夛紙鍏ョ粍鏍囧噯锛?
|
||||
7. 条件筛选(入组标准)
|
||||
8. 简单缺失值填补(中位数)
|
||||
9. **澶氶噸鎻掕ˉMICE** 猸?鏍稿績
|
||||
9. **多重插补MICE** ⭐ 核心
|
||||
10. 智能去重(按日期保留最新)
|
||||
|
||||
---
|
||||
|
||||
## 馃彈锔?鎶€鏈<E282AC>灦鏋勮<E98F8B>璁?
|
||||
## 🏗️ 技术架构设计
|
||||
|
||||
### 整体架构
|
||||
|
||||
```
|
||||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹? Frontend (React) 鈹?
|
||||
鈹? - 瀵硅瘽鐣岄潰锛圱ool C涓撶敤锛? 鈹?
|
||||
鈹? - 浠g爜灞曠ず锛堥珮浜<EFBFBD>級 鈹?
|
||||
鈹? - 鎵ц<EFBFBD>鎸夐挳 鈹?
|
||||
鈹? - 缁撴灉棰勮<EFBFBD>锛圓G Grid锛? 鈹?
|
||||
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹?REST API
|
||||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹? Node.js Backend (Fastify) 鈹?
|
||||
鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
|
||||
鈹? 鈹?AICodeService 鈹? 鈹?
|
||||
鈹? 鈹?- generateCode() 鈹? 鈹?
|
||||
鈹? 鈹?- executeCode() 鈹? 鈹?
|
||||
鈹? 鈹?- generateAndExecute() (甯﹂噸璇? 鈹? 鈹?
|
||||
鈹? 鈹?- getHistory() 鈹? 鈹?
|
||||
鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<E282AC>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<E282AC>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
|
||||
鈹? 鈹? 鈹? 鈹?
|
||||
鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
|
||||
鈹? 鈹?LLMFactory 鈹? 鈹?PythonExecutor鈹? 鈹?
|
||||
鈹? 鈹?(閫氱敤灞傚<E7819E>鐢?鈹? 鈹?Service 鈹? 鈹?
|
||||
鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹<E282AC>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
|
||||
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹?HTTP
|
||||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹?Python Service (FastAPI) 鈹?
|
||||
鈹?- /api/dc/validate (AST妫€鏌? 鈹?
|
||||
鈹?- /api/dc/execute (鎵ц<EFBFBD>浠g爜) 鈹?
|
||||
鈹?- Session鐘舵€佺<EFBFBD>鐞嗭紙鍐呭瓨锛? 鈹?
|
||||
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Frontend (React) │
|
||||
│ - 对话界面(Tool C专用) │
|
||||
│ - 代码展示(高亮) │
|
||||
│ - 执行按钮 │
|
||||
│ - 结果预览(AG Grid) │
|
||||
└──────────────┬──────────────────────────────────┘
|
||||
│ REST API
|
||||
┌──────────────▼──────────────────────────────────┐
|
||||
│ Node.js Backend (Fastify) │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ AICodeService │ │
|
||||
│ │ - generateCode() │ │
|
||||
│ │ - executeCode() │ │
|
||||
│ │ - generateAndExecute() (带重试) │ │
|
||||
│ │ - getHistory() │ │
|
||||
│ └──────────┬───────────────┬──────────────┘ │
|
||||
│ │ │ │
|
||||
│ ┌───────▼─────┐ ┌────▼──────────┐ │
|
||||
│ │ LLMFactory │ │ PythonExecutor│ │
|
||||
│ │ (通用层复用)│ │ Service │ │
|
||||
│ └─────────────┘ └───────┬───────┘ │
|
||||
└──────────────────────────────┼─────────────────┘
|
||||
│ HTTP
|
||||
┌───────────▼──────────────────┐
|
||||
│ Python Service (FastAPI) │
|
||||
│ - /api/dc/validate (AST检查) │
|
||||
│ - /api/dc/execute (执行代码) │
|
||||
│ - Session状态管理(内存) │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 核心服务设计
|
||||
|
||||
#### AICodeService (鏂板缓锛寏400琛?
|
||||
#### AICodeService (新建,~400行)
|
||||
|
||||
```typescript
|
||||
// backend/src/modules/dc/tool-c/services/AICodeService.ts
|
||||
@@ -268,7 +268,7 @@ export class AICodeService {
|
||||
/**
|
||||
* 生成Pandas代码
|
||||
* @param sessionId - Tool C Session ID
|
||||
* @param userMessage - 鐢ㄦ埛鑷<EFBFBD>劧璇<EFBFBD>█闇€姹?
|
||||
* @param userMessage - 用户自然语言需求
|
||||
* @returns { code, explanation, messageId }
|
||||
*/
|
||||
async generateCode(
|
||||
@@ -278,13 +278,13 @@ export class AICodeService {
|
||||
// 1. 获取Session信息(数据集元数据)
|
||||
const session = await sessionService.getSession(sessionId);
|
||||
|
||||
// 2. 鏋勫缓System Prompt锛堝惈10涓狥ew-shot锛?
|
||||
// 2. 构建System Prompt(含10个Few-shot)
|
||||
const systemPrompt = this.buildSystemPrompt(session);
|
||||
|
||||
// 3. 鑾峰彇瀵硅瘽鍘嗗彶锛堟渶杩?杞<>級
|
||||
// 3. 获取对话历史(最近5轮)
|
||||
const history = await this.getHistory(sessionId, 5);
|
||||
|
||||
// 4. 璋冪敤LLM锛堝<EFBFBD>鐢↙LMFactory锛?
|
||||
// 4. 调用LLM(复用LLMFactory)
|
||||
const llm = LLMFactory.createAdapter('deepseek-v3');
|
||||
const response = await llm.chat([
|
||||
{ role: 'system', content: systemPrompt },
|
||||
@@ -295,7 +295,7 @@ export class AICodeService {
|
||||
maxTokens: 2000
|
||||
});
|
||||
|
||||
// 5. 瑙f瀽AI鍥炲<EFBFBD>锛堟彁鍙朿ode鍜宔xplanation锛?
|
||||
// 5. 解析AI回复(提取code和explanation)
|
||||
const parsed = this.parseAIResponse(response.content);
|
||||
|
||||
// 6. 保存到数据库
|
||||
@@ -327,10 +327,10 @@ export class AICodeService {
|
||||
): Promise<ExecuteCodeResult> {
|
||||
// 1. 调用Python服务执行
|
||||
const result = await pythonExecutorService.executeCode(code, {
|
||||
sessionId // Python鏈嶅姟缁存姢Session鐘舵€?
|
||||
sessionId // Python服务维护Session状态
|
||||
});
|
||||
|
||||
// 2. 鏇存柊娑堟伅鐘舵€?
|
||||
// 2. 更新消息状态
|
||||
await prisma.dcToolCAiHistory.update({
|
||||
where: { id: messageId },
|
||||
data: {
|
||||
@@ -359,8 +359,8 @@ export class AICodeService {
|
||||
/**
|
||||
* 生成并执行(带自我修正)
|
||||
* @param sessionId - Tool C Session ID
|
||||
* @param userMessage - 鐢ㄦ埛闇€姹?
|
||||
* @param maxRetries - 鏈€澶ч噸璇曟<EFBFBD>鏁帮紙榛樿<EFBFBD>3锛?
|
||||
* @param userMessage - 用户需求
|
||||
* @param maxRetries - 最大重试次数(默认3)
|
||||
* @returns { code, explanation, executeResult, retryCount }
|
||||
*/
|
||||
async generateAndExecute(
|
||||
@@ -374,10 +374,10 @@ export class AICodeService {
|
||||
|
||||
while (attempt < maxRetries) {
|
||||
try {
|
||||
// 鏋勫缓甯﹂敊璇<EFBFBD>弽棣堢殑鎻愮ず璇?
|
||||
// 构建带错误反馈的提示词
|
||||
const enhancedMessage = attempt === 0
|
||||
? userMessage
|
||||
: `${userMessage}\n\n涓婃<EFBFBD>鎵ц<EFBFBD>閿欒<EFBFBD>锛?{lastError}\n璇蜂慨姝d唬鐮併€俙;
|
||||
: `${userMessage}\n\n上次执行错误:${lastError}\n请修正代码。`;
|
||||
|
||||
// 生成代码
|
||||
generated = await this.generateCode(sessionId, enhancedMessage);
|
||||
@@ -390,8 +390,8 @@ export class AICodeService {
|
||||
);
|
||||
|
||||
if (executeResult.success) {
|
||||
// 鉁?鎴愬姛
|
||||
logger.info(`[AICodeService] 鎵ц<EFBFBD>鎴愬姛锛堝皾璇?{attempt + 1}娆★級`);
|
||||
// ✅ 成功
|
||||
logger.info(`[AICodeService] 执行成功(尝试${attempt + 1}次)`);
|
||||
return {
|
||||
...generated,
|
||||
executeResult,
|
||||
@@ -399,11 +399,11 @@ export class AICodeService {
|
||||
};
|
||||
}
|
||||
|
||||
// 鉂?澶辫触锛屽噯澶囬噸璇?
|
||||
// ❌ 失败,准备重试
|
||||
lastError = executeResult.error || '未知错误';
|
||||
attempt++;
|
||||
|
||||
logger.warn(`[AICodeService] 鎵ц<EFBFBD>澶辫触锛堝皾璇?{attempt}/${maxRetries}锛? ${lastError}`);
|
||||
logger.warn(`[AICodeService] 执行失败(尝试${attempt}/${maxRetries}): ${lastError}`);
|
||||
|
||||
} catch (error: any) {
|
||||
logger.error(`[AICodeService] 异常: ${error.message}`);
|
||||
@@ -438,48 +438,48 @@ export class AICodeService {
|
||||
// ==================== 辅助方法 ====================
|
||||
|
||||
/**
|
||||
* 鏋勫缓System Prompt锛堝惈10涓狥ew-shot锛?
|
||||
* 构建System Prompt(含10个Few-shot)
|
||||
*/
|
||||
private buildSystemPrompt(session: SessionData): string {
|
||||
return `浣犳槸鍖荤枟绉戠爺鏁版嵁娓呮礂涓撳<EFBFBD>锛岃礋璐g敓鎴怭andas浠g爜鏉ユ竻娲楁暣鐞嗘暟鎹<EFBFBD>€?
|
||||
return `你是医疗科研数据清洗专家,负责生成Pandas代码来清洗整理数据。
|
||||
|
||||
## 褰撳墠鏁版嵁闆嗕俊鎭?
|
||||
- 鏂囦欢鍚? ${session.fileName}
|
||||
## 当前数据集信息
|
||||
- 文件名: ${session.fileName}
|
||||
- 行数: ${session.totalRows}
|
||||
- 列数: ${session.totalCols}
|
||||
- 列名: ${session.columns.join(', ')}
|
||||
|
||||
## 安全规则(强制)
|
||||
1. 鍙<EFBFBD>兘鎿嶄綔df鍙橀噺锛屼笉鑳戒慨鏀瑰叾浠栧彉閲?
|
||||
2. 绂佹<EFBFBD>瀵煎叆os銆乻ys銆乻ubprocess绛夊嵄闄╂ā鍧?
|
||||
3. 绂佹<EFBFBD>浣跨敤eval銆乪xec銆乢_import__绛夊嵄闄╁嚱鏁?
|
||||
1. 只能操作df变量,不能修改其他变量
|
||||
2. 禁止导入os、sys、subprocess等危险模块
|
||||
3. 禁止使用eval、exec、__import__等危险函数
|
||||
4. 必须进行异常处理
|
||||
5. 返回格式必须是JSON: {"code": "...", "explanation": "..."}
|
||||
|
||||
## Few-shot示例
|
||||
|
||||
### 绀轰緥1: 缁熶竴缂哄け鍊兼爣璁?
|
||||
鐢ㄦ埛: 鎶婃墍鏈変唬琛ㄧ己澶辩殑绗﹀彿锛?銆佷笉璇︺€丯A銆丯/A锛夌粺涓€鏇挎崲涓烘爣鍑嗙┖鍊?
|
||||
### 示例1: 统一缺失值标记
|
||||
用户: 把所有代表缺失的符号(-、不详、NA、N/A)统一替换为标准空值
|
||||
代码:
|
||||
\`\`\`python
|
||||
df = df.replace(['-', '不详', 'NA', 'N/A', '\\\\', '未查'], np.nan)
|
||||
\`\`\`
|
||||
璇存槑: 灏嗗<E7818F>绉嶇己澶卞€艰〃绀虹粺涓€涓篘aN锛屼究浜庡悗缁<E68297>粺璁″垎鏋?
|
||||
说明: 将多种缺失值表示统一为NaN,便于后续统计分析
|
||||
|
||||
### 示例2: 数值列清洗
|
||||
鐢ㄦ埛: 鎶婅倢閰愬垪閲岀殑闈炴暟瀛楃<E7809B>鍙峰幓鎺夛紝<0.1鎸?.05澶勭悊锛岃浆涓烘暟鍊肩被鍨?
|
||||
用户: 把肌酐列里的非数字符号去掉,<0.1按0.05处理,转为数值类型
|
||||
代码:
|
||||
\`\`\`python
|
||||
df['creatinine'] = df['creatinine'].astype(str).str.replace('>', '').str.replace('<', '')
|
||||
df.loc[df['creatinine'] == '0.1', 'creatinine'] = '0.05'
|
||||
df['creatinine'] = pd.to_numeric(df['creatinine'], errors='coerce')
|
||||
\`\`\`
|
||||
璇存槑: 妫€楠岀<E6A5A0>鏁版嵁甯稿惈绗﹀彿锛岄渶娓呯悊鍚庢墠鑳借<E991B3>绠?
|
||||
说明: 检验科数据常含符号,需清理后才能计算
|
||||
|
||||
[... 示例3-8 ...]
|
||||
|
||||
### 示例9: 多重插补(MICE)⭐ 重点
|
||||
鐢ㄦ埛: 浣跨敤澶氶噸鎻掕ˉ娉曞<E5A889>BMI銆佸勾榫勩€佽倢閰愬垪鐨勭己澶卞€艰繘琛屽~琛?
|
||||
用户: 使用多重插补法对BMI、年龄、肌酐列的缺失值进行填补
|
||||
代码:
|
||||
\`\`\`python
|
||||
from sklearn.experimental import enable_iterative_imputer
|
||||
@@ -504,12 +504,12 @@ df = df.sort_values('check_date').drop_duplicates(subset=['patient_id'], keep='l
|
||||
说明: 先按日期排序,再去重保留最后一条(最新)
|
||||
|
||||
## 用户当前请求
|
||||
璇锋牴鎹<EFBFBD>互涓婄ず渚嬪拰褰撳墠鏁版嵁闆嗕俊鎭<EFBFBD>紝鐢熸垚浠g爜骞惰В閲娿€?
|
||||
请根据以上示例和当前数据集信息,生成代码并解释。
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 瑙f瀽AI鍥炲<EFBFBD>锛堟彁鍙朿ode鍜宔xplanation锛?
|
||||
* 解析AI回复(提取code和explanation)
|
||||
*/
|
||||
private parseAIResponse(content: string): { code: string; explanation: string } {
|
||||
try {
|
||||
@@ -531,7 +531,7 @@ df = df.sort_values('check_date').drop_duplicates(subset=['patient_id'], keep='l
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error('AI鍥炲<EFBFBD>鏍煎紡閿欒<EFBFBD>锛屾棤娉曟彁鍙栦唬鐮?);
|
||||
throw new Error('AI回复格式错误,无法提取代码');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -577,7 +577,7 @@ export const aiCodeService = new AICodeService();
|
||||
|
||||
---
|
||||
|
||||
#### AIController (鏂板缓锛寏200琛?
|
||||
#### AIController (新建,~200行)
|
||||
|
||||
```typescript
|
||||
// backend/src/modules/dc/tool-c/controllers/AIController.ts
|
||||
@@ -585,7 +585,7 @@ export class AIController {
|
||||
|
||||
/**
|
||||
* POST /api/v1/dc/tool-c/ai/generate
|
||||
* 鐢熸垚浠g爜锛堜笉鎵ц<EFBFBD>锛?
|
||||
* 生成代码(不执行)
|
||||
*/
|
||||
async generateCode(request: FastifyRequest, reply: FastifyReply) {
|
||||
try {
|
||||
@@ -697,24 +697,24 @@ export const aiController = new AIController();
|
||||
|
||||
---
|
||||
|
||||
## 馃搮 寮€鍙戣<E98D99>鍒?
|
||||
## 📅 开发计划
|
||||
|
||||
### 阶段1: 数据库设计(30分钟)⏰ 09:00-09:30
|
||||
|
||||
**任务清单**:
|
||||
- [ ] 鏇存柊 `backend/prisma/schema.prisma`锛堟坊鍔燚cToolCAiHistory妯″瀷锛?
|
||||
- [ ] 鍒涘缓鏁版嵁搴撹縼绉昏剼鏈?`create-tool-c-ai-history-table.mjs`
|
||||
- [ ] 鎵ц<EFBFBD>杩佺Щ锛堝垱寤鸿〃锛?
|
||||
- [ ] 楠岃瘉琛ㄧ粨鏋?
|
||||
- [ ] 更新 `backend/prisma/schema.prisma`(添加DcToolCAiHistory模型)
|
||||
- [ ] 创建数据库迁移脚本 `create-tool-c-ai-history-table.mjs`
|
||||
- [ ] 执行迁移(创建表)
|
||||
- [ ] 验证表结构
|
||||
- [ ] 生成Prisma Client (`npx prisma generate`)
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?`dc_schema.dc_tool_c_ai_history` 琛ㄥ垱寤烘垚鍔?
|
||||
- 鉁?Prisma Client鏇存柊瀹屾垚
|
||||
**交付物**:
|
||||
- ✅ `dc_schema.dc_tool_c_ai_history` 表创建成功
|
||||
- ✅ Prisma Client更新完成
|
||||
|
||||
---
|
||||
|
||||
### 闃舵<EFBFBD>2: AICodeService瀹炵幇锛?灏忔椂锛夆彴 09:30-11:30
|
||||
### 阶段2: AICodeService实现(2小时)⏰ 09:30-11:30
|
||||
|
||||
**任务清单**:
|
||||
- [ ] 创建 `AICodeService.ts` 基础结构
|
||||
@@ -725,88 +725,88 @@ export const aiController = new AIController();
|
||||
- [ ] 实现 `generateAndExecute()` - 生成+执行+重试
|
||||
- [ ] 实现 `getHistory()` - 获取对话历史
|
||||
- [ ] 实现 `saveMessages()` - 保存消息到数据库
|
||||
- [ ] 娣诲姞瀹屾暣閿欒<EFBFBD>澶勭悊鍜屾棩蹇?
|
||||
- [ ] 添加完整错误处理和日志
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?`AICodeService.ts` 瀹屾暣瀹炵幇锛垀400琛岋級
|
||||
- 鉁?鍗曞厓娴嬭瘯閫氳繃
|
||||
**交付物**:
|
||||
- ✅ `AICodeService.ts` 完整实现(~400行)
|
||||
- ✅ 单元测试通过
|
||||
|
||||
---
|
||||
|
||||
### 闃舵<EFBFBD>3: AIController瀹炵幇锛?灏忔椂锛夆彴 11:30-12:30
|
||||
### 阶段3: AIController实现(1小时)⏰ 11:30-12:30
|
||||
|
||||
**任务清单**:
|
||||
- [ ] 创建 `AIController.ts`
|
||||
- [ ] 实现 `POST /ai/generate` - 生成代码
|
||||
- [ ] 实现 `POST /ai/execute` - 执行代码
|
||||
- [ ] 瀹炵幇 `POST /ai/process` - 涓€姝ュ埌浣?
|
||||
- [ ] 实现 `POST /ai/process` - 一步到位
|
||||
- [ ] 实现 `GET /ai/history/:sessionId` - 对话历史
|
||||
- [ ] 添加参数验证
|
||||
- [ ] 添加错误处理
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?`AIController.ts` 瀹屾暣瀹炵幇锛垀200琛岋級
|
||||
- 鉁?4涓狝PI绔<49>偣灏辩华
|
||||
**交付物**:
|
||||
- ✅ `AIController.ts` 完整实现(~200行)
|
||||
- ✅ 4个API端点就绪
|
||||
|
||||
---
|
||||
|
||||
### 鍗堜紤 鈴?12:30-13:30
|
||||
### 午休 ⏰ 12:30-13:30
|
||||
|
||||
---
|
||||
|
||||
### 闃舵<EFBFBD>4: 璺<>敱閰嶇疆锛?5鍒嗛挓锛夆彴 13:30-13:45
|
||||
### 阶段4: 路由配置(15分钟)⏰ 13:30-13:45
|
||||
|
||||
**任务清单**:
|
||||
- [ ] 更新 `routes/index.ts`
|
||||
- [ ] 注册AI相关路由
|
||||
- [ ] 娴嬭瘯璺<EFBFBD>敱鍙<EFBFBD><EFBFBD>闂<EFBFBD>€?
|
||||
- [ ] 测试路由可访问性
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?AI璺<49>敱娉ㄥ唽瀹屾垚
|
||||
- 鉁?Swagger鏂囨。鏇存柊锛堝<EFBFBD>鏈夛級
|
||||
**交付物**:
|
||||
- ✅ AI路由注册完成
|
||||
- ✅ Swagger文档更新(如有)
|
||||
|
||||
---
|
||||
|
||||
### 闃舵<EFBFBD>5: 娴嬭瘯楠屾敹锛?.5灏忔椂锛夆彴 13:45-15:15
|
||||
### 阶段5: 测试验收(1.5小时)⏰ 13:45-15:15
|
||||
|
||||
#### 5.1 鍩虹<EFBFBD>娴嬭瘯锛?0鍒嗛挓锛?
|
||||
#### 5.1 基础测试(30分钟)
|
||||
|
||||
**测试用例**:
|
||||
1. [ ] 娴嬭瘯1: 缁熶竴缂哄け鍊兼爣璁?
|
||||
1. [ ] 测试1: 统一缺失值标记
|
||||
2. [ ] 测试2: 数值列清洗
|
||||
3. [ ] 测试3: 性别编码
|
||||
4. [ ] 测试4: 年龄分组
|
||||
|
||||
**验收标准**:
|
||||
- AI鑳芥<EFBFBD>纭<EFBFBD>敓鎴愪唬鐮?
|
||||
- 浠g爜鍙<EFBFBD>墽琛?
|
||||
- AI能正确生成代码
|
||||
- 代码可执行
|
||||
- 结果符合预期
|
||||
|
||||
#### 5.2 涓<EFBFBD>骇娴嬭瘯锛?0鍒嗛挓锛?
|
||||
#### 5.2 中级测试(30分钟)
|
||||
|
||||
**测试用例**:
|
||||
5. [ ] 测试5: BMI计算
|
||||
6. [ ] 测试6: 住院天数计算
|
||||
7. [ ] 娴嬭瘯7: 鏉′欢绛涢€?
|
||||
7. [ ] 测试7: 条件筛选
|
||||
|
||||
#### 5.3 楂樼骇娴嬭瘯锛?0鍒嗛挓锛?
|
||||
#### 5.3 高级测试(30分钟)
|
||||
|
||||
**测试用例**:
|
||||
8. [ ] 娴嬭瘯8: 涓<>綅鏁板~琛?
|
||||
9. [ ] 娴嬭瘯9: 澶氶噸鎻掕ˉMICE 猸?
|
||||
8. [ ] 测试8: 中位数填补
|
||||
9. [ ] 测试9: 多重插补MICE ⭐
|
||||
10. [ ] 测试10: 智能去重
|
||||
|
||||
#### 5.4 鐗规畩娴嬭瘯锛?0鍒嗛挓锛?
|
||||
#### 5.4 特殊测试(30分钟)
|
||||
|
||||
**测试用例**:
|
||||
11. [ ] 鑷<EFBFBD>垜淇<EFBFBD><EFBFBD>娴嬭瘯锛堟晠鎰忛敊璇<EFBFBD>紝楠岃瘉閲嶈瘯鏈哄埗锛?
|
||||
12. [ ] 杈圭晫娴嬭瘯锛堝垪涓嶅瓨鍦ㄣ€佸叏閮ㄧ己澶辩瓑锛?
|
||||
13. [ ] 骞跺彂娴嬭瘯锛堝<EFBFBD>鐢ㄦ埛鍚屾椂浣跨敤锛?
|
||||
11. [ ] 自我修正测试(故意错误,验证重试机制)
|
||||
12. [ ] 边界测试(列不存在、全部缺失等)
|
||||
13. [ ] 并发测试(多用户同时使用)
|
||||
14. [ ] 端到端测试(上传→AI处理→结果验证)
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?娴嬭瘯鑴氭湰 `test-tool-c-day3.mjs`
|
||||
- 鉁?娴嬭瘯鎶ュ憡锛堥€氳繃鐜団墺90%锛?
|
||||
**交付物**:
|
||||
- ✅ 测试脚本 `test-tool-c-day3.mjs`
|
||||
- ✅ 测试报告(通过率≥90%)
|
||||
|
||||
---
|
||||
|
||||
@@ -814,14 +814,14 @@ export const aiController = new AIController();
|
||||
|
||||
**任务清单**:
|
||||
- [ ] 创建技术债务清单 `Tool-C技术债务清单.md`
|
||||
- [ ] 鏇存柊妯″潡鐘舵€佹枃妗?`00-宸ュ叿C褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?md`
|
||||
- [ ] 更新模块状态文档 `00-工具C当前状态与开发指南.md`
|
||||
- [ ] 创建Day 3开发完成总结
|
||||
- [ ] 鎻愪氦Git骞舵帹閫?
|
||||
- [ ] 提交Git并推送
|
||||
|
||||
**浜や粯鐗?*:
|
||||
- 鉁?鎶€鏈<E282AC>€哄姟鏂囨。
|
||||
- 鉁?Day 3寮€鍙戣<EFBFBD>褰?
|
||||
- 鉁?Git鎻愪氦鎴愬姛
|
||||
**交付物**:
|
||||
- ✅ 技术债务文档
|
||||
- ✅ Day 3开发记录
|
||||
- ✅ Git提交成功
|
||||
|
||||
---
|
||||
|
||||
@@ -829,116 +829,116 @@ export const aiController = new AIController();
|
||||
|
||||
### 功能验收
|
||||
|
||||
| 鍔熻兘 | 楠屾敹鏍囧噯 | 鐘舵€?|
|
||||
| 功能 | 验收标准 | 状态 |
|
||||
|------|---------|------|
|
||||
| AI浠g爜鐢熸垚 | 10涓<30>ず渚嬪満鏅?00%鍙<>敓鎴愭<E98EB4>纭<EFBFBD>唬鐮?| 鈴革笍 |
|
||||
| AI代码生成 | 10个示例场景100%可生成正确代码 | ⏸️ |
|
||||
| 代码执行 | 生成的代码可成功执行 | ⏸️ |
|
||||
| 鑷<EFBFBD>垜淇<EFBFBD><EFBFBD> | 澶辫触鍚庤兘鑷<E58598>姩閲嶈瘯锛堟渶澶?娆★級 | 鈴革笍 |
|
||||
| 瀵硅瘽鍘嗗彶 | 鑳借幏鍙栨渶杩?杞<><E69D9E>璇?| 鈴革笍 |
|
||||
| 鏁版嵁棰勮<EFBFBD> | 鎵ц<E98EB5>鍚庤繑鍥炲墠50琛岄<E7909B>瑙?| 鈴革笍 |
|
||||
| 自我修正 | 失败后能自动重试(最多3次) | ⏸️ |
|
||||
| 对话历史 | 能获取最近5轮对话 | ⏸️ |
|
||||
| 数据预览 | 执行后返回前50行预览 | ⏸️ |
|
||||
|
||||
### 鎶€鏈<EFBFBD>獙鏀?
|
||||
### 技术验收
|
||||
|
||||
| 鎸囨爣 | 鐩<>爣 | 鐘舵€?|
|
||||
| 指标 | 目标 | 状态 |
|
||||
|------|------|------|
|
||||
| 代码质量 | 无TypeScript错误 | ⏸️ |
|
||||
| 浜戝師鐢熻<EFBFBD>鑼?| 100%绗﹀悎 | 鈴革笍 |
|
||||
| 閿欒<EFBFBD>澶勭悊 | 鎵€鏈夊紓甯搁兘鏈夊<E98F88>鐞?| 鈴革笍 |
|
||||
| 鏃ュ織瀹屾暣鎬?| 鍏抽敭鎿嶄綔閮芥湁鏃ュ織 | 鈴革笍 |
|
||||
| 娴嬭瘯瑕嗙洊鐜?| 鈮?0% | 鈴革笍 |
|
||||
| 云原生规范 | 100%符合 | ⏸️ |
|
||||
| 错误处理 | 所有异常都有处理 | ⏸️ |
|
||||
| 日志完整性 | 关键操作都有日志 | ⏸️ |
|
||||
| 测试覆盖率 | ≥80% | ⏸️ |
|
||||
|
||||
### 性能验收
|
||||
|
||||
| 鎸囨爣 | 鐩<>爣 | 鐘舵€?|
|
||||
| 指标 | 目标 | 状态 |
|
||||
|------|------|------|
|
||||
| AI鐢熸垚鏃堕棿 | <5绉?| 鈴革笍 |
|
||||
| AI生成时间 | <5秒 | ⏸️ |
|
||||
| 代码执行时间 | <3秒(简单操作) | ⏸️ |
|
||||
| 绔<EFBFBD>埌绔<EFBFBD>椂闂?| <10绉?| 鈴革笍 |
|
||||
| 端到端时间 | <10秒 | ⏸️ |
|
||||
|
||||
---
|
||||
|
||||
## 📦 交付清单
|
||||
|
||||
### 浠g爜鏂囦欢锛?涓<>級
|
||||
### 代码文件(6个)
|
||||
|
||||
1. 鉁?`backend/prisma/schema.prisma` - 鏂板<EFBFBD>DcToolCAiHistory妯″瀷
|
||||
2. 鉁?`backend/scripts/create-tool-c-ai-history-table.mjs` - 寤鸿〃鑴氭湰
|
||||
3. 鉁?`backend/src/modules/dc/tool-c/services/AICodeService.ts` - 400琛?
|
||||
4. 鉁?`backend/src/modules/dc/tool-c/controllers/AIController.ts` - 200琛?
|
||||
5. 鉁?`backend/src/modules/dc/tool-c/routes/index.ts` - 鏇存柊
|
||||
6. 鉁?`backend/test-tool-c-day3.mjs` - 娴嬭瘯鑴氭湰
|
||||
1. ✅ `backend/prisma/schema.prisma` - 新增DcToolCAiHistory模型
|
||||
2. ✅ `backend/scripts/create-tool-c-ai-history-table.mjs` - 建表脚本
|
||||
3. ✅ `backend/src/modules/dc/tool-c/services/AICodeService.ts` - 400行
|
||||
4. ✅ `backend/src/modules/dc/tool-c/controllers/AIController.ts` - 200行
|
||||
5. ✅ `backend/src/modules/dc/tool-c/routes/index.ts` - 更新
|
||||
6. ✅ `backend/test-tool-c-day3.mjs` - 测试脚本
|
||||
|
||||
### 鏂囨。鏂囦欢锛?涓<>級
|
||||
### 文档文件(4个)
|
||||
|
||||
1. 鉁?`宸ュ叿C_AI_Few-shot绀轰緥搴?md` - 10涓<EFBFBD>ず渚嬭<EFBFBD>瑙?
|
||||
2. 鉁?`宸ュ叿C_Day3寮€鍙戣<E98D99>鍒?md` - 鏈<EFBFBD>枃妗?
|
||||
3. 鉁?`Tool-C鎶€鏈<EFBFBD>€哄姟娓呭崟.md` - 寰呬紭鍖栭」
|
||||
4. 鉁?`2025-12-06_宸ュ叿C_Day3寮€鍙戝畬鎴愭€荤粨.md` - 鎬荤粨鎶ュ憡
|
||||
1. ✅ `工具C_AI_Few-shot示例库.md` - 10个示例详解
|
||||
2. ✅ `工具C_Day3开发计划.md` - 本文档
|
||||
3. ✅ `Tool-C技术债务清单.md` - 待优化项
|
||||
4. ✅ `2025-12-06_工具C_Day3开发完成总结.md` - 总结报告
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关文档
|
||||
|
||||
- [宸ュ叿C_AI_Few-shot绀轰緥搴?md](./宸ュ叿C_AI_Few-shot绀轰緥搴?md)
|
||||
- [工具C_AI_Few-shot示例库.md](./工具C_AI_Few-shot示例库.md)
|
||||
- [工具C_MVP开发计划_V1.0.md](./工具C_MVP开发计划_V1.0.md)
|
||||
- [通用对话服务抽取计划.md](../../../08-项目管理/05-技术债务/通用对话服务抽取计划.md)
|
||||
- [浜戝師鐢熷紑鍙戣<EFBFBD>鑼?md](../../../04-寮€鍙戣<EFBFBD>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||||
- [云原生开发规范.md](../../../04-开发规范/08-云原生开发规范.md)
|
||||
|
||||
---
|
||||
|
||||
## 🔄 风险管理
|
||||
|
||||
### 椋庨櫓1: AI鐢熸垚浠g爜璐ㄩ噺涓嶇ǔ瀹?
|
||||
### 风险1: AI生成代码质量不稳定
|
||||
|
||||
**应对措施**:
|
||||
- 鉁?浣跨敤10涓狥ew-shot绀轰緥鎻愬崌璐ㄩ噺
|
||||
- 鉁?闄嶄綆temperature鑷?.1
|
||||
- 鉁?瀹炴柦3娆¢噸璇曟満鍒?
|
||||
- 鉁?娣诲姞AST闈欐€佹<E282AC>鏌ワ紙Python鏈嶅姟锛?
|
||||
- ✅ 使用10个Few-shot示例提升质量
|
||||
- ✅ 降低temperature至0.1
|
||||
- ✅ 实施3次重试机制
|
||||
- ✅ 添加AST静态检查(Python服务)
|
||||
|
||||
### 风险2: LLM调用超时
|
||||
|
||||
**应对措施**:
|
||||
- 鉁?璁剧疆鍚堢悊鐨則imeout锛?0绉掞級
|
||||
- 鉁?鍓嶇<E98D93>鏄剧ず鍔犺浇鐘舵€?
|
||||
- 鉁?娣诲姞閲嶈瘯鏈哄埗
|
||||
- ✅ 设置合理的timeout(10秒)
|
||||
- ✅ 前端显示加载状态
|
||||
- ✅ 添加重试机制
|
||||
|
||||
### 风险3: Python执行失败
|
||||
|
||||
**应对措施**:
|
||||
- 鉁?AI鑷<49>垜淇<E59E9C><E6B787>锛堟渶澶?娆★級
|
||||
- 鉁?鍙嬪ソ閿欒<E996BF>鎻愮ず
|
||||
- 鉁?寤鸿<E5AFA4>鐢ㄦ埛璋冩暣闇€姹?
|
||||
- ✅ AI自我修正(最多3次)
|
||||
- ✅ 友好错误提示
|
||||
- ✅ 建议用户调整需求
|
||||
|
||||
---
|
||||
|
||||
## 📊 预期成果
|
||||
|
||||
**Day 3瀹屾垚鍚?*:
|
||||
- 鉁?Tool C鐢ㄦ埛鍙<EFBFBD>€氳繃鑷<EFBFBD>劧璇<EFBFBD>█娓呮礂鏁版嵁
|
||||
- 鉁?AI鑳界敓鎴?0%鍦烘櫙鐨勬<E990A8>纭<EFBFBD>唬鐮?
|
||||
- 鉁?澶辫触鍦烘櫙鏈夎嚜鍔ㄩ噸璇曟満鍒?
|
||||
- 鉁?瀹屾暣鐨勫<E990A8>璇濆巻鍙茬<E98D99>鐞?
|
||||
**Day 3完成后**:
|
||||
- ✅ Tool C用户可通过自然语言清洗数据
|
||||
- ✅ AI能生成90%场景的正确代码
|
||||
- ✅ 失败场景有自动重试机制
|
||||
- ✅ 完整的对话历史管理
|
||||
|
||||
**整体进度**:
|
||||
- Day 1: Python寰<EFBFBD>湇鍔?鉁?
|
||||
- Day 2: Session绠$悊 鉁?
|
||||
- Day 1: Python微服务 ✅
|
||||
- Day 2: Session管理 ✅
|
||||
- Day 3: AI代码生成 ⏸️
|
||||
- Day 4-5: 鍓嶇<EFBFBD>寮€鍙?
|
||||
- Day 6: 绔<EFBFBD>埌绔<EFBFBD>祴璇?
|
||||
- Day 4-5: 前端开发
|
||||
- Day 6: 端到端测试
|
||||
|
||||
---
|
||||
|
||||
## 📝 更新记录
|
||||
|
||||
| 鏃ユ湡 | 鐗堟湰 | 鏇存柊鍐呭<E98D90> | 鏇存柊浜?|
|
||||
| 日期 | 版本 | 更新内容 | 更新人 |
|
||||
|------|------|---------|--------|
|
||||
| 2025-12-06 | V1.0 | 鍒濆<EFBFBD>鍒涘缓锛屾槑纭?澶у喅绛栧拰寮€鍙戣<E98D99>鍒?| AI Assistant |
|
||||
| 2025-12-06 | V1.0 | 初始创建,明确9大决策和开发计划 | AI Assistant |
|
||||
|
||||
---
|
||||
|
||||
**鏂囨。鐘舵€?*: 鉁?宸茬‘璁?
|
||||
**涓嬩竴姝?*: 寮€濮嬫墽琛屽紑鍙戣<E98D99>鍒掞紙棰勮<E6A3B0>5.5-6灏忔椂锛?
|
||||
**文档状态**: ✅ 已确认
|
||||
**下一步**: 开始执行开发计划(预计5.5-6小时)
|
||||
|
||||
**准备开始开发!** 🚀
|
||||
|
||||
@@ -992,6 +992,5 @@ export const aiController = new AIController();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user