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
14 KiB
14 KiB
AuraK 人才测评体系完整实施计划
文档状态: 待评审 创建日期: 2026-04-23 版本: 1.0
一、系统概述
1.1 目标
构建一个完整的AI人才测评体系,实现"选→育→评→用"闭环。聚焦在评(认证)阶段,形成包含题库管理、评估执行、成绩管理、证书管理的完整系统。
1.2 核心流程
人才输入 → 评估执行 → 结果输出 → 应用决策
↑___________↓
持续反馈
1.3 评估发起模式
| 场景 | 发起方式 |
|---|---|
| 新人入职认证 | 管理员发起(强制) |
| 认证后自评 | 学员可自评 |
二、组织架构与权限设计
2.1 组织结构
公司
├── 本部A
│ ├── 开发部
│ └── 其他部门
└── 本部B
├── 开发部
└── 其他部门
2.2 角色权限矩阵
| 角色 | 查看自己 | 查看本部门 | 查看全公司 | 题库管理 | 发起评估 | 复查 |
|---|---|---|---|---|---|---|
| 学员 | ✅ | ❌ | ❌ | ❌ | 自评 | ❌ |
| 开发部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 本部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 公司高管 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| 管理员 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 讲师 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
2.3 权限规则
- 学员只能看自己的历史成绩
- 各级管理者可查看下属员工成绩
- 管理员可查看全部数据、管理题库
- 讲师仅用于复查调整分数
三、模块A:题库管理
3.1 功能清单
| 功能 | 说明 | 优先级 |
|---|---|---|
| 创建题库 | 关联知识库,设定题目范围 | P0 |
| 单题管理 | 增删改查,支持简答/选择/判断 | P0 |
| AI批量生成 | 按模板维度配置生成待审题目 | 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 题目与知识库关联
- 方案:题目不单独关联知识库
- 由模板指定知识库范围,范围内题目均可被抽取
- 模板预设各维度的题目数量
3.4 审核流程
草稿(DRAFT)
↓ [提交审核]
待审核(PENDING_REVIEW)
↓ [通过] ↓ [否决]
已发布(PUBLISHED) 草稿(DRAFT)
+ 审核意见
3.5 版本管理
- 简化版:仅记录最近一次修改时间和修改人
3.6 数据模型
// 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;
}
3.7 API设计
// 题库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/: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 |
| 成绩判定 | ≥6分通过 | P0 |
4.2 题目抽取算法
function selectQuestions(bankId, templateConfig) {
// 1. 按模板指定的知识库范围查已发布题目
// 2. 按维度比例随机抽取
// 3. 高频题目优先被抽(不限制重复次数)
// 4. 不足时提示"题库不足"
}
4.3 追问机制
| 方案 | 说明 |
|---|---|
| 预置追问 | 题库中预存追问内容 |
| 实时补充 | 超时则降级跳过 |
| 追问限制 | 最多2次追问 |
4.4 时间控制
| 限制 | 说明 | 默认值 |
|---|---|---|
| 单题限时 | 超时强制下一题 | 300秒 |
| 总时长限制 | 超时强制提交 | 1800秒 |
4.5 评估流程
开始评估
↓
加载模板(数量/维度/时长)
↓
从题库抽取题目(维度均衡)
↓
展示第1题
↓
用户答题
↓
AI评分(按关键点0-10分)
↓
追问?(预置+超时降级)
↓
下一题(循环至最后一题)
↓
生成报告 + 判断通过/未通过(≥6分)
↓
通过 → 发放证书
4.6 API设计
// 评估管理
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.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 API设计
// 成绩统计
GET /api/assessment/stats // 当前用户统计
GET /api/assessment/stats/admin // 管理员统计
Query: startDate, endDate, templateId, groupId
// 复查
PUT /api/assessment/:id/review // 调整分数
六、模块D:证书管理
6.1 功能清单
| 功能 | 说明 | 优先级 |
|---|---|---|
| 证书生成 | 通过即发 | P1 |
| 证书下载 | PDF导出 | P1 |
| 证书验真 | 二维码/ID查询 | P1 |
6.2 证书内容
| 字段 | 说明 |
|---|---|
| certificateId | 唯一ID |
| userId | 持证人 |
| templateId | 评估模板 |
| totalScore | 总分 |
| passedAt | 通过时间 |
| qrCode | 防伪二维码 |
6.3 有效期
- 永久有效:一次通过,终身有效
6.4 证书样式
┌────────────────────────────────────────┐
│ [公司LOGO] │
│ │
│ 能力认证证书 │
│ │
│ 兹证明 [学员姓名] 通过 │
│ [评估模板名称] 能力评估 │
│ 总分:[分数] 分 │
│ │
│ 发证日期:[日期] │
│ 证书编号:[ID] │
│ │
│ [二维码] │
│ 验证真伪 │
└────────────────────────────────────────┘
6.5 API设计
// 证书
GET /api/assessment/:id/certificate // 获取证书
GET /api/assessment/:id/certificate/download // 下载PDF
POST /api/assessment/certificate/verify // 验证证书
七、实施计划
7.1 任务分解
| Phase | Task | 内容 | 优先级 |
|---|---|---|---|
| 1 | A1 | 题库实体创建 | P0 |
| 1 | A2 | 题目实体创建 | P0 |
| 1 | A3 | 题库Service/Controller | P0 |
| 1 | A4 | AI批量生成 | P0 |
| 1 | A5 | 审核流程 | P0 |
| 2 | B1 | 题目抽取算法 | P0 |
| 2 | B2 | 评估流程接入题库 | P0 |
| 2 | B3 | 追问预置+降级 | P0 |
| 2 | B4 | 时间控制 | P1 |
| 3 | C1 | 统计API | P1 |
| 3 | C2 | 报表前端 | P1 |
| 3 | C3 | 历史管理 | P1 |
| 3 | C4 | 导出功能 | P1 |
| 4 | D1 | 证书实体 | P1 |
| 4 | D2 | 证书生成 | P1 |
| 4 | D3 | 证书下载/验真 | P1 |
| 5 | E1 | 复查功能 | P2 |
7.2 执行顺序
Phase 1 (题库)
↓
Phase 2 (评估)
↓
Phase 3 (成绩)
↓
Phase 4 (证书)
↓
Phase 5 (复查)
7.3 里程碑
| 里程碑 | 内容 | 时间 |
|---|---|---|
| M1 | 题库管理基础功能 | 1周 |
| M2 | 评估流程优化 | 1周 |
| M3 | 成绩报表 | 1周 |
| M4 | 证书功能 | 1周 |
| M5 | 测试优化 | 1周 |
八、待评审问题
8.1 功能确认
| # | 问题 | 选项 |
|---|---|---|
| 1 | 题目抽取是否允许重复? | A.不可重复 B.可重复(推荐) C.限制次数 |
| 2 | 追问方案选择? | A.预置 B.实时 C.预置+降级(推荐) |
| 3 | 单题限时默认值? | 默认300秒 |
| 4 | 总时长限制默认值? | 默认1800秒 |
8.2 待扩展功能
- 多维度得分(当前为二元制)
- 组织架构动态调整
- 定时评估任务
九、验收标准
- 题库支持创建/编辑/审核/发布
- AI批量生成题目进入待审状态
- 评估可从题库维度均衡抽取
- 追问支持预置+降级
- 成绩按组织架构权限隔离
- 统计报表显示通过率/雷达图
- 通过后自动生成证书
- 证书可下载/验真
- 历史记录保留最近3次
十、技术要点
10.1 维度均衡算法
function selectQuestions(bankId, count, dimensionRatio) {
const dimensions = ['prompt', 'llm', 'ide', 'devPattern', 'workCapability'];
const selected = [];
const usedIds = new Set();
// 轮询从各维度选取
let dimIdx = 0;
while (selected.length < count) {
const dim = dimensions[dimIdx % dimensions.length];
const available = allItems.filter(
(i) => i.dimension === dim && !usedIds.has(i.id) && i.status === 'PUBLISHED'
);
if (available.length > 0) {
// 高频题目优先
const random = available.sort((a, b) => b.useCount - a.useCount)[0];
selected.push(random);
usedIds.add(random.id);
}
dimIdx++;
}
return selected;
}
10.2 追问降级策略
function getFollowUp(question, userAnswer, followUpCount) {
// 1. 检查预置追问
if (question.predefinedFollowUps && followUpCount < question.predefinedFollowUps.length) {
return question.predefinedFollowUps[followUpCount];
}
// 2. 降级:跳过追问
return null; // 进入下一题
}
附录
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- 前端评估界面
文档状态: 待评审后定稿 下一步: 评审并确认各模块功能