forked from hangshuo652/aurak
9330256e13
新增第10章「实施修正记录」,涵盖9项修正: 1. 出题算法 Math.round→floor+remainder 修正 2. P0答题体验(题序导航/标记回头/提交确认) 3. P1题库增强(tags字段/跨模板复用表) 4. P2配置增强(attemptLimit/scheduled/reviewMode/shuffle) 5. 系统角色权限保护缺陷修复 6. GET /users/:id 端点缺失修复 7. 题库维度/评分标准/题量补充 8. 模板配置修正(20题+非技术模板) 9. 测试覆盖340+项 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
20 KiB
20 KiB
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 数据模型
// 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设计
// 题库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 题目抽取算法
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设计
// 评估管理
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设计
// 成绩统计
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设计
// 证书
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项确认内容 |
| 2026-06-16 | 3.0 | 实施修正 — 详见下方实施修正记录 |
D. 评审确认内容(v2.0)
- 模板新增
dimensionQuota字段配置各维度数量 - 审核改为单题逐审(可批量选择操作)
- 超时不记分(不影响得分)
- 中断超时强制提交
- 统计准实时(缓存5分钟)
- 复查只能调整最终总分
- 同一模板只保留首次通过证书
- 证书仅预览不可下载
- 模板一对一题库
- 复查不影响已发证书(保持不变)
十、实施修正记录(v3.0)
以下内容记录了从 v2.0 设计评审到实际实施过程中的修正与增补。
10.1 题目抽取算法修正
原设计(v2.0 4.2节):
function selectQuestions() {
// 按dimensionQuota配置的比例抽取
// Math.round(...)
}
问题:Math.round 导致合计偏差,如 3题→4题、5题→6题、7题→6题。
修正为(question-bank.service.ts):
function selectQuestions() {
// floor + remainder 分配法,保证总和恒等于 count
// 1. 各维度 target = floor(count × weight / totalWeight)
// 2. remainder = count - sum(targets),按 weight 降序分配
// 3. 各维度池 shuffle 后抽 target 道
// 4. 不足时从剩余池随机补足(保留维度标签日志)
}
// 验证结果:
// 20题 → PROMPT:6 + LLM:6 + IDE:4 + DEV_PATTERN:4 = 20 ✅
// 10题 → PROMPT:3 + LLM:3 + IDE:2 + DEV_PATTERN:2 = 10 ✅
// 5题 → PROMPT:2 + LLM:1 + IDE:1 + DEV_PATTERN:1 = 5 ✅
10.2 P0 — 答题体验优化(新增)
实施过程中新增以下前端功能:
| 功能 | 说明 | 实现位置 |
|---|---|---|
| 题序导航点 | 顶部圆点:当前题蓝色、已标记黄色、其他灰色 | AssessmentView.tsx |
| 标记回头检查 | 🏷️ 按钮标记当前题,导航点变黄,方便回头检查 | AssessmentView.tsx |
| 提交确认弹窗 | 未答完时提交弹出确认对话框,防止误提交 | AssessmentView.tsx |
10.3 P1 — 题库管理增强(设计补充)
原设计:题库与模板为一对一关系。
实施补充:
| 变更 | 说明 | 文件 |
|---|---|---|
tags 字段 |
QuestionBankItem 新增 tags JSON 数组,支持多标签过滤 |
question-bank-item.entity.ts |
| 跨模板复用 | 新增 question_bank_templates 联表,题库可关联多个模板 |
question-bank-template.entity.ts |
10.4 P2 — 考试配置增强(新增)
| 新字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
attemptLimit |
int | 1 | 最大尝试次数,0=不限 |
scheduledStart |
datetime | null | 预约开始时间 |
scheduledEnd |
datetime | null | 预约结束时间 |
reviewMode |
string | 'none' | 回顾模式:none / after_completion |
shuffleQuestions |
boolean | true | 是否每题随机排序 |
实现要点:
startSession()中校验 attemptLimit、scheduledStart/EndgetSessionState()根据 reviewMode 控制答案可见性- 新增
GET /assessment/:id/review回顾端点 selectQuestions()返回后根据 shuffleQuestions 做 Fisher-Yates 洗牌
10.5 系统角色权限保护(缺陷修正)
问题:PermissionService.setRolePermissions() 未检查 isSystem,系统角色权限可通过 API 修改。
修正:增加 if (role.isSystem) throw Error。
10.6 GET /users/:id 端点缺失(缺陷修正)
问题:UserController 缺少 @Get(':id') 端点。
修正:新增 findOne() 方法,受 @Permission('user:view') 保护。
10.7 题库维度与评分标准修正
| 修正 | 说明 |
|---|---|
| 维度标签修复 | 会议记录题从 PROMPT → LLM(AI注意力机制问题) |
| 补充评分标准 | 为151道简答题补充 judgment 字段,AI评分有据可依 |
| 新增24题 | 覆盖AI安全使用指南(三大边界)、开发范式(SDD/Flow State/Vibe Coding)、L1评估检查清单 |
10.8 模板配置修正
| 模板 | v2.0设计 | 实际修正 |
|---|---|---|
| AI协作技巧-对话测评 | 4题 | 20题(题数可配,模板编辑页面可调) |
| AI协作-非技术人员测评 | 不存在 | 新增:PROMPT 50% / LLM 30% / WORK_CAPABILITY 20%,10题 |
10.9 测试覆盖(新增)
| 测试套件 | 项数 | 覆盖内容 |
|---|---|---|
test-systematic.mjs |
142 | 全角色全维度系统测试 |
test-full-coverage.mjs |
52 | 未覆盖路径补全回归 |
test-assessment-smoke.mjs |
29 | 快速烟雾测试 |
test-e2e-assessment-full-flow.mjs |
29 | 端到端全流程(登录→模板→题库→考核→评分→证书) |
test-p2-advanced.mjs |
20 | P2高级功能专项 |
test-concurrent-assessments.mjs |
— | 20人并发考核 |
tests/full-assessment.e2e.spec.ts |
18 | Playwright三Agent框架测试 |
| 3个旧测试脚本 | 94+42+— | 用户生命周期、权限验证、多轮对话 |
总测试项: ~340+ 项
总通过率: ~99%
文档状态: ✅ 已实施(v3.0) 维护部门: AI推进部 最近更新: 2026-06-16