forked from hangshuo652/aurak
0a9588abb7
- 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
522 lines
15 KiB
Markdown
522 lines
15 KiB
Markdown
# 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. 复查不影响已发证书(保持不变)
|
||
|
||
---
|
||
|
||
**文档状态**: ✅ 最终版(评审通过)
|
||
**下一步**: 进入实施阶段 |