feat: add four new student modules (rotation, skill-video, exam-prep, academic) with backend APIs and frontend pages; add exam-prep question history with DB persistence
This commit is contained in:
@@ -0,0 +1 @@
|
||||
{"specId": "43719c76-463f-48fd-8ae8-911390815c6a", "workflowType": "requirements-first", "specType": "feature"}
|
||||
@@ -0,0 +1,641 @@
|
||||
# Design Document
|
||||
|
||||
## Overview
|
||||
|
||||
医科类高校 AI 学习中心系统是一个以"能力"为核心的 Web 平台,面向学生、导师与管理员三类角色,贯穿基础医学、临床医学、见习实习、住院医师培养全成长链。本设计文档描述系统的架构、组件、数据模型、错误处理与测试策略,对应需求文档中的 17 条需求。
|
||||
|
||||
系统的两大架构支柱是:
|
||||
|
||||
1. **能力图谱(Competency Graph)** —— 全系统共享的数据底座。所有模块产生的可计入能力的数据(学习成果、对练成绩、技能使用、协同评估)都映射到统一的能力标签上,使学生画像、职业规划等能在统一数据上聚合,避免模块孤岛。
|
||||
2. **技能能力中心(Skill Center)** —— 统一的 AI 能力技术底座。课程对练、研究资料查询等模块本质上是技能(Skill)的具体应用,它们复用同一套技能框架(输入规格、AI 处理逻辑、知识源绑定、输出格式、可信度标注规则)。
|
||||
|
||||
此外,**AI 可信与可解释**与**数据安全与合规**作为两个横切关注点贯穿所有模块:任何 AI 输出都附带可信度标注与可追溯来源,任何受保护资源访问都经过合规模块的权限判定与审计。
|
||||
|
||||
### 技术栈假设
|
||||
|
||||
需求未指定技术栈,本设计采用以下技术栈作为假设(可在实现阶段调整):
|
||||
|
||||
- **前端**:React + TypeScript(学生端、导师端、管理端三套界面共用组件库)
|
||||
- **后端**:Node.js + TypeScript(NestJS 框架,模块化、依赖注入契合本系统的模块划分)
|
||||
- **数据库**:PostgreSQL(关系型主存储,含 JSONB 字段存储画像维度、技能定义等半结构化数据)
|
||||
- **图/标签存储**:能力图谱的标签体系与映射关系存于 PostgreSQL(可演进至专用图数据库)
|
||||
- **缓存**:Redis(画像聚合结果、能力概览等读多写少数据的缓存)
|
||||
- **AI 集成**:通过统一的 AI 网关(AI Gateway)封装大模型调用,所有调用强制经过可信度标注与来源绑定
|
||||
- **对象存储**:S3 兼容存储(学习成果附件)
|
||||
- **检索集成**:通过资料来源适配器(Reference Source Adapter)对接 PubMed/CNKI/万方/UpToDate/Cochrane 等外部数据库 API
|
||||
|
||||
### 设计原则
|
||||
|
||||
- **可信优先**:医学场景下 AI 幻觉风险高,所有 AI 输出绑定权威来源、附带可信度标注;无法溯源的输出一律标注为"未经核验"。
|
||||
- **合规默认**:敏感数据默认脱敏,画像跨用途使用必须有有效授权,所有敏感操作留审计日志。
|
||||
- **能力贯通**:所有模块通过能力标签写入能力图谱,形成统一数据底座。
|
||||
- **技能复用**:可复用 AI 能力统一抽象为技能,降低新增能力的成本。
|
||||
|
||||
## Architecture
|
||||
|
||||
### 系统分层架构
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph Client["客户端层"]
|
||||
StudentUI["学生端"]
|
||||
MentorUI["导师端"]
|
||||
AdminUI["管理端"]
|
||||
end
|
||||
|
||||
subgraph Gateway["接入层"]
|
||||
APIGW["API 网关 / 认证鉴权"]
|
||||
end
|
||||
|
||||
subgraph CrossCutting["横切关注点"]
|
||||
Compliance["合规模块<br/>Compliance_Module<br/>(权限/脱敏/授权/审计)"]
|
||||
AITrust["AI 可信层<br/>(可信度标注/来源溯源)"]
|
||||
end
|
||||
|
||||
subgraph Modules["业务模块层"]
|
||||
LS["个人学习空间<br/>Learning_Space"]
|
||||
AEE["AI 评估引擎<br/>AI_Evaluation_Engine"]
|
||||
PE["课程对练引擎<br/>Practice_Engine"]
|
||||
CDP["临床情景对话对练<br/>Clinical_Dialogue_Practice"]
|
||||
PF["学生画像引擎<br/>Profile_Engine"]
|
||||
CM["职业规划模块<br/>Career_Module"]
|
||||
ACM["AI 协同能力培养<br/>AI_Collaboration_Module"]
|
||||
end
|
||||
|
||||
subgraph Foundation["底座层"]
|
||||
SC["技能能力中心<br/>Skill_Center"]
|
||||
CG["能力图谱<br/>Competency_Graph"]
|
||||
end
|
||||
|
||||
subgraph External["外部与基础设施"]
|
||||
AIGW["AI 网关 (大模型)"]
|
||||
AuthSrc["权威知识源"]
|
||||
RefSrc["资料来源 (PubMed/CNKI/...)"]
|
||||
DB[("PostgreSQL")]
|
||||
Cache[("Redis")]
|
||||
OSS[("对象存储")]
|
||||
end
|
||||
|
||||
Client --> APIGW
|
||||
APIGW --> Compliance
|
||||
Compliance --> Modules
|
||||
Modules --> SC
|
||||
Modules --> CG
|
||||
SC --> AIGW
|
||||
AEE --> AIGW
|
||||
CDP --> AIGW
|
||||
SC --> AuthSrc
|
||||
SC --> RefSrc
|
||||
PE --> AuthSrc
|
||||
Modules --> AITrust
|
||||
AITrust --> AIGW
|
||||
Modules --> DB
|
||||
PF --> Cache
|
||||
CG --> Cache
|
||||
LS --> OSS
|
||||
```
|
||||
|
||||
### 模块依赖关系
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
LS["个人学习空间"] --> CG["能力图谱"]
|
||||
LS --> AEE["AI评估引擎"]
|
||||
PE["课程对练引擎"] --> SC["技能能力中心"]
|
||||
PE --> CG
|
||||
PE --> AEE
|
||||
CDP["临床情景对话对练"] --> SC
|
||||
CDP --> CG
|
||||
RQS["研究资料查询技能"] --> SC
|
||||
RQS --> CG
|
||||
ACM["AI协同能力培养"] --> CG
|
||||
PF["学生画像引擎"] --> CG
|
||||
PF --> LS
|
||||
CM["职业规划模块"] --> CG
|
||||
CM --> PF
|
||||
AEE --> AITrust["AI可信层"]
|
||||
SC --> AITrust
|
||||
PF --> Compliance["合规模块"]
|
||||
CM --> Compliance
|
||||
```
|
||||
|
||||
关键说明:
|
||||
- **能力图谱**是被依赖最多的底座,几乎所有业务模块都向它写入或从它读取能力数据。
|
||||
- **技能能力中心**是课程对练、临床对话对练、研究查询技能的共同底座。
|
||||
- **学生画像引擎**依赖能力图谱(能力数据)与个人学习空间(成果来源)。
|
||||
- **职业规划模块**依赖能力图谱(能力水平对照)与学生画像。
|
||||
|
||||
## Components and Interfaces
|
||||
|
||||
### 1. 个人学习空间(Learning_Space)
|
||||
|
||||
**职责**:汇聚、归档、检索学生的学习成果;触发 AI 评价与能力标签关联。
|
||||
|
||||
**对应需求**:需求 1。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface LearningSpaceService {
|
||||
// 需求1.1, 1.6, 1.9: 新增成果(含元数据与字段校验)
|
||||
addAchievement(studentId: string, input: AchievementInput): Result<Achievement, ValidationError>;
|
||||
// 需求1.5: 分页+筛选查询(按时间倒序,每页≤50)
|
||||
listAchievements(studentId: string, filter: AchievementFilter, page: Pagination): Page<Achievement>;
|
||||
// 需求1.4: 标记里程碑并关联成果
|
||||
markMilestone(studentId: string, milestone: MilestoneInput): Milestone;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 保存成功后(需求 1.3)按学年、学期自动归档;若成果含临床轮转科室信息(需求 1.8)额外按科室归档。
|
||||
- 保存成功后(需求 1.7)调用能力图谱进行能力标签关联;若无法匹配任何已定义标签(需求 1.10),标记为"待关联能力标签"并提示。
|
||||
- 必填元数据缺失(需求 1.6)或标题超 200 字符/时间无效(需求 1.9)时拒绝保存且不创建任何记录(事务回滚)。
|
||||
- 成功保存后异步触发 `AI_Evaluation_Engine` 生成形成性评价(需求 2.1)。
|
||||
|
||||
### 2. AI 评估引擎(AI_Evaluation_Engine)
|
||||
|
||||
**职责**:对学习成果生成形成性评价,对里程碑生成终结性评价,对对练报告生成改进建议。
|
||||
|
||||
**对应需求**:需求 2、需求 4.7-4.8。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface AIEvaluationEngine {
|
||||
// 需求2.1: 形成性评价(30秒内)
|
||||
generateFormativeEvaluation(achievement: Achievement): Result<Evaluation, EvaluationError>;
|
||||
// 需求2.2, 2.7: 终结性评价(节点内须有成果)
|
||||
generateSummativeEvaluation(milestone: Milestone, achievements: Achievement[]): Result<Evaluation, EvaluationError>;
|
||||
// 需求4.7-4.8: 对练薄弱环节改进建议
|
||||
generateImprovementSuggestions(report: PracticeReport): Suggestion[];
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 每条评价附带可信度标注,列出至少一条依据的学习成果或权威知识源(需求 2.3);每条发展建议引用至少一个能力标签(需求 2.4)。
|
||||
- 内容信息不足时中止生成、保留数据不变并提示缺失内容类别(需求 2.5)。
|
||||
- 生成失败或超时时中止、保留数据不变并提示失败(需求 2.6)。
|
||||
- 通过 AI 可信层统一附加可信度标注(需求 16)。
|
||||
|
||||
### 3. 课程对练引擎(Practice_Engine)
|
||||
|
||||
**职责**:基于课程内容生成题目(绑定权威知识源),经导师审核后供学生对练,并生成结果诊断报告。
|
||||
|
||||
**对应需求**:需求 3、需求 4。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface PracticeEngine {
|
||||
// 需求3.1: 生成题目(30秒内,5-50道)
|
||||
generateQuestions(courseId: string, studentId: string): Result<Question[], GenerationError>;
|
||||
// 需求3.5, 3.6: 导师审核流转
|
||||
reviewQuestion(questionId: string, decision: ReviewDecision, reason?: string): Question;
|
||||
// 需求4: 对练会话
|
||||
startPractice(studentId: string, questionSetId: string): PracticeSession;
|
||||
submitAnswer(sessionId: string, questionId: string, answer: Answer): AnswerResult;
|
||||
finishPractice(sessionId: string): PracticeReport;
|
||||
}
|
||||
```
|
||||
|
||||
**题目状态机**:
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 待导师审核: 生成成功
|
||||
[*] --> 已拒绝: 无法绑定权威知识源(3.8)
|
||||
待导师审核 --> 可用于对练: 导师通过(3.6)
|
||||
待导师审核 --> 已退回: 导师退回(3.5)
|
||||
已退回 --> 待导师审核: 修订后重新提交
|
||||
可用于对练 --> [*]
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 每道题目绑定至少一个权威知识源并记录引用标识(需求 3.2);无法绑定时不进入审核并记录原因(需求 3.8)。
|
||||
- 支持 A1/A2/A3/A4、病例分析、临床决策题型(需求 3.3)。
|
||||
- 课程内容不足以生成最少题量时中止并提示(需求 3.7)。
|
||||
- 对练逐题呈现并采集作答(需求 4.1-4.2),单题超 120 秒未作答判错并继续(需求 4.4)。
|
||||
- 报告含正确率、用时、薄弱环节(正确率<60% 的能力标签,需求 4.5),并按能力标签映射能力图谱(需求 4.6)。
|
||||
|
||||
### 4. 临床情景对话对练(Clinical_Dialogue_Practice)
|
||||
|
||||
**职责**:基于权威知识源呈现临床情景,进行多轮模拟问诊对话,生成多维评估报告。
|
||||
|
||||
**对应需求**:需求 5。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface ClinicalDialoguePractice {
|
||||
// 需求5.1, 5.5: 发起对练(10秒内呈现情景,须绑定权威知识源)
|
||||
startDialogue(studentId: string, scenarioId: string): Result<DialogueSession, NoSourceError>;
|
||||
// 需求5.2: 多轮对话(最多50轮)
|
||||
sendTurn(sessionId: string, studentInput: string): DialogueTurn;
|
||||
// 需求5.3, 5.6: 结束并生成报告(30秒内,三维度)
|
||||
finishDialogue(sessionId: string): Result<DialogueReport, ReportError>;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 未绑定权威知识源时阻止启动、不创建对话记录并提示(需求 5.5)。
|
||||
- 报告含问诊完整性、临床推理、医患沟通三个评估方面(需求 5.3),结果映射能力图谱(需求 5.4)。
|
||||
- 报告生成失败或超时时中止、保留对话记录并提示(需求 5.6)。
|
||||
|
||||
### 5. 学生画像引擎(Profile_Engine)
|
||||
|
||||
**职责**:基于学习空间与能力图谱数据生成多维度画像;标记敏感字段,遵循数据最小化。
|
||||
|
||||
**对应需求**:需求 6、需求 7(与合规模块协作)。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface ProfileEngine {
|
||||
// 需求6.1, 6.5: 生成/更新画像(5秒内,数据不足维度标记)
|
||||
generateProfile(studentId: string): Result<StudentProfile, ProfileError>;
|
||||
// 需求6.4: 画像结论可追溯
|
||||
getProfileTraceability(studentId: string, dimensionId: string): TraceabilityRecord[];
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 六个画像维度均以 0-100 量化分值呈现(需求 6.2):知识掌握、临床技能、科研能力、人文素养、AI 协同素养、职业倾向。
|
||||
- 能力图谱更新后 10 秒内完成数据同步(需求 6.3);每项结论可追溯至少一条来源记录(需求 6.4)。
|
||||
- 数据不足以刻画某维度时标记"数据不足"并保留其余维度(需求 6.5)。
|
||||
- 仅采集与至少一个画像维度直接相关的字段(需求 7.7,数据最小化)。
|
||||
|
||||
### 6. 职业规划模块(Career_Module)
|
||||
|
||||
**职责**:设定职业目标、关联岗位胜任力模型、对照能力图谱生成动态闭环发展规划。
|
||||
|
||||
**对应需求**:需求 8、需求 9。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface CareerModule {
|
||||
// 需求8.1, 8.4, 8.5: 设定目标并关联胜任力模型(3秒内)
|
||||
setCareerGoal(studentId: string, goal: CareerGoal): Result<CompetencyModel, GoalError>;
|
||||
// 需求9: 生成/更新发展规划
|
||||
generateDevelopmentPlan(studentId: string, goalId: string): Result<DevelopmentPlan, PlanError>;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 岗位胜任力模型参照权威医学胜任力框架,含科学与学术、临床能力、健康与社会、职业素养四维度(需求 8.2),每维度至少 3 个能力标签(需求 8.3)。
|
||||
- 无匹配模型时提示并推荐至少 3 个相近目标(需求 8.4)。
|
||||
- 逐项对照能力图谱能力水平与要求水平,标记能力差距项(含缺数据项,需求 9.1);每差距项生成≥1 建议行动(需求 9.2)、推荐≥1 学习资源或对练任务(需求 9.3)、引用对应能力标签(需求 9.4)。
|
||||
- 能力图谱更新后再次请求时重算全部差距项(需求 9.5,动态闭环)。
|
||||
- 未选目标/模型不可用时拒绝并提示、保留能力图谱数据(需求 9.6);差距项无对应资源时保留并标注暂无推荐(需求 9.7)。
|
||||
|
||||
### 7. 研究资料查询技能(Research_Query_Skill,建立于 Skill_Center 之上)
|
||||
|
||||
**职责**:自然语言转检索式、检索筛选、总结、证据分级、引用管理。
|
||||
|
||||
**对应需求**:需求 10、需求 11。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface ResearchQuerySkill {
|
||||
// 需求10.1, 10.6: NL→检索式(PICO/MeSH,10秒内,1-2000字符)
|
||||
generateSearchQuery(studentId: string, question: string): Result<SearchQuery, QuestionError>;
|
||||
// 需求10.2, 10.7, 10.8: 检索(30秒内,分页≤50,空结果/源不可用处理)
|
||||
search(query: SearchQuery, sources: ReferenceSource[], page: Pagination): Result<Page<ReferenceItem>, SourceError>;
|
||||
// 需求11.1, 11.6: 生成总结(30秒内,每结论附引用)
|
||||
summarize(items: ReferenceItem[]): Result<Summary, SummaryError>;
|
||||
// 需求11.3, 11.7: 生成/导出引用
|
||||
generateCitation(items: ReferenceItem[], format: CitationFormat): Result<Citation[], CitationError>;
|
||||
exportCitations(citations: Citation[], target: ExportTarget): Result<ExportFile, ExportError>;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 检索结果每条仅含检索信息、摘要、原文链接,不存储或分发受版权保护全文(需求 10.4,版权安全)。
|
||||
- 总结每条结论附≥1 来源引用(需求 11.1);每条资料标注唯一证据分级(需求 11.2)。
|
||||
- 无法溯源的结论标注"未验证"且不作为引用输出(需求 11.4)。
|
||||
- 支持 Vancouver/GB-T 7714 格式,导出 EndNote/NoteExpress(需求 11.3)。
|
||||
- 呈现总结时提示"仅辅助,不替代阅读原文"(需求 11.5)。
|
||||
|
||||
### 8. AI 协同能力培养模块(AI_Collaboration_Module)
|
||||
|
||||
**职责**:提供协同训练任务,评估四维协同能力,写入能力图谱,支持导师点评。
|
||||
|
||||
**对应需求**:需求 12。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface AICollaborationModule {
|
||||
// 需求12.1: 提供协同训练任务(四维度各≥1)
|
||||
listTrainingTasks(dimension?: CollaborationDimension): TrainingTask[];
|
||||
// 需求12.2, 12.6, 12.7: 完成任务并评估(30秒内,0-100,失败/数据不足处理)
|
||||
evaluateTask(studentId: string, taskId: string, submission: TaskSubmission): Result<CollaborationAssessment, AssessmentError>;
|
||||
// 需求12.5: 导师点评
|
||||
addMentorComment(taskId: string, mentorId: string, comment: string): MentorComment;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 四维度:提问能力、批判性验证、责任边界意识、协同工作流(需求 12.2)。
|
||||
- 学生直接采用未核验 AI 输出时提示并要求来源核验,且计入批判性验证维度(需求 12.3)。
|
||||
- 评估结果映射能力图谱并计入画像与胜任力对照(需求 12.4)。
|
||||
|
||||
### 9. 技能能力中心(Skill_Center,底座)
|
||||
|
||||
**职责**:定义、治理、调用可复用 AI 技能;统一技能框架与可信度标注。
|
||||
|
||||
**对应需求**:需求 13。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface SkillCenter {
|
||||
// 需求13.6, 13.7: 配置/启用/审计技能定义
|
||||
upsertSkillDefinition(actor: User, def: SkillDefinition): Result<SkillDefinition, DefinitionError>;
|
||||
enableSkill(actor: User, skillId: string): Skill;
|
||||
// 需求13.3, 13.4, 13.5: 调用技能(30秒内,输入校验,失败处理)
|
||||
invokeSkill(studentId: string, skillId: string, input: SkillInput): Result<SkillOutput, InvocationError>;
|
||||
// 需求13.9: 序列化往返
|
||||
serialize(def: SkillDefinition): string;
|
||||
deserialize(raw: string): SkillDefinition;
|
||||
}
|
||||
```
|
||||
|
||||
**技能定义结构(需求 13.2 五要素)**:
|
||||
```typescript
|
||||
interface SkillDefinition {
|
||||
id: string;
|
||||
name: string;
|
||||
inputSpec: InputSpec; // 输入规格
|
||||
processingLogic: ProcessingLogic; // AI 处理逻辑说明
|
||||
knowledgeSources: SourceBinding[]; // 知识源绑定
|
||||
outputFormat: OutputFormat; // 输出格式
|
||||
credibilityRule: CredibilityRule; // 可信度标注规则
|
||||
enabled: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 技能库至少含 8 个技能:资料查询、检索式生成、文献综述、病例分析、鉴别诊断辅助、医患沟通模拟、医学翻译、引用生成(需求 13.1)。
|
||||
- 调用前校验输入符合 inputSpec,不符则拒绝(需求 13.4);知识源不可用或处理失败时终止、不返回结果与标注、提示失败(需求 13.5)。
|
||||
- 仅成功调用完成才写入能力图谱(需求 13.8)。
|
||||
- **序列化往返一致性**(需求 13.9):`deserialize(serialize(def))` 等价于 `def`,这是核心属性测试点。
|
||||
|
||||
### 10. 能力图谱(Competency_Graph,底座)
|
||||
|
||||
**职责**:维护统一能力标签体系;接收各模块能力数据映射;聚合能力概览。
|
||||
|
||||
**对应需求**:需求 14。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface CompetencyGraph {
|
||||
// 需求14.1: 维护统一标签体系
|
||||
listTags(): CompetencyTag[];
|
||||
// 需求14.2, 14.3: 映射数据(1-10标签,5秒内,未定义标签拒绝)
|
||||
mapData(source: ModuleSource, data: CompetencyData, tagIds: string[]): Result<Mapping, UndefinedTagError>;
|
||||
// 需求14.4, 14.5: 聚合能力概览(5秒内,0-100,数据不足标记)
|
||||
getCompetencyOverview(studentId: string): CompetencyOverview;
|
||||
}
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 每个能力标签有唯一标识与所属能力维度(需求 14.1)。
|
||||
- 映射 1-10 个已定义标签(需求 14.2);引用未定义标签时拒绝、不创建记录、记录原因并提示(需求 14.3)。
|
||||
- 能力概览按维度以 0-100 量化分值返回(需求 14.4);数据不足维度标记"数据不足"并保留其余(需求 14.5)。
|
||||
|
||||
### 11. 合规模块(Compliance_Module,横切)
|
||||
|
||||
**职责**:权限分级、敏感字段脱敏、画像授权校验、审计日志。
|
||||
|
||||
**对应需求**:需求 7、需求 15.4、需求 17。
|
||||
|
||||
**关键接口**:
|
||||
```typescript
|
||||
interface ComplianceModule {
|
||||
// 需求17.1, 17.2, 17.3: 权限判定
|
||||
checkAccess(user: User, resource: ProtectedResource, action: Action): AccessDecision;
|
||||
// 需求7.2, 7.3, 7.4, 7.5: 画像授权与脱敏
|
||||
resolveProfileView(viewer: User, profile: StudentProfile): StudentProfileView;
|
||||
verifyConsent(studentId: string, purpose: Purpose): ConsentVerification;
|
||||
revokeConsent(studentId: string, consentId: string): void;
|
||||
// 需求17.4, 7.6: 审计日志
|
||||
writeAuditLog(entry: AuditLogEntry): void;
|
||||
}
|
||||
```
|
||||
|
||||
**授权与脱敏流程**:
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[访问学生画像] --> B{访问者是学生本人?}
|
||||
B -->|是| C[返回完整画像]
|
||||
B -->|否| D{持有有效知情同意授权?}
|
||||
D -->|否| E[拒绝完整画像访问 7.2<br/>对未授权敏感字段脱敏 7.5]
|
||||
D -->|是, 范围覆盖用途| F[校验授权有效期/范围/用途 7.3]
|
||||
F -->|通过| G[按授权范围返回字段]
|
||||
F -->|不通过| E
|
||||
C --> H[写审计日志 7.6]
|
||||
E --> H
|
||||
G --> H
|
||||
```
|
||||
|
||||
**设计要点**:
|
||||
- 敏感字段:身份标识、联系方式、健康与医疗记录、心理测评结果、生物特征数据(需求 7.1)。
|
||||
- 授权须仍在有效期内且范围与用途覆盖该用途(需求 7.3);不满足时阻止使用、保持数据不被使用并提示(需求 7.4)。
|
||||
- 学生撤销授权后立即失效,此后按未授权处理(需求 7.8)。
|
||||
- 脱敏 2 秒内、仅返回已授权字段(需求 7.5);审计日志 5 秒内记录、保留≥12 个月(需求 7.6)。
|
||||
- 权限范围列出可访问资源类型与允许操作类型(需求 17.1);越权访问拒绝并记录(需求 17.3)。
|
||||
|
||||
### 12. 导师端(Mentor 视图,跨模块)
|
||||
|
||||
**职责**:题目审核、成果点评、查看带教学生画像。
|
||||
|
||||
**对应需求**:需求 15。
|
||||
|
||||
**设计要点**:
|
||||
- 题目审核通过/退回并在退回时记录原因(需求 15.1,复用 Practice_Engine 审核接口)。
|
||||
- 成果点评关联到学习成果并对学生可见(需求 15.2)。
|
||||
- 存在带教关系时允许查看所带学生画像(需求 15.3);查看非所带学生画像时合规模块拒绝并记录越权尝试(需求 15.4)。
|
||||
|
||||
### 13. AI 可信层(横切)
|
||||
|
||||
**职责**:为所有 AI 输出统一附加可信度标注与来源溯源。
|
||||
|
||||
**对应需求**:需求 16。
|
||||
|
||||
**设计要点**:
|
||||
- 任意 AI 评价/建议/总结附带可信度标注(需求 16.1),含≥1 来源与 0%-100% 置信度(需求 16.2)。
|
||||
- 请求查看依据时 3 秒内展示可追溯来源条目及引用标识(需求 16.3)。
|
||||
- 无法溯源的输出标注"未经核验"并在呈现时一并显示(需求 16.4)。
|
||||
|
||||
## Data Models
|
||||
|
||||
### 核心实体关系
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
Student ||--o{ Achievement : owns
|
||||
Student ||--|| StudentProfile : has
|
||||
Student ||--o{ Milestone : reaches
|
||||
Student ||--o{ ConsentRecord : grants
|
||||
Achievement }o--o{ CompetencyTag : "mapped to"
|
||||
Milestone ||--o{ Achievement : groups
|
||||
CompetencyTag }o--|| CompetencyDimension : "belongs to"
|
||||
CompetencyModel ||--o{ CompetencyTag : requires
|
||||
CareerGoal ||--|| CompetencyModel : maps
|
||||
DevelopmentPlan ||--o{ CompetencyGap : contains
|
||||
SkillDefinition ||--o{ SourceBinding : binds
|
||||
Question }o--|| AuthoritativeSource : "bound to"
|
||||
PracticeReport }o--o{ CompetencyTag : "scored on"
|
||||
AuditLogEntry }o--|| Student : about
|
||||
StudentProfile ||--o{ ProfileDimensionScore : contains
|
||||
```
|
||||
|
||||
### 关键数据结构
|
||||
|
||||
```typescript
|
||||
// 学习成果(需求1)
|
||||
interface Achievement {
|
||||
id: string;
|
||||
studentId: string;
|
||||
type: AchievementType; // 需求1.2 枚举
|
||||
title: string; // ≤200字符 (需求1.9)
|
||||
occurredAt: Date; // 有效日期 (需求1.9)
|
||||
academicYear: string; // 归档维度 (需求1.3)
|
||||
semester: string; // 归档维度 (需求1.3)
|
||||
rotationDept?: string; // 临床轮转科室 (需求1.8)
|
||||
attachments: AttachmentRef[];
|
||||
competencyTagIds: string[]; // 关联标签 (需求1.7)
|
||||
pendingTagAssociation: boolean; // 待关联 (需求1.10)
|
||||
}
|
||||
|
||||
// 能力标签与维度(需求14)
|
||||
interface CompetencyTag {
|
||||
id: string; // 唯一标识 (需求14.1)
|
||||
name: string;
|
||||
dimensionId: string; // 所属维度 (需求14.1)
|
||||
}
|
||||
|
||||
// 学生画像(需求6,7)
|
||||
interface StudentProfile {
|
||||
studentId: string;
|
||||
dimensions: ProfileDimensionScore[]; // 六维度,0-100 (需求6.2)
|
||||
generatedAt: Date;
|
||||
}
|
||||
interface ProfileDimensionScore {
|
||||
dimension: ProfileDimension;
|
||||
score: number | 'insufficient_data'; // 数据不足 (需求6.5)
|
||||
traceability: TraceabilityRecord[]; // 可追溯 (需求6.4)
|
||||
sensitive: boolean; // 敏感标记 (需求7.1)
|
||||
}
|
||||
|
||||
// 知情同意授权(需求7)
|
||||
interface ConsentRecord {
|
||||
id: string;
|
||||
studentId: string;
|
||||
scope: string[]; // 授权范围 (需求7.3)
|
||||
purpose: Purpose; // 授权用途 (需求7.3)
|
||||
validFrom: Date;
|
||||
validUntil: Date; // 有效期 (需求7.3)
|
||||
revoked: boolean; // 撤销 (需求7.8)
|
||||
}
|
||||
|
||||
// 可信度标注(需求16)
|
||||
interface CredibilityAnnotation {
|
||||
sources: SourceRef[]; // ≥1 来源 (需求16.2)
|
||||
confidence: number; // 0-100 (需求16.2)
|
||||
verified: boolean; // false => "未经核验" (需求16.4)
|
||||
}
|
||||
|
||||
// 审计日志(需求7.6, 17.4)
|
||||
interface AuditLogEntry {
|
||||
actorId: string; // 操作者
|
||||
timestamp: Date; // 时间
|
||||
action: Action; // 操作类型
|
||||
resourceScope: string; // 数据范围
|
||||
outcome: 'allow' | 'deny';
|
||||
reason?: string; // 拒绝原因 (需求17.3)
|
||||
// 保留≥12个月 (需求7.6)
|
||||
}
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
系统采用统一的 `Result<T, E>` 返回模式,区分正常路径与错误路径,并遵循以下原则:
|
||||
|
||||
| 场景 | 处理策略 | 对应需求 |
|
||||
|------|----------|----------|
|
||||
| 输入校验失败(缺字段/超长/无效日期) | 拒绝操作、不创建记录(事务回滚)、返回指明问题的提示 | 1.6, 1.9, 13.4 |
|
||||
| AI 生成失败或超时 | 中止生成、保留触发数据不变、返回失败提示 | 2.6, 5.6, 11.6, 12.6 |
|
||||
| 内容/数据信息不足 | 标记"数据不足"或"信息不足"、保留其余结果、提示缺失类别 | 2.5, 6.5, 12.7, 14.5 |
|
||||
| 无法绑定权威知识源 | 不进入审核/不启动、记录原因或提示 | 3.8, 5.5 |
|
||||
| 资料来源不可用 | 中止检索、保留检索式、提示来源不可用 | 10.8 |
|
||||
| 检索无匹配 | 返回空结果列表并提示 | 10.7 |
|
||||
| 无法溯源 | 标注"未验证"/"未经核验"、不作为引用输出 | 11.4, 16.4 |
|
||||
| 无有效授权 | 阻止使用、保持数据不被使用、提示缺少授权 | 7.4 |
|
||||
| 越权访问 | 拒绝访问、保持资源不被访问、记录拒绝事件 | 9.6, 15.4, 17.3 |
|
||||
| 系统错误(如目标关联失败) | 返回错误提示、保留已有数据 | 8.5, 9.6 |
|
||||
|
||||
**核心错误处理不变量**:任何错误路径都不得使触发数据进入不一致状态(要么完整成功,要么完整回滚保留原状)。
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### 测试层次
|
||||
|
||||
1. **单元测试**:各模块接口的正常路径与错误路径,覆盖每条验收标准。
|
||||
2. **集成测试**:跨模块流程,重点验证能力图谱作为底座的数据贯通(学习成果→标签→画像→职业规划)。
|
||||
3. **属性测试(Property-Based Testing)**:针对可形式化为不变量的核心正确性属性。
|
||||
4. **合规与安全测试**:权限矩阵、脱敏、授权生命周期、审计完整性。
|
||||
|
||||
测试数据与模拟说明:
|
||||
|
||||
- AI 网关在测试中以可控的 mock 替代,便于模拟生成成功、失败、超时、无法溯源等场景。
|
||||
- 资料来源适配器以 mock 模拟外部数据库的可用、不可用、空结果等状态。
|
||||
- 属性测试使用生成器构造任意有效的技能定义、能力数据、授权记录等输入。
|
||||
|
||||
## Correctness Properties
|
||||
|
||||
以下属性应对任意有效输入成立,作为属性测试(Property-Based Testing)的基础:
|
||||
|
||||
### Property 1: 技能定义序列化往返一致性
|
||||
对任意有效的 `SkillDefinition def`,有 `deserialize(serialize(def))` 等价于 `def`。
|
||||
|
||||
**Validates: Requirements 13.9**
|
||||
|
||||
### Property 2: 能力标签映射有效性
|
||||
对任意提交的能力数据与标签集合,映射成功 ⟺ 所有标签均为已定义标签,且映射后标签数量在 1 到 10 之间;引用未定义标签时必然拒绝且不创建任何映射记录。
|
||||
|
||||
**Validates: Requirements 14.2, 14.3**
|
||||
|
||||
### Property 3: 画像维度分值有界性
|
||||
对任意学生数据生成的画像与能力概览,每个维度的输出要么是 0 到 100 之间的数值,要么是"数据不足"标记,不存在其他取值。
|
||||
|
||||
**Validates: Requirements 6.2, 14.4**
|
||||
|
||||
### Property 4: 授权强制不变量
|
||||
对任意非本人访问者与任意画像使用用途,仅当存在一条有效期内、范围与用途均覆盖的未撤销授权时,才允许完整访问/使用;授权撤销后任何后续访问都按未授权处理。
|
||||
|
||||
**Validates: Requirements 7.2, 7.3, 7.4, 7.8**
|
||||
|
||||
### Property 5: 引用可追溯不变量
|
||||
对任意生成的总结,作为引用输出的每条结论都必然可追溯到至少一条来源条目;无法溯源的结论必然被标注为"未验证/未经核验"且不出现在引用输出中。
|
||||
|
||||
**Validates: Requirements 11.1, 11.4, 16.4**
|
||||
|
||||
### Property 6: 权限判定一致性
|
||||
对任意(用户角色,资源,操作)三元组,访问被允许 ⟺ 该操作在该角色的权限范围内;越权访问必然被拒绝并产生一条拒绝审计记录。
|
||||
|
||||
**Validates: Requirements 17.2, 17.3**
|
||||
|
||||
### Property 7: 错误路径数据保全
|
||||
对任意触发错误路径的操作,操作前后触发数据保持不变(不产生部分写入)。
|
||||
|
||||
**Validates: Requirements 1.6, 1.9, 2.6, 5.6, 8.5**
|
||||
|
||||
### Property 8: 分页边界不变量
|
||||
对任意查询与分页参数,返回的单页结果数量不超过 50 条。
|
||||
|
||||
**Validates: Requirements 1.5, 10.2**
|
||||
|
||||
## Design Decisions and Rationale
|
||||
|
||||
1. **以能力图谱为统一底座**:医学教育成长链长、模块多,若各模块各自存储能力数据会形成孤岛。统一标签体系让画像与职业规划能在一致数据上聚合,也使"对照胜任力模型"有共同语言。代价是所有模块需遵循标签映射契约(需求 14.3 的拒绝机制保障了契约一致性)。
|
||||
|
||||
2. **技能能力中心作为 AI 能力底座**:课程对练、研究查询本质都是"绑定知识源的 AI 调用 + 可信度标注"。抽象为统一技能框架降低新增能力成本,并使可信度标注、知识源绑定、治理审计得以统一实现。序列化往返一致性(需求 13.9)保障技能定义可安全持久化与迁移。
|
||||
|
||||
3. **AI 可信层作为横切关注点**:医学场景幻觉风险高,将"可信度标注 + 来源溯源 + 未经核验标记"统一到一层,避免各模块各自实现导致遗漏,确保需求 16 在全系统一致生效。
|
||||
|
||||
4. **合规默认、授权可生命周期管理**:画像含敏感健康数据,采用"默认脱敏 + 用途化授权 + 撤销即时失效 + 全审计"模型,满足知情同意与数据最小化要求,并通过授权强制不变量(属性 4)可测试地保障。
|
||||
|
||||
5. **统一 Result 错误模型与数据保全不变量**:所有错误路径保证数据不进入部分写入状态(属性 7),契合医学数据对一致性的高要求。
|
||||
@@ -0,0 +1,279 @@
|
||||
# Requirements Document
|
||||
|
||||
## Introduction
|
||||
|
||||
医科类高校 AI 学习中心系统(以下简称"本系统")面向医学院校的学生、导师与管理员,提供一个以"能力"为核心、贯穿基础医学、临床医学、见习实习、住院医师培养全成长链的智能学习平台。系统将学生在校学习内容汇聚到个人学习空间,由 AI 进行过程性与终结性评价并给出发展建议;以"课程对练"与"临床情景对话对练"对学生进行模拟训练与诊断;基于学习数据形成可授权使用的学生画像;支持学生设定职业目标并对照岗位胜任力模型获得动态闭环的发展规划;提供研究资料检索、总结与引用管理等可复用 AI 技能;并系统性培养医学生与 AI 负责任协作的能力。
|
||||
|
||||
系统的关键设计是引入统一的**能力图谱(Competency Graph)**作为各模块共享的数据底座:学习成果、对练成绩、技能使用与协同能力评估均映射到统一的能力标签上,使各模块真正打通而非彼此孤立。**技能能力中心(Skill Center)**作为统一技术底座,课程对练与研究资料查询等本质上是技能的具体应用。鉴于医学内容的高准确性与合规要求,系统将 **AI 可信与可解释**、**数据安全与合规**作为贯穿全局的横切关注点。
|
||||
|
||||
本文档仅描述系统"做什么"(需求),不涉及"怎么做"(实现方案保留至设计阶段)。
|
||||
|
||||
## Glossary
|
||||
|
||||
- **本系统(AI_Learning_Center)**:医科类高校 AI 学习中心系统整体。
|
||||
- **学生(Student)**:使用本系统进行学习、训练与科研的医学院校在校学生。
|
||||
- **导师(Mentor)**:负责审核题目、点评成果、查看所带学生画像与协同质量的教师或临床带教教师。
|
||||
- **管理员(Administrator)**:负责系统配置、技能治理、权限与合规管理的运营人员。
|
||||
- **个人学习空间(Learning_Space)**:汇聚单个学生在校学习内容的功能模块。
|
||||
- **学习成果(Achievement)**:学生在学习空间中新增的一条学习内容记录,包含类型、时间、标题、附件与元数据。
|
||||
- **成果类型(Achievement_Type)**:学习成果的分类,至少包括课程记录、作业、实验报告、临床见习与实习记录、OSCE 技能考核、文献阅读、科研成果、证书与执业资格考试备考记录。
|
||||
- **里程碑(Milestone)**:表示学生成长链上某一阶段节点(如完成某学期、完成某轮转科室)的标记。
|
||||
- **形成性评价(Formative_Evaluation)**:在学习过程中针对单条成果或阶段给出的过程性反馈。
|
||||
- **终结性评价(Summative_Evaluation)**:在阶段结束时对该阶段整体进行的总结性画像评价。
|
||||
- **AI评估引擎(AI_Evaluation_Engine)**:对学习成果、对练结果等进行评价并生成发展建议的 AI 组件。
|
||||
- **课程对练引擎(Practice_Engine)**:将课程内容整理为练习题、与学生进行模拟对练并对结果进行分析的功能模块。
|
||||
- **题目(Question)**:用于对练的练习题,题型包括 A1/A2/A3/A4 型选择题、病例分析题与临床决策题。
|
||||
- **临床情景对话对练(Clinical_Dialogue_Practice)**:以模拟问诊等临床情景与学生进行多轮对话训练的功能。
|
||||
- **权威知识源(Authoritative_Source)**:经认证的教材、临床指南、官方题库等可信内容来源。
|
||||
- **学生画像引擎(Profile_Engine)**:基于学习空间与能力图谱数据生成学生画像的功能模块。
|
||||
- **学生画像(Student_Profile)**:对学生能力、特长与发展倾向的结构化刻画,含敏感数据。
|
||||
- **画像维度(Profile_Dimension)**:学生画像的能力维度,至少包括知识掌握、临床技能、科研能力、人文素养、AI 协同素养与职业倾向。
|
||||
- **职业规划模块(Career_Module)**:支持学生设定职业目标、分解岗位胜任力并生成发展规划的功能模块。
|
||||
- **岗位胜任力模型(Competency_Model)**:描述某一医学岗位所需能力的结构化模型,参照权威医学胜任力框架(如临床医学本科毕业生胜任力的科学与学术、临床能力、健康与社会、职业素养四个维度)。
|
||||
- **研究资料查询技能(Research_Query_Skill)**:辅助学生检索、筛选、总结与引用医学研究资料的 AI 技能。
|
||||
- **检索式(Search_Query)**:用于在资料来源中检索的专业查询表达式,支持 PICO 要素与 MeSH 主题词。
|
||||
- **资料来源(Reference_Source)**:医学文献与数据库,如 PubMed、CNKI、万方、UpToDate、Cochrane 等。
|
||||
- **证据分级(Evidence_Level)**:对一条资料证据强度的标注。
|
||||
- **引用(Citation)**:按规范格式(如 Vancouver、GB/T 7714)生成、可导出至 EndNote/NoteExpress 的文献引用。
|
||||
- **AI协同能力培养模块(AI_Collaboration_Module)**:系统性培养学生与 AI 负责任协作能力的功能模块。
|
||||
- **协同能力维度(Collaboration_Dimension)**:协同能力的评估维度,包括提问能力、批判性验证、责任边界意识与协同工作流。
|
||||
- **技能能力中心(Skill_Center)**:提供可复用 AI 技能、并对技能进行统一定义与治理的功能模块。
|
||||
- **技能(Skill)**:一个可复用的 AI 能力单元,具备统一框架(输入规格、AI 处理逻辑、知识源绑定、输出格式、可信度标注规则)。
|
||||
- **技能定义(Skill_Definition)**:描述一个技能配置的结构化数据。
|
||||
- **能力图谱(Competency_Graph)**:连接各模块的统一能力标签体系与数据底座。
|
||||
- **能力标签(Competency_Tag)**:能力图谱中表示一项具体能力的标识。
|
||||
- **合规模块(Compliance_Module)**:负责权限分级、敏感数据脱敏、画像授权与审计日志的功能模块。
|
||||
- **可信度标注(Credibility_Annotation)**:AI 输出附带的来源依据、置信度与可追溯信息。
|
||||
|
||||
## Requirements
|
||||
|
||||
### 需求 1:个人学习空间汇聚与归档
|
||||
|
||||
**用户故事:** 作为学生,我希望将贯穿成长链的学习内容汇聚到一个个人空间并自动归档,以便集中管理我的学习成果。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生新增一条学习成果时,个人学习空间应将该学习成果保存、归属到该学生账户,并在保存成功后向该学生返回保存成功的确认。
|
||||
2. 个人学习空间应支持的成果类型至少包括课程记录、作业、实验报告、临床见习与实习记录、OSCE 技能考核、文献阅读、科研成果、证书与执业资格考试备考记录。
|
||||
3. 当一条学习成果被成功保存时,个人学习空间应按学年与学期对该学习成果进行归档。
|
||||
4. 当学生完成一个里程碑节点时,个人学习空间应在成长链上标记该里程碑并关联该节点内的学习成果。
|
||||
5. 当学生请求查看个人学习空间时,个人学习空间应按学习成果的时间字段倒序展示该学生的学习成果,支持按成果类型、学年、学期与临床轮转科室进行筛选,并以每页最多 50 条对结果进行分页展示。
|
||||
6. 如果学生提交的学习成果缺少必填元数据(成果类型、时间、标题中的任一项),则个人学习空间应拒绝保存该学习成果、不创建任何记录,并返回指明全部缺失字段的提示信息。
|
||||
7. 当一条学习成果被成功保存时,个人学习空间应将该学习成果关联到能力图谱中的至少一个能力标签。
|
||||
8. 当一条包含临床轮转科室信息的学习成果被成功保存时,个人学习空间应额外按临床轮转科室对该学习成果进行归档。
|
||||
9. 如果学生提交的学习成果的标题超过 200 个字符,或其时间不是有效日期,则个人学习空间应拒绝保存该学习成果、不创建任何记录,并返回指明无效字段的提示信息。
|
||||
10. 如果一条已成功保存的学习成果无法匹配到能力图谱中任何已定义的能力标签,则个人学习空间应将该学习成果标记为"待关联能力标签",并提示学生补充能力标签关联。
|
||||
|
||||
### 需求 2:AI 形成性与终结性评价及发展建议
|
||||
|
||||
**用户故事:** 作为学生,我希望 AI 在我新增成果时给出过程性反馈、在阶段结束时给出总结性画像,以便明确改进方向。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当一条学习成果被成功保存时,AI评估引擎应在 30 秒内生成针对该学习成果的形成性评价与发展建议。
|
||||
2. 当学生完成一个里程碑节点且该节点内存在至少一条学习成果时,AI评估引擎应基于该节点内的全部学习成果生成终结性评价。
|
||||
3. AI评估引擎生成的每条评价应包含可信度标注,且该可信度标注应列出该评价所依据的至少一条学习成果或权威知识源。
|
||||
4. AI评估引擎生成的每条发展建议应引用能力图谱中的至少一个能力标签,以指明该建议对应的能力维度。
|
||||
5. 如果某条学习成果缺少 AI 评价所需的内容信息,则 AI评估引擎应中止本次评价生成、保留该学习成果数据不变,并返回表明信息不足无法评价的提示且说明缺失的内容类别。
|
||||
6. 如果 AI评估引擎在生成形成性评价、终结性评价或发展建议过程中失败或超出生成时限,则 AI评估引擎应中止本次生成、保留触发评价的学习成果数据不变,并返回表明评价生成失败的提示。
|
||||
7. 如果学生完成的里程碑节点内不存在任何学习成果,则 AI评估引擎应跳过终结性评价生成并返回表明该节点无可评价学习成果的提示。
|
||||
|
||||
### 需求 3:课程对练题目生成与权威性保障
|
||||
|
||||
**用户故事:** 作为学生,我希望 AI 将课程整理为练习题供我练习,并由导师把关准确性,以便巩固课程知识。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生选择一门课程发起对练时,课程对练引擎应在 30 秒内基于该课程内容生成 5 至 50 道练习题。
|
||||
2. 课程对练引擎生成的每道题目应绑定至少一个权威知识源,并记录该权威知识源的引用标识。
|
||||
3. 课程对练引擎应支持生成以下题型:A1 型、A2 型、A3 型、A4 型选择题、病例分析题与临床决策题。
|
||||
4. 当课程对练引擎生成一道题目时,课程对练引擎应将该题目置于"待导师审核"状态,且在该题目通过导师审核前不向学生发布该题目。
|
||||
5. 如果一道题目未通过导师审核,则课程对练引擎应将该题目置于"已退回"状态、阻止该题目进入对练,并记录该次退回的原因。
|
||||
6. 当一道题目通过导师审核时,课程对练引擎应将该题目置于"可用于对练"状态并允许该题目进入对练。
|
||||
7. 如果课程对练引擎无法基于所选课程内容生成练习题,则课程对练引擎应中止本次生成、不创建任何题目,并向该学生返回表明无法生成练习题的提示。
|
||||
8. 如果课程对练引擎无法为一道生成的题目绑定任何权威知识源,则课程对练引擎应不发布该题目、不将其置于"待导师审核"状态,并记录该题目缺少权威知识源的原因。
|
||||
|
||||
### 需求 4:模拟对练与结果诊断
|
||||
|
||||
**用户故事:** 作为学生,我希望与 AI 进行模拟对练并获得结果分析,以便了解自己的薄弱环节。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生开始一次对练时,课程对练引擎应按顺序逐题向该学生呈现题目,且单次对练包含的题目数量应为 1 至 50 道。
|
||||
2. 当课程对练引擎呈现一道题目时,课程对练引擎应采集该学生针对该题目的作答。
|
||||
3. 当学生提交一道题目的作答时,课程对练引擎应在 3 秒内根据该题目的标准答案将该作答判定为正确或错误。
|
||||
4. 如果学生在单题作答时限 120 秒内未提交作答,那么课程对练引擎应将该题判定为错误、停止采集该题作答并继续呈现下一道题目。
|
||||
5. 当一次对练结束时,课程对练引擎应生成对练报告,且该报告应包含取值范围为 0% 至 100% 的正确率、以秒为单位的总用时,以及薄弱环节列表(薄弱环节定义为该次对练中正确率低于 60% 的能力标签)。
|
||||
6. 当一次对练报告生成时,课程对练引擎应在 5 秒内将该次对练成绩按能力标签映射到能力图谱。
|
||||
7. 当一次对练报告生成时,AI评估引擎应针对该报告中的每个薄弱环节生成改进建议。
|
||||
8. 当 AI评估引擎生成一条改进建议时,AI评估引擎应为该改进建议附带取值范围为 0% 至 100% 的可信度标注。
|
||||
|
||||
### 需求 5:临床情景对话对练(模拟问诊)
|
||||
|
||||
**用户故事:** 作为学生,我希望与 AI 进行模拟问诊等临床情景多轮对话训练,以便锻炼临床沟通与决策能力。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生发起一次临床情景对话对练时,临床情景对话对练应在 10 秒内基于绑定的至少一个权威知识源呈现一个临床情景。
|
||||
2. 在临床情景对话对练进行期间,临床情景对话对练应以设定的对话角色应答学生,支持学生进行最多 50 轮提问与应答,并在每一轮结束后记录该轮的学生输入与系统应答内容。
|
||||
3. 当一次临床情景对话对练结束时,临床情景对话对练应在 30 秒内生成包含问诊完整性、临床推理与医患沟通三个评估方面的对练报告。
|
||||
4. 当一次临床情景对话对练报告生成时,临床情景对话对练应将该次结果按能力标签映射到能力图谱。
|
||||
5. 如果学生发起的临床情景对话对练未绑定任何权威知识源,则临床情景对话对练应阻止该次对练启动、不创建对话记录,并返回表明缺少权威知识源无法启动的提示。
|
||||
6. 如果临床情景对话对练在生成对练报告过程中失败或超出 30 秒生成时限,则临床情景对话对练应中止本次报告生成、保留该次对话记录不变,并返回表明报告生成失败的提示。
|
||||
|
||||
### 需求 6:学生画像生成与能力维度刻画
|
||||
|
||||
**用户故事:** 作为学生,我希望系统基于我的学习数据形成多维度学生画像,以便为我的就业与发展提供数据支持。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生首次访问学生画像,或个人学习空间内容或能力图谱数据发生更新时,学生画像引擎应在5秒内基于个人学习空间内容与能力图谱数据生成学生画像。
|
||||
2. 学生画像应针对每个画像维度以0到100的量化分值呈现学生能力分布,画像维度至少包括知识掌握、临床技能、科研能力、人文素养、AI 协同素养与职业倾向共六个维度。
|
||||
3. 当学生的能力图谱数据发生更新时,学生画像引擎应在数据更新后10秒内完成数据同步,并在下一次画像访问时反映更新后的数据。
|
||||
4. 学生画像引擎生成的每项画像结论应可追溯到生成该结论所依据的至少一条学习成果或对练数据记录。
|
||||
5. 如果个人学习空间内容或能力图谱数据缺失或不足以刻画某一画像维度,则学生画像引擎应将该维度标记为"数据不足"状态,保留其余维度的画像结论,并向学生呈现指示数据不足的提示。
|
||||
|
||||
### 需求 7:学生画像数据隐私与合规
|
||||
|
||||
**用户故事:** 作为学生,我希望我的画像数据受到隐私保护并由我授权使用,以便我的敏感信息不被滥用。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 学生画像引擎应将学生画像中的身份标识、联系方式、健康与医疗记录、心理测评结果与生物特征数据标记为敏感字段。
|
||||
2. 如果访问者不是学生本人且不持有该学生仍在有效期内的知情同意授权,则合规模块应拒绝其访问该学生的完整学生画像。
|
||||
3. 当画像被用于学生本人之外的用途时,合规模块应校验存在一条仍在有效期内、且授权范围与用途均覆盖该用途的知情同意授权记录。
|
||||
4. 如果不存在满足该用途的有效知情同意授权记录,则合规模块应阻止该次画像使用、保持画像数据不被使用,并返回表明缺少有效授权的提示。
|
||||
5. 当导师或管理员访问学生画像时,合规模块应在 2 秒内对未获授权的敏感字段进行脱敏处理,并仅返回已获授权的字段。
|
||||
6. 当任意角色访问或导出学生画像时,合规模块应在 5 秒内记录包含访问者身份、时间、字段范围与用途的审计日志,且该审计日志的保留期限不少于 12 个月。
|
||||
7. 学生画像引擎应仅采集与至少一个画像维度直接相关的数据字段,不采集与任一画像维度无关的字段。
|
||||
8. 当学生撤销一项知情同意授权时,合规模块应使该授权立即失效,并在此后对相关用途按未授权处理。
|
||||
|
||||
### 需求 8:职业目标设定与岗位胜任力分解
|
||||
|
||||
**用户故事:** 作为学生,我希望设定职业目标并查看对应岗位胜任力模型,以便明确努力方向。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生设定一个职业目标时,职业规划模块应在3秒内将该职业目标关联到对应的岗位胜任力模型,并向学生展示该模型。
|
||||
2. 岗位胜任力模型应参照权威医学胜任力框架,且至少包含科学与学术、临床能力、健康与社会、职业素养四个能力维度。
|
||||
3. 职业规划模块应将岗位胜任力模型分解为可对照的能力标签集合,且每个能力维度至少包含3个能力标签。
|
||||
4. 如果学生设定的职业目标没有匹配的岗位胜任力模型,则职业规划模块应提示该目标暂不支持,并推荐至少3个相近的可选目标。
|
||||
5. 如果将职业目标关联到岗位胜任力模型的过程发生系统错误,则职业规划模块应向学生显示指示关联失败的错误提示,并保留学生已设定的职业目标。
|
||||
|
||||
### 需求 9:胜任力对照与动态闭环发展规划
|
||||
|
||||
**用户故事:** 作为学生,我希望将我的能力与目标岗位胜任力对照并获得可随能力变化更新的发展规划,以便持续弥补能力差距。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生请求生成发展规划时,职业规划模块应将该学生能力图谱中的每一项能力水平与目标岗位胜任力模型中对应的要求水平逐项对照,并将学生水平低于要求水平的能力项标记为能力差距项;对于学生能力图谱中缺少数据的能力项,应将其一并标记为能力差距项。
|
||||
2. 职业规划模块应在发展规划中为每个能力差距项生成至少一项建议行动,且每项建议行动应标明该差距项的目标能力水平。
|
||||
3. 职业规划模块生成的发展规划应为每个能力差距项推荐能力图谱中对应的至少一项学习资源或对练任务。
|
||||
4. 职业规划模块生成的发展规划应为每个能力差距项引用能力图谱中对应的能力标签,以标明该项规划对应的能力维度。
|
||||
5. 当学生的能力图谱数据发生更新后,且学生再次请求生成发展规划时,职业规划模块应基于更新后的能力水平重新计算全部能力差距项并生成更新后的发展规划。
|
||||
6. 如果学生在请求生成发展规划时未选择目标岗位,或目标岗位胜任力模型不可用,则职业规划模块应拒绝生成发展规划,向学生返回指明缺少目标岗位胜任力模型的错误提示,并保留该学生已有的能力图谱数据不变。
|
||||
7. 如果某个能力差距项在能力图谱中不存在对应的学习资源或对练任务,则职业规划模块应在发展规划中保留该能力差距项并标注其暂无可推荐的学习资源或对练任务。
|
||||
|
||||
### 需求 10:研究资料检索与检索式生成
|
||||
|
||||
**用户故事:** 作为学生,我希望用自然语言描述研究问题并由 AI 生成专业检索式进行检索与筛选,以便高效获取医学研究资料。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生以自然语言提交一个研究问题时,研究资料查询技能应在 10 秒内将该研究问题转换为包含 PICO 要素与 MeSH 主题词的检索式,且该研究问题的长度应为 1 至 2000 个字符。
|
||||
2. 当学生确认一个检索式时,研究资料查询技能应在 30 秒内在指定的资料来源范围内检索相关资料,并以每页最多 50 条对结果列表进行分页返回。
|
||||
3. 研究资料查询技能应支持学生按发表时间、来源类型与相关度对检索结果进行筛选。
|
||||
4. 研究资料查询技能返回的每条资料应仅包含检索信息、摘要与指向原文的链接,且不存储或分发受版权保护的全文。
|
||||
5. 当一次查询完成时,研究资料查询技能应在 5 秒内将该次查询使用情况按能力标签映射到能力图谱。
|
||||
6. 如果学生提交的研究问题为空、超过 2000 个字符或不包含任何可识别的医学要素,则研究资料查询技能应拒绝生成检索式并返回指明问题的提示。
|
||||
7. 如果一个检索式在指定资料来源范围内未匹配到任何资料,则研究资料查询技能应返回空结果列表并提示未找到匹配资料。
|
||||
8. 如果指定的资料来源全部不可用,则研究资料查询技能应中止本次检索、保留该检索式不变,并返回表明资料来源不可用的提示。
|
||||
|
||||
### 需求 11:研究资料总结、证据分级与引用管理
|
||||
|
||||
**用户故事:** 作为学生,我希望 AI 对检索结果进行可追溯的总结与证据分级,并按规范格式生成可导出的引用,以便支持课题研究与论文写作。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当学生请求对检索结果生成资料总结时,研究资料查询技能应在 30 秒内生成资料总结,且生成的总结中的每条结论应附带至少一条指向其来源条目的引用。
|
||||
2. 当研究资料查询技能生成资料总结时,研究资料查询技能应为每条纳入总结的资料从预定义的证据分级等级集合中标注唯一的一个证据分级。
|
||||
3. 当学生选择 Vancouver 或 GB/T 7714 格式请求生成引用时,研究资料查询技能应按所选格式为选定资料生成引用,并支持将生成的引用导出为 EndNote 或 NoteExpress 可识别的格式。
|
||||
4. 如果研究资料查询技能无法将一条总结结论追溯到具体的资料来源,则该技能应将该结论标注为"未验证"且不得作为引用输出。
|
||||
5. 当研究资料查询技能向学生呈现资料总结时,本系统应向学生显示研究资料查询技能仅辅助检索与总结、不替代学生阅读原文的提示。
|
||||
6. 如果研究资料查询技能在生成资料总结过程中失败或超出 30 秒生成时限,则研究资料查询技能应中止本次总结生成、不输出任何结论,并返回表明总结生成失败的提示。
|
||||
7. 如果引用生成或导出过程失败,则研究资料查询技能应中止本次引用生成或导出、保留选定资料与已生成的引用不变,并返回表明引用生成或导出失败的提示。
|
||||
|
||||
### 需求 12:AI 协同能力培养与评估
|
||||
|
||||
**用户故事:** 作为学生,我希望系统性地培养我与 AI 负责任协作的能力,以便在临床与科研中正确使用 AI。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. AI协同能力培养模块应为提问能力、批判性验证、责任边界意识与协同工作流四个协同能力维度各提供至少一个以真实任务为载体的协同训练任务。
|
||||
2. 当学生完成一个 AI 协同训练任务时,AI协同能力培养模块应在 30 秒内对该学生在提问能力、批判性验证、责任边界意识与协同工作流四个协同能力维度以 0 到 100 的分值进行评估。
|
||||
3. 如果学生在训练任务中直接采用未经来源核验的 AI 输出,则 AI协同能力培养模块应向该学生返回提示并要求其进行来源核验,且将该行为计入批判性验证维度的评估。
|
||||
4. 当一个协同能力评估结果生成时,AI协同能力培养模块应在 5 秒内将该评估结果按能力标签映射到能力图谱,使其计入学生画像与岗位胜任力对照。
|
||||
5. 当一个 AI 协同训练任务完成时,AI协同能力培养模块应允许导师对该学生的协同过程质量进行点评,并将点评对该学生可见。
|
||||
6. 如果 AI协同能力培养模块在生成协同能力评估过程中失败或超时,则该模块应中止本次评估、保留该训练任务记录不变,并返回表明评估生成失败的提示。
|
||||
7. 如果某一协同能力维度缺少足以评估的数据,则 AI协同能力培养模块应将该维度标记为"数据不足",并保留其余维度的评估结果。
|
||||
|
||||
### 需求 13:技能能力中心与技能治理
|
||||
|
||||
**用户故事:** 作为学生,我希望按需调用一系列可复用的 AI 技能,并希望这些技能可被教师治理,以便安全可靠地使用 AI 能力。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 技能能力中心应向学生提供一个可调用的技能库,且该技能库应至少包含资料查询、检索式生成、文献综述、病例分析、鉴别诊断辅助、医患沟通模拟、医学翻译与引用生成共 8 个技能。
|
||||
2. 每个技能定义应包含输入规格、AI 处理逻辑说明、知识源绑定、输出格式与可信度标注规则五个组成部分。
|
||||
3. 当学生以符合输入规格的输入调用一个已启用的技能时,技能能力中心应在 30 秒内按该技能定义的输出格式返回结果,并附带符合该技能可信度标注规则的可信度标注。
|
||||
4. 如果学生调用技能的输入不符合该技能定义的输入规格,则技能能力中心应拒绝本次调用并返回指明输入问题的提示。
|
||||
5. 如果一个技能在调用过程中其绑定知识源不可用或处理失败,则技能能力中心应终止本次调用、不返回结果与可信度标注,并返回表明调用失败的提示。
|
||||
6. 在一个技能对学生开放之前,技能能力中心应要求该技能定义经管理员或导师配置并启用。
|
||||
7. 当管理员或导师新增、修改或启用一个技能定义时,技能能力中心应记录包含操作者身份、操作时间与变更内容的审计日志。
|
||||
8. 当任意技能被成功调用完成时,技能能力中心应将该次调用的使用数据按能力标签映射到能力图谱。
|
||||
9. 对于任意有效的技能定义,技能能力中心对其进行序列化保存再读取后,应得到与原技能定义等价的技能定义(往返一致性)。
|
||||
|
||||
### 需求 14:能力图谱统一底座
|
||||
|
||||
**用户故事:** 作为学生,我希望各模块的数据通过统一的能力体系连接,以便我的学习、对练、技能使用与画像彼此打通。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 能力图谱应维护一套统一的能力标签体系,其中每个能力标签具有唯一标识与所属能力维度,供学习空间、课程对练、临床情景对话对练、研究技能、协同能力与职业规划共同引用。
|
||||
2. 当任意模块产生一条可计入能力的数据时,能力图谱应在 5 秒内将该数据映射到 1 至 10 个已定义的能力标签。
|
||||
3. 如果某模块提交的数据引用了能力图谱中未定义的能力标签,则能力图谱应拒绝该映射、不创建映射记录、记录拒绝原因,并向提交方返回表明能力标签未定义的提示。
|
||||
4. 当学生请求查看能力概览时,能力图谱应在 5 秒内聚合来自各模块的能力数据,并按能力维度以 0 到 100 的量化分值返回该学生的能力水平。
|
||||
5. 如果某一能力维度缺少足以计算能力水平的数据,则能力图谱应将该维度标记为"数据不足",并保留其余维度的能力水平。
|
||||
|
||||
### 需求 15:导师端与教学问责
|
||||
|
||||
**用户故事:** 作为导师,我希望审核题目、点评学生成果并查看所带学生的画像,以便履行带教职责。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当导师审核一道题目时,导师端应允许该导师通过或退回该题目,并在退回时记录原因。
|
||||
2. 当导师对一条学习成果进行点评时,导师端应将点评内容关联到该学习成果并对该学生可见。
|
||||
3. 在导师与学生存在带教关系的情况下,导师端应允许该导师查看其所带学生的学生画像。
|
||||
4. 如果导师请求查看非其所带学生的画像,则合规模块应拒绝该请求并记录该次越权访问尝试。
|
||||
|
||||
### 需求 16:AI 可信与可解释
|
||||
|
||||
**用户故事:** 作为学生和导师,我希望 AI 的评价、建议与总结都给出依据,以便我能够信任并核验 AI 的输出。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 当本系统生成任意 AI 评价、建议或总结时,本系统应为该输出附带可信度标注。
|
||||
2. 可信度标注应包含 AI 输出所依据的至少一条来源以及该输出取值范围为 0% 至 100% 的置信度。
|
||||
3. 当用户请求查看某条 AI 输出的依据时,本系统应在 3 秒内展示该输出可追溯到的来源条目及其引用标识。
|
||||
4. 如果一条 AI 输出无法追溯到任何来源,则本系统应将该输出标注为"未经核验",并在向用户呈现该输出时一并显示该标注。
|
||||
|
||||
### 需求 17:权限分级与审计
|
||||
|
||||
**用户故事:** 作为管理员,我希望系统按角色分级控制访问并保留审计日志,以便保障数据安全与合规。
|
||||
|
||||
#### 验收标准(Acceptance Criteria)
|
||||
|
||||
1. 合规模块应为学生、导师与管理员各自定义访问权限范围,且每个权限范围应列出可访问的资源类型与允许的操作类型。
|
||||
2. 当用户访问一项处于其角色权限范围内的受保护资源时,合规模块应允许该次访问。
|
||||
3. 如果用户访问超出其角色权限范围的资源,则合规模块应拒绝该次访问、保持该资源不被访问,并记录包含操作者、时间、资源标识与拒绝原因的事件。
|
||||
4. 当用户对敏感数据执行访问、导出或修改操作时,合规模块应在 5 秒内记录包含操作者、时间、操作类型与数据范围的审计日志。
|
||||
@@ -0,0 +1,275 @@
|
||||
# Implementation Plan
|
||||
|
||||
## Overview
|
||||
|
||||
本任务清单将设计转化为增量式编码任务。任务遵循测试驱动、底座先行的顺序:先建立能力图谱与技能能力中心两个底座及合规/可信横切层,再实现各业务模块,最后串联端到端流程。带 `*` 的任务为可选。
|
||||
|
||||
## Tasks
|
||||
|
||||
- [x] 1. 项目脚手架与共享基础设施
|
||||
- 初始化 NestJS + TypeScript 后端工程与 PostgreSQL 连接,建立模块化目录结构
|
||||
- 实现统一的 `Result<T, E>` 返回类型与错误基类(区分校验/生成/授权/系统错误)
|
||||
- 配置测试框架(Jest)与属性测试库(fast-check),建立 mock AI 网关与 mock 资料来源适配器骨架
|
||||
- _Requirements: 全局基础_
|
||||
|
||||
- [x] 2. 能力图谱底座(Competency_Graph)
|
||||
- [x] 2.1 能力标签体系与数据模型
|
||||
- 实现 `CompetencyTag`(唯一标识、所属维度)与 `CompetencyDimension` 模型及持久化
|
||||
- 实现统一标签体系的维护与 `listTags()` 接口
|
||||
- 编写单元测试覆盖标签定义与维度归属
|
||||
- _Requirements: 14.1_
|
||||
|
||||
- [x] 2.2 能力数据映射与校验
|
||||
- 实现 `mapData()`:将模块数据映射到 1-10 个已定义标签(5 秒内)
|
||||
- 实现未定义标签拒绝逻辑:拒绝映射、不创建记录、记录原因、返回提示
|
||||
- 编写属性测试验证 Property 2(能力标签映射有效性)
|
||||
- _Requirements: 14.2, 14.3_
|
||||
|
||||
- [x] 2.3 能力概览聚合
|
||||
- 实现 `getCompetencyOverview()`:按维度以 0-100 量化分值聚合(5 秒内)
|
||||
- 实现数据不足维度标记"数据不足"并保留其余维度
|
||||
- 编写属性测试验证 Property 3(画像维度分值有界性,能力概览部分)
|
||||
- _Requirements: 14.4, 14.5_
|
||||
|
||||
- [x] 3. 技能能力中心底座(Skill_Center)
|
||||
- [x] 3.1 技能定义模型与序列化
|
||||
- 实现 `SkillDefinition` 五要素结构(输入规格、AI 处理逻辑、知识源绑定、输出格式、可信度标注规则)
|
||||
- 实现 `serialize()` / `deserialize()`
|
||||
- 编写属性测试验证 Property 1(技能定义序列化往返一致性)
|
||||
- _Requirements: 13.2, 13.9_
|
||||
|
||||
- [x] 3.2 技能治理:配置、启用与审计
|
||||
- 实现 `upsertSkillDefinition()` 与 `enableSkill()`,限定管理员或导师操作
|
||||
- 实现技能定义变更的审计日志记录(操作者、时间、变更内容)
|
||||
- 初始化至少 8 个内置技能定义(资料查询、检索式生成、文献综述、病例分析、鉴别诊断辅助、医患沟通模拟、医学翻译、引用生成)
|
||||
- 编写单元测试覆盖治理流程与技能库完整性
|
||||
- _Requirements: 13.1, 13.6, 13.7_
|
||||
|
||||
- [x] 3.3 技能调用与失败处理
|
||||
- 实现 `invokeSkill()`:输入规格校验、按输出格式返回结果并附可信度标注(30 秒内)
|
||||
- 实现输入不符规格的拒绝、知识源不可用或处理失败的终止(不返回结果与标注、提示失败)
|
||||
- 仅成功调用完成才写入能力图谱
|
||||
- 编写单元测试覆盖正常路径与各错误路径
|
||||
- _Requirements: 13.3, 13.4, 13.5, 13.8_
|
||||
|
||||
- [x] 4. 横切层:合规模块与 AI 可信层
|
||||
- [x] 4.1 权限分级与访问判定
|
||||
- 实现 `checkAccess()`:为学生/导师/管理员定义权限范围(可访问资源类型与允许操作类型)
|
||||
- 实现范围内允许、越权拒绝并记录拒绝事件(操作者、时间、资源标识、拒绝原因)
|
||||
- 编写属性测试验证 Property 6(权限判定一致性)
|
||||
- _Requirements: 17.1, 17.2, 17.3_
|
||||
|
||||
- [x] 4.2 知情同意授权与画像脱敏
|
||||
- 实现 `ConsentRecord` 模型(范围、用途、有效期、撤销)与 `verifyConsent()` / `revokeConsent()`
|
||||
- 实现 `resolveProfileView()`:非本人无有效授权时拒绝完整画像、对未授权敏感字段脱敏(2 秒内,仅返回已授权字段)
|
||||
- 实现授权撤销即时失效、此后按未授权处理
|
||||
- 编写属性测试验证 Property 4(授权强制不变量)
|
||||
- _Requirements: 7.2, 7.3, 7.4, 7.5, 7.8_
|
||||
|
||||
- [x] 4.3 审计日志
|
||||
- 实现 `writeAuditLog()`:敏感数据访问/导出/修改记录(操作者、时间、操作类型、数据范围,5 秒内),保留≥12 个月
|
||||
- 编写单元测试覆盖审计字段完整性与保留策略
|
||||
- _Requirements: 7.6, 17.4_
|
||||
|
||||
- [x] 4.4 AI 可信层
|
||||
- 实现统一可信度标注封装:为 AI 输出附带≥1 来源与 0%-100% 置信度
|
||||
- 实现依据查看(3 秒内展示可追溯来源条目及引用标识)与无法溯源时标注"未经核验"
|
||||
- 编写单元测试覆盖可信度标注与未经核验标记
|
||||
- _Requirements: 16.1, 16.2, 16.3, 16.4_
|
||||
|
||||
- [x] 5. 个人学习空间(Learning_Space)
|
||||
- [x] 5.1 学习成果模型与新增校验
|
||||
- 实现 `Achievement` 模型与成果类型枚举
|
||||
- 实现 `addAchievement()`:必填元数据校验、标题≤200 字符与时间有效性校验,失败时拒绝且不创建记录
|
||||
- 编写属性测试验证 Property 7(错误路径数据保全,学习成果部分)
|
||||
- _Requirements: 1.1, 1.2, 1.6, 1.9_
|
||||
|
||||
- [x] 5.2 自动归档与里程碑
|
||||
- 实现保存成功后按学年、学期归档;含临床轮转科室信息时额外按科室归档
|
||||
- 实现 `markMilestone()`:标记里程碑并关联节点内成果
|
||||
- 编写单元测试覆盖归档维度与里程碑关联
|
||||
- _Requirements: 1.3, 1.4, 1.8_
|
||||
|
||||
- [x] 5.3 成果检索与能力标签关联
|
||||
- 实现 `listAchievements()`:按时间倒序、支持按成果类型/学年/学期/轮转科室筛选、每页≤50 分页
|
||||
- 实现保存成功后关联能力图谱标签;无匹配标签时标记"待关联能力标签"并提示
|
||||
- 编写属性测试验证 Property 8(分页边界不变量,学习空间部分)
|
||||
- _Requirements: 1.5, 1.7, 1.10_
|
||||
|
||||
- [x] 6. AI 评估引擎(AI_Evaluation_Engine)
|
||||
- [x] 6.1 形成性与终结性评价
|
||||
- 实现 `generateFormativeEvaluation()`(30 秒内)与 `generateSummativeEvaluation()`(节点须有成果)
|
||||
- 实现评价附带可信度标注(≥1 依据来源)与发展建议引用≥1 能力标签
|
||||
- 编写单元测试覆盖评价生成与标注
|
||||
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.7_
|
||||
|
||||
- [x] 6.2 评价错误路径
|
||||
- 实现信息不足时中止、保留数据、提示缺失类别
|
||||
- 实现生成失败或超时时中止、保留数据、提示失败
|
||||
- 编写单元测试覆盖错误路径(验证 Property 7 相关部分)
|
||||
- _Requirements: 2.5, 2.6_
|
||||
|
||||
- [x] 7. 课程对练引擎(Practice_Engine)
|
||||
- [x] 7.1 题目生成与权威源绑定
|
||||
- 实现 `generateQuestions()`:基于课程内容生成 5-50 道题(30 秒内),支持 A1/A2/A3/A4/病例分析/临床决策题型
|
||||
- 实现每题绑定≥1 权威知识源并记录引用标识;无法绑定时不进入审核并记录原因
|
||||
- 实现课程内容不足时中止并提示
|
||||
- 编写单元测试覆盖生成、题型、绑定与错误路径
|
||||
- _Requirements: 3.1, 3.2, 3.3, 3.7, 3.8_
|
||||
|
||||
- [x] 7.2 题目审核状态机
|
||||
- 实现题目状态流转(待导师审核→可用于对练/已退回),审核前不向学生发布
|
||||
- 实现导师通过/退回(退回记录原因)
|
||||
- 编写单元测试覆盖状态机与导师审核
|
||||
- _Requirements: 3.4, 3.5, 3.6, 15.1_
|
||||
|
||||
- [x] 7.3 模拟对练与结果诊断
|
||||
- 实现 `startPractice()` / `submitAnswer()` / `finishPractice()`:逐题呈现采集作答、3 秒内判定正误、单题超 120 秒判错并继续
|
||||
- 实现对练报告(正确率、用时、薄弱环节=正确率<60% 的能力标签)并按能力标签映射能力图谱
|
||||
- 实现 AI 评估引擎对每个薄弱环节生成改进建议并附可信度标注
|
||||
- 编写单元测试覆盖对练流程、报告与映射
|
||||
- _Requirements: 4.1, 4.2, 4.4, 4.5, 4.6, 4.7, 4.8_
|
||||
|
||||
- [x] 8. 临床情景对话对练(Clinical_Dialogue_Practice)
|
||||
- 实现 `startDialogue()`:基于绑定权威知识源 10 秒内呈现情景;未绑定时阻止启动、不创建记录、提示
|
||||
- 实现 `sendTurn()` 多轮对话(最多 50 轮)并逐轮记录学生输入与系统应答
|
||||
- 实现 `finishDialogue()`:30 秒内生成含问诊完整性/临床推理/医患沟通三维报告并映射能力图谱;失败或超时时中止、保留对话记录、提示
|
||||
- 编写单元测试覆盖发起、多轮、报告与错误路径
|
||||
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6_
|
||||
|
||||
- [x] 9. 学生画像引擎(Profile_Engine)
|
||||
- 实现 `generateProfile()`:基于学习空间与能力图谱生成六维度画像(0-100,5 秒内)
|
||||
- 实现能力图谱更新后 10 秒内同步、每项结论可追溯≥1 来源记录
|
||||
- 实现数据不足维度标记"数据不足"并保留其余;敏感字段标记;仅采集与维度直接相关字段(数据最小化)
|
||||
- 编写属性测试验证 Property 3(画像维度分值有界性,画像部分)
|
||||
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 7.1, 7.7_
|
||||
|
||||
- [x] 10. 职业规划模块(Career_Module)
|
||||
- [x] 10.1 职业目标与胜任力模型
|
||||
- 实现 `setCareerGoal()`:3 秒内关联岗位胜任力模型并展示
|
||||
- 实现胜任力模型四维度(科学与学术/临床能力/健康与社会/职业素养),每维度≥3 能力标签
|
||||
- 实现无匹配模型时提示并推荐≥3 相近目标;关联系统错误时提示并保留已设目标
|
||||
- 编写单元测试覆盖目标设定与错误路径
|
||||
- _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_
|
||||
|
||||
- [x] 10.2 动态闭环发展规划
|
||||
- 实现 `generateDevelopmentPlan()`:逐项对照能力水平与要求、标记能力差距项(含缺数据项)
|
||||
- 实现每差距项≥1 建议行动(标明目标水平)、推荐≥1 学习资源或对练任务、引用对应能力标签
|
||||
- 实现能力图谱更新后再次请求时重算全部差距项;未选目标/模型不可用时拒绝并保留数据;差距项无资源时保留并标注暂无推荐
|
||||
- 编写单元测试覆盖对照、规划生成、动态更新与错误路径
|
||||
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7_
|
||||
|
||||
- [x] 11. 研究资料查询技能(Research_Query_Skill)
|
||||
- [x] 11.1 检索式生成与检索
|
||||
- 实现 `generateSearchQuery()`:NL→PICO/MeSH 检索式(10 秒内,问题 1-2000 字符)
|
||||
- 实现 `search()`:指定来源 30 秒内检索、每页≤50 分页;空结果返回空列表并提示;来源全不可用时中止、保留检索式、提示
|
||||
- 实现问题为空/超长/无医学要素时拒绝生成并提示
|
||||
- 实现结果每条仅含检索信息/摘要/原文链接(不存储分发全文)、查询完成 5 秒内映射能力图谱
|
||||
- 编写单元测试覆盖检索式、检索、筛选与错误路径
|
||||
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8_
|
||||
|
||||
- [x] 11.2 总结、证据分级与引用管理
|
||||
- 实现 `summarize()`:30 秒内生成总结,每条结论附≥1 来源引用,每条资料标注唯一证据分级
|
||||
- 实现无法溯源结论标注"未验证"且不作为引用输出;呈现总结时显示"仅辅助不替代阅读原文"提示
|
||||
- 实现 `generateCitation()` / `exportCitations()`:Vancouver/GB-T 7714 格式、导出 EndNote/NoteExpress;生成或导出失败时中止、保留数据、提示
|
||||
- 编写属性测试验证 Property 5(引用可追溯不变量)
|
||||
- _Requirements: 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7_
|
||||
|
||||
- [x] 12. AI 协同能力培养模块(AI_Collaboration_Module)
|
||||
- 实现协同训练任务(提问能力/批判性验证/责任边界意识/协同工作流四维度各≥1)
|
||||
- 实现 `evaluateTask()`:30 秒内四维度 0-100 评估;直接采用未核验 AI 输出时提示并要求核验、计入批判性验证;评估结果 5 秒内映射能力图谱计入画像与胜任力对照
|
||||
- 实现导师点评(对学生可见);评估失败或超时时中止、保留记录、提示;维度数据不足时标记"数据不足"并保留其余
|
||||
- 编写单元测试覆盖任务、评估、点评与错误路径
|
||||
- _Requirements: 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7_
|
||||
|
||||
- [x] 13. 导师端集成
|
||||
- 集成题目审核(复用 7.2)、成果点评(关联学习成果并对学生可见)
|
||||
- 实现带教关系校验:允许查看所带学生画像;查看非所带学生画像时合规模块拒绝并记录越权尝试
|
||||
- 编写单元测试覆盖点评与带教关系访问控制
|
||||
- _Requirements: 15.2, 15.3, 15.4_
|
||||
|
||||
- [x] 14. 端到端集成与贯通验证
|
||||
- 串联学习成果→能力标签→画像→职业规划的数据贯通流程并编写集成测试
|
||||
- 串联技能调用(课程对练/研究查询)→能力图谱→画像的贯通流程并编写集成测试
|
||||
- 验证全系统 AI 输出均经 AI 可信层、敏感资源访问均经合规模块
|
||||
- 运行全部属性测试(Property 1-8)确认核心不变量成立
|
||||
- _Requirements: 2.4, 4.6, 5.4, 9.1, 12.4, 14.1, 16.1, 17.2_
|
||||
|
||||
- [x] 15. 三端前端界面(可选)
|
||||
- 实现学生端(学习空间、对练、画像、职业规划、研究查询、协同训练)核心界面
|
||||
- 实现导师端(题目审核、成果点评、带教学生画像)与管理端(技能治理、权限与合规管理)核心界面
|
||||
- _Requirements: 全部用户故事的界面呈现_
|
||||
|
||||
## Task Dependency Graph
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
T1["1. 脚手架与基础设施"]
|
||||
T2["2. 能力图谱底座"]
|
||||
T3["3. 技能能力中心底座"]
|
||||
T4["4. 合规与AI可信横切层"]
|
||||
T5["5. 个人学习空间"]
|
||||
T6["6. AI评估引擎"]
|
||||
T7["7. 课程对练引擎"]
|
||||
T8["8. 临床情景对话对练"]
|
||||
T9["9. 学生画像引擎"]
|
||||
T10["10. 职业规划模块"]
|
||||
T11["11. 研究资料查询技能"]
|
||||
T12["12. AI协同能力培养"]
|
||||
T13["13. 导师端集成"]
|
||||
T14["14. 端到端集成"]
|
||||
T15["15*. 三端前端界面"]
|
||||
|
||||
T1 --> T2
|
||||
T1 --> T3
|
||||
T1 --> T4
|
||||
T2 --> T5
|
||||
T3 --> T7
|
||||
T3 --> T8
|
||||
T3 --> T11
|
||||
T4 --> T9
|
||||
T4 --> T13
|
||||
T5 --> T6
|
||||
T5 --> T9
|
||||
T6 --> T7
|
||||
T2 --> T6
|
||||
T2 --> T9
|
||||
T9 --> T10
|
||||
T2 --> T10
|
||||
T2 --> T12
|
||||
T7 --> T13
|
||||
T9 --> T13
|
||||
T5 --> T14
|
||||
T6 --> T14
|
||||
T7 --> T14
|
||||
T8 --> T14
|
||||
T9 --> T14
|
||||
T10 --> T14
|
||||
T11 --> T14
|
||||
T12 --> T14
|
||||
T13 --> T14
|
||||
T14 --> T15
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"waves": [
|
||||
{ "wave": 1, "tasks": ["1"] },
|
||||
{ "wave": 2, "tasks": ["2", "3", "4"] },
|
||||
{ "wave": 3, "tasks": ["5"] },
|
||||
{ "wave": 4, "tasks": ["6", "7", "8", "9", "11", "12"] },
|
||||
{ "wave": 5, "tasks": ["10", "13"] },
|
||||
{ "wave": 6, "tasks": ["14"] },
|
||||
{ "wave": 7, "tasks": ["15"] }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- 任务 2(能力图谱)与任务 3(技能能力中心)是两大底座,应优先实现,多数业务模块依赖它们。
|
||||
- 任务 4(合规与 AI 可信横切层)为所有涉及敏感数据访问与 AI 输出的模块提供统一保障,建议与底座并行推进。
|
||||
- 每个业务模块任务均包含对应的单元测试或属性测试,覆盖正常路径与错误路径。
|
||||
- 属性测试(Property 1-8)分散在相关任务中实现,并在任务 14 统一运行确认。
|
||||
- 任务 15 为可选的前端界面实现,后端模块与测试可独立于前端完成验证。
|
||||
- 技术栈(NestJS + TypeScript + PostgreSQL + Jest + fast-check)为设计阶段的假设,实现前可调整。
|
||||
Reference in New Issue
Block a user