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,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
- ✅ 前端统一使用 apiClientaxios + 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: 管理APIDay 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 第一个任务开始!**