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,46 +1,57 @@
|
||||
# Prompt邂。逅<EFBFBD>ウサ扈溷シ蜿題ョ。蛻?
|
||||
> **迚域悽<E59F9F>?* v1.2
|
||||
> **蛻帛サコ譌・譛滂シ?* 2026-01-11
|
||||
> **譖エ譁ー譌・譛滂シ?* 2026-01-12
|
||||
> **莨伜<EFBFBD>郤ァ<EFBFBD><EFBFBD>** P0<50>域<EFBFBD>ク蠢<EFBDB8>夂畑閭ス蜉幢シ?
|
||||
> **迥カ諤<EFBFBD>シ<EFBFBD>** 笨?Phase 3.5.1-3.5.5 蜈ィ驛ィ螳梧<E89EB3><E6A2A7>?00%<25>?
|
||||
> **鬚<EFBFBD>ョ。蟾・譛滂シ?* 7荳ェ蟾・菴懈律
|
||||
> **螳樣刔螳梧<EFBFBD><EFBFBD>?* Day 1-7 蟾イ螳梧<E89EB3><E6A2A7><EFBFBD>2026-01-12<31>?
|
||||
# Prompt管理系统开发计划
|
||||
|
||||
> **版本:** v1.2
|
||||
> **创建日期:** 2026-01-11
|
||||
> **更新日期:** 2026-01-12
|
||||
> **优先级:** P0(核心通用能力)
|
||||
> **状态:** ✅ Phase 3.5.1-3.5.5 全部完成(100%)
|
||||
> **预计工期:** 7个工作日
|
||||
> **实际完成:** Day 1-7 已完成(2026-01-12)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>識 蠢ォ騾溷ッシ闊ェ<E9978A><EFBDAA>2026-01-11譖エ譁ー<EFBFBD>?
|
||||
### 笨?蟾イ螳梧<E89EB3><E6A2A7><EFBFBD>hase 3.5.1 - 3.5.5<EFBFBD>?
|
||||
## 🎯 快速导航(2026-01-11更新)
|
||||
|
||||
### ✅ 已完成(Phase 3.5.1 - 3.5.5)
|
||||
|
||||
| 阶段 | 核心产出 | 文件位置 | 完成日期 |
|
||||
|------|---------|---------|---------|
|
||||
| **3.5.1 蝓コ遑隶セ譁ス** | capability_schema縲∬。ィ扈捺桷縲∵揀髯舌∬ソ∫ァ?| `backend/prisma/schema.prisma` | 2026-01-11 |
|
||||
| **3.5.1 基础设施** | capability_schema、表结构、权限、迁移 | `backend/prisma/schema.prisma` | 2026-01-11 |
|
||||
| **3.5.2 核心服务** | PromptService(灰度、渲染、变量校验) | `backend/src/common/prompt/` | 2026-01-11 |
|
||||
| **3.5.3 管理API** | 8个RESTful接口 | `backend/src/common/prompt/prompt.routes.ts` | 2026-01-11 |
|
||||
| **3.5.4 前端界面** | 管理端架构、Prompt列表、编辑器 | `frontend-v2/src/pages/admin/` | 2026-01-11 |
|
||||
| **3.5.5 荳壼苅髮<EFBFBD><EFBFBD>** | RVW讓。蝮鈴寔謌舌∬ョ、隸∬ァ<EFBFBD>激蛹<EFBFBD> | `backend/src/modules/rvw/` | 2026-01-12 笨?|
|
||||
| **3.5.5 业务集成** | RVW模块集成、认证规范化 | `backend/src/modules/rvw/` | 2026-01-12 ✅ |
|
||||
|
||||
### <EFBFBD><EFBFBD> Phase 3.5.5 螳梧<EFBFBD>蜀<EFBFBD>ョケ<EFBFBD>?026-01-12<EFBFBD>?
|
||||
**RVW 讓。蝮鈴寔謌撰シ?*
|
||||
- 笨?editorialService.ts - 髮<><E9ABAE> PromptService<63>檎ァサ髯、譁<EFBDA4>サカ隸サ蜿?- 笨?methodologyService.ts - 髮<><E9ABAE> PromptService<63>檎ァサ髯、譁<EFBDA4>サカ隸サ蜿?- 笨?reviewWorker.ts - 莨<>騾?userId 謾ッ謖∫<E8AC96>蠎ヲ鬚<EFBDA6>ァ<EFBFBD>
|
||||
- 笨?菫ョ螟<EFBDAE> ReviewTask 螟夜醗郤ヲ譚滂シ郁キィ schema 髣ョ鬚假シ?
|
||||
**蜈ィ讓。蝮苓ョ、隸∬ァ<E288AC>激蛹厄シ?*
|
||||
- 笨?RVW/PKB/ASL/DC 讓。蝮玲キサ蜉<EFBDBB> authenticate 荳ュ髣エ莉?- 笨?扈滉ク菴ソ逕ィ request.user?.userId<49>檎ァサ髯、謇譛?MOCK_USER_ID
|
||||
- 笨?蜑咲ォッ扈滉ク菴ソ逕ィ apiClient<6E><74>xios + JWT interceptor<6F>?- 笨?蛻帛サコ `docs/04-蠑蜿題ァ<E9A18C><EFBDA7>?10-讓。蝮苓ョ、隸∬ァ<E288AC>激.md`
|
||||
### 🆕 Phase 3.5.5 完成内容(2026-01-12)
|
||||
|
||||
**逡碁擇莨伜喧<EFBFBD>?*
|
||||
- 笨?Prompt 蛻苓。ィ讓。蝮怜<E89DAE>譏セ遉コ荳ュ譁<EFBDAD>錐遘?- 笨?迚域悽蜴<E682BD>彰蠅槫シコ<EFBDBC>域衍逵句<E980B5>螳ケ縲∝屓貊壼粥閭ス<E996AD><EFBDBD>
|
||||
**RVW 模块集成:**
|
||||
- ✅ editorialService.ts - 集成 PromptService,移除文件读取
|
||||
- ✅ methodologyService.ts - 集成 PromptService,移除文件读取
|
||||
- ✅ reviewWorker.ts - 传递 userId 支持灰度预览
|
||||
- ✅ 修复 ReviewTask 外键约束(跨 schema 问题)
|
||||
|
||||
**全模块认证规范化:**
|
||||
- ✅ RVW/PKB/ASL/DC 模块添加 authenticate 中间件
|
||||
- ✅ 统一使用 request.user?.userId,移除所有 MOCK_USER_ID
|
||||
- ✅ 前端统一使用 apiClient(axios + JWT interceptor)
|
||||
- ✅ 创建 `docs/04-开发规范/10-模块认证规范.md`
|
||||
|
||||
**界面优化:**
|
||||
- ✅ Prompt 列表模块列显示中文名称
|
||||
- ✅ 版本历史增强(查看内容、回滚功能)
|
||||
|
||||
---
|
||||
|
||||
## 📋 目录
|
||||
|
||||
1. [项目概述](#1-项目概述)
|
||||
2. [髴豎ら。ョ隶、](#2-髴豎ら。ョ隶?
|
||||
3. [謚譛ッ譫カ譫Ь(#3-謚譛ッ譫カ譫?
|
||||
4. [蠑蜿題ョ。蛻綻(#4-蠑蜿題ョ。蛻?
|
||||
2. [需求确认](#2-需求确认)
|
||||
3. [技术架构](#3-技术架构)
|
||||
4. [开发计划](#4-开发计划)
|
||||
5. [数据迁移计划](#5-数据迁移计划)
|
||||
6. [权限设计](#6-权限设计)
|
||||
7. [测试计划](#7-测试计划)
|
||||
8. [鬟朱勦荳主コ泌ッケ](#8-鬟朱勦荳主コ泌ッ?
|
||||
8. [风险与应对](#8-风险与应对)
|
||||
|
||||
---
|
||||
|
||||
@@ -48,47 +59,59 @@
|
||||
|
||||
### 1.1 项目目标
|
||||
|
||||
譫<EFBFBD>サコ荳荳?*逕滉コァ邇ッ蠅<EFBDAF><E8A085>蠎ヲ鬚<EFBDA6>ァ育ウサ扈<EFBDBB>**<2A>悟<EFBFBD>隶ク荳謎ク壻ココ蜻假シ<E58187>rompt蟾・遞句ク医∽クエ蠎贋ク灘ョカ<EFBDAE>牙惠逕滉コァ邇ッ蠅<EFBDAF>ョ牙<EFBDAE>隹<EFBFBD>ッ柊I Prompt<EFBFBD>悟ョ樒鴫<EFBFBD><EFBFBD>
|
||||
构建一个**生产环境灰度预览系统**,允许专业人员(Prompt工程师、临床专家)在生产环境安全调试AI Prompt,实现:
|
||||
|
||||
- ✅ Prompt 与代码分离(数据库存储)
|
||||
- ✅ 版本管理与回滚能力
|
||||
- ✅ 灰度预览(调试者看DRAFT,用户看ACTIVE)
|
||||
- ✅ 模块级调试范围控制
|
||||
- ✅ 权限细分(编辑/发布分离)
|
||||
|
||||
### 1.2 核心价值
|
||||
|
||||
- 笨?Prompt 荳惹サ」遐∝<E98190>遖サ<E98196>域焚謐ョ蠎灘ュ伜お<E4BC9C><E3818A>
|
||||
- 笨?迚域悽邂。逅<EFBDA1>ク主屓貊夊<E8B28A>蜉?- 笨?轣ー蠎ヲ鬚<EFBDA6>ァ茨シ郁ー<E98381>ッ戊<E6888A>恚DRAFT<46>檎畑謌キ逵帰CTIVE<56>?- 笨?讓。蝮礼コァ隹<EFBDA7>ッ戊激蝗エ謗ァ蛻?- 笨?譚<>剞扈<E5899E><E68988><EFBFBD>育シ冶セ?蜿大ク<E5A4A7><EFBDB8>遖サ<E98196>?
|
||||
### 1.2 譬ク蠢<EFBDB8>サキ蛟?
|
||||
| 痛点 | 解决方案 |
|
||||
|------|---------|
|
||||
| 测试环境无法模拟真实数据 | 生产环境灰度预览 |
|
||||
| 豈乗ャ。隹<EFBFBD>紛髴謾ケ莉」遐≫<EFBFBD>驛ィ鄂イ<EFBFBD>?蛻<>帖<EFBFBD>?| 謨ー謐ョ蠎灘勘諤<E58B98><E8ABA4>鄂ョ<E98482>檎ァ堤コァ逕滓譜 |
|
||||
| 每次调整需改代码→部署(5分钟) | 数据库动态配置,秒级生效 |
|
||||
| 临床专家无法参与调试 | RBAC + 友好管理界面 |
|
||||
| 蜿大ク<EFBFBD>錘譌<EFBFBD>豕募屓貊?| 迚域悽蜴<E682BD>彰 + 荳髞ョ蝗樊サ?|
|
||||
| 发布后无法回滚 | 版本历史 + 一键回滚 |
|
||||
|
||||
### 1.3 豸牙所讓。蝮嶺シ伜<EFBFBD>郤?
|
||||
| 莨伜<E88EA8>郤?| 讓。蝮<EFBDA1> | Prompt謨ー驥<EFBDB0> | 螟肴揩蠎?| 迥カ諤?|
|
||||
### 1.3 涉及模块优先级
|
||||
|
||||
| 优先级 | 模块 | Prompt数量 | 复杂度 | 状态 |
|
||||
|--------|------|-----------|--------|------|
|
||||
| <EFBFBD>閥 P0 | **RVW** | 4荳?| 箝絶ュ<E7B5B6> | **鬥匁音謗・蜈・** |
|
||||
| <EFBFBD>泯 P1 | ASL | 8荳? | 箝絶ュ絶ュ絶ュ絶ュ?| 莠梧悄 |
|
||||
| <EFBFBD>泯 P1 | DC | 5荳? | 箝絶ュ絶ュ絶ュ<EFBFBD> | 莠梧悄 |
|
||||
| <EFBFBD>泙 P2 | PKB | 3荳?| 箝絶ュ絶ュ?| 荳画悄 |
|
||||
| <EFBFBD>泙 P2 | IIT | 3荳?| 箝絶ュ絶ュ絶ュ<E7B5B6> | 荳画悄 |
|
||||
| <EFBFBD>鳩 P3 | AIA | **10荳ェ譎コ閭ス菴<EFBFBD>** | 箝絶ュ絶ュ?| 蠕<>シ蜿第ィ。蝮?|
|
||||
| 🔴 P0 | **RVW** | 4个 | ⭐⭐ | **首批接入** |
|
||||
| 🟡 P1 | ASL | 8个+ | ⭐⭐⭐⭐⭐ | 二期 |
|
||||
| 🟡 P1 | DC | 5个+ | ⭐⭐⭐⭐ | 二期 |
|
||||
| 🟢 P2 | PKB | 3个 | ⭐⭐⭐ | 三期 |
|
||||
| 🟢 P2 | IIT | 3个 | ⭐⭐⭐⭐ | 三期 |
|
||||
| 🔵 P3 | AIA | **10个智能体** | ⭐⭐⭐ | 待开发模块 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 髴豎ら。ョ隶?
|
||||
### 2.1 蟾イ遑ョ隶、髴豎?
|
||||
## 2. 需求确认
|
||||
|
||||
### 2.1 已确认需求
|
||||
|
||||
| 需求项 | 确认结果 |
|
||||
|--------|---------|
|
||||
| 莨伜<EFBFBD>謗・蜈・讓。蝮<EFBFBD> | 笨?RVW 讓。蝮怜<EFBFBD>陦鯉シ瑚オー騾壼錘謇ゥ螻<EFBFBD> |
|
||||
| 譚<EFBFBD>剞扈<EFBFBD><EFBFBD> | 笨?PROMPT_ENGINEER 蜿ェ閭ス郛冶セ托シ郡UPER_ADMIN 謇崎<EFBFBD>蜿大ク<EFBFBD> |
|
||||
| 蛻晏ァ区焚謐ョ霑∫ァサ | 笨?閾ェ蜉ィ霑∫ァサ邇ー譛画枚莉カPrompt蛻ー謨ー謐ョ蠎<EFBDAE> |
|
||||
| 隹<EFBFBD>ッ戊激蝗エ | 笨?蜿ッ謖<EFBDAF>ョ壽ィ。蝮暦シ亥ヲょ宵隹<E5AEB5>ッ紐VW<56>御ク榊スア蜩喉SL<53>?|
|
||||
| AIA譎コ閭ス菴?| 笨?鬚<>ョ。10荳ェ譎コ閭ス菴難シ梧悴譚・騾夊ソ⑰rompt邂。逅<EFBFBD> |
|
||||
| 优先接入模块 | ✅ RVW 模块先行,走通后扩展 |
|
||||
| 权限细分 | ✅ PROMPT_ENGINEER 只能编辑,SUPER_ADMIN 才能发布 |
|
||||
| 初始数据迁移 | ✅ 自动迁移现有文件Prompt到数据库 |
|
||||
| 调试范围 | ✅ 可指定模块(如只调试RVW,不影响ASL) |
|
||||
| AIA智能体 | ✅ 预计10个智能体,未来通过Prompt管理 |
|
||||
|
||||
### 2.2 系统现状
|
||||
|
||||
**邇ー譛臼rompt蟄伜お譁ケ蠑擾シ?*
|
||||
**现有Prompt存储方式:**
|
||||
|
||||
```
|
||||
backend/prompts/
|
||||
笏懌楳笏 review_editorial_system.txt # RVW - 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?笏懌楳笏 review_methodology_system.txt # RVW - 譁ケ豕募ュヲ隸<EFBDA6>シ?笏懌楳笏 topic_evaluation_system.txt # RVW - 騾蛾「倩ッ<E580A9>シー<EFBDBC><EFBDB0>ystem<65>?笏懌楳笏 topic_evaluation_user.txt # RVW - 騾蛾「倩ッ<E580A9>シー<EFBDBC><EFBDB0>ser<65>?笏披楳笏 asl/
|
||||
├── review_editorial_system.txt # RVW - 稿约规范性评估
|
||||
├── review_methodology_system.txt # RVW - 方法学评估
|
||||
├── topic_evaluation_system.txt # RVW - 选题评估(System)
|
||||
├── topic_evaluation_user.txt # RVW - 选题评估(User)
|
||||
└── asl/
|
||||
└── screening/
|
||||
├── v1.0.0-mvp.txt
|
||||
├── v1.1.0-lenient.txt
|
||||
@@ -96,7 +119,7 @@ backend/prompts/
|
||||
└── v1.1.0-strict.txt
|
||||
```
|
||||
|
||||
**邇ー譛芽ー<EFBFBD>畑譁ケ蠑擾シ?*
|
||||
**现有调用方式:**
|
||||
|
||||
```typescript
|
||||
// 当前:从文件读取
|
||||
@@ -108,18 +131,89 @@ const systemPrompt = await promptService.get('RVW_EDITORIAL', {}, userId);
|
||||
|
||||
---
|
||||
|
||||
## 3. 謚譛ッ譫カ譫?
|
||||
### 3.1 謨エ菴捺楔譫<E6A594><E8ADAB>?
|
||||
```
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 霑占是邂。逅<EFBDA1>ォッ<EFBDAB>亥燕遶ッ<E981B6>? 笏?笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏?笏? 笏?Prompt蛻苓。ィ 笏? 笏?Prompt郛冶セ大<EFBDBE>?笏? 笏?<3F>閥 隹<>ッ募シ蜈ウ<E89C88>亥庄騾画ィ。蝮暦シ<E69AA6> 笏?笏?笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?API隹<49>畑
|
||||
笆?笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蜷守ォッ API Layer 笏?笏? /api/admin/prompts - 邂。逅<EFBDA1>磁蜿」<E89CBF>磯怙隶、隸<EFBDA4>+譚<>剞<EFBFBD>? 笏?笏? /api/admin/prompts/debug - 隹<>ッ墓ィ。蠑丞シ蜈? 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 笆?笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? PromptService<63>域<EFBFBD>ク蠢<EFBDB8>シ<EFBFBD> 笏?笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?笏? 笏?debugUsers 笏? 笏?activeCache 笏? 笏?moduleDebugMap 笏? 笏?笏? 笏?Map<userId, 笏? 笏?Map<code, 笏? 笏?Map<userId, 笏? 笏?笏? 笏? Set<module>>笏? 笏? content> 笏? 笏? Set<module>> 笏? 笏?笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?笏? 笏?笏? get(code, variables, userId) 竊?閾ェ蜉ィ轣ー蠎ヲ霍ッ逕ア 笏?笏? setDebugMode(userId, modules, enabled) 竊?讓。蝮礼コァ隹<EFBDA7>ッ? 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 笆?笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? PostgreSQL (capability_schema) 笏?笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?笏? 笏?prompt_templates 笏? 笏?prompt_versions 笏? 笏?笏? 笏?- code (蜚ッ荳譬<C280>ッ<EFBFBD>) 笏? 笏?- status: DRAFT/ACTIVE/ARCHIVED 笏? 笏?笏? 笏?- module (讓。蝮<EFBDA1>) 笏? 笏?- content (Prompt蜀<74>ョケ) 笏? 笏?笏? 笏?- variables 笏? 笏?- model_config (讓。蝙句盾謨ー) 笏? 笏?笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?笏? 笏?笏? LISTEN/NOTIFY prompt_update 竊?螟壼ョ樔セ狗シ灘ュ伜酔豁? 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
## 3. 技术架构
|
||||
|
||||
### 3.2 譬ク蠢<EFBDB8>焚謐ョ豬?
|
||||
```
|
||||
逕ィ謌キ隸キ豎<EFBFBD> 竊?荳壼苅讓。蝮<EFBDA1> 竊?promptService.get(code, vars, userId)
|
||||
笏? 笆? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?譽譟?debugUsers 笏? 笏?+ moduleDebugMap 笏? 笏披楳笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏? 笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 笏? 笆? 笆? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?隹<>ッ戊?+ 讓。蝮怜源驟<E6BA90> 笏? 笏?譎ョ騾夂畑謌?荳榊源驟? 笏? 笏披楳笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏? 笏? 笏? 笆? 笆? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?譟・隸「 DRAFT 迚域悽 笏? 笏?譟・隸「 ACTIVE 郛灘ュ<E78198> 笏? 笏披楳笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏? 笏? 笏? 笆? 笆? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?貂イ譟灘序驥剰ソ泌屓 笏? 笏?郛灘ュ俶悴蜻ス荳ュ蛻呎衍DB 笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏披楳笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏? 笏? 笆? 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏?蜈懷コ包シ夂。ャ郛也<E9839B><E4B99F> 笏? 笏?FALLBACK_PROMPTS笏? 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
### 3.1 整体架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 运营管理端(前端) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │ Prompt列表 │ │ Prompt编辑器 │ │ 🔴 调试开关(可选模块) │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
└───────────────────────────┬─────────────────────────────────────┘
|
||||
│ API调用
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 后端 API Layer │
|
||||
│ /api/admin/prompts - 管理接口(需认证+权限) │
|
||||
│ /api/admin/prompts/debug - 调试模式开关 │
|
||||
└───────────────────────────┬─────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ PromptService(核心) │
|
||||
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────────┐ │
|
||||
│ │ debugUsers │ │ activeCache │ │ moduleDebugMap │ │
|
||||
│ │ Map<userId, │ │ Map<code, │ │ Map<userId, │ │
|
||||
│ │ Set<module>>│ │ content> │ │ Set<module>> │ │
|
||||
│ └───────────────┘ └───────────────┘ └───────────────────┘ │
|
||||
│ │
|
||||
│ get(code, variables, userId) → 自动灰度路由 │
|
||||
│ setDebugMode(userId, modules, enabled) → 模块级调试 │
|
||||
└───────────────────────────┬─────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ PostgreSQL (capability_schema) │
|
||||
│ ┌─────────────────────┐ ┌─────────────────────────────────┐ │
|
||||
│ │ prompt_templates │ │ prompt_versions │ │
|
||||
│ │ - code (唯一标识) │ │ - status: DRAFT/ACTIVE/ARCHIVED │ │
|
||||
│ │ - module (模块) │ │ - content (Prompt内容) │ │
|
||||
│ │ - variables │ │ - model_config (模型参数) │ │
|
||||
│ └─────────────────────┘ └─────────────────────────────────┘ │
|
||||
│ │
|
||||
│ LISTEN/NOTIFY prompt_update → 多实例缓存同步 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 核心数据流
|
||||
|
||||
```
|
||||
用户请求 → 业务模块 → promptService.get(code, vars, userId)
|
||||
│
|
||||
▼
|
||||
┌─────────────────────┐
|
||||
│ 检查 debugUsers │
|
||||
│ + moduleDebugMap │
|
||||
└──────────┬──────────┘
|
||||
│
|
||||
┌────────────────┴────────────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ 调试者 + 模块匹配 │ │ 普通用户/不匹配 │
|
||||
└────────┬────────┘ └────────┬────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ 查询 DRAFT 版本 │ │ 查询 ACTIVE 缓存 │
|
||||
└────────┬────────┘ └────────┬────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ 渲染变量返回 │ │ 缓存未命中则查DB │
|
||||
└─────────────────┘ └────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ 兜底:硬编码 │
|
||||
│ FALLBACK_PROMPTS│
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
### 3.3 模块级调试设计
|
||||
|
||||
### 3.3 讓。蝮礼コァ隹<EFBDA7>ッ戊ョセ隶?
|
||||
```typescript
|
||||
// 调试模式数据结构
|
||||
interface DebugState {
|
||||
@@ -131,14 +225,19 @@ interface DebugState {
|
||||
// 开启调试:只调试RVW模块
|
||||
await promptService.setDebugMode(userId, ['RVW'], true);
|
||||
|
||||
// 闔キ蜿鳳rompt譌カ閾ェ蜉ィ蛻、譁?const prompt = await promptService.get('RVW_EDITORIAL', vars, userId);
|
||||
// 竊?霑泌屓DRAFT<46>亥屏荳コuserId蠑蜷ッ莠<EFBDAF>VW隹<57>ッ包シ?
|
||||
const prompt2 = await promptService.get('ASL_SCREENING', vars, userId);
|
||||
// 竊?霑泌屓ACTIVE<56>亥屏荳コuserId譛ェ蠑蜷ッASL隹<4C>ッ包シ?```
|
||||
// 获取Prompt时自动判断
|
||||
const prompt = await promptService.get('RVW_EDITORIAL', vars, userId);
|
||||
// → 返回DRAFT(因为userId开启了RVW调试)
|
||||
|
||||
### 3.4 蜿倬㍼譬。鬪梧惻蛻カ<E89BBB><EFBDB6>ariable Validation<6F>解氣?
|
||||
**髣ョ鬚伜惻譎ッ<E8AD8E>?* 郛冶セ大勣驥悟<E9A9A5>莠<EFBFBD> `{{title}}`<60>御ス<E5BEA1> `variables` 蟄玲ョオ豐。驟咲ス?`title`<60>瑚ー<E7919A>ッ墓慮謚・髞吶?
|
||||
**隗」蜀ウ譁ケ譯茨シ?*
|
||||
const prompt2 = await promptService.get('ASL_SCREENING', vars, userId);
|
||||
// → 返回ACTIVE(因为userId未开启ASL调试)
|
||||
```
|
||||
|
||||
### 3.4 变量校验机制(Variable Validation)🆕
|
||||
|
||||
**问题场景:** 编辑器里写了 `{{title}}`,但 `variables` 字段没配置 `title`,调试时报错。
|
||||
|
||||
**解决方案:**
|
||||
|
||||
```typescript
|
||||
// 后端:保存时自动提取变量
|
||||
@@ -152,23 +251,24 @@ function extractVariables(content: string): string[] {
|
||||
return Array.from(variables);
|
||||
}
|
||||
|
||||
// 菫晏ュ倩拷遞ソ譌カ閾ェ蜉ィ譖エ譁?variables 蟄玲ョオ
|
||||
// 保存草稿时自动更新 variables 字段
|
||||
async saveDraft(templateId: number, content: string, ...) {
|
||||
const extractedVars = extractVariables(content);
|
||||
|
||||
// 閾ェ蜉ィ譖エ譁ー讓。譚ソ逧?variables 蟄玲ョオ
|
||||
// 自动更新模板的 variables 字段
|
||||
await prisma.prompt_templates.update({
|
||||
where: { id: templateId },
|
||||
data: { variables: extractedVars },
|
||||
});
|
||||
|
||||
// 蛻帛サコ譁ー迚域<EFBFBD>? await prisma.prompt_versions.create({
|
||||
// 创建新版本
|
||||
await prisma.prompt_versions.create({
|
||||
data: { template_id: templateId, content, ... }
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**蜑咲ォッ<EFBFBD>夊ー<EFBFBD>ッ慕阜髱「閾ェ蜉ィ逕滓<EFBFBD>蜿倬㍼霎灘<EFBFBD>陦ィ蜊?*
|
||||
**前端:调试界面自动生成变量输入表单**
|
||||
|
||||
```tsx
|
||||
// PromptDebugPanel.tsx
|
||||
@@ -195,29 +295,35 @@ const PromptDebugPanel = ({ variables }: { variables: string[] }) => {
|
||||
};
|
||||
```
|
||||
|
||||
**譬。鬪梧慮譛コ<EFBFBD>?*
|
||||
**校验时机:**
|
||||
|
||||
| 时机 | 动作 |
|
||||
|------|------|
|
||||
| 菫晏ュ倩拷遞ソ譌?| 閾ェ蜉ィ謠仙叙蜿倬㍼<E580AC>梧峩譁?`variables` 蟄玲ョオ |
|
||||
| 蜿大ク<EFBFBD><EFBFBD>?| 隴ヲ蜻奇シ壼ヲよ<EFBDA6>?DRAFT 逧<>序驥丈ク<E4B888> ACTIVE 荳榊酔<E6A68A>梧署遉?蜿倬㍼蟾イ蜿俶<E89CBF>? |
|
||||
| 隹<EFBFBD>ッ墓<EFBFBD>?| 蜑咲ォッ譬ケ謐ョ `variables` 閾ェ蜉ィ逕滓<E98095>霎灘<E99C8E>陦ィ蜊<EFBDA8> |
|
||||
| 貂イ譟捺<EFBFBD>?| 譬。鬪梧署萓帷噪蜿倬㍼譏ッ蜷ヲ螳梧紛<E6A2A7>檎シコ螟ア蛻呎鴨蜃コ譏守。ョ髞呵ッ?|
|
||||
| 保存草稿时 | 自动提取变量,更新 `variables` 字段 |
|
||||
| 发布前 | 警告:如果 DRAFT 的变量与 ACTIVE 不同,提示"变量已变更" |
|
||||
| 调试时 | 前端根据 `variables` 自动生成输入表单 |
|
||||
| 渲染时 | 校验提供的变量是否完整,缺失则抛出明确错误 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 蠑蜿題ョ。蛻?
|
||||
### 4.1 諤サ菴捺慮髣エ郤?
|
||||
## 4. 开发计划
|
||||
|
||||
### 4.1 总体时间线
|
||||
|
||||
```
|
||||
Day 1-2: 基础设施搭建
|
||||
Day 3: PromptService 核心实现
|
||||
Day 4: 邂。逅<EFBFBD>PI蠑蜿?Day 5-6: 蜑咲ォッ邂。逅<EFBDA1>阜髱「
|
||||
Day 7: RVW讓。蝮鈴寔謌<E5AF94> + 遶ッ蛻ー遶ッ豬玖ッ?```
|
||||
Day 4: 管理API开发
|
||||
Day 5-6: 前端管理界面
|
||||
Day 7: RVW模块集成 + 端到端测试
|
||||
```
|
||||
|
||||
### 4.2 详细任务清单
|
||||
|
||||
#### Phase 3.5.1: 蝓コ遑隶セ譁ス<EFBFBD><EFBFBD>ay 1-2<EFBFBD>?
|
||||
##### Day 1: 謨ー謐ョ蠎灘㊥螟?
|
||||
#### Phase 3.5.1: 基础设施(Day 1-2)
|
||||
|
||||
##### Day 1: 数据库准备
|
||||
|
||||
- [ ] 创建 `capability_schema` Schema
|
||||
```sql
|
||||
CREATE SCHEMA IF NOT EXISTS capability_schema;
|
||||
@@ -228,32 +334,39 @@ Day 7: RVW模块集成 + 端到端测
|
||||
- [ ] `prompt_templates` 模型
|
||||
- [ ] `prompt_versions` 模型
|
||||
|
||||
- [ ] 謇ァ陦<EFBFBD> `prisma db push` 蛻帛サコ陦?
|
||||
- [ ] 豺サ蜉<EFBDBB> Prompt 譚<>剞蛻?`permissions` 陦? ```sql
|
||||
- [ ] 执行 `prisma db push` 创建表
|
||||
|
||||
- [ ] 添加 Prompt 权限到 `permissions` 表
|
||||
```sql
|
||||
INSERT INTO platform_schema.permissions (code, name, description, module) VALUES
|
||||
('prompt:view', '譟・逵輝rompt', '譟・逵輝rompt讓。譚ソ蛻苓。ィ蜥瑚ッヲ諠?, 'admin'),
|
||||
('prompt:view', '查看Prompt', '查看Prompt模板列表和详情', 'admin'),
|
||||
('prompt:edit', '编辑Prompt', '创建和修改Prompt草稿', 'admin'),
|
||||
('prompt:debug', '隹<EFBFBD>ッ姫rompt', '蠑蜷ッ隹<EFBFBD>ッ墓ィ。蠑?, 'admin'),
|
||||
('prompt:publish', '蜿大クケrompt', '蟆<EFBFBD>拷遞ソ蜿大ク<EFBFBD>クコ豁」蠑冗<EFBFBD>?, 'admin');
|
||||
('prompt:debug', '调试Prompt', '开启调试模式', 'admin'),
|
||||
('prompt:publish', '发布Prompt', '将草稿发布为正式版', 'admin');
|
||||
```
|
||||
|
||||
- [ ] 譖エ譁ー `role_permissions` 陦? - [ ] SUPER_ADMIN: prompt:view, prompt:edit, prompt:debug, prompt:publish
|
||||
- [ ] PROMPT_ENGINEER: prompt:view, prompt:edit, prompt:debug<EFBFBD>域裏publish<EFBFBD>?
|
||||
##### Day 2: 謨ー謐ョ霑∫ァサ<EFBDA7><EFBDBB>VW讓。蝮暦シ?
|
||||
- [ ] 更新 `role_permissions` 表
|
||||
- [ ] SUPER_ADMIN: prompt:view, prompt:edit, prompt:debug, prompt:publish
|
||||
- [ ] PROMPT_ENGINEER: prompt:view, prompt:edit, prompt:debug(无publish)
|
||||
|
||||
##### Day 2: 数据迁移(RVW模块)
|
||||
|
||||
- [ ] 编写迁移脚本 `scripts/migrate-prompts.ts`
|
||||
|
||||
- [ ] 迁移 RVW 模块 Prompt
|
||||
| 文件 | Code | 名称 |
|
||||
|------|------|------|
|
||||
| review_editorial_system.txt | RVW_EDITORIAL | 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?|
|
||||
| review_methodology_system.txt | RVW_METHODOLOGY | 譁ケ豕募ュヲ隸<EFBFBD>シ?|
|
||||
| review_editorial_system.txt | RVW_EDITORIAL | 稿约规范性评估 |
|
||||
| review_methodology_system.txt | RVW_METHODOLOGY | 方法学评估 |
|
||||
|
||||
> 豕ィ<EFBFBD>啻topic_evaluation_*` 譏?騾蛾「倩ッ<E580A9>シー"蜉溯<E89C89><E6BAAF>御ク榊ア樔コ山VW螳。遞ソ讓。蝮<EFBDA1>
|
||||
> 注:`topic_evaluation_*` 是"选题评估"功能,不属于RVW审稿模块
|
||||
|
||||
- [ ] 验证迁移数据完整性
|
||||
|
||||
- [ ] 鬪瑚ッ∬ソ∫ァサ謨ー謐ョ螳梧紛諤?
|
||||
---
|
||||
|
||||
#### Phase 3.5.2: PromptService 譬ク蠢<EFBFBD>シ<EFBFBD>ay 3<EFBFBD>?
|
||||
#### Phase 3.5.2: PromptService 核心(Day 3)
|
||||
|
||||
- [ ] 创建文件结构
|
||||
```
|
||||
backend/src/common/capabilities/prompt/
|
||||
@@ -263,16 +376,23 @@ Day 7: RVW模块集成 + 端到端测
|
||||
└── index.ts # 导出
|
||||
```
|
||||
|
||||
- [ ] 螳樒鴫 `PromptService` 邀? - [ ] `get(code, variables, userId)` - 譬ク蠢<EFBDB8>執蜿匁婿豕<E5A9BF>
|
||||
- [ ] `setDebugMode(userId, modules, enabled)` - 讓。蝮礼コァ隹<EFBDA7>ッ募シ蜈? - [ ] `isDebugging(userId, module)` - 譽譟・隹<EFBDA5>ッ慕憾諤? - [ ] `render(template, variables)` - Handlebars貂イ譟<EFBDB2>
|
||||
- [ ] `getActiveVersion(code)` - 闔キ蜿泡CTIVE迚域悽<E59F9F>亥クヲ郛灘ュ假シ? - [ ] `getDraftVersion(code)` - 闔キ蜿縫RAFT迚域悽
|
||||
- [ ] 实现 `PromptService` 类
|
||||
- [ ] `get(code, variables, userId)` - 核心获取方法
|
||||
- [ ] `setDebugMode(userId, modules, enabled)` - 模块级调试开关
|
||||
- [ ] `isDebugging(userId, module)` - 检查调试状态
|
||||
- [ ] `render(template, variables)` - Handlebars渲染
|
||||
- [ ] `getActiveVersion(code)` - 获取ACTIVE版本(带缓存)
|
||||
- [ ] `getDraftVersion(code)` - 获取DRAFT版本
|
||||
- [ ] `getFallback(code)` - 获取兜底Prompt
|
||||
- [ ] `extractVariables(content)` - 🆕 从内容提取变量名
|
||||
- [ ] `validateVariables(content, providedVars)` - <EFBFBD><EFBFBD> 譬。鬪悟序驥丞ョ梧紛諤?
|
||||
- [ ] 螳樒鴫辜ュ譖エ譁ー譛コ蛻? - [ ] `initHotReload()` - 逶大成 LISTEN/NOTIFY
|
||||
- [ ] 謾カ蛻ー騾夂衍蜷取ク<E58F96>ゥ?`activeCache`
|
||||
- [ ] `validateVariables(content, providedVars)` - 🆕 校验变量完整性
|
||||
|
||||
- [ ] 郛門<EFBFBD>蜈懷コ姫rompt<EFBFBD><EFBFBD>prompt.fallbacks.ts`<EFBFBD>? ```typescript
|
||||
- [ ] 实现热更新机制
|
||||
- [ ] `initHotReload()` - 监听 LISTEN/NOTIFY
|
||||
- [ ] 收到通知后清空 `activeCache`
|
||||
|
||||
- [ ] 编写兜底Prompt(`prompt.fallbacks.ts`)
|
||||
```typescript
|
||||
export const FALLBACK_PROMPTS: Record<string, string> = {
|
||||
'RVW_EDITORIAL': `你是一位资深的学术期刊编辑...`,
|
||||
'RVW_METHODOLOGY': `你是一位方法学专家...`,
|
||||
@@ -282,11 +402,13 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|
||||
---
|
||||
|
||||
#### Phase 3.5.3: 邂。逅<EFBFBD>PI<EFBFBD><EFBFBD>ay 4<EFBFBD>?
|
||||
#### Phase 3.5.3: 管理API(Day 4)
|
||||
|
||||
- [ ] 创建文件结构
|
||||
```
|
||||
backend/src/modules/admin/prompt/
|
||||
笏懌楳笏 prompt.controller.ts # 謗ァ蛻カ蝎? 笏懌楳笏 prompt.routes.ts # 霍ッ逕ア螳壻ケ<E5A3BB>
|
||||
├── prompt.controller.ts # 控制器
|
||||
├── prompt.routes.ts # 路由定义
|
||||
└── prompt.schema.ts # 请求/响应Schema
|
||||
```
|
||||
|
||||
@@ -296,61 +418,82 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|------|------|------|------|
|
||||
| GET | `/api/admin/prompts` | prompt:view | 获取模板列表(支持模块过滤) |
|
||||
| GET | `/api/admin/prompts/:id` | prompt:view | 获取模板详情+版本历史 |
|
||||
| POST | `/api/admin/prompts` | prompt:edit | 蛻帛サコ譁ー讓。譚?|
|
||||
| POST | `/api/admin/prompts` | prompt:edit | 创建新模板 |
|
||||
| POST | `/api/admin/prompts/:id/draft` | prompt:edit | 保存草稿 |
|
||||
| POST | `/api/admin/prompts/:id/publish` | prompt:publish | 蜿大ク<EFBFBD>シ<EFBFBD>RAFT竊但CTIVE<EFBFBD>?|
|
||||
| POST | `/api/admin/prompts/:id/rollback` | prompt:publish | 蝗樊サ壼芦謖<EFBFBD>ョ夂沿譛?|
|
||||
| POST | `/api/admin/prompts/debug` | prompt:debug | 蠑蜈ウ隹<EFBFBD>ッ墓ィ。蠑?|
|
||||
| GET | `/api/admin/prompts/debug/status` | prompt:debug | 闔キ蜿門ス灘燕隹<EFBFBD>ッ慕憾諤?|
|
||||
| POST | `/api/admin/prompts/:id/publish` | prompt:publish | 发布(DRAFT→ACTIVE) |
|
||||
| POST | `/api/admin/prompts/:id/rollback` | prompt:publish | 回滚到指定版本 |
|
||||
| POST | `/api/admin/prompts/debug` | prompt:debug | 开关调试模式 |
|
||||
| GET | `/api/admin/prompts/debug/status` | prompt:debug | 获取当前调试状态 |
|
||||
|
||||
- [ ] 豺サ蜉<EFBFBD>譚<EFBFBD>剞荳ュ髣エ莉カ譽譟?
|
||||
- [ ] 豕ィ蜀瑚キッ逕ア蛻?`index.ts`
|
||||
- [ ] 添加权限中间件检查
|
||||
|
||||
- [ ] 注册路由到 `index.ts`
|
||||
|
||||
---
|
||||
|
||||
#### Phase 3.5.4: 蜑咲ォッ邂。逅<EFBFBD>阜髱「<EFBFBD><EFBFBD>ay 5-6<EFBFBD>?
|
||||
##### Day 5: 蛻苓。ィ鬘?+ 隹<>ッ募シ蜈?
|
||||
#### Phase 3.5.4: 前端管理界面(Day 5-6)
|
||||
|
||||
##### Day 5: 列表页 + 调试开关
|
||||
|
||||
- [ ] 创建文件结构
|
||||
```
|
||||
frontend-v2/src/modules/admin/prompt/
|
||||
├── pages/
|
||||
笏? 笏懌楳笏 PromptListPage.tsx # 蛻苓。ィ鬘? 笏? 笏披楳笏 PromptEditorPage.tsx # 郛冶セ鷹。? 笏懌楳笏 components/
|
||||
笏? 笏懌楳笏 PromptDebugSwitch.tsx # 隹<>ッ募シ蜈? 笏? 笏懌楳笏 PromptVersionHistory.tsx # 迚域悽蜴<E682BD>彰
|
||||
笏? 笏披楳笏 PromptPreview.tsx # 鬚<>ァ育サ<E882B2>サカ
|
||||
│ ├── PromptListPage.tsx # 列表页
|
||||
│ └── PromptEditorPage.tsx # 编辑页
|
||||
├── components/
|
||||
│ ├── PromptDebugSwitch.tsx # 调试开关
|
||||
│ ├── PromptVersionHistory.tsx # 版本历史
|
||||
│ └── PromptPreview.tsx # 预览组件
|
||||
├── hooks/
|
||||
笏? 笏披楳笏 usePromptApi.ts # API隹<EFBFBD>畑
|
||||
│ └── usePromptApi.ts # API调用
|
||||
└── index.ts
|
||||
```
|
||||
|
||||
- [ ] `PromptListPage.tsx`
|
||||
- [ ] 模板列表展示
|
||||
- [ ] 讓。蝮礼ュ幃会シ<EFBFBD>VW/ASL/DC/...<EFBFBD>? - [ ] 迥カ諤∫ュ幃会シ域怏闕臥ィ?譌<>闕臥ィソ<EFBDA8><EFBDBF>
|
||||
- [ ] 模块筛选(RVW/ASL/DC/...)
|
||||
- [ ] 状态筛选(有草稿/无草稿)
|
||||
- [ ] 搜索功能
|
||||
|
||||
- [ ] `PromptDebugSwitch.tsx`
|
||||
- [ ] 譚<EFBFBD>剞譽譟・<EFBFBD>井サ?prompt:debug 蜿ッ隗<EFBFBD>シ? - [ ] 讓。蝮鈴画叫蝎ィ<E89D8E>亥庄螟夐会シ<E4BC9A>
|
||||
- [ ] 蠑蜈ウ迥カ諤? - [ ] 蠑蜷ッ蜷取仞遉コ隴ヲ蜻頑<E89CBB>?
|
||||
##### Day 6: 郛冶セ大勣鬘オ髱?
|
||||
- [ ] 权限检查(仅 prompt:debug 可见)
|
||||
- [ ] 模块选择器(可多选)
|
||||
- [ ] 开关状态
|
||||
- [ ] 开启后显示警告条
|
||||
|
||||
##### Day 6: 编辑器页面
|
||||
|
||||
- [ ] `PromptEditorPage.tsx`
|
||||
- [ ] 蝓コ譛ャ菫。諱ッ螻慕、コ<EFBFBD><EFBFBD>ode, name, module<EFBFBD>? - [ ] Prompt 蜀<>ョケ郛冶セ大勣<E5A4A7><E58BA3>onaco Editor / CodeMirror<6F>? - [ ] **蜿倬㍼閾ェ蜉ィ謠仙叙**<2A>夂シ冶セ第慮螳樊慮謇ォ謠<EFBDAB> `{{xxx}}`<60>梧仞遉コ蜿倬㍼蛻苓。?<3F><>
|
||||
- [ ] modelConfig 郛冶セ托シ<E68998>SON譬シ蠑擾シ? - [ ] 菫晏ュ倩拷遞ソ謖蛾聴<E89BBE>郁<EFBFBD>蜉ィ譖エ譁?variables 蟄玲ョオ<EFBDAE>? - [ ] 蜿大ク<E5A4A7>潔髓ョ<E9AB93>域揀髯先而蛻カ<E89BBB>壽<EFBFBD>?prompt:publish 蛻咏ヲ∫畑<E288AB><E79591>
|
||||
- [ ] 基本信息展示(code, name, module)
|
||||
- [ ] Prompt 内容编辑器(Monaco Editor / CodeMirror)
|
||||
- [ ] **变量自动提取**:编辑时实时扫描 `{{xxx}}`,显示变量列表 🆕
|
||||
- [ ] modelConfig 编辑(JSON格式)
|
||||
- [ ] 保存草稿按钮(自动更新 variables 字段)
|
||||
- [ ] 发布按钮(权限控制:无 prompt:publish 则禁用)
|
||||
- [ ] **变量变更警告**:发布前检查变量是否与 ACTIVE 版本不同 🆕
|
||||
- [ ] 版本历史面板
|
||||
- [ ] 蜿俶峩隸エ譏手セ灘<EFBFBD><EFBFBD><EFBFBD>hangelog<EFBFBD>?
|
||||
- [ ] 变更说明输入(changelog)
|
||||
|
||||
- [ ] `PromptDebugPanel.tsx` 🆕
|
||||
- [ ] 根据 variables 自动生成输入表单
|
||||
- [ ] "豬玖ッ墓クイ譟<EFBFBD>"謖蛾聴<E89BBE>夐「<E5A490>ァ亥序驥乗崛謐「蜷守噪謨域<E8ACA8>? - [ ] 貂イ譟鍋サ捺棡螻慕、コ
|
||||
- [ ] "测试渲染"按钮:预览变量替换后的效果
|
||||
- [ ] 渲染结果展示
|
||||
|
||||
- [ ] `PromptVersionHistory.tsx`
|
||||
- [ ] 版本列表
|
||||
- [ ] 版本对比
|
||||
- [ ] 荳髞ョ蝗樊サ?
|
||||
- [ ] 髮<><E9ABAE>蛻ー蟇シ闊? - [ ] 霑占是邂。逅<EFBDA1>ォッ萓ァ霎ケ譬乗キサ蜉<EFBDBB>蜈・蜿」
|
||||
- [ ] 鬘カ驛ィ譬乗キサ蜉<EFBFBD>隹<EFBFBD>ッ募シ蜈?
|
||||
- [ ] 一键回滚
|
||||
|
||||
- [ ] 集成到导航
|
||||
- [ ] 运营管理端侧边栏添加入口
|
||||
- [ ] 顶部栏添加调试开关
|
||||
|
||||
---
|
||||
|
||||
#### Phase 3.5.5: RVW讓。蝮鈴寔謌撰シ<EFBFBD>ay 7<EFBFBD>?
|
||||
- [ ] 謾ケ騾?`editorialService.ts`
|
||||
#### Phase 3.5.5: RVW模块集成(Day 7)
|
||||
|
||||
- [ ] 改造 `editorialService.ts`
|
||||
```typescript
|
||||
// Before
|
||||
const systemPrompt = await fs.readFile(PROMPT_PATH, 'utf-8');
|
||||
@@ -359,40 +502,42 @@ Day 7: RVW模块集成 + 端到端测
|
||||
const systemPrompt = await promptService.get('RVW_EDITORIAL', {}, userId);
|
||||
```
|
||||
|
||||
- [ ] 謾ケ騾?`methodologyService.ts`
|
||||
- [ ] 改造 `methodologyService.ts`
|
||||
|
||||
- [ ] 謾ケ騾<EFBFBD>蜈カ莉?RVW 逶ク蜈ウ譛榊苅
|
||||
- [ ] 改造其他 RVW 相关服务
|
||||
|
||||
- [ ] 遶ッ蛻ー遶ッ豬玖ッ? - [ ] 譎ョ騾夂畑謌キ<E8AC8C>壻スソ逕ィ ACTIVE 迚域悽
|
||||
- [ ] 端到端测试
|
||||
- [ ] 普通用户:使用 ACTIVE 版本
|
||||
- [ ] 调试者(开启RVW调试):使用 DRAFT 版本
|
||||
- [ ] 调试者(未开启RVW调试):使用 ACTIVE 版本
|
||||
- [ ] 蜿大ク<EFBFBD>オ∫ィ具シ咼RAFT 竊?ACTIVE
|
||||
- [ ] 发布流程:DRAFT → ACTIVE
|
||||
- [ ] 回滚流程
|
||||
|
||||
---
|
||||
|
||||
### 4.3 莉サ蜉。霍溯クェ陦?
|
||||
| ID | 莉サ蜉。 | 雍溯エ」莠?| 迥カ諤?| 螳梧<E89EB3>譌・譛<EFBDA5> |
|
||||
### 4.3 任务跟踪表
|
||||
|
||||
| ID | 任务 | 负责人 | 状态 | 完成日期 |
|
||||
|----|------|--------|------|---------|
|
||||
| 3.5.1.1 | 蛻帛サコ capability_schema | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.1.2 | 譖エ譁ー schema.prisma | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.1.3 | 豺サ蜉<EFBFBD>譚<EFBFBD>剞謨ー謐ョ | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.1.4 | 郛門<EFBFBD>霑∫ァサ閼壽悽 | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.1.5 | 霑∫ァサ RVW Prompt | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.2.1 | 螳樒鴫 PromptService | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.2.2 | 螳樒鴫辜ュ譖エ譁?| - | 竢ク<E7ABA2><EFBDB8> 證らシ難シ域焔蜉ィinvalidate<EFBFBD>?| - |
|
||||
| 3.5.2.3 | 郛門<EFBFBD>蜈懷コ姫rompt | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.2.4 | 螳樒鴫蜿倬㍼謠仙叙 `extractVariables()` <EFBFBD><EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.2.5 | 螳樒鴫蜿倬㍼譬。鬪<EFBFBD> `validateVariables()` <EFBFBD><EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.3.1 | 螳樒鴫邂。逅<EFBFBD>PI | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.3.2 | 豺サ蜉<EFBFBD>譚<EFBFBD>剞譽譟?| - | 竢ク<E7ABA2><EFBDB8> 證らシ難シ域ウィ驥頑脂<E9A091>?| - |
|
||||
| 3.5.4.0 | 謳ュ蟒コ邂。逅<EFBFBD>ォッ蝓コ遑譫カ譫<EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.4.1 | 螳樒鴫蛻苓。ィ鬘?| AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.4.2 | 螳樒鴫隹<EFBFBD>ッ募シ蜈?| AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.4.3 | 螳樒鴫郛冶セ大勣<EFBFBD><EFBFBD>odeMirror 6 邂蛹也沿<EFBFBD>榎 AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.4.4 | 螳樒鴫隹<EFBFBD>ッ暮擇譚ソ<EFBFBD>亥序驥剰セ灘<EFBFBD>陦ィ蜊包シ解氣<EFBFBD> | AI | 笨?蟾イ螳梧<E89EB3>?| 2026-01-11 |
|
||||
| 3.5.5.1 | 謾ケ騾?RVW 譛榊苅 | - | 竢?蠕<>シ蟋?| - |
|
||||
| 3.5.5.2 | 遶ッ蛻ー遶ッ豬玖ッ?| - | 竢?蠕<>シ蟋?| - |
|
||||
| 3.5.1.1 | 创建 capability_schema | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.1.2 | 更新 schema.prisma | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.1.3 | 添加权限数据 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.1.4 | 编写迁移脚本 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.1.5 | 迁移 RVW Prompt | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.2.1 | 实现 PromptService | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.2.2 | 实现热更新 | - | ⏸️ 暂缓(手动invalidate) | - |
|
||||
| 3.5.2.3 | 编写兜底Prompt | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.2.4 | 实现变量提取 `extractVariables()` 🆕 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.2.5 | 实现变量校验 `validateVariables()` 🆕 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.3.1 | 实现管理API | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.3.2 | 添加权限检查 | - | ⏸️ 暂缓(注释掉) | - |
|
||||
| 3.5.4.0 | 搭建管理端基础架构 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.4.1 | 实现列表页 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.4.2 | 实现调试开关 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.4.3 | 实现编辑器(CodeMirror 6 简化版)| AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.4.4 | 实现调试面板(变量输入表单)🆕 | AI | ✅ 已完成 | 2026-01-11 |
|
||||
| 3.5.5.1 | 改造 RVW 服务 | - | ⏳ 待开始 | - |
|
||||
| 3.5.5.2 | 端到端测试 | - | ⏳ 待开始 | - |
|
||||
|
||||
---
|
||||
|
||||
@@ -400,31 +545,31 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|
||||
### 5.1 RVW模块迁移(第一批)
|
||||
|
||||
| 貅先枚莉?| Code | 蜷咲ァー | 讓。蝮<EFBDA1> | 迥カ諤?|
|
||||
| 源文件 | Code | 名称 | 模块 | 状态 |
|
||||
|--------|------|------|------|------|
|
||||
| review_editorial_system.txt | RVW_EDITORIAL | 遞ソ郤ヲ隗<EFBFBD>激諤ァ隸<EFBFBD>シ?| RVW | ACTIVE |
|
||||
| review_methodology_system.txt | RVW_METHODOLOGY | 譁ケ豕募ュヲ隸<EFBFBD>シ?| RVW | ACTIVE |
|
||||
| review_editorial_system.txt | RVW_EDITORIAL | 稿约规范性评估 | RVW | ACTIVE |
|
||||
| review_methodology_system.txt | RVW_METHODOLOGY | 方法学评估 | RVW | ACTIVE |
|
||||
|
||||
> 豕ィ<EFBFBD>啻topic_evaluation_*` 譏?騾蛾「倩ッ<E580A9>シー"蜉溯<E89C89><E6BAAF>御ク榊ア樔コ山VW螳。遞ソ讓。蝮暦シ梧悴霑∫ァサ
|
||||
> 注:`topic_evaluation_*` 是"选题评估"功能,不属于RVW审稿模块,未迁移
|
||||
|
||||
### 5.2 ASL模块迁移(第二批,待定)
|
||||
|
||||
| 貅先枚莉?| Code | 蜷咲ァー | 讓。蝮<EFBDA1> |
|
||||
| 源文件 | Code | 名称 | 模块 |
|
||||
|--------|------|------|------|
|
||||
| v1.1.0-standard.txt | ASL_SCREENING_STANDARD | 譬<EFBFBD>「俶遭隕∫ュ幃?譬<>㊥) | ASL |
|
||||
| v1.1.0-strict.txt | ASL_SCREENING_STRICT | 譬<EFBFBD>「俶遭隕∫ュ幃?荳・譬シ) | ASL |
|
||||
| v1.1.0-lenient.txt | ASL_SCREENING_LENIENT | 譬<EFBFBD>「俶遭隕∫ュ幃?螳ス譚セ) | ASL |
|
||||
| fulltext-screening/system_prompt.md | ASL_FULLTEXT_SYSTEM | 蜈ィ譁<EFBFBD>ュ幃?System) | ASL |
|
||||
| fulltext-screening/user_prompt_template.md | ASL_FULLTEXT_USER | 蜈ィ譁<EFBFBD>ュ幃?User) | ASL |
|
||||
| v1.1.0-standard.txt | ASL_SCREENING_STANDARD | 标题摘要筛选(标准) | ASL |
|
||||
| v1.1.0-strict.txt | ASL_SCREENING_STRICT | 标题摘要筛选(严格) | ASL |
|
||||
| v1.1.0-lenient.txt | ASL_SCREENING_LENIENT | 标题摘要筛选(宽松) | ASL |
|
||||
| fulltext-screening/system_prompt.md | ASL_FULLTEXT_SYSTEM | 全文筛选(System) | ASL |
|
||||
| fulltext-screening/user_prompt_template.md | ASL_FULLTEXT_USER | 全文筛选(User) | ASL |
|
||||
|
||||
### 5.3 其他模块迁移(第三批,待定)
|
||||
|
||||
| 讓。蝮<EFBFBD> | 鬚<>ョ。Prompt謨ー驥<EFBDB0> | 莨伜<E88EA8>郤?|
|
||||
| 模块 | 预计Prompt数量 | 优先级 |
|
||||
|------|---------------|--------|
|
||||
| DC | 5+ | P1 |
|
||||
| PKB | 3 | P2 |
|
||||
| IIT | 3 | P2 |
|
||||
| AIA | 10<EFBFBD>域匱閭ス菴難シ?| P3<50>亥セ<E4BAA5>シ蜿托シ<E68998> |
|
||||
| AIA | 10(智能体) | P3(待开发) |
|
||||
|
||||
---
|
||||
|
||||
@@ -434,30 +579,35 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|
||||
| 权限 Code | 描述 | 风险等级 |
|
||||
|-----------|------|---------|
|
||||
| `prompt:view` | 譟・逵輝rompt蛻苓。ィ蜥瑚ッヲ諠?| 菴?|
|
||||
| `prompt:edit` | 蛻帛サコ/菫ョ謾ケDRAFT迚域悽 | 荳?|
|
||||
| `prompt:debug` | 蠑蜷ッ隹<EFBFBD>ッ墓ィ。蠑?| 荳?|
|
||||
| `prompt:publish` | 蜿大クゥRAFT竊但CTIVE | **鬮?* |
|
||||
| `prompt:view` | 查看Prompt列表和详情 | 低 |
|
||||
| `prompt:edit` | 创建/修改DRAFT版本 | 中 |
|
||||
| `prompt:debug` | 开启调试模式 | 中 |
|
||||
| `prompt:publish` | 发布DRAFT→ACTIVE | **高** |
|
||||
|
||||
### 6.2 角色权限分配
|
||||
|
||||
| 角色 | prompt:view | prompt:edit | prompt:debug | prompt:publish |
|
||||
|------|-------------|-------------|--------------|----------------|
|
||||
| SUPER_ADMIN | 笨?| 笨?| 笨?| 笨?|
|
||||
| PROMPT_ENGINEER | 笨?| 笨?| 笨?| 笶?|
|
||||
| HOSPITAL_ADMIN | 笶?| 笶?| 笶?| 笶?|
|
||||
| PHARMA_ADMIN | 笶?| 笶?| 笶?| 笶?|
|
||||
| USER | 笶?| 笶?| 笶?| 笶?|
|
||||
| SUPER_ADMIN | ✅ | ✅ | ✅ | ✅ |
|
||||
| PROMPT_ENGINEER | ✅ | ✅ | ✅ | ❌ |
|
||||
| HOSPITAL_ADMIN | ❌ | ❌ | ❌ | ❌ |
|
||||
| PHARMA_ADMIN | ❌ | ❌ | ❌ | ❌ |
|
||||
| USER | ❌ | ❌ | ❌ | ❌ |
|
||||
|
||||
### 6.3 典型工作流
|
||||
|
||||
### 6.3 蜈ク蝙句キ・菴懈オ?
|
||||
```
|
||||
1. Prompt蟾・遞句ク?逋サ蠖慕ウサ扈<EFBDBB>
|
||||
2. 霑帛<EFBFBD> Prompt 邂。逅<EFBFBD>。オ髱「<EFBFBD>梧伽蛻?RVW_EDITORIAL
|
||||
3. 菫ョ謾ケ蜀<EFBFBD>ョケ<EFBFBD>檎せ蜃?菫晏ュ倩拷遞ソ"
|
||||
4. 蠑蜷ッ隹<EFBFBD>ッ墓ィ。蠑擾シ磯画叫 RVW 讓。蝮暦シ?5. 蛻<>困蛻?RVW 荳壼苅鬘オ髱「<E9ABB1>御ク贋シ<E8B48B>豬玖ッ慕ィソ莉?6. 鬪瑚ッ∵譜譫懶シ悟ヲよ棡OK<4F>? - 蜈ウ髣ュ隹<EFBDAD>ッ墓ィ。蠑<EFBDA1>
|
||||
- 騾夂衍 雜<>コァ邂。逅<EFBDA1><E98085>?螳。譬ク
|
||||
7. 雜<>コァ邂。逅<EFBDA1><E98085>?逋サ蠖包シ梧衍逵玖拷遞ソ<E9819E>檎せ蜃サ"蜿大ク<E5A4A7>"
|
||||
8. 譁ー迚域悽逕滓<E98095>?```
|
||||
1. Prompt工程师 登录系统
|
||||
2. 进入 Prompt 管理页面,找到 RVW_EDITORIAL
|
||||
3. 修改内容,点击"保存草稿"
|
||||
4. 开启调试模式(选择 RVW 模块)
|
||||
5. 切换到 RVW 业务页面,上传测试稿件
|
||||
6. 验证效果,如果OK:
|
||||
- 关闭调试模式
|
||||
- 通知 超级管理员 审核
|
||||
7. 超级管理员 登录,查看草稿,点击"发布"
|
||||
8. 新版本生效
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -465,7 +615,7 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|
||||
### 7.1 单元测试
|
||||
|
||||
| 豬玖ッ暮。?| 隕<>尠蜀<E5B0A0>ョケ |
|
||||
| 测试项 | 覆盖内容 |
|
||||
|--------|---------|
|
||||
| PromptService.get() | 灰度路由逻辑 |
|
||||
| PromptService.render() | 变量渲染 |
|
||||
@@ -475,37 +625,40 @@ Day 7: RVW模块集成 + 端到端测
|
||||
|
||||
| 测试场景 | 预期结果 |
|
||||
|---------|---------|
|
||||
| 譎ョ騾夂畑謌キ隶ソ髣?| 霑泌屓 ACTIVE 迚域悽 |
|
||||
| 隹<EFBFBD>ッ戊<EFBFBD>シ亥シ蜷ッRVW隹<EFBFBD>ッ包シ芽ョソ髣?RVW Prompt | 霑泌屓 DRAFT 迚域悽 |
|
||||
| 隹<EFBFBD>ッ戊<EFBFBD>シ亥シ蜷ッRVW隹<EFBFBD>ッ包シ芽ョソ髣?ASL Prompt | 霑泌屓 ACTIVE 迚域悽 |
|
||||
| 普通用户访问 | 返回 ACTIVE 版本 |
|
||||
| 调试者(开启RVW调试)访问 RVW Prompt | 返回 DRAFT 版本 |
|
||||
| 调试者(开启RVW调试)访问 ASL Prompt | 返回 ACTIVE 版本 |
|
||||
| 调试者(未开启调试)访问 | 返回 ACTIVE 版本 |
|
||||
| 譌?ACTIVE 迚域悽譌?| 霑泌屓 FALLBACK |
|
||||
| 謨ー謐ョ蠎謎ク榊庄逕ィ譌?| 霑泌屓 FALLBACK |
|
||||
| 无 ACTIVE 版本时 | 返回 FALLBACK |
|
||||
| 数据库不可用时 | 返回 FALLBACK |
|
||||
|
||||
### 7.3 端到端测试
|
||||
|
||||
### 7.3 遶ッ蛻ー遶ッ豬玖ッ?
|
||||
| 测试流程 | 步骤 |
|
||||
|---------|------|
|
||||
| 螳梧紛郛冶セ第オ∫ィ<EFBFBD> | 逋サ蠖補<E8A096>譟・逵句<E980B5>陦ィ竊堤シ冶セ鯛<EFBDBE>菫晏ュ倩拷遞ソ竊貞シ蜷ッ隹<EFBDAF>ッ補<EFBDAF>鬪瑚ッ≫<EFBDAF>蜿大ク?|
|
||||
| 完整编辑流程 | 登录→查看列表→编辑→保存草稿→开启调试→验证→发布 |
|
||||
| 回滚流程 | 发布错误版本→回滚→验证 |
|
||||
| 权限测试 | PROMPT_ENGINEER 无法发布 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 鬟朱勦荳主コ泌ッ?
|
||||
### 8.1 謚譛ッ鬟朱<E9AC9F>?
|
||||
## 8. 风险与应对
|
||||
|
||||
### 8.1 技术风险
|
||||
|
||||
| 风险 | 影响 | 概率 | 应对策略 |
|
||||
|------|------|------|---------|
|
||||
| capability_schema 蛻帛サコ螟ア雍・ | 邉サ扈滓裏豕募星蜉ィ | 菴?| 迢ャ遶鬼QL閼壽悽<E5A3BD>悟庄謇句勘菫ョ螟<EFBDAE> |
|
||||
| 謨ー謐ョ蠎捺衍隸「雜<EFBFBD><EFBFBD>?| 逕ィ謌キ隸キ豎ょ序諷「 | 菴?| 菴ソ逕ィ郛灘ュ<E78198> + 蜈懷コ<E687B7> |
|
||||
| 螟壼ョ樔セ狗シ灘ュ倅ク堺ク閾?| 逕ィ謌キ菴馴ェ御ク堺ク閾?| 荳?| LISTEN/NOTIFY 蜷梧ュ・ |
|
||||
| 隹<EFBFBD>ッ戊<EFBFBD>ッッ蜿大ク<EFBFBD>漠隸ッPrompt | 郤ソ荳顔畑謌キ蜿怜スア蜩?| 荳?| 譚<>剞蛻<E5899E>ヲサ + 迚域悽蝗樊サ<E6A88A> |
|
||||
| capability_schema 创建失败 | 系统无法启动 | 低 | 独立SQL脚本,可手动修复 |
|
||||
| 数据库查询超时 | 用户请求变慢 | 低 | 使用缓存 + 兜底 |
|
||||
| 多实例缓存不一致 | 用户体验不一致 | 中 | LISTEN/NOTIFY 同步 |
|
||||
| 调试者误发布错误Prompt | 线上用户受影响 | 中 | 权限分离 + 版本回滚 |
|
||||
|
||||
### 8.2 业务风险
|
||||
|
||||
| 风险 | 影响 | 应对策略 |
|
||||
|------|------|---------|
|
||||
| Prompt 謾ケ蜉ィ蟇シ閾エAI謨域棡荳矩剄 | 荳壼苅蜿怜スア蜩?| 轣ー蠎ヲ鬪瑚ッ<E7919A> + 蠢ォ騾溷屓貊?|
|
||||
| 譚<EFBFBD>剞邂。逅<EFBFBD>キキ荵ア | 隸ッ謫堺ス?| 荳・譬シRBAC + 螳。隶。譌・蠢<EFBDA5> |
|
||||
| Prompt 改动导致AI效果下降 | 业务受影响 | 灰度验证 + 快速回滚 |
|
||||
| 权限管理混乱 | 误操作 | 严格RBAC + 审计日志 |
|
||||
|
||||
### 8.3 兜底策略
|
||||
|
||||
@@ -524,7 +677,8 @@ async get(code: string, variables: any, userId: string): Promise<string> {
|
||||
return this.render(cached, variables);
|
||||
}
|
||||
|
||||
// Level 3: 遑ャ郛也<EFBFBD>∝<EFBFBD>蠎? logger.error('Cache miss, using fallback', { code });
|
||||
// Level 3: 硬编码兜底
|
||||
logger.error('Cache miss, using fallback', { code });
|
||||
return this.render(this.getFallback(code), variables);
|
||||
}
|
||||
}
|
||||
@@ -536,9 +690,9 @@ async get(code: string, variables: any, userId: string): Promise<string> {
|
||||
|
||||
### A. 相关文档
|
||||
|
||||
- [Prompt邂。逅<EFBFBD>ウサ扈滉ク守<EFBFBD>蠎ヲ鬚<EFBFBD>ァ郁ョセ隶。譁ケ譯<EFBFBD>(../02-謚譛ッ隶セ隶?02-騾夂畑閭ス蜉帛ア<E5B89B>03-Prompt邂。逅<EFBDA1>ウサ扈滉ク守<EFBDB8>蠎ヲ鬚<EFBDA6>ァ郁ョセ隶。譁ケ譯?md)
|
||||
- [Prompt邂。逅<EFBFBD>ウサ扈溷ソォ騾溷盾閠ゾ(../02-謚譛ッ隶セ隶?03-Prompt邂。逅<EFBDA1>ウサ扈溷ソォ騾溷盾閠?md)
|
||||
- [Prompt邂。逅<EFBFBD>錘蜿ー隶セ隶。](../02-謚譛ッ隶セ隶?Prompt邂。逅<EFBDA1>錘蜿ー隶セ隶。.md)
|
||||
- [Prompt管理系统与灰度预览设计方案](../02-技术设计/02-通用能力层_03-Prompt管理系统与灰度预览设计方案.md)
|
||||
- [Prompt管理系统快速参考](../02-技术设计/03-Prompt管理系统快速参考.md)
|
||||
- [Prompt管理后台设计](../02-技术设计/Prompt管理后台设计.md)
|
||||
|
||||
### B. 代码位置
|
||||
|
||||
@@ -552,17 +706,21 @@ async get(code: string, variables: any, userId: string): Promise<string> {
|
||||
|
||||
### C. 命名规范
|
||||
|
||||
**Prompt Code 蜻ス蜷崎ァ<EFBFBD><EFBFBD><EFBFBD>?*
|
||||
**Prompt Code 命名规则:**
|
||||
|
||||
```
|
||||
{MODULE}_{FUNCTION}_{ROLE}
|
||||
|
||||
遉コ萓具シ?- RVW_EDITORIAL # RVW讓。蝮<EFBDA1>-遞ソ郤ヲ隗<EFBDA6>激諤ァ隸<EFBDA7>シ?- RVW_METHODOLOGY # RVW讓。蝮<EFBDA1>-譁ケ豕募ュヲ隸<EFBDA6>シ?- ASL_SCREENING_STANDARD # ASL讓。蝮<EFBDA1>-譬<>㊥遲幃?- AIA_AGENT_STATISTICIAN # AIA讓。蝮<EFBDA1>-扈溯ョ。蟶域匱閭ス菴<EFBDBD>
|
||||
示例:
|
||||
- RVW_EDITORIAL # RVW模块-稿约规范性评估
|
||||
- RVW_METHODOLOGY # RVW模块-方法学评估
|
||||
- ASL_SCREENING_STANDARD # ASL模块-标准筛选
|
||||
- AIA_AGENT_STATISTICIAN # AIA模块-统计师智能体
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新:2026-01-11*
|
||||
|
||||
**<EFBFBD>噫 蜃<>、<EFBFBD>・ス蠑蟋倶コ<E580B6>雛<EFBFBD>滉サ?Phase 3.5.1 隨ャ荳荳ェ莉サ蜉。蠑蟋具シ<E585B7>**
|
||||
**🚀 准备好开始了吗?从 Phase 3.5.1 第一个任务开始!**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user