Files
aurak/docs/plans/2026-04-23-assessment-system-full-plan-v2.md
T
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

522 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AuraK 人才测评体系完整实施计划
> **文档状态**: ✅ 评审通过
> **创建日期**: 2026-04-23
> **版本**: 2.0
> **评审日期**: 2026-04-23
---
## 一、系统概述
### 1.1 目标
构建一个完整的AI人才测评体系,实现"选→育→评→用"闭环。聚焦在**评(认证)阶段**,形成包含题库管理、评估执行、成绩管理、证书管理的完整系统。
### 1.2 核心流程
```
知识库 → 模板配置 → 题库(AI生成+审核) → 评估抽取 → 用户答题 → 评分 → 成绩 → 证书
复查(调整总分)
```
### 1.3 评估发起模式
| 场景 | 发起方式 |
|------|---------|
| 新人入职认证 | 管理员发起(强制) |
| 认证后自评 | 学员可自评 |
---
## 二、组织架构与权限设计
### 2.1 组织结构
```
公司
├── 本部A
│ ├── 开发部
│ └── 其他部门
└── 本部B
├── 开发部
└── 其他部门
```
### 2.2 角色权限矩阵
| 角色 | 查看自己 | 查看本部门 | 查看全公司 | 题库管理 | 发起评估 | 复查 |
|------|---------|-----------|-----------|---------|---------|------|
| 学员 | ✅ | ❌ | ❌ | ❌ | 自评 | ❌ |
| 开发部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 本部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 公司高管 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| 管理员 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 讲师 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
### 2.3 权限规则
- 学员只能看自己的历史成绩
- 各级管理者可查看下属员工成绩
- 管理员可查看全部数据、管理题库
- 讲师仅用于复查调整分数
---
## 三、模块A:题库管理
### 3.1 功能清单
| 功能 | 说明 | 优先级 |
|------|------|--------|
| 创建题库 | 关联知识库,关联模板(一对一),设定题目范围 | P0 |
| 单题管理 | 增删改查,支持简答/选择/判断 | P0 |
| AI批量生成 | 按模板dimensionQuota配置生成待审题目 | P0 |
| 智能标注 | AI自动标注维度、难度 | P1 |
| 单题审核 | 逐题审核(可批量选择操作) | P0 |
| 相似检测 | 检测与已有题目重复度 | P2 |
| 查询统计 | 多条件筛选、维度分布、使用统计 | P1 |
### 3.2 题目属性
| 属性 | 类型 | 说明 |
|------|------|------|
| questionText | string | 题干文字 |
| questionType | enum | SHORT_ANSWER/MULTIPLE_CHOICE/TRUE_FALSE |
| options | string[] | ABCD选项 |
| correctAnswer | string | 正确答案 |
| keyPoints | string[] | 评分要点 |
| difficulty | enum | STANDARD/ADVANCED/SPECIALIST |
| dimension | enum | PROMPT/LLM/IDE/DEV_PATTERN/WORK_CAPABILITY |
| basis | string | 出题依据 |
### 3.3 模板与题库关联
- **方案**:一对一关系(模板→单一题库)
- 题库不单独关联知识库,由模板指定知识库范围
- 模板配置 `dimensionQuota` 字段指定各维度题目数量
### 3.4 审核流程
```
草稿(DRAFT)
↓ [提交审核]
待审核(PENDING_REVIEW)
↓ [单题审核:逐题通过/否决]
├── 通过 → 发布(PUBLISHED)
└── 否决 → 草稿(DRAFT) + 审核意见
```
### 3.5 版本管理
- 简化版:仅记录最近一次修改时间和修改人
### 3.6 数据模型
```typescript
// QuestionBank 实体
{
id: string;
templateId: string; // 关联模板(一对一)
name: string; // 题库名称
description: string; // 描述
status: enum; // DRAFT/PENDING_REVIEW/PUBLISHED
createdBy: string;
reviewedBy: string; // 审核人
reviewedAt: Date; // 审核时间
reviewComment: string; // 审核意见
createdAt: Date;
updatedAt: Date;
}
// QuestionBankItem 实体
{
id: string;
bankId: string; // 关联题库
questionText: string; // 题干
questionType: enum; // 题型
options: string[]; // 选项
correctAnswer: string; // 答案
keyPoints: string[]; // 关键点
difficulty: enum; // 难度
dimension: enum; // 维度
basis: string; // 出题依据
createdBy: string;
createdAt: Date;
status: enum; // PENDING_REVIEW/PUBLISHED
}
```
### 3.7 API设计
```typescript
// 题库CRUD
POST /api/question-banks // 创建题库
GET /api/question-banks // 列表(分页)
GET /api/question-banks/:id // 详情
PUT /api/question-banks/:id // 更新
DELETE /api/question-banks/:id // 删除
// 题目管理
POST /api/question-banks/:bankId/items // 添加题目
PUT /api/question-banks/:bankId/items/:id // 更新题目
DELETE /api/question-banks/:bankId/items/:id // 删除题目
// 批量操作
POST /api/question-banks/:bankId/generate // AI批量生成
POST /api/question-banks/:bankId/batch-add // 批量导入
// 审核流程
PUT /api/question-banks/:id/submit // 提交审核
PUT /api/question-banks/:bankId/items/:id/review // 单题审核
PUT /api/question-banks/:id/publish // 发布
PUT /api/question-banks/:id/unpublish // 下架
// 查询
GET /api/question-banks/by-template/:templateId // 按模板查询
```
---
## 四、模块B:评估执行
### 4.1 功能清单
| 功能 | 说明 | 优先级 |
|------|------|--------|
| 题目抽取 | 按模板/维度均衡/高频优先抽取 | P0 |
| 答题交互 | 展示题目、接收答案、即时反馈 | P0 |
| AI评分 | 按关键点评分,0-10分 | P0 |
| 追问机制 | 预置追问+超时降级 | P0 |
| 时间控制 | 单题限时+总时长限制(超时不记分) | P1 |
| 中断处理 | 超时强制提交 | P0 |
| 成绩判定 | ≥6分通过 | P0 |
### 4.2 题目抽取算法
```typescript
function selectQuestions(bankId, templateConfig) {
// 1. 按模板指定的知识库范围查已发布题目
// 2. 按dimensionQuota配置的比例抽取
// 3. 高频题目优先被抽(不限制重复次数)
// 4. 不足时提示"题库不足"
}
```
### 4.3 追问机制
| 方案 | 说明 |
|------|------|
| 预置追问 | 题库中预存追问内容 |
| 实时补充 | 超时则降级跳过 |
| 追问限制 | 最多2次追问 |
### 4.4 时间控制
| 限制 | 默认值 | 超时处理 |
|------|--------|---------|
| 单题限时 | 300秒 | 超时不记分,自动下一题 |
| 总时长限制 | 1800秒 | 超时强制提交 |
### 4.5 中断处理
- 评估进行中中断,超时强制提交
- 已答题目计入成绩,超时题目不记分
### 4.6 评估流程
```
开始评估
加载模板(数量/dimensionQuota/时长)
从题库抽取题目(维度均衡)
展示第1题
用户答题
AI评分(按关键点0-10分)
追问?(预置+超时降级)
下一题(循环至最后一题)
生成报告 + 判断通过/未通过(≥6分)
通过 → 发放证书(首次通过才发)
```
### 4.7 API设计
```typescript
// 评估管理
POST /api/assessment/start // 发起评估
GET /api/assessment/:id/state // 获取状态
POST /api/assessment/:id/answer // 提交答案
// 评估管理(管理员)
GET /api/assessment // 所有评估列表
GET /api/assessment/:id // 评估详情
DELETE /api/assessment/:id // 删除评估
```
---
## 五、模块C:成绩管理
### 5.1 功能清单
| 功能 | 说明 | 优先级 |
|------|------|--------|
| 成绩查看 | 按权限查看成绩 | P0 |
| 统计报表 | 通过率/分数/趋势/雷达图 | P1 |
| 历史管理 | 保留最近3次 | P1 |
| 导出功能 | Excel/PDF/CSV | P1 |
| 复查功能 | 只能调整最终总分 | P2 |
| 统计缓存 | 准实时(缓存5分钟) | P1 |
### 5.2 统计维度
| 维度 | 说明 |
|------|------|
| 通过人数/通过率 | 整体和分组 |
| 平均分/最高分/最低分 | 按组统计 |
| 各维度平均分 | 雷达图数据 |
| 评估次数趋势 | 时序折线图 |
### 5.3 报表页面
```
┌──────────────────────────────────────────┐
│ 成绩统计 [导出] [筛选] │
├──────────────────────────────────────────┤
│ 总人数 │ 通过率 │ 平均分 │ 待审核 │
│ 156 │ 82% │ 7.5 │ 3 │
├──────────────────────────────────────────┤
│ 雷达图(各维度平均分) │
│ prompt ████████ 8.2 │
│ llm ███████░░ 7.6 │
│ ide ██████░░░ 6.8 │
│ devPattern █████░░░░ 6.2 │
│ workCap ██████░░░░ 6.5 │
├──────────────────────────────────────────┤
│ 成绩列表(按组织筛选) │
│ 姓名 │ 部门 │ 分数 │ 状态 │ 时间 │ 操作 │
│ [查看] │ [复查] │
└──────────────────────────────────────────┘
```
### 5.4 复查规则
- 讲师只能调整最终总分
- 复查记录可追溯
- **复查不影响已发证书**(保持不变)
### 5.5 API设计
```typescript
// 成绩统计
GET /api/assessment/stats // 当前用户统计
GET /api/assessment/stats/admin // 管理员统计
Query: startDate, endDate, templateId, groupId
// 复查(只调整总分)
PUT /api/assessment/:id/review // 调整总分
```
---
## 六、模块D:证书管理
### 6.1 功能清单
| 功能 | 说明 | 优先级 |
|------|------|--------|
| 证书生成 | 通过即发(首次通过才发) | P1 |
| 证书预览 | 仅预览,不可下载 | P1 |
| 证书验真 | 二维码/ID查询 | P1 |
### 6.2 证书内容
| 字段 | 说明 |
|------|------|
| certificateId | 唯一ID |
| userId | 持证人 |
| templateId | 评估模板 |
| totalScore | 总分 |
| passedAt | 通过时间 |
| qrCode | 防伪二维码 |
### 6.3 证书唯一性规则
- **同一模板只保留第一次通过的证书**
- 后续通过同一评估不生成新证书
- 复查后分数变化不影响已发证书
### 6.4 有效期
- **永久有效**:一次通过,终身有效
### 6.5 证书展示
- 仅提供预览功能,不提供下载
- 可通过二维码或证书ID验证真伪
### 6.6 证书样式
```
┌────────────────────────────────────────┐
│ [公司LOGO] │
│ │
│ 能力认证证书 │
│ │
│ 兹证明 [学员姓名] 通过 │
│ [评估模板名称] 能力评估 │
│ 总分:[分数] 分 │
│ │
│ 发证日期:[日期] │
│ 证书编号:[ID] │
│ │
│ [二维码] │
│ 验证真伪 │
└────────────────────────────────────────┘
```
### 6.7 API设计
```typescript
// 证书
GET /api/assessment/:id/certificate // 获取证书(预览)
POST /api/assessment/certificate/verify // 验证证书
```
---
## 七、实施计划
### 7.1 任务分解
| Phase | Task | 内容 | 优先级 |
|-------|------|------|--------|
| 1 | A1 | 题库实体创建(关联模板一对一) | P0 |
| 1 | A2 | 题目实体创建 | P0 |
| 1 | A3 | 题库Service/Controller | P0 |
| 1 | A4 | AI批量生成(按dimensionQuota配置) | P0 |
| 1 | A5 | 单题审核流程 | P0 |
| 2 | B1 | 题目抽取算法(维度均衡/高频优先) | P0 |
| 2 | B2 | 评估流程接入题库 | P0 |
| 2 | B3 | 追问预置+降级 | P0 |
| 2 | B4 | 时间控制(超时不记分) | P1 |
| 2 | B5 | 中断超时强制提交 | P0 |
| 3 | C1 | 统计API(缓存5分钟) | P1 |
| 3 | C2 | 报表前端 | P1 |
| 3 | C3 | 历史管理(保留3次) | P1 |
| 3 | C4 | 导出功能 | P1 |
| 3 | C5 | 复查功能(只调总分) | P2 |
| 4 | D1 | 证书实体 | P1 |
| 4 | D2 | 证书生成(首次通过才发) | P1 |
| 4 | D3 | 证书预览 | P1 |
| 4 | D4 | 证书验真 | P1 |
### 7.2 执行顺序
```
Phase 1 (题库)
Phase 2 (评估)
Phase 3 (成绩)
Phase 4 (证书)
```
### 7.3 里程碑
| 里程碑 | 内容 | 时间 |
|--------|------|------|
| M1 | 题库管理基础功能 | 1周 |
| M2 | 评估流程优化 | 1周 |
| M3 | 成绩报表 | 1周 |
| M4 | 证书功能 | 1周 |
| M5 | 测试优化 | 1周 |
---
## 八、验收标准
- [ ] 题库支持创建/关联模板(一对一)/辑/单题审核/发布
- [ ] AI批量生成题目按dimensionQuota配置
- [ ] 评估可从题库维度均衡抽取
- [ ] 追问支持预置+降级
- [ ] 超时不记分,中断超时强制提交
- [ ] 成绩按组织架构权限隔离
- [ ] 统计准实时(缓存5分钟)
- [ ] 历史记录保留最近3次
- [ ] 复查只能调整总分,不影响已发证书
- [ ] 通过后生成证书(首次通过才发)
- [ ] 证书仅预览不可下载
- [ ] 证书可验真(二维码/ID
---
## 九、闭环确认
### 数据流闭环
```
知识库 → 模板 → 题库(AI生成+单题审核)→ 评估抽取 → 用户答题 → 评分 → 成绩 → 证书
复查(调总分)
```
### 关键闭环点
| 检查点 | 确认 |
|--------|------|
| 知识库→题库 | ✅ AI生成题目关联知识库 |
| 题库→评估 | ✅ 按模板(一对一)抽取已发布题目 |
| 评估→成绩 | ✅ 答题后记录成绩 |
| 成绩→证书 | ✅ 首次通过后生成证书 |
| 复查→成绩 | ✅ 讲师可调整总分 |
| 复查→证书 | ✅ 不影响已发证书 |
---
## 附录
### A. 相关文档
- `docs/plans/2026-04-18-l1-talent-assessment-design.md` - L1设计
- `docs/plans/2026-04-20-assessment-system-complete-plan.md` - 旧版计划
### B. 现有代码参考
- `server/src/assessment/` - 评估模块
- `web/components/views/AssessmentView.tsx` - 前端评估界面
### C. 评审记录
| 日期 | 版本 | 变更内容 |
|------|------|----------|
| 2026-04-23 | 1.0 | 初稿 |
| 2026-04-23 | 2.0 | 评审通过,更新10项确认内容 |
### D. 评审确认内容(v2.0
1. 模板新增 `dimensionQuota` 字段配置各维度数量
2. 审核改为单题逐审(可批量选择操作)
3. 超时不记分(不影响得分)
4. 中断超时强制提交
5. 统计准实时(缓存5分钟)
6. 复查只能调整最终总分
7. 同一模板只保留首次通过证书
8. 证书仅预览不可下载
9. 模板一对一题库
10. 复查不影响已发证书(保持不变)
---
**文档状态**: ✅ 最终版(评审通过)
**下一步**: 进入实施阶段