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
This commit is contained in:
Developer
2026-04-23 17:19:11 +08:00
commit 0a9588abb7
492 changed files with 112453 additions and 0 deletions
@@ -0,0 +1,405 @@
# L1 人才育成测评系统设计文档
## 文档信息
- **版本**: 1.1
- **日期**: 2026-04-18
- **状态**: 评审通过
- **关联**: AI 人才育成计划
---
## 1. 业务背景
### 1.1 目标
针对讯和 AI 人才育成计划的 L1 级别(认知与起步),建立系统化的在线评估认证体系。
### 1.2 L1 级别定义
- **目标**: 建立安全使用习惯,理解基本概念
- **面向**: 全员
- **内容**: AI基础概念、安全合规、Prompt入门、IDE基本操作
- **认证**: 在线考试 ≥90分
---
## 2. 评估范围
### 2.1 五门课程
| 序号 | 课程名称 | 对应维度 | 知识组 |
|------|----------|----------|--------|
| 1 | 工作能力-安全 | 工作能力 | AI基础概念 + 安全合规 |
| 2 | 技术能力-LLM | 技术能力 | 大语言模型原理 |
| 3 | 技术能力-提示词 | 技术能力 | 提示词工程 |
| 4 | IDE协作能力 | IDE协作 | IDE操作、代码辅助 |
| 5 | AI开发范式 | AI开发范式 | Flow-State理解 |
### 2.2 知识组说明
知识组存储在 KnowledgeGroup 中,每个组包含:
- 课程名称
- 相关学习资料(文档、PDF等)
- 评估要点说明
---
## 3. 评估流程设计
### 3.1 基本流程
```
发起评估 → 知识组检索 → 生成问题 → 用户回答 → 即时评分/追问 → 全部完成 → 生成报告 → 发放证书
```
### 3.2 评估步骤
1. **发起评估**: 用户选择 L1 认证评估,系统自动关联五个知识组
2. **问题生成**: 基于五个知识组内容生成 8-10 道理解性问题
3. **答题交互**: 用户逐题回答,AI 判断理解深度,如不足则追问确认
4. **即时反馈**: 每题回答后即时反馈分数和简短评语
5. **最终报告**: 全部完成后生成综合报告
6. **证书发放**: 通过者发放电子证书
### 3.3 追问策略
- 每题最多追问 1-2 次以确认理解深度
- 根据回答情况动态调整追问深度
- 超过追问次数后强制进入下一题
---
## 4. 评分设计
### 4.1 权重配置
| 维度 | 权重 | 分值 |
|------|------|------|
| 技术能力-提示词 | 50% | 50分 |
| 其他四门 | 50% | 50分 |
### 4.2 理解深度层级
| 分数 | 层级 | 说明 |
|------|------|------|
| 1-3 | 基础 | 知道概念,无法应用 |
| 4-6 | 理解 | 理解含义,可简单应用 |
| 7-8 | 应用 | 理解本质,能解释原因 |
| 9-10 | 创新 | 能迁移到新场景 |
### 4.3 维度计分规则
- **题目维度归属**:生成问题时确定维度归属(从哪个知识组出题就属于哪个维度)
- **dimensionScores 生成**:每道题记录所属维度,积分时按维度汇总
### 4.4 权重计算
| 维度 | 权重 | 分值 | 说明 |
|------|------|------|------|
| 技术能力-提示词 | 50% | 50分 | 4-5道题 |
| 其他四门 | 50% | 50分 | 4-5道题,平均分配 |
- **计算公式**
- 各维度得分 = 该维度所有题目平均分(0-10)
- 其他四门平均分 = (LLM + IDE + 开发范式 + 工作能力) / 4
- 总分 = 提示词平均分 × 0.5 + 其他四门平均分 × 0.5
- 最终分数 = 总分 × 10(转换为100分制)
- **示例**
- 提示词4题得分:10, 8, 9, 7 → 平均8.5
- 其他四门各1题得分:9, 7, 8, 6 → 平均7.5
- 总分 = 8.5×0.5 + 7.5×0.5 = 8.0
- 最终分数 = 8.0×10 = 80分 → 未通过(需≥90)
### 4.5 通过标准
- 总分 ≥ 90 分即可通过
- 各维度分别计分,支持薄弱环节识别
### 4.6 题目数量
- 总计 8-10 道题
- 提示词相关 4-5 道(50分)
- 其他四门 4-5 道(50分)
---
## 5. 模板设计
### 5.1 评估模板字段
| 字段 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| name | string | 模板名称 | L1-AI人才育成认证 |
| description | string | 描述 | L1级别能力认证评估 |
| linkedGroups | string[] | 关联知识组ID列表 | [] |
| weightConfig | JSON | 权重配置 | {"prompt":50,"other":50} |
| difficultyConfig | JSON | 难度配置 | {"standard":60,"advanced":30,"specialist":10} |
| questionCount | number | 题目数量 | 8-10 |
| questionCountMin | number | 最小题数 | 8 |
| questionCountMax | number | 最大题数 | 10 |
| passingScore | number | 通过分数 | 90 |
| style | string | 评估风格 | conversation |
| isActive | boolean | 是否启用 | true |
### 5.2 模板配置(扩展现有 AssessmentTemplate
```typescript
// 新增字段
@Column({ type: 'simple-json', name: 'linked_group_ids', nullable: true })
linkedGroupIds: string[]; // 支持多知识组
@Column({ type: 'simple-json', name: 'weight_config', nullable: true })
weightConfig: {
prompt: number; // 提示词权重 默认50
other: number; // 其他维度权重 默认50
};
@Column({ type: 'simple-json', name: 'difficulty_config', nullable: true })
difficultyConfig: {
standard: number; // 基础题比例 默认60
advanced: number; // 理解题比例 默认30
specialist: number; // 创新题比例 默认10
};
@Column({ type: 'int', name: 'question_count_min', default: 8 })
questionCountMin: number;
@Column({ type: 'int', name: 'question_count_max', default: 10 })
questionCountMax: number;
@Column({ type: 'int', name: 'passing_score', default: 90 })
passingScore: number;
```
---
## 6. 角色权限设计
### 6.1 角色说明
基于现有角色体系扩展,管理员角色(admin/super_admin)具备模板和题目调整权限。
| 角色 | 说明 |
|------|------|
| user | 普通员工/学员 |
| admin | 管理员(含题目/模板调整权限) |
| super_admin | 超级管理员(含全部权限) |
| instructor | 讲师(可选,复查功能) |
### 6.2 权限矩阵
| 功能 | 学员 | 管理员 | 超级管理员 | 讲师 |
|------|------|--------|------------|-----------|------|
| 发起评估 | ✓ | ✓ | ✓ | - |
| 查看个人报告 | ✓ | ✓ | ✓ | - |
| 查看全部报告 | - | ✓ | ✓ | ✓ |
| 创建/编辑模板 | - | ✓ | ✓ | - |
| 调整题目配置 | - | ✓ | ✓ | - |
| 配置知识组 | - | ✓ | ✓ | - |
| 导出统计数据 | - | ✓ | ✓ | - |
| 人工复查 | - | - | ✓ | ✓ |
| 手动调整分数 | - | - | ✓ | ✓ |
| 系统配置 | - | - | ✓ | - |
| 用户管理 | - | - | ✓ | - |
---
## 7. 评估结果设计
### 7.1 报告结构
```json
{
"sessionId": "uuid",
"userId": "uuid",
"templateId": "uuid",
"status": "COMPLETED",
"totalScore": 95,
"passed": true,
"dimensionScores": {
"prompt": 48,
"llm": 18,
"ide": 14,
"devPattern": 10,
"workCapability": 5
},
"radarData": {
"prompt": 9.6,
"llm": 9.0,
"ide": 7.0,
"devPattern": 5.0,
"workCapability": 5.0
},
"level": "Proficient",
"questions": [
{
"id": "uuid",
"dimension": "prompt",
"questionText": "...",
"score": 9,
"followUpCount": 1,
"feedback": "..."
}
],
"report": "总体评价...",
"suggestions": ["改进建议1", "改进建议2"],
"certifiedAt": "2026-04-18T10:00:00Z"
}
```
### 7.2 雷达图数据
五维度得分(归一化到 0-10:
1. 提示词工程 (prompt) - 出题自提示词知识组
2. LLM原理 (llm) - 出题自LLM知识组
3. IDE协作 (ide) - 出题自IDE知识组
4. AI开发范式 (devPattern) - 出题自开发范式知识组
5. 工作能力 (workCapability) - 出题自工作能力知识组
**维度归属规则**:生成问题时从哪个知识组检索内容,该题就属于哪个维度。
### 7.3 证书设计
| 字段 | 说明 |
|------|------|
| certificateId | 证书唯一ID |
| userId | 持有者ID |
| templateId | 评估模板ID |
| level | 通过级别 |
| totalScore | 总分 |
| issuedAt | 发放时间 |
| expiresAt | 有效期(null=永久) |
| qrCode | 防伪二维码 |
---
## 8. 功能设计
### 8.1 用户功能
| 功能 | 说明 |
|------|------|
| 发起评估 | 选择模板,开始评估流程 |
| 继续评估 | 断点续答 |
| 查看历史 | 查看历次评估记录和报告 |
| 下载证书 | 下载电子证书PDF |
| 重考 | 通过后重新考试 |
### 8.2 管理员功能
| 功能 | 说明 |
|------|------|
| 模板管理 | 创建/编辑/启用禁用模板 |
| 知识组配置 | 关联评估模板与知识组 |
| 评估记录 | 查看所有用户评估记录 |
| 统计分析 | 查看通过率、各维度得分分布 |
| 导出报表 | 导出CSV/Excel |
### 8.3 讲师功能(可选)
| 功能 | 说明 |
|------|------|
| 人工复查 | 查看并复查评估结果 |
| 手动评分 | 调整AI评分 |
| 添加评语 | 添加人工评语 |
---
## 9. 技术设计
### 9.1 现有架构复用
基于 AuraK 现有评估系统扩展:
```
AssessmentTemplate (扩展)
AssessmentSession (扩展)
LangGraph: generator → interviewer → grader → analyzer
```
### 9.2 新增数据库表
```sql
-- 证书表
CREATE TABLE assessment_certificates (
id UUID PRIMARY KEY,
user_id UUID NOT NULL,
session_id UUID NOT NULL,
template_id UUID NOT NULL,
level VARCHAR(50),
total_score FLOAT,
qr_code VARCHAR(255),
issued_at TIMESTAMP,
created_at TIMESTAMP
);
```
### 9.3 新增 API 接口
| 接口 | 方法 | 说明 | 权限 |
|------|------|------|------|
| /templates | GET | 模板列表 | 公开 |
| /templates | POST | 创建模板 | 管理员 |
| /templates/:id | PUT | 更新模板 | 管理员 |
| /templates/:id (软删除) | DELETE | 禁用模板 | 管理员 |
| /certificates/:sessionId | GET | 获取证书 | 所有者 |
| /certificates/:sessionId/download | GET | 下载证书PDF | 所有者 |
| /certificates/verify | POST | 二维码验真 | 公开 |
| /admin/statistics | GET | 统计报表 | 管理员 |
### 9.4 前端页面
| 页面 | 说明 |
|------|------|
| /assessment/templates | 模板管理 |
| /assessment/history | 评估历史 |
| /assessment/report/:id | 评估报告详情 |
| /assessment/certificate/:id | 证书查看/下载 |
| /admin/statistics | 管理统计 |
---
## 10. 实施计划
### 10.1 优先级
| 优先级 | 模块 | 说明 |
|--------|------|------|
| P0 | 模板扩展 | 支持多知识组、权重配置 |
| P0 | 评估流程 | 适配L1五课程流程 |
| P0 | 评分逻辑 | 调整追问策略、加权计分 |
| P1 | 报告生成 | 结构化报告、雷达图数据 |
| P1 | 证书功能 | 证书生成、下载 |
| P2 | 统计分析 | 管理后台统计 |
| P2 | 人工复查 | 讲师功能 |
### 10.2 里程碑
1. **M1**: 模板扩展 + 基本评估流程(1周)
2. **M2**: 报告生成 + 证书功能(1周)
3. **M3**: 管理后台 + 统计分析(1周)
4. **M4**: 测试优化 + 上线(1周)
---
## 11. 附录
### 11.1 参考文档
- AI人才育成计划.md
- 提示词工程.md
- 大语言模型入门.md
- AI安全使用指南.md
- Open Code使用指南.md
- GitHub Copilot使用指南.md
- Claude Code使用指南.md
- L1-开发范式是什么.md
### 11.2 现有代码参考
- `server/src/assessment/` - 评估模块
- `web/components/views/AssessmentView.tsx` - 前端评估界面