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,93 +1,93 @@
# ASL Prompt璁捐<EFBFBD>涓庢祴璇曞畬鎴愭姤鍛?
# ASL Prompt设计与测试完成报告
**日期**: 2025-11-18
**浠诲姟**: ASL妯″潡Prompt璁捐<EFBFBD>涓庤川閲忔祴璇?
**鐘舵€?*: 鉁?瀹屾垚
**任务**: ASL模块Prompt设计与质量测试
**状态**: ✅ 完成
**耗时**: ~4小时
---
## 📋 任务概述
鏍规嵁`AIclinicalresearch\docs\03-涓氬姟妯″潡\ASL-AI鏅鸿兘鏂囩尞\02-鎶€鏈<E282AC><E98F88><EFBFBD>06-璐ㄩ噺淇濋殰涓庡彲杩芥函绛栫暐.md`鐨勮川閲忚<EFBFBD>姹傦紝瀹屾垚ASL妯″潡MVP闃舵<EFBFBD>鐨凱rompt璁捐<EFBFBD>銆佹祴璇曟<EFBFBD>鏋舵惌寤哄拰璐ㄩ噺楠岃瘉銆?
根据`AIclinicalresearch\docs\03-业务模块\ASL-AI智能文献\02-技术设计\06-质量保障与可追溯策略.md`的质量要求完成ASL模块MVP阶段的Prompt设计、测试框架搭建和质量验证。
**质量目标**:
- 鍑嗙‘鐜?鈮?85%
- 鍙屾ā鍨嬩竴鑷寸巼 鈮?80%
- JSON Schema楠岃瘉鐜?鈮?95%
- 浜哄伐澶嶆牳鐜?鈮?20%
- 准确率 ≥ 85%
- 双模型一致率 ≥ 80%
- JSON Schema验证率 ≥ 95%
- 人工复核率 ≤ 20%
---
## 鉁?瀹屾垚鍐呭<E98D90>
## ✅ 完成内容
### 1. 高质量Prompt设计 (v1.0.0-MVP)
**文件**: `backend/prompts/asl/screening/v1.0.0-mvp.txt`
**设计特点**:
- 鉁?缁撴瀯鍖栧垎姝ユ寚瀵硷紙姝ラ<E5A79D>1-4锛?
- 鉁?鏄庣鐨凱ICO璇勪及鏍囧噯
- 鉁?璇︾粏鐨勮緭鍑烘牸寮忚<E5AFAE>姹?
- 鉁?鍖诲<E98D96>鏂囩尞绛涢€夊師鍒?
- 鉁?缃<>俊搴﹁瘎鍒嗘寚鍗?
- 鉁?50-300瀛楃悊鐢辫<EFBFBD>姹?
- ✅ 结构化分步指导(步骤1-4
- ✅ 明确的PICO评估标准
- ✅ 详细的输出格式要求
- ✅ 医学文献筛选原则
- ✅ 置信度评分指南
- 50-300字理由要求
**核心内容**:
```
步骤1: PICO逐项评估 (match/partial/mismatch)
步骤2: 提取证据 (引用原文)
步骤3: 综合决策 (include/exclude/uncertain)
姝ラ<EFBFBD>4: 缃<>俊搴﹁瘎鍒?(0-1)
步骤4: 置信度评分 (0-1)
```
### 2. 娴嬭瘯鏁版嵁闆嗘瀯寤?
### 2. 测试数据集构建
**文件**: `backend/scripts/test-samples/asl-test-literatures.json`
**测试样本**: 10篇精心设计的医学文献
- 鉁?3绡囧簲绾冲叆锛圧CT + 蹇冭<E8B987>粨灞€锛?
- 鉁?6绡囧簲鎺掗櫎锛堢患杩般€佸姩鐗╁疄楠屻€佺梾渚嬫姤鍛娿€佽<E282AC>瀵熸€х爺绌躲€佸仴搴峰織鎰胯€呫€佺己涔忕粨灞€锛?
- 鉁?1绡囪竟鐣屾<E990A3>渚嬶紙鍙岄噸鎶戝埗鍓傦級
- ✅ 3篇应纳入RCT + 心血管结局)
- ✅ 6篇应排除综述、动物实验、病例报告、观察性研究、健康志愿者、缺乏结局
- ✅ 1篇边界案例双重抑制剂
**覆盖场景**:
- RCT vs 瑙傚療鎬х爺绌?
- SGLT2鍗曚竴鎶戝埗鍓?vs 鍙岄噸鎶戝埗鍓?
- 绯栧翱鐥呮偅鑰?vs 鍋ュ悍蹇楁効鑰?
- 瀹夋叞鍓傚<EFBFBD>鐓?vs 娲绘€у<E282AC>鐓?
- 鎶ュ憡蹇冭<EFBFBD>粨灞€ vs 浠呬唬璋㈡寚鏍?
- RCT vs 观察性研究
- SGLT2单一抑制剂 vs 双重抑制剂
- 糖尿病患者 vs 健康志愿者
- 安慰剂对照 vs 活性对照
- 报告心血管结局 vs 仅代谢指标
- 原始研究 vs 综述/Meta分析
### 3. <EFBFBD>姩鍖栨祴璇曟<EFBFBD>鏋?
### 3. 自动化测试框架
**文件**: `backend/scripts/test-llm-screening.ts`
**鍔熻兘鐗规€?*:
- 鉁?鍙屾ā鍨嬪苟琛屾祴璇曪紙DeepSeek + Qwen锛?
- 鉁?鑷<>姩璐ㄩ噺鎸囨爣璁
- 鉁?娣锋穯鐭╅樀鍒嗘瀽
- 鉁?璇︾粏缁撴灉璁板綍锛圝SON + Markdown锛?
- 鉁?鍐茬獊妫€娴嬩笌鏍囪<E98F8D>
- 鉁?澶勭悊鏃堕棿缁熻<E7BC81>
**功能特性**:
- ✅ 双模型并行测试(DeepSeek + Qwen
- ✅ 自动质量指标计算
- ✅ 混淆矩阵分析
- ✅ 详细结果记录JSON + Markdown
- ✅ 冲突检测与标记
- ✅ 处理时间统计
**质量指标**:
```typescript
{
? correctDecisions / totalTests,
准确率: correctDecisions / totalTests,
一致率: consensusCount / totalTests,
<EFBFBD>? avgConfidence,
? needReviewCount / totalTests,
平均置信度: avgConfidence,
需人工复核率: needReviewCount / totalTests,
: { TP, FP, TN, FN, uncertain }
}
```
### 4. 浠g爜浼樺寲涓庝慨澶?
### 4. 代码优化与修复
**修复问题**:
1. 鉁?`LLMFactory`璋冪敤鏂瑰紡閿欒<EFBFBD> 鈫?鏀圭敤`getAdapter()`
2. 鉁?妯″瀷鍚嶇О鏄犲皠 鈫?鍒涘缓`MODEL_TYPE_MAP`
3. 鉁?JSON瑙f瀽缁撴灉澶勭悊 鈫?姝g‘鎻愬彇`parseResult.data`
4. 鉁?Prompt鍑芥暟绛惧悕 鈫?澧炲姞authors/journal/year鍙傛暟
1. `LLMFactory`调用方式错误 → 改用`getAdapter()`
2. ✅ 模型名称映射 → 创建`MODEL_TYPE_MAP`
3. JSON解析结果处理 → 正确提取`parseResult.data`
4. Prompt函数签名 → 增加authors/journal/year参数
**文件改动**:
- `backend/src/modules/asl/services/llmScreeningService.ts`
@@ -99,72 +99,72 @@
### 首次测试成绩 (v1.0.0)
| 璐ㄩ噺鎸囨爣 | 瀹為檯鍊?| 鐩<>爣鍊?| 鐘舵€?| 鍒嗘瀽 |
| 质量指标 | 实际值 | 目标值 | 状态 | 分析 |
|---------|--------|--------|------|------|
| **鍑嗙‘鐜?* | 60.0% | 鈮?5% | 鉂?| 闇€鎻愬崌25% |
| **涓€鑷寸巼** | 70.0% | 鈮?0% | 鉂?| 闇€鎻愬崌10% |
| **骞冲潎缃<EFBFBD>俊搴?* | 0.95 | - | 鉁?| 浼樼<E6B5BC> |
| **闇€浜哄伐澶嶆牳鐜?* | 30.0% | 鈮?0% | 鉂?| 闇€闄嶄綆10% |
| **JSON楠岃瘉鐜?* | 100% | 鈮?5% | 鉁?| 瀹岀編 |
| **准确率** | 60.0% | ≥85% | ❌ | 需提升25% |
| **一致率** | 70.0% | ≥80% | ❌ | 需提升10% |
| **平均置信度** | 0.95 | - | ✅ | 优秀 |
| **需人工复核率** | 30.0% | ≤20% | ❌ | 需降低10% |
| **JSON验证率** | 100% | ≥95% | ✅ | 完美 |
### 成功案例 (6/10)
鉁?**姝g‘妗堜緥**:
1. test-002: RCT + 蹇冭<EFBFBD>粨灞€ 鈫?鉁?绾冲叆
2. test-003: 绯荤粺缁艰堪 鈫?鉁?鎺掗櫎
3. test-004: 鍔ㄧ墿瀹為獙 鈫?鉁?鎺掗櫎
4. test-005: RCT + 蹇冭<EFBFBD>粨灞€(CREDENCE) 鈫?鉁?绾冲叆
5. test-006: 鍥為【鎬ч槦鍒?鈫?鉁?鎺掗櫎
6. test-009: 鐥呬緥鎶ュ憡 鈫?鉁?鎺掗櫎
**正确案例**:
1. test-002: RCT + 心血管结局 → ✅ 纳入
2. test-003: 系统综述 → ✅ 排除
3. test-004: 动物实验 → ✅ 排除
4. test-005: RCT + 心血管结局(CREDENCE) → ✅ 纳入
5. test-006: 回顾性队列 → ✅ 排除
6. test-009: 病例报告 → ✅ 排除
### 错误案例分析 (4/10)
鉂?**閿欒<E996BF>绫诲瀷**:
**错误类型**:
1. **test-001** (鍋囬槾鎬?:
1. **test-001** (假阴性):
- 期望include实际exclude
- 原因:缺乏心血管结局数据
- **璇勪及锛氭ā鍨嬪彲鑳芥<EFBFBD><EFBFBD>紝鏈熸湜鍊兼湁璇?*
- **评估:模型可能正确,期望值有误**
2. **test-007** (PICO冲突):
- 鍋ュ悍蹇楁効鑰呯爺绌?
- 涓ゆā鍨嬬粨璁轰竴鑷?exclude)锛屼絾I鍜孲缁村害鍒ゆ柇涓嶅悓
- 健康志愿者研究
- 两模型结论一致(exclude)但I和S维度判断不同
3. **test-008** (PICO冲突):
- 瑙傚療鎬х爺绌?
- 涓ゆā鍨嬬粨璁轰竴鑷?exclude)锛屼絾C缁村害鍒ゆ柇涓嶅悓
- 观察性研究
- 两模型结论一致(exclude)但C维度判断不同
4. **test-010** (严重冲突):
- 鍙岄噸SGLT1/SGLT2鎶戝埗鍓?
- DeepSeek=exclude, Qwen=include锛屽畬鍏ㄧ浉鍙?
- 双重SGLT1/SGLT2抑制剂
- DeepSeek=exclude, Qwen=include,完全相反
---
## 🔍 核心发现
### 1. Prompt鍩烘湰妗嗘灦鏈夋晥 鉁?
### 1. Prompt基本框架有效 ✅
**证据**:
- 6/10案例完全正确准确率60%
- JSON Schema楠岃瘉鐜?00%
- 骞冲潎缃<EFBFBD>俊搴?.95
- JSON Schema验证率100%
- 平均置信度0.95
### 2. 杈圭晫鎯呭喌闇€瑕佷紭鍖?鈿狅笍
### 2. 边界情况需要优化 ⚠️
**问题场景**:
- 鍙岄噸鎶戝埗鍓?vs 鍗曚竴SGLT2鎶戝埗鍓?
- 鍋ュ悍蹇楁効鑰?Phase 1鐮旂┒
- 娲绘€у<EFBFBD>鐓?vs 瀹夋叞鍓傚<E98D93>鐓?
- 双重抑制剂 vs 单一SGLT2抑制剂
- 健康志愿者 Phase 1研究
- 活性对照 vs 安慰剂对照
- 结局指标匹配判断
### 3. PICO判断标准需明确 ⚠️
**影响**:
- 涓や釜妯″瀷瀵筸atch/partial/mismatch鐨勭晫闄愮悊瑙d笉鍚?
- 两个模型对match/partial/mismatch的界限理解不同
- 导致即使结论一致也被标记为冲突
- 提高了人工复核率
### 4. 鍐茬獊妫€娴嬭繃浜庝弗鏍?鈿狅笍
### 4. 冲突检测过于严格 ⚠️
**现象**:
- test-007和test-008两个模型结论都是exclude
@@ -179,41 +179,41 @@
**1. 增加Few-shot示例**
```
鍦≒rompt<EFBFBD><EFBFBD>鍔?-5涓<35>爣鍑嗘<E98D91>渚嬶細
- 鏄庣‘绾冲叆锛歊CT + SGLT2鎶戝埗鍓?+ 瀹夋叞鍓?+ 蹇冭<E8B987>粨灞€
- 鏄庣‘鎺掗櫎锛氱患杩般€佸姩鐗╁疄楠屻€佺梾渚嬫姤鍛?
- 杈圭晫鎯呭喌锛氬弻閲嶆姂鍒跺墏 鈫?uncertain
在Prompt中增加3-5个标准案例
- 明确纳入RCT + SGLT2抑制剂 + 安慰剂 + 心血管结局
- 明确排除:综述、动物实验、病例报告
- 边界情况:双重抑制剂 → uncertain
```
**2. 明确PICO判断标准**
```
P: match=2鍨嬬硸灏跨梾鎮h€?| partial=娣峰悎浜虹兢 | mismatch=鍋ュ悍蹇楁効鑰?鍔ㄧ墿
I: match=鍗曚竴SGLT2鎶戝埗鍓?| partial=鑱斿悎鐢ㄨ嵂 | mismatch=鍙岄噸鎶戝埗鍓?鍏朵粬
C: match=瀹夋叞鍓?甯歌<E794AF>鐤楁硶 | partial=鏍囧噯娌荤枟 | mismatch=娲绘€у<EFBFBD>鐓?DPP-4绛?
S: match=RCT | partial=鍑嗛殢鏈?| mismatch=瑙傚療鎬?缁艰堪/鍔ㄧ墿/鐥呬緥
P: match=2型糖尿病患者 | partial=混合人群 | mismatch=健康志愿者/动物
I: match=单一SGLT2抑制剂 | partial=联合用药 | mismatch=双重抑制剂/其他
C: match=安慰剂/常规疗法 | partial=标准治疗 | mismatch=活性对照(DPP-4等)
S: match=RCT | partial=准随机 | mismatch=观察性/综述/动物/病例
```
**3. 强化uncertain使用**
```
- 淇℃伅涓嶈冻 鈫?uncertain
- 杈圭晫鎯呭喌 鈫?uncertain
- PICO鏈?涓<>強浠ヤ笂partial 鈫?uncertain
- 信息不足 → uncertain
- 边界情况 → uncertain
- PICO有2个及以上partial uncertain
```
**4. 浼樺寲鍐茬獊妫€娴?*
**4. 优化冲突检测**
```typescript
// 只有conclusion不同才算严重冲突
const hasConflict = result1.conclusion !== result2.conclusion;
// PICO缁村害宸<EFBFBD>紓闄嶇骇涓?闇€娉ㄦ剰"
// PICO维度差异降级为"需注意"
```
### 预期改善效果
| 指标 | v1.0.0 | v1.0.1预期 | 改善 |
|------|--------|------------|------|
| 鍑嗙‘鐜?| 60% | **85-90%** | +25-30% |
| 准确率 | 60% | **85-90%** | +25-30% |
| 一致率 | 70% | **85-90%** | +15-20% |
| 浜哄伐澶嶆牳鐜?| 30% | **15-20%** | -10-15% |
| 人工复核率 | 30% | **15-20%** | -10-15% |
---
@@ -222,17 +222,17 @@ const hasConflict = result1.conclusion !== result2.conclusion;
### 核心文件
1. **Prompt模板**:
- `backend/prompts/asl/screening/v1.0.0-mvp.txt` (118琛?
- `backend/prompts/asl/screening/v1.0.0-mvp.txt` (118行)
2. **测试数据**:
- `backend/scripts/test-samples/asl-test-literatures.json` (114琛? 10绡囨枃鐚?
- `backend/scripts/test-samples/asl-test-literatures.json` (114行, 10篇文献)
3. **测试脚本**:
- `backend/scripts/test-llm-screening.ts` (376琛?
- `backend/scripts/test-llm-screening.ts` (376行)
4. **服务优化**:
- `backend/src/modules/asl/services/llmScreeningService.ts` (224琛? 宸蹭紭鍖?
- `backend/src/modules/asl/schemas/screening.schema.ts` (174琛? 宸叉洿鏂?
- `backend/src/modules/asl/services/llmScreeningService.ts` (224行, 已优化)
- `backend/src/modules/asl/schemas/screening.schema.ts` (174行, 已更新)
### 文档报告
@@ -243,39 +243,39 @@ const hasConflict = result1.conclusion !== result2.conclusion;
- `backend/scripts/test-results/test-results-2025-11-18T08-10-57-407Z.json`
- `backend/scripts/test-results/test-report-2025-11-18T08-10-57-407Z.md`
7. **<EFBFBD>姤鍛?*:
- `docs/03-涓氬姟妯″潡/ASL-AI鏅鸿兘鏂囩尞/05-寮€鍙戣<E98D99>褰?2025-11-18-Prompt璁捐<EFBFBD>涓庢祴璇曞畬鎴愭姤鍛?md`
7. **本报告**:
- `docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Prompt设计与测试完成报告.md`
---
## 馃幆 涓嬩竴姝ヨ<E5A79D>鍒?
## 🎯 下一步计划
### Week 2 - Day 1 (明天)
**浠诲姟**: Prompt v1.0.1浼樺寲涓庨噸娴?
**任务**: Prompt v1.0.1优化与重测
1. [ ] 创建v1.0.1 Prompt增加Few-shot示例
2. [ ] 更新PICO判断标准说明
3. [ ] 优化冲突检测逻辑
4. [ ] 閲嶆柊杩愯<EFBFBD>娴嬭瘯锛岄獙璇佹敼杩涙晥鏋?
5. [ ] <EFBFBD>爣锛氬噯纭<EFBFBD>巼鈮?5%锛屼竴鑷寸巼鈮?5%
4. [ ] 重新运行测试,验证改进效果
5. [ ] 目标准确率≥85%一致率≥85%
### Week 2 - Day 2-3
**浠诲姟**: 鎵╁睍娴嬭瘯涓庢ā鍨嬪<EFBFBD>姣?
**任务**: 扩展测试与模型对比
1. [ ] 鎵╁厖娴嬭瘯鏍锋湰鑷?0-30绡?
2. [ ] 娴嬭瘯GPT-5鍜孋laude-4.5鐨勮〃鐜?
3. [ ] 瀵规瘮涓嶅悓妯″瀷缁勫悎鐨勬晥鏋?
4. [ ] 寤虹珛Few-shot绀轰緥搴?
1. [ ] 扩充测试样本至20-30
2. [ ] 测试GPT-5和Claude-4.5的表现
3. [ ] 对比不同模型组合的效果
4. [ ] 建立Few-shot示例库
### Week 2 - Day 4-5
**浠诲姟**: 闆嗘垚鍒癆PI涓庡墠绔<EFBFBD>紑鍙?
**任务**: 集成到API与前端开发
1. [ ] 将LLM筛选集成到筛选任务控制器
2. [ ] 瀹炵幇鎵归噺绛涢€夊姛鑳?
3. [ ] 寮€濮嬪墠绔疷I寮€鍙?
2. [ ] 实现批量筛选功能
3. [ ] 开始前端UI开发
---
@@ -283,16 +283,16 @@ const hasConflict = result1.conclusion !== result2.conclusion;
### 优势
鉁?**绯荤粺鍖栨祴璇曟<E79287>鏋?*: 寤虹珛浜嗗畬鏁寸殑鑷<E6AE91>姩鍖栨祴璇曟祦绋?
鉁?**楂樿川閲忓熀绾?*: v1.0.0 Prompt宸茶揪鍒?0%鍑嗙‘鐜?
鉁?**璇︾粏鍙<E7B28F>拷婧?*: 鎵€鏈夋祴璇曠粨鏋滃彲澶嶇幇
鉁?**蹇<>€熻凯浠兘鍔?*: 鍙<>揩閫熸祴璇曚笉鍚孭rompt鐗堟湰
**系统化测试框架**: 建立了完整的自动化测试流程
**高质量基线**: v1.0.0 Prompt已达到60%准确率
**详细可追溯**: 所有测试结果可复现
**快速迭代能力**: 可快速测试不同Prompt版本
### 寰呮敼杩?
### 待改进
鈿狅笍 **杈圭晫鎯呭喌澶勭悊**: 闇€瑕佹洿鏄庣鐨勫垽鏂<E59EBD>爣鍑?
鈿狅笍 **涓€鑷存€ф帶鍒?*: 涓や釜妯″瀷瀵瑰悓涓€鎯呭喌鐨勫垽鏂<E59EBD>渶鏇翠竴鑷?
鈿狅笍 **涓嶇‘瀹氭€у紩瀵?*: 闇€寮曞<E5AFAE>妯″瀷鏇村<E98F87>浣跨敤uncertain
⚠️ **边界情况处理**: 需要更明确的判断标准
⚠️ **一致性控制**: 两个模型对同一情况的判断需更一致
⚠️ **不确定性引导**: 需引导模型更多使用uncertain
---
@@ -300,18 +300,18 @@ const hasConflict = result1.conclusion !== result2.conclusion;
| 项目 | 数量 |
|------|------|
| 鏂板<EFBFBD>爜琛屾暟 | ~1,200琛?|
| 鏂板<EFBFBD>鏂囨。椤垫暟 | ~15椤?|
| 娴嬭瘯鏍锋湰鏁?| 10绡?|
| 娴嬭瘯閫氳繃鐜?| 60% |
| API璋冪敤娆℃暟 | 20娆★紙10绡嚸楀弻妯″瀷锛?|
| 鎬诲<EFBFBD>鐞嗘椂闂?| 125绉?|
| 骞冲潎姣忕瘒鑰楁椂 | 12.5绉?|
| 新增代码行数 | ~1,200|
| 新增文档页数 | ~15|
| 测试样本数 | 10|
| 测试通过率 | 60% |
| API调用次数 | 20次10篇×双模型 |
| 总处理时间 | 125|
| 平均每篇耗时 | 12.5|
---
**鎶ュ憡浜?*: AI Assistant
**瀹℃牳浜?*: [寰呭~鍐橾
**报告人**: AI Assistant
**审核人**: [待填写]
**日期**: 2025-11-18
**版本**: v1.0.0