30 KiB
Design Document
Overview
医科类高校 AI 学习中心系统是一个以"能力"为核心的 Web 平台,面向学生、导师与管理员三类角色,贯穿基础医学、临床医学、见习实习、住院医师培养全成长链。本设计文档描述系统的架构、组件、数据模型、错误处理与测试策略,对应需求文档中的 17 条需求。
系统的两大架构支柱是:
- 能力图谱(Competency Graph) —— 全系统共享的数据底座。所有模块产生的可计入能力的数据(学习成果、对练成绩、技能使用、协同评估)都映射到统一的能力标签上,使学生画像、职业规划等能在统一数据上聚合,避免模块孤岛。
- 技能能力中心(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
系统分层架构
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
模块依赖关系
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。
关键接口:
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。
关键接口:
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。
关键接口:
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;
}
题目状态机:
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。
关键接口:
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(与合规模块协作)。
关键接口:
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。
关键接口:
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。
关键接口:
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。
关键接口:
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。
关键接口:
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 五要素):
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。
关键接口:
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。
关键接口:
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;
}
授权与脱敏流程:
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
核心实体关系
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
关键数据结构
// 学习成果(需求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
测试层次
- 单元测试:各模块接口的正常路径与错误路径,覆盖每条验收标准。
- 集成测试:跨模块流程,重点验证能力图谱作为底座的数据贯通(学习成果→标签→画像→职业规划)。
- 属性测试(Property-Based Testing):针对可形式化为不变量的核心正确性属性。
- 合规与安全测试:权限矩阵、脱敏、授权生命周期、审计完整性。
测试数据与模拟说明:
- 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
-
以能力图谱为统一底座:医学教育成长链长、模块多,若各模块各自存储能力数据会形成孤岛。统一标签体系让画像与职业规划能在一致数据上聚合,也使"对照胜任力模型"有共同语言。代价是所有模块需遵循标签映射契约(需求 14.3 的拒绝机制保障了契约一致性)。
-
技能能力中心作为 AI 能力底座:课程对练、研究查询本质都是"绑定知识源的 AI 调用 + 可信度标注"。抽象为统一技能框架降低新增能力成本,并使可信度标注、知识源绑定、治理审计得以统一实现。序列化往返一致性(需求 13.9)保障技能定义可安全持久化与迁移。
-
AI 可信层作为横切关注点:医学场景幻觉风险高,将"可信度标注 + 来源溯源 + 未经核验标记"统一到一层,避免各模块各自实现导致遗漏,确保需求 16 在全系统一致生效。
-
合规默认、授权可生命周期管理:画像含敏感健康数据,采用"默认脱敏 + 用途化授权 + 撤销即时失效 + 全审计"模型,满足知情同意与数据最小化要求,并通过授权强制不变量(属性 4)可测试地保障。
-
统一 Result 错误模型与数据保全不变量:所有错误路径保证数据不进入部分写入状态(属性 7),契合医学数据对一致性的高要求。