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,4 +1,4 @@
|
||||
# <EFBFBD>箄<EFBFBD>Prompt<EFBFBD><EFBFBD><EFBFBD>璅∪<EFBFBD> - 撘<><E69298>𤏸恣<F0A48FB8>?
|
||||
# 智能Prompt生成模块 - 开发计划
|
||||
|
||||
**版本**: v1.0
|
||||
**日期**: 2025-11-18
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
## 核心目标
|
||||
|
||||
**閫<EFBFBD><EFBFBD><EFBFBD>桅<EFBFBD>**: 瘨<EFBFBD>膄AI銝𦒘犖蝐餃笆颲寧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>閫<EFBFBD>榆撘?
|
||||
**解决问题**: 消除AI与人类对边界情况的理解差异
|
||||
|
||||
**核心流程**:
|
||||
```
|
||||
<EFBFBD>冽<EFBFBD>颲枏<EFBFBD>PICOS <20>?AI<41><49>圾<EFBFBD><E59CBE><EFBFBD> <20>?<3F><><EFBFBD>Prompt <20>?<3F>冽<EFBFBD>靽格㺿 <20>?撘<>憪讠<E686AA><E8AEA0>?
|
||||
用户输入PICOS → AI理解分析 → 生成Prompt → 用户修改 → 开始筛选
|
||||
```
|
||||
|
||||
---
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
### 功能范围
|
||||
|
||||
#### 1. <EFBFBD>冽<EFBFBD>颲枏<EFBFBD> <20>?
|
||||
#### 1. 用户输入 ✅
|
||||
|
||||
**前端表单**:
|
||||
```typescript
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
---
|
||||
|
||||
#### 2. AI<EFBFBD><EFBFBD>圾銝𤾸<EFBFBD><EFBFBD>?<3F><>
|
||||
#### 2. AI理解与分析 🆕
|
||||
|
||||
**输入**: 用户的PICOS + 纳排标准
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
id: number;
|
||||
question: string; // "如果研究人群是欧美但RCT质量高?"
|
||||
aiSuggestion: 'include' | 'exclude' | 'uncertain';
|
||||
reason: string; // AI<EFBFBD><EFBFBD>遣霈桃<EFBFBD><EFBFBD>?
|
||||
reason: string; // AI的建议理由
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -76,11 +76,11 @@ POST /api/v1/asl/analyze-picos
|
||||
#### 3. 用户确认界面 🆕
|
||||
|
||||
**显示**:
|
||||
- <EFBFBD>?敹<>◆蝥喳<E89DA5>嚗<EFBFBD>虾<EFBFBD>暸<EFBFBD>?<3F>𡝗<EFBFBD>嚗?
|
||||
- <EFBFBD>?敹<>◆<EFBFBD>㘾膄嚗<E88684>虾<EFBFBD>暸<EFBFBD>?<3F>𡝗<EFBFBD>嚗?
|
||||
- <EFBFBD><EFBFBD> 颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD>嚗<EFBFBD><E59A97>𣂷葵蝖株恕嚗𡁶熙<F0A181B6>?<3F>㘾膄/銝滨&摰𡄯<E691B0>
|
||||
- ✅ 必须纳入(可勾选/取消)
|
||||
- ❌ 必须排除(可勾选/取消)
|
||||
- 🤔 边界情况(逐个确认:纳入/排除/不确定)
|
||||
|
||||
**摰䂿緵**: Modal撖寡<EFBFBD>獢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝芸躹<EFBFBD>?
|
||||
**实现**: Modal对话框,分三个区域
|
||||
|
||||
---
|
||||
|
||||
@@ -90,14 +90,14 @@ POST /api/v1/asl/analyze-picos
|
||||
|
||||
**输出**: 完整的筛选Prompt
|
||||
|
||||
**<EFBFBD>喲睸**: 撠<EFBFBD>鍂<EFBFBD>瑞&霈斤<EFBFBD>颲寧<EFBFBD>閫<EFBFBD><EFBFBD>瘜典<EFBFBD><EFBFBD>訐rompt銝?
|
||||
**关键**: 将用户确认的边界规则注入到Prompt中
|
||||
|
||||
```
|
||||
## 特殊规则(基于您的确认)
|
||||
|
||||
1. 地域要求:优先亚洲人群,但欧美高质量RCT也可纳入
|
||||
2. <EFBFBD>𠉛弦蝐餃<EFBFBD>嚗𡁏<EFBFBD><EFBFBD>斤遞餈堆<EFBFBD>雿?020撟游<E6929F>Meta<74><61><EFBFBD><EFBFBD>舐熙<E88890>?
|
||||
3. 撖寧<EFBFBD>蝐餃<EFBFBD>嚗𡁜<EFBFBD><EFBFBD>啣<EFBFBD>撖寧<EFBFBD>嚗峕<EFBFBD><EFBFBD>虫<EFBFBD>蝘齿<EFBFBD><EFBFBD><EFBFBD>晓<EFBFBD>拐<EFBFBD><EFBFBD>舀𦻖<EFBFBD>?
|
||||
2. 研究类型:排除综述,但2020年后Meta分析可纳入
|
||||
3. 对照类型:安慰剂对照,或另一种标准药物也可接受
|
||||
...
|
||||
```
|
||||
|
||||
@@ -108,54 +108,54 @@ POST /api/v1/asl/generate-prompt
|
||||
|
||||
---
|
||||
|
||||
#### 5. Prompt蝻𤥁<EFBFBD><EFBFBD>?<3F><>
|
||||
#### 5. Prompt编辑器 🆕
|
||||
|
||||
**功能**:
|
||||
- 显示生成的Prompt
|
||||
- 支持用户编辑
|
||||
- 靽嘥<EFBFBD>撟嗡蝙<EFBFBD>?
|
||||
- 保存并使用
|
||||
|
||||
**实现**: 简单的Textarea + 保存按钮
|
||||
|
||||
---
|
||||
|
||||
#### 6. 蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>𨅯<EFBFBD>撘?潃?**<2A>滩<EFBFBD>**
|
||||
#### 6. 筛选结果增强 ⭐ **重要**
|
||||
|
||||
**敶枏<EFBFBD><EFBFBD>桅<EFBFBD>**: <EFBFBD>芣遬蝷箸<EFBFBD>蝏<EFBFBD><EFBFBD>蝑吔<EFBFBD>include/exclude/pending嚗?
|
||||
**当前问题**: 只显示最终决策(include/exclude/pending)
|
||||
|
||||
**<EFBFBD>寡<EFBFBD>**: <EFBFBD>曄內**銝支葵璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>渡<EFBFBD><E6B8A1>?*
|
||||
**改进**: 显示**两个模型的完整理由**
|
||||
|
||||
```typescript
|
||||
{
|
||||
literatureId: string;
|
||||
finalDecision: 'include' | 'exclude' | 'pending';
|
||||
|
||||
// 潃?<3F>啣<EFBFBD>嚗帋舅銝芣芋<E88AA3>讠<EFBFBD>霂衣<E99C82>蝏𤘪<E89D8F>
|
||||
// ⭐ 新增:两个模型的详细结果
|
||||
model1: {
|
||||
modelName: 'DeepSeek-V3';
|
||||
conclusion: 'exclude';
|
||||
confidence: 0.92;
|
||||
judgment: { P: 'match', I: 'match', C: 'mismatch', S: 'match' };
|
||||
reason: '<EFBFBD>賜<EFBFBD>P<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝏游漲<EFBFBD>寥<EFBFBD>嚗䔶<EFBFBD>撖寧<EFBFBD>蝏<EFBFBD>蛹<EFBFBD>虫<EFBFBD>蝘滩晓<EFBFBD>抵<EFBFBD>屸<EFBFBD>摰㗇<EFBFBD><EFBFBD>?..' // 潃?<3F>喲睸
|
||||
reason: '虽然P、I、S维度匹配,但对照组为另一种药物而非安慰剂...' // ⭐ 关键
|
||||
},
|
||||
model2: {
|
||||
modelName: 'Qwen-Max';
|
||||
conclusion: 'include';
|
||||
confidence: 0.85;
|
||||
judgment: { P: 'match', I: 'match', C: 'partial', S: 'match' };
|
||||
reason: '<EFBFBD>𠉛弦鈭箇黎<EFBFBD><EFBFBD>僕憸<EFBFBD>綳<EFBFBD>賢龪<EFBFBD>㵪<EFBFBD>撖寧<EFBFBD>蝏<EFBFBD>蒾<EFBFBD>𧼮<EFBFBD><EFBFBD>啣<EFBFBD>雿<EFBFBD><EFBFBD>撖寞<EFBFBD><EFBFBD>譍<EFBFBD>...' // 潃?<3F>喲睸
|
||||
reason: '研究人群和干预措施匹配,对照组虽非安慰剂但有对比意义...' // ⭐ 关键
|
||||
},
|
||||
|
||||
hasConflict: true; // 銝支葵璅∪<EFBFBD><EFBFBD>斗鱏銝滢<EFBFBD><EFBFBD>?
|
||||
hasConflict: true; // 两个模型判断不一致
|
||||
conflictFields: ['conclusion', 'C'];
|
||||
}
|
||||
```
|
||||
|
||||
**前端显示**:
|
||||
```jsx
|
||||
<Card title="蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>?>
|
||||
<Card title="筛选结果">
|
||||
<Alert type={finalDecision === 'pending' ? 'warning' : 'success'}>
|
||||
<EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD>蝑? {finalDecision}
|
||||
最终决策: {finalDecision}
|
||||
</Alert>
|
||||
|
||||
<Divider />
|
||||
@@ -166,10 +166,10 @@ POST /api/v1/asl/generate-prompt
|
||||
<Tag color={model1.conclusion === 'include' ? 'green' : 'red'}>
|
||||
{model1.conclusion}
|
||||
</Tag>
|
||||
<Statistic title="蝵桐縑摨? value={model1.confidence} />
|
||||
<Statistic title="置信度" value={model1.confidence} />
|
||||
<Divider />
|
||||
<h4>判断理由:</h4>
|
||||
<p>{model1.reason}</p> {/* 潃?<3F>曄內<E69B84><E585A7>眏 */}
|
||||
<p>{model1.reason}</p> {/* ⭐ 显示理由 */}
|
||||
<Collapse>
|
||||
<Panel header="PICO维度详情">
|
||||
P: {model1.judgment.P}<br/>
|
||||
@@ -194,37 +194,37 @@ POST /api/v1/asl/generate-prompt
|
||||
</Alert>
|
||||
)}
|
||||
|
||||
{/* 潃?鈭箏極憭齿瓲<E9BDBF>厰僼 */}
|
||||
{/* ⭐ 人工复核按钮 */}
|
||||
<Button type="primary" onClick={handleManualReview}>
|
||||
鈭箏極憭齿瓲甇斗<EFBFBD><EFBFBD>?
|
||||
人工复核此文献
|
||||
</Button>
|
||||
</Card>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### MVP撘<EFBFBD><EFBFBD>烐<EFBFBD><EFBFBD>?
|
||||
### MVP开发清单
|
||||
|
||||
**Week 1: 后端**
|
||||
|
||||
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<E99AA1>蝥?|
|
||||
| 任务 | 估时 | 优先级 |
|
||||
|------|------|--------|
|
||||
| API: <EFBFBD><EFBFBD><EFBFBD>PICOS | 2憭?| P0 |
|
||||
| API: <EFBFBD><EFBFBD><EFBFBD>Prompt | 1憭?| P0 |
|
||||
| 憓𧼮撩蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>𦦵<EFBFBD><EFBFBD>?| 0.5憭?| P0 |
|
||||
| 瘚贝<EFBFBD> | 0.5憭?| P0 |
|
||||
| API: 分析PICOS | 2天 | P0 |
|
||||
| API: 生成Prompt | 1天 | P0 |
|
||||
| 增强筛选结果结构 | 0.5天 | P0 |
|
||||
| 测试 | 0.5天 | P0 |
|
||||
|
||||
**Week 2: 前端**
|
||||
|
||||
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<E99AA1>蝥?|
|
||||
| 任务 | 估时 | 优先级 |
|
||||
|------|------|--------|
|
||||
| PICOS颲枏<EFBFBD>銵典<EFBFBD> | 0.5憭?| P0 |
|
||||
| <EFBFBD>冽<EFBFBD>蝖株恕<EFBFBD>屸𢒰 | 1.5憭?| P0 |
|
||||
| Prompt蝻𤥁<EFBFBD><EFBFBD>?| 0.5憭?| P0 |
|
||||
| 蝏𤘪<EFBFBD>撅閧內憓𧼮撩 | 1憭?| P0 |
|
||||
| 瘚贝<EFBFBD>銝舘<EFBFBD>隡?| 0.5憭?| P0 |
|
||||
| PICOS输入表单 | 0.5天 | P0 |
|
||||
| 用户确认界面 | 1.5天 | P0 |
|
||||
| Prompt编辑器 | 0.5天 | P0 |
|
||||
| 结果展示增强 | 1天 | P0 |
|
||||
| 测试与调优 | 0.5天 | P0 |
|
||||
|
||||
**<EFBFBD>餉恣**: 2<EFBFBD>剁<EFBFBD>10銝芸極雿𨀣𠯫嚗?
|
||||
**总计**: 2周(10个工作日)
|
||||
|
||||
---
|
||||
|
||||
@@ -232,16 +232,16 @@ POST /api/v1/asl/generate-prompt
|
||||
|
||||
### 功能1: Few-shot自动学习 🔮
|
||||
|
||||
**閫血<EFBFBD><EFBFBD>箸艶**: <EFBFBD>冽<EFBFBD>蝥䭾迤AI<EFBFBD>斗鱏<EFBFBD>?
|
||||
**触发场景**: 用户纠正AI判断后
|
||||
|
||||
**流程**:
|
||||
```
|
||||
1. AI判断: Exclude
|
||||
2. 用户纠正: 应该是Include
|
||||
3. <EFBFBD>冽<EFBFBD>霂湔<EFBFBD><EFBFBD><EFBFBD>眏: "<22>賜<EFBFBD><E8B39C>舀洹蝢𦒘犖蝢歹<E89DA2>雿<EFBFBD>CT韐券<E99F90>擃?
|
||||
<EFBFBD>?
|
||||
3. 用户说明理由: "虽然是欧美人群,但RCT质量高"
|
||||
↓
|
||||
4. 系统记录案例
|
||||
<EFBFBD>?
|
||||
↓
|
||||
5. 下次筛选时,将此案例作为Few-shot示例加入Prompt
|
||||
```
|
||||
|
||||
@@ -255,7 +255,7 @@ POST /api/v1/asl/generate-prompt
|
||||
},
|
||||
aiDecision: 'exclude';
|
||||
userDecision: 'include';
|
||||
userReason: '<EFBFBD>賜<EFBFBD><EFBFBD>舀洹蝢𦒘犖蝢歹<EFBFBD>雿<EFBFBD>CT韐券<EFBFBD>擃?;
|
||||
userReason: '虽然是欧美人群,但RCT质量高';
|
||||
picoCriteria: {...}; // 当时的PICOS
|
||||
createdAt: Date;
|
||||
}
|
||||
@@ -263,7 +263,7 @@ POST /api/v1/asl/generate-prompt
|
||||
|
||||
**Prompt增强**:
|
||||
```
|
||||
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靘页<EFBFBD>Few-shot蝷箔<EFBFBD>嚗?
|
||||
## 参考案例(Few-shot示例)
|
||||
|
||||
以下是您之前纠正的案例,请参考:
|
||||
|
||||
@@ -271,14 +271,14 @@ POST /api/v1/asl/generate-prompt
|
||||
标题: TICA-CLOP STUDY...
|
||||
AI判断: Exclude(因为北非人群)
|
||||
您的决策: Include
|
||||
<EFBFBD>函<EFBFBD><EFBFBD><EFBFBD>眏: <20>賜<EFBFBD><E8B39C>臬<EFBFBD><E887AC>硺犖蝢歹<E89DA2>雿<EFBFBD>CT韐券<E99F90>擃矋<E69383><E79F8B>寞<EFBFBD><E5AF9E>匧<EFBFBD><E58CA7><EFBFBD>遠<EFBFBD>?
|
||||
<EFBFBD>?<3F>舐內: <20>啣<EFBFBD>閬<EFBFBD><E996AC><EFBFBD>臭誑<E887AD>菜暑嚗<E69A91><E59A97><EFBFBD>𦦵<EFBFBD>蝛嗉捶<E59789>誯<EFBFBD>
|
||||
您的理由: 虽然是北非人群,但RCT质量高,方法有参考价值
|
||||
→ 启示: 地域要求可以灵活,如果研究质量高
|
||||
|
||||
案例2:
|
||||
...
|
||||
```
|
||||
|
||||
**摰䂿緵憭齿<EFBFBD>摨?*: 銝剔<E98A9D>嚗<EFBFBD><E59A97>閬<EFBFBD><E996AC>靘见<E99D98>蝞∠<E89D9E>嚗?
|
||||
**实现复杂度**: 中等(需要案例库管理)
|
||||
|
||||
---
|
||||
|
||||
@@ -288,21 +288,21 @@ AI判断: Exclude(因为北非人群)
|
||||
|
||||
**流程**:
|
||||
```
|
||||
1. <EFBFBD>冽<EFBFBD>銝𠹺<EFBFBD>10蝭<EFBFBD><EFBFBD>霂閙<EFBFBD><EFBFBD>殷<EFBFBD>5蝭<EFBFBD>熙<EFBFBD>?+ 5蝭<35><E89DAD><EFBFBD>歹<EFBFBD>
|
||||
<EFBFBD>?
|
||||
1. 用户上传10篇测试文献(5篇纳入 + 5篇排除)
|
||||
↓
|
||||
2. 用户逐篇标注: Include/Exclude + 理由
|
||||
<EFBFBD>?
|
||||
3. AI摮虫<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>ế<EFBFBD>剜芋撘?
|
||||
<EFBFBD>?
|
||||
↓
|
||||
3. AI学习用户的判断模式
|
||||
↓
|
||||
4. 生成定制化Prompt
|
||||
<EFBFBD>?
|
||||
5. <EFBFBD>其<EFBFBD>甇<EFBFBD><EFBFBD>蝑偦<EFBFBD>?
|
||||
↓
|
||||
5. 用于正式筛选
|
||||
```
|
||||
|
||||
**界面**:
|
||||
```jsx
|
||||
<TestMode>
|
||||
<Upload>銝𠹺<EFBFBD>10蝭<EFBFBD><EFBFBD>霂閙<EFBFBD><EFBFBD>殷<EFBFBD>Excel/JSON嚗?/Upload>
|
||||
<Upload>上传10篇测试文献(Excel/JSON)</Upload>
|
||||
|
||||
<Table>
|
||||
{testCases.map(lit => (
|
||||
@@ -315,7 +315,7 @@ AI判断: Exclude(因为北非人群)
|
||||
</Radio.Group>
|
||||
</td>
|
||||
<td>
|
||||
<Input.TextArea placeholder="霂瑁秩<EFBFBD>𡒊<EFBFBD><EFBFBD>? />
|
||||
<Input.TextArea placeholder="请说明理由" />
|
||||
</td>
|
||||
</Row>
|
||||
))}
|
||||
@@ -333,55 +333,55 @@ AI判断: Exclude(因为北非人群)
|
||||
|
||||
1. 地域灵活性:
|
||||
- 案例1(北非RCT)→ 纳入
|
||||
- 獢<EFBFBD><EFBFBD>3嚗<EFBFBD>洹瘣脤<EFBFBD><EFBFBD>梹<EFBFBD><EFBFBD>?<3F>㘾膄
|
||||
<EFBFBD>?蝏栞捏: <20>芾<EFBFBD><E88ABE>爹CT撠勗虾<E58B97>亙<EFBFBD><E4BA99>硺<EFBFBD>瘣脖犖蝢?
|
||||
- 案例3(欧洲队列)→ 排除
|
||||
→ 结论: 只要是RCT就可接受非亚洲人群
|
||||
|
||||
2. <EFBFBD>𠉛弦蝐餃<EFBFBD>嚗?
|
||||
2. 研究类型:
|
||||
- 案例2(Meta分析)→ 纳入
|
||||
- 獢<EFBFBD><EFBFBD>5嚗<EFBFBD><EFBFBD>蝏毺遞餈堆<EFBFBD><EFBFBD>?<3F>㘾膄
|
||||
<EFBFBD>?蝏栞捏: Meta<EFBFBD><EFBFBD><EFBFBD><EFBFBD>舀𦻖<EFBFBD>梹<EFBFBD>隡删<EFBFBD>蝏潸膩<EFBFBD>㘾膄
|
||||
- 案例5(传统综述)→ 排除
|
||||
→ 结论: Meta分析可接受,传统综述排除
|
||||
|
||||
3. <EFBFBD>園𡢿閬<EFBFBD><EFBFBD>嚗?
|
||||
- 獢<EFBFBD><EFBFBD>4嚗?019撟游<E6929F>銵剁<E98AB5><E58981>?<3F>㘾膄
|
||||
<EFBFBD>?蝏栞捏: 銝交聢<E4BAA4>扯<EFBFBD>2020撟游<E6929F>閬<EFBFBD><E996AC>
|
||||
3. 时间要求:
|
||||
- 案例4(2019年发表)→ 排除
|
||||
→ 结论: 严格执行2020年后要求
|
||||
```
|
||||
|
||||
**摰䂿緵憭齿<EFBFBD>摨?*: 擃矋<E69383><E79F8B><EFBFBD>閬<EFBFBD>芋撘讛<E69298><E8AE9B>恬<EFBFBD>
|
||||
**实现复杂度**: 高(需要模式识别)
|
||||
|
||||
---
|
||||
|
||||
### <EFBFBD>蠘<EFBFBD>3: Prompt璅⊥踎摨?<3F><>
|
||||
### 功能3: Prompt模板库 📚
|
||||
|
||||
**功能**:
|
||||
- 靽嘥<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt銝箸芋<EFBFBD>?
|
||||
- 保存用户生成的Prompt为模板
|
||||
- 下次可以直接复用
|
||||
- <EFBFBD>臭誑<EFBFBD><EFBFBD>澈蝏坔𣪧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
- 可以分享给团队成员
|
||||
|
||||
**摰䂿緵憭齿<EFBFBD>摨?*: 雿?
|
||||
**实现复杂度**: 低
|
||||
|
||||
---
|
||||
|
||||
### 2.0撘<EFBFBD><EFBFBD>烐<EFBFBD><EFBFBD>?
|
||||
### 2.0开发清单
|
||||
|
||||
| <EFBFBD>蠘<EFBFBD> | 隡唳𧒄 | 隡睃<E99AA1>蝥?| 靘肽<E99D98> |
|
||||
| 功能 | 估时 | 优先级 | 依赖 |
|
||||
|------|------|--------|------|
|
||||
| Few-shot摮虫<EFBFBD> | 3憭?| P1 | MVP摰峕<EFBFBD> |
|
||||
| 瘚贝<EFBFBD>璅∪<EFBFBD> | 5憭?| P2 | MVP摰峕<EFBFBD> |
|
||||
| Prompt璅⊥踎摨?| 2憭?| P1 | MVP摰峕<EFBFBD> |
|
||||
| Few-shot学习 | 3天 | P1 | MVP完成 |
|
||||
| 测试模式 | 5天 | P2 | MVP完成 |
|
||||
| Prompt模板库 | 2天 | P1 | MVP完成 |
|
||||
|
||||
**<EFBFBD>餉恣**: 2<EFBFBD>?
|
||||
**总计**: 2周
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD><EFBFBD>臬<EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>?
|
||||
## 技术实现细节
|
||||
|
||||
### 1. AI分析PICOS的Prompt
|
||||
|
||||
```typescript
|
||||
const analyzePrompt = `
|
||||
雿䭾糓<EFBFBD>餃郎<EFBFBD><EFBFBD>讃蝑偦<EFBFBD>劐<EFBFBD>摰嗚<EFBFBD><EFBFBD>鍂<EFBFBD>瑟<EFBFBD>靘𥕢<EFBFBD>PICOS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚熙<EFBFBD>埝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂瑕<EFBFBD><EFBFBD>𣂼僎<EFBFBD><EFBFBD><EFBFBD>嚗?
|
||||
你是医学文献筛选专家。用户提供了PICOS标准和纳排标准,请分析并生成:
|
||||
|
||||
<EFBFBD>鞟鍂<EFBFBD>瑁<EFBFBD><EFBFBD>乓<EFBFBD>?
|
||||
【用户输入】
|
||||
人群: ${population}
|
||||
干预: ${intervention}
|
||||
对照: ${comparison}
|
||||
@@ -394,16 +394,16 @@ ${inclusionCriteria}
|
||||
排除标准:
|
||||
${exclusionCriteria}
|
||||
|
||||
<EFBFBD>𣂼<EFBFBD><EFBFBD>𣂷遙<EFBFBD>~<EFBFBD>?
|
||||
【分析任务】
|
||||
1. 提取必须纳入的核心要素(3-5条)
|
||||
2. 提取必须排除的要素(3-5条)
|
||||
3. 识别模糊的边界情况(5-8个),每个边界情况包括:
|
||||
- 具体问题描述
|
||||
- 雿删<EFBFBD>撱箄悅嚗ǎnclude/exclude/uncertain嚗?
|
||||
- 你的建议(include/exclude/uncertain)
|
||||
- 建议理由
|
||||
|
||||
<EFBFBD>鞱<EFBFBD><EFBFBD>箸聢撘譌<EFBFBD>?
|
||||
銝交聢JSON<EFBFBD>澆<EFBFBD>嚗?
|
||||
【输出格式】
|
||||
严格JSON格式:
|
||||
{
|
||||
"mustInclude": ["要素1", "要素2", ...],
|
||||
"mustExclude": ["要素1", "要素2", ...],
|
||||
@@ -435,24 +435,24 @@ function generateCustomPrompt(
|
||||
// 基础Prompt(从标准模板开始)
|
||||
let prompt = getStandardPromptTemplate();
|
||||
|
||||
// 瘜典<EFBFBD><EFBFBD>冽<EFBFBD>蝖株恕<EFBFBD><EFBFBD>器<EFBFBD>諹<EFBFBD><EFBFBD>?
|
||||
// 注入用户确认的边界规则
|
||||
const boundaryRulesSection = `
|
||||
## 潃?<3F>寞<EFBFBD>颲寧<E9A2B2>閫<EFBFBD><E996AB>嚗<EFBFBD>抅鈭擧<E988AD><E693A7><EFBFBD>&霈歹<E99C88>
|
||||
## ⭐ 特殊边界规则(基于您的确认)
|
||||
|
||||
${userConfirmedRules.map((rule, index) => `
|
||||
${index + 1}. ${rule.category}:
|
||||
- 标准规则: ${rule.standardRule}
|
||||
- <EFBFBD>函<EFBFBD>蝖株恕: ${rule.userDecision === 'include' ? '<EFBFBD>?<3F>臭誑蝥喳<E89DA5>' : '<EFBFBD>?敹<>◆<EFBFBD>㘾膄'}
|
||||
- 您的确认: ${rule.userDecision === 'include' ? '✅ 可以纳入' : '❌ 必须排除'}
|
||||
- 具体情况: ${rule.situation}
|
||||
`).join('\n')}
|
||||
|
||||
<EFBFBD>𩤃<EFBFBD> 霂瑚艇<E7919A>潮<EFBFBD>摰<EFBFBD>誑銝羓鸌畾𡃏<E795BE><F0A1838F>辷<EFBFBD>餈嗘<E9A488><E59798>舐鍂<E88890>瑟<EFBFBD>蝖桃&霈斤<E99C88><E696A4>斗鱏<E69697><E9B18F><EFBFBD><EFBFBD>?
|
||||
⚠️ 请严格遵守以上特殊规则,这些是用户明确确认的判断标准。
|
||||
`;
|
||||
|
||||
// 撠<EFBFBD>器<EFBFBD>諹<EFBFBD><EFBFBD>蹱<EFBFBD><EFBFBD>亙<EFBFBD>Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵?
|
||||
// 将边界规则插入到Prompt的合适位置
|
||||
prompt = prompt.replace(
|
||||
'## 蝑偦<EFBFBD>劐遙<EFBFBD>?,
|
||||
boundaryRulesSection + '\n\n## 蝑偦<EFBFBD>劐遙<EFBFBD>?
|
||||
'## 筛选任务',
|
||||
boundaryRulesSection + '\n\n## 筛选任务'
|
||||
);
|
||||
|
||||
return prompt;
|
||||
@@ -461,7 +461,7 @@ ${index + 1}. ${rule.category}:
|
||||
|
||||
---
|
||||
|
||||
### 3. <EFBFBD>唳旿摨栞挽霈?
|
||||
### 3. 数据库设计
|
||||
|
||||
**新表: prompt_configurations**
|
||||
|
||||
@@ -484,9 +484,9 @@ CREATE TABLE asl_schema.prompt_configurations (
|
||||
|
||||
-- 生成的Prompt
|
||||
generated_prompt TEXT NOT NULL,
|
||||
final_prompt TEXT NOT NULL, -- <EFBFBD>冽<EFBFBD>蝻𤥁<EFBFBD><EFBFBD>𡒊<EFBFBD><EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD><EFBFBD>?
|
||||
final_prompt TEXT NOT NULL, -- 用户编辑后的最终版本
|
||||
|
||||
-- <EFBFBD><EFBFBD>㺭<EFBFBD>?
|
||||
-- 元数据
|
||||
version VARCHAR(20) DEFAULT 'v1.0',
|
||||
is_template BOOLEAN DEFAULT false,
|
||||
template_name VARCHAR(100),
|
||||
@@ -496,7 +496,7 @@ CREATE TABLE asl_schema.prompt_configurations (
|
||||
);
|
||||
```
|
||||
|
||||
**<EFBFBD>啗”: few_shot_cases**嚗?.0<EFBFBD>嗆挾嚗?
|
||||
**新表: few_shot_cases**(2.0阶段)
|
||||
|
||||
```sql
|
||||
CREATE TABLE asl_schema.few_shot_cases (
|
||||
@@ -517,7 +517,7 @@ CREATE TABLE asl_schema.few_shot_cases (
|
||||
user_decision VARCHAR(20) NOT NULL,
|
||||
user_reason TEXT NOT NULL,
|
||||
|
||||
-- PICOS銝𠹺<EFBFBD><EFBFBD>?
|
||||
-- PICOS上下文
|
||||
pico_criteria JSONB NOT NULL,
|
||||
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
@@ -584,7 +584,7 @@ Request:
|
||||
{
|
||||
"ambiguityId": 1,
|
||||
"userDecision": "include", // include/exclude/uncertain
|
||||
"userNote": "<EFBFBD>賜<EFBFBD>銝齿糓鈭𡁏散鈭箇黎嚗䔶<EFBFBD>RCT韐券<EFBFBD>擃? // <EFBFBD>舫<EFBFBD>?
|
||||
"userNote": "虽然不是亚洲人群,但RCT质量高" // 可选
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -610,7 +610,7 @@ Request:
|
||||
"configId": "uuid",
|
||||
"finalPrompt": "用户编辑后的Prompt...",
|
||||
"saveAsTemplate": false,
|
||||
"templateName": "" // 憒<EFBFBD><EFBFBD>靽嘥<EFBFBD>銝箸芋<EFBFBD>?
|
||||
"templateName": "" // 如果保存为模板
|
||||
}
|
||||
|
||||
Response:
|
||||
@@ -625,7 +625,7 @@ Response:
|
||||
|
||||
---
|
||||
|
||||
#### 4. 雿輻鍂<EFBFBD>芸<EFBFBD>銋侨rompt蝑偦<EFBFBD>?
|
||||
#### 4. 使用自定义Prompt筛选
|
||||
|
||||
```
|
||||
POST /api/v1/asl/screen/literature
|
||||
@@ -645,14 +645,14 @@ Response:
|
||||
"literatureId": "uuid",
|
||||
"finalDecision": "pending",
|
||||
|
||||
// 潃?<3F>喲睸嚗帋舅銝芣芋<E88AA3>讠<EFBFBD>霂衣<E99C82>蝏𤘪<E89D8F>
|
||||
// ⭐ 关键:两个模型的详细结果
|
||||
"model1": {
|
||||
"modelName": "DeepSeek-V3",
|
||||
"conclusion": "exclude",
|
||||
"confidence": 0.92,
|
||||
"judgment": {...},
|
||||
"evidence": {...},
|
||||
"reason": "摰峕㟲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>斤<EFBFBD><EFBFBD>?.." // 潃?
|
||||
"reason": "完整的排除理由..." // ⭐
|
||||
},
|
||||
"model2": {
|
||||
"modelName": "Qwen-Max",
|
||||
@@ -660,7 +660,7 @@ Response:
|
||||
"confidence": 0.85,
|
||||
"judgment": {...},
|
||||
"evidence": {...},
|
||||
"reason": "摰峕㟲<EFBFBD><EFBFBD>熙<EFBFBD>亦<EFBFBD><EFBFBD>?.." // 潃?
|
||||
"reason": "完整的纳入理由..." // ⭐
|
||||
},
|
||||
|
||||
"hasConflict": true,
|
||||
@@ -685,7 +685,7 @@ Request:
|
||||
"aiDecision": "exclude",
|
||||
"aiReason": "...",
|
||||
"userDecision": "include",
|
||||
"userReason": "<EFBFBD>賜<EFBFBD><EFBFBD>舀洹蝢𦒘犖蝢歹<EFBFBD>雿?.."
|
||||
"userReason": "虽然是欧美人群,但..."
|
||||
}
|
||||
|
||||
Response:
|
||||
@@ -726,28 +726,28 @@ Response:
|
||||
|
||||
### MVP测试
|
||||
|
||||
**瘚贝<EFBFBD><EFBFBD>唳旿**: <EFBFBD>雴葉<EFBFBD>𠉛弦嚗<EFBFBD>歇<EFBFBD>?蝭<><E89DAD>
|
||||
**测试数据**: 卒中研究(已有5篇)
|
||||
|
||||
**测试场景**:
|
||||
|
||||
1. **场景1: 正常流程**
|
||||
- 颲枏<EFBFBD>PICOS <EFBFBD>?AI<41><49><EFBFBD> <20>?<3F>冽<EFBFBD>蝖株恕 <20>?<3F><><EFBFBD>Prompt <EFBFBD>?蝑偦<E89D91>?
|
||||
- 输入PICOS → AI分析 → 用户确认 → 生成Prompt → 筛选
|
||||
- 验证:两个模型的理由是否完整显示
|
||||
|
||||
2. **场景2: 边界情况确认**
|
||||
- <EFBFBD>冽<EFBFBD>蝖株恕"甈抒<E79488>RCT<43>舐熙<E88890>? <20>?撉諹<E69289>Prompt銝剜糓<E5899C>血<EFBFBD><E8A180>急迨閫<E8BFA8><E996AB>
|
||||
- 撉諹<EFBFBD>嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇𧒄<EFBFBD>臬炏<EFBFBD>萄<EFBFBD>甇方<EFBFBD><EFBFBD>?
|
||||
- 用户确认"欧美RCT可纳入" → 验证Prompt中是否包含此规则
|
||||
- 验证:实际筛选时是否遵守此规则
|
||||
|
||||
3. **场景3: 用户编辑Prompt**
|
||||
- <EFBFBD>冽<EFBFBD>靽格㺿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt <20>?撉諹<E69289>靽格㺿<E6A0BC>臬炏<E887AC><E7828F><EFBFBD>
|
||||
- 用户修改生成的Prompt → 验证修改是否生效
|
||||
|
||||
4. **场景4: 模型冲突**
|
||||
- 撉諹<EFBFBD>嚗帋舅銝芣芋<EFBFBD>见ế<EFBFBD>凋<EFBFBD>銝<EFBFBD><EFBFBD>湔𧒄嚗𣬚<EFBFBD><EFBFBD>望糓<EFBFBD>行<EFBFBD><EFBFBD>啣<EFBFBD>蝷?
|
||||
- 验证:两个模型判断不一致时,理由是否清晰展示
|
||||
|
||||
**测试指标**:
|
||||
- Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>? >90%
|
||||
- <EFBFBD>冽<EFBFBD>皛⊥<EFBFBD>摨? >80%
|
||||
- <EFBFBD><EFBFBD>眏撅閧內摰峕㟲<EFBFBD>? 100%
|
||||
- Prompt生成准确率: >90%
|
||||
- 用户满意度: >80%
|
||||
- 理由展示完整性: 100%
|
||||
|
||||
---
|
||||
|
||||
@@ -756,11 +756,11 @@ Response:
|
||||
**测试场景**:
|
||||
|
||||
1. **Few-shot学习**
|
||||
- <EFBFBD>冽<EFBFBD>蝥䭾迤3銝芣<EFBFBD>靘?<3F>?撉諹<E69289>Prompt銝剜糓<E5899C>血<EFBFBD><E8A180>怨<EFBFBD>鈭𥟇<E988AD>靘?
|
||||
- 撉諹<EFBFBD>嚗𡁏鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇糓<EFBFBD>行㺿餈?
|
||||
- 用户纠正3个案例 → 验证Prompt中是否包含这些案例
|
||||
- 验证:新的筛选是否改进
|
||||
|
||||
2. **测试模式**
|
||||
- <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>釣10蝭?<3F>?AI<41><49><EFBFBD>璅∪<E79285> <20>?<3F><><EFBFBD>Prompt
|
||||
- 用户标注10篇 → AI分析模式 → 生成Prompt
|
||||
- 验证:生成的Prompt是否符合用户偏好
|
||||
|
||||
---
|
||||
@@ -771,44 +771,44 @@ Response:
|
||||
|
||||
| 指标 | 目标 |
|
||||
|------|------|
|
||||
| Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>?| >90% |
|
||||
| Prompt生成准确率 | >90% |
|
||||
| 用户完成配置时间 | <5分钟 |
|
||||
| <EFBFBD><EFBFBD>眏撅閧內摰峕㟲<EFBFBD>?| 100% |
|
||||
| 璅∪<EFBFBD><EFBFBD>脩<EFBFBD>霂<EFBFBD><EFBFBD><EFBFBD>?| 100% |
|
||||
| <EFBFBD>冽<EFBFBD>皛⊥<EFBFBD>摨?| >80% |
|
||||
| 理由展示完整性 | 100% |
|
||||
| 模型冲突识别率 | 100% |
|
||||
| 用户满意度 | >80% |
|
||||
|
||||
### 2.0阶段
|
||||
|
||||
| 指标 | 目标 |
|
||||
|------|------|
|
||||
| Few-shot<EFBFBD>寡<EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>?| +15% |
|
||||
| 瘚贝<EFBFBD>璅∪<EFBFBD><EFBFBD>寥<EFBFBD>摨?| >85% |
|
||||
| Prompt璅⊥踎憭滨鍂<EFBFBD>?| >60% |
|
||||
| Few-shot改进准确率 | +15% |
|
||||
| 测试模式匹配度 | >85% |
|
||||
| Prompt模板复用率 | >60% |
|
||||
|
||||
---
|
||||
|
||||
## 憌𡡞埯銝𤾸<EFBFBD>撖?
|
||||
## 风险与应对
|
||||
|
||||
### 风险1: LLM生成的边界问题质量不稳定
|
||||
|
||||
**应对**:
|
||||
- 使用Few-shot Prompt
|
||||
- 人工审核常见边界情况
|
||||
- <EFBFBD>𣂷<EFBFBD>暺䁅恕颲寧<EFBFBD><EFBFBD>桅<EFBFBD>摨?
|
||||
- 提供默认边界问题库
|
||||
|
||||
### 风险2: 用户不愿意花时间确认
|
||||
|
||||
**应对**:
|
||||
- <EFBFBD>芣遬蝷?銝芷<E98A9D>隡睃<E99AA1>蝥折䔮憸?
|
||||
- 只显示5个高优先级问题
|
||||
- 其他使用AI默认建议
|
||||
- <EFBFBD>𣂷<EFBFBD>"敹恍<E695B9><E6818D>芋撘?嚗<>歲餈<E6ADB2>&霈歹<E99C88>
|
||||
- 提供"快速模式"(跳过确认)
|
||||
|
||||
### 憌𡡞埯3: 銝支葵璅∪<E79285><E288AA><EFBFBD>眏餈<E79C8F>鵭嚗屸𠗕隞亙笆瘥?
|
||||
### 风险3: 两个模型理由过长,难以对比
|
||||
|
||||
**应对**:
|
||||
- <EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD>眏<EFBFBD>喲睸<EFBFBD>伐<EFBFBD><EFBFBD>?00摮梹<E691AE>
|
||||
- 提取理由关键句(前100字)
|
||||
- 提供展开/收起按钮
|
||||
- 擃䀝漁<EFBFBD>脩<EFBFBD><EFBFBD>?
|
||||
- 高亮冲突点
|
||||
|
||||
---
|
||||
|
||||
@@ -816,14 +816,14 @@ Response:
|
||||
|
||||
### MVP核心(必做)
|
||||
|
||||
1. <EFBFBD>?PICOS颲枏<EFBFBD>銵典<EFBFBD>
|
||||
2. <EFBFBD>?AI<41><49><EFBFBD>銝舘器<E88898>屸䔮憸条<E686B8><E69DA1>?
|
||||
3. <EFBFBD>?<3F>冽<EFBFBD>蝖株恕<E6A0AA>屸𢒰
|
||||
4. <EFBFBD>?<3F>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt
|
||||
5. <EFBFBD>?Prompt蝻𤥁<EFBFBD><EFBFBD>?
|
||||
6. <EFBFBD>?**<2A>曄內銝支葵璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>渡<EFBFBD><E6B8A1>?* 潃?
|
||||
1. ✅ PICOS输入表单
|
||||
2. ✅ AI分析与边界问题生成
|
||||
3. ✅ 用户确认界面
|
||||
4. ✅ 自动生成Prompt
|
||||
5. ✅ Prompt编辑器
|
||||
6. ✅ **显示两个模型的完整理由** ⭐
|
||||
|
||||
**撘<EFBFBD><EFBFBD>烐𧒄<EFBFBD>?*: 2<EFBFBD>?
|
||||
**开发时间**: 2周
|
||||
|
||||
---
|
||||
|
||||
@@ -831,20 +831,20 @@ Response:
|
||||
|
||||
1. 🔮 Few-shot自动学习
|
||||
2. 🧪 测试模式
|
||||
3. <EFBFBD><EFBFBD> Prompt璅⊥踎摨?
|
||||
3. 📚 Prompt模板库
|
||||
|
||||
**撘<EFBFBD><EFBFBD>烐𧒄<EFBFBD>?*: 2<EFBFBD>?
|
||||
**开发时间**: 2周
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD>笔<EFBFBD>**: MVP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>訫虾<EFBFBD>剁<EFBFBD>2.0<EFBFBD>滚<EFBFBD><EFBFBD>箄<EFBFBD><EFBFBD>?
|
||||
**原则**: MVP先做到简单可用,2.0再做智能化
|
||||
|
||||
**銝衤<EFBFBD>甇?*: 撘<>憪𨳒VP<56>嗆挾撘<E68CBE><E69298>?
|
||||
**下一步**: 开始MVP阶段开发
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**雿𡏭<EFBFBD>?*: AI Assistant
|
||||
**作者**: AI Assistant
|
||||
**审核**: [待用户确认]
|
||||
**日期**: 2025-11-18
|
||||
|
||||
|
||||
Reference in New Issue
Block a user