{"openapi":"3.1.0","info":{"title":"检验士学习室","version":"1.0.0"},"servers":[{"url":"https://yuvomi.shareef.cloud"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/api/tools/list_courses":{"post":{"operationId":"list_courses","summary":"按轨道列出课程及先修 ID，同时列出公共学习资源索引。先问学习目标与基础，再选课。使用 next_offset 翻页。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"track":{"type":"string","enum":["foundation","clinical","hematology","biochemistry","immunology","microbiology","parasitology","practice"]},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":24}},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/get_lesson":{"post":{"operationId":"get_lesson","summary":"按页读取一门课程的教学正文。先解释一个关键概念，再只提一道题并等待回答。诊断错因、提示、回补先修，之后用变式检验。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","description":"精确的课程 ID，例如 L01 或 L30","minLength":1,"maxLength":32},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":4000}},"required":["course_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/get_assignment":{"post":{"operationId":"get_assignment","summary":"用户明确选择正式验收后，按页读取完整正式题包。先读取全部页再开始；逐题提问并等待用户作答。答辩前查 oral_ready，现场设计三道未见变式，记录每题题面与对应用户答复。正式作答期间不提示答案或评分。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","description":"精确的课程 ID，例如 L01 或 L30","minLength":1,"maxLength":32},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":4000}},"required":["course_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/get_resource":{"post":{"operationId":"get_resource","summary":"按页读取 list_courses 返回的学习资源，用于基础回补、术语、公式、官方大纲映射与四科综合复习。用 next_offset 续读。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"resource_id":{"type":"string","description":"资源 ID","minLength":1,"maxLength":200},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":4000}},"required":["resource_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/get_progress":{"post":{"operationId":"get_progress","summary":"查看当前登录用户的学习进度与验收门槛。掌握须笔答和答辩均通过、全部先修已掌握；练习永远不计入掌握。正式答辩前先检查 oral_ready。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","description":"精确的课程 ID，例如 L01 或 L30","minLength":1,"maxLength":32},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":24}},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/get_review":{"post":{"operationId":"get_review","summary":"读取当前账号待复习错题和原始作答，默认仅列到期项；依错因逐题出未见变式，独立答对后save_evidence引用resolves_review_id闭环。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","description":"精确的课程 ID，例如 L01 或 L30","minLength":1,"maxLength":32},"include_future":{"type":"boolean"},"offset":{"type":"integer","minimum":0,"maximum":10000000},"limit":{"type":"integer","minimum":1,"maximum":24}},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}},"/api/tools/save_evidence":{"post":{"operationId":"save_evidence","summary":"仅保存真实学习证据。answer 必须逐字来自本轮用户作答，禁止拼接模型提示、改写或代答；多轮正式作答可按原序拼接用户原文。practice 记录诊断与变式但不打正式分。用户明确参加正式验收时，按 assessment 独立评分，填写 axes、critical_errors、missing_tasks、uncertainties；无项也传空数组。每个正分维度须引用 answer 可逐字核对的短句。总分和通过由服务器核算。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","description":"精确的课程 ID，例如 L01 或 L30","minLength":1,"maxLength":32},"stage":{"type":"string","enum":["practice","written","oral"]},"answer":{"type":"string","description":"用户原始作答，保留原文与 LaTeX；切勿使用导师示例代答","minLength":1,"maxLength":32000},"feedback":{"type":"string","description":"基于证据的诊断、可操作补救和下一步","minLength":1,"maxLength":6000},"axes":{"type":"object","properties":{"concepts":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":20,"description":"原理与适用条件"},"evidence_quotes":{"type":"array","description":"来自 answer 的逐字证据；正分必须提供","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}}},"required":["score","evidence_quotes"],"additionalProperties":false},"derivation":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":30,"description":"检验流程与推理"},"evidence_quotes":{"type":"array","description":"来自 answer 的逐字证据；正分必须提供","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}}},"required":["score","evidence_quotes"],"additionalProperties":false},"calculation":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":20,"description":"计算与结果判读"},"evidence_quotes":{"type":"array","description":"来自 answer 的逐字证据；正分必须提供","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}}},"required":["score","evidence_quotes"],"additionalProperties":false},"transfer":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":20,"description":"干扰与鉴别"},"evidence_quotes":{"type":"array","description":"来自 answer 的逐字证据；正分必须提供","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}}},"required":["score","evidence_quotes"],"additionalProperties":false},"communication":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":10,"description":"表达与安全边界"},"evidence_quotes":{"type":"array","description":"来自 answer 的逐字证据；正分必须提供","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}}},"required":["score","evidence_quotes"],"additionalProperties":false}},"required":["concepts","derivation","calculation","transfer","communication"],"additionalProperties":false},"critical_errors":{"type":"array","description":"关键错误，例如标本认错、干扰遗漏、质控失控仍发报告","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}},"missing_tasks":{"type":"array","description":"未完成的必答项","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}},"uncertainties":{"type":"array","description":"证据中仍待核实的事项","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}},"review_needed":{"type":"boolean","description":"本次真实作答是否仍有待复习错误。练习默认 true，正式验收按是否通过判断。"},"error_tags":{"type":"array","description":"本次错因标签，例如标本前处理、单位换算、概念混淆","maxItems":20,"items":{"type":"string","description":"逐条填写","minLength":1,"maxLength":600}},"review_after_days":{"type":"integer","minimum":1,"maximum":30},"resolves_review_id":{"type":"string","description":"确已用独立变式改正的既有复习条目 evidence_id；不可仅因看过答案就消除","minLength":1,"maxLength":100},"oral_questions":{"type":"array","minItems":3,"maxItems":3,"description":"答辩必填，三道不同的未见变式及逐题答复。response 必须逐字出现在 answer 中。","items":{"type":"object","properties":{"question":{"type":"string","description":"实际给出的题面","minLength":1,"maxLength":2000},"response":{"type":"string","description":"用户对本题的真实原文","minLength":1,"maxLength":12000}},"required":["question","response"],"additionalProperties":false}}},"required":["course_id","stage","answer","feedback"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"}}}}}}