MEDCARDS.AI 自适应病例选择教练提示词工程解析:用 60/30/10 加权策略驱动个性化临床训练
MEDCARDS.AI 是面向巴西医学生住院医师考试(REVALIDA、ENARE 及各大医学院入学考试)准备的 AI 医学教育平台,其核心由三份分工明确的大模型提示词构成(Case Selector、Feedback、Tutor)。本文以其中的 AI Coach Prompt(coach-prompt.md) 为剖析对象,讲解它如何将"学生画像 + 分科表现 + 会话上下文"转化为下一个最优临床病例的选择决策,并输出可供系统直接消费的严格 JSON。读完本文,你将掌握一套"数据驱动 + 加权打分 + 强结构化输出 + 临床辅导语气校准"的提示词设计方法论,可直接复用到自适应题库类产品的选件环节。
一、这份提示词在 MEDCARDS.AI 架构中的位置
MEDCARDS.AI 的产品定位并非传统课程平台,而是"能适应每位学生学习旅程的智能学习伙伴",平台围绕三个核心界面组织:实时能力看板(Battle Dashboard)、自适应病例训练场(Training Arena)、拥有完整记忆的 AI 私教(War Room)。相关产品背景可参见 medcards-ai/README.md。
支撑这三块界面的是三份专用提示词,它们共同构成了平台的 AI 层:
| 提示词文件 | 角色 | 核心职责 |
|---|---|---|
| coach-prompt.md | Adaptive Case Selector & Learning Path Designer(自适应病例选择器与学习路径设计师) | 分析学习历史,为下一步挑选"最能提升学生水平"的临床病例,并生成辅导消息与分级提示 |
| feedback-prompt.md | Clinical Reasoning Analyzer(临床推理分析器) | 对学生在某道病例上的作答给出"为什么对/错、正确推理路径是什么、下次如何避免"的深度反馈 |
| tutor-prompt.md | Personal Medical Study Companion(私人学习伙伴) | 以对话形式提供带完整记忆的答疑、诊断式辅导与备考激励 |
从闭环上看,coach prompt 承担的是训练循环的"选题前端":它每轮都读取学生的全部学习痕迹,输出 selected_case_id,将病例送入答题流程;学生作答后由 feedback prompt 给出讲评;积累到一定量后,学习历史再次反哺 coach prompt 的下一轮决策。README 中描述的 Adaptive Engine 算法流程(按专科计算能力、识别 success_rate < 65% 的薄弱区、按 60%/30%/10% 分配选题)正是本提示词要交给 Claude 执行的决策逻辑。
二、角色定义与输入上下文设计:喂给模型的数据协议
提示词第一步通过一句话锚定模型身份与使命:
You are an AI medical education coach... Analyze the student's learning history and select the next optimal clinical case to maximize their improvement.
随后定义了一整份 JSON 输入协议,把系统侧准备好的学生数据原样交给模型。理解这份输入结构,是理解整个决策策略的前提。coach prompt 约定的输入上下文包括六个区块:
{
"user_profile": {
"user_id": "uuid",
"total_cases_attempted": 150,
"overall_success_rate": 0.68,
"study_streak": 12,
"last_activity": "2024-01-20T14:30:00Z"
},
"specialty_performance": [
{
"specialty": "cardiologia",
"attempts": 45,
"success_rate": 0.73,
"avg_time_seconds": 180,
"last_attempt": "2024-01-20T14:30:00Z",
"trend": "improving"
},
{
"specialty": "neurologia",
"attempts": 30,
"success_rate": 0.45,
"avg_time_seconds": 240,
"last_attempt": "2024-01-19T10:15:00Z",
"trend": "declining"
}
],
"recent_interactions": [
{
"case_id": "uuid",
"specialty": "neurologia",
"is_correct": false,
"time_to_answer": 280,
"clinical_pattern": "AVC Isquêmico",
"timestamp": "2024-01-20T14:30:00Z"
}
],
"weak_clinical_algorithms": [
"Diagnóstico diferencial de AVC",
"Interpretação de ECG em arritmias",
"Manejo de insuficiência cardíaca aguda"
],
"available_cases": [
{
"case_id": "uuid",
"specialty": "neurologia",
"difficulty": 3,
"clinical_algorithm": "Diagnóstico diferencial de AVC",
"global_success_rate": 0.62,
"estimated_time": 200
}
],
"session_context": {
"cases_today": 8,
"correct_today": 6,
"time_available_minutes": 20,
"current_focus": null
}
}
各区块的语义与系统侧的数据来源如下:
- user_profile:学生总体画像,包括累计答题数、整体正确率、连续学习天数(streak)。在 schema.sql 中,这些总体统计存放于
users.progress这一 JSONB 字段的overall_stats中(total_cases_attempted、total_cases_correct、current_streak等)。 - specialty_performance:分科能力明细。数据库侧等价查询被以 SQL 注释形式保留在 schema.sql 的
users表说明中——按近 30 天 interactions 与clinical_cases联表,GROUP BY specialty计算每科尝试数、正确数与正确率。 - recent_interactions:最近作答记录,重点标注
is_correct、clinical_pattern与耗时,用于判断"近期错误"。 - weak_clinical_algorithms:系统预计算的学生薄弱临床决策路径(如"AVC 的鉴别诊断")。
- available_cases:候选病例池,每个病例携带
specialty、difficulty(1–5)、clinical_algorithm、global_success_rate(全站正确率)与estimated_time。这些字段与clinical_cases表一一对应:difficulty_level(1–5)、clinical_algorithm、global_success_rate(由触发器基于times_presented与times_answered_correctly生成列计算,见 schema.sql 中update_case_statistics触发器)。 - session_context:当次会话的即时状态(今日已做病例数、剩余可用分钟数),用于时间约束下的选题降级。
这份输入的显著特点是全部使用模型易于推理的数值与趋势标签(如 trend: "improving"/"declining"),把需要大量 SQL 聚合的逻辑提前在数据层完成,提示词只负责"读表做决策",从而控制 token 消耗并降低模型的聚合负担。
三、决策策略:60/30/10 加权 + 会话上下文四重规则
coach prompt 的核心方法是把病例选择建模为三个目标的加权配比,并用显式规则约束会话级的即时调整。
1. 优先补齐关键短板(Critical Gaps,权重 60%)
触发补短板的条件包括:
- 分科正确率
success_rate < 0.65; - 存在反复出错的临床算法(
weak_clinical_algorithms); - 最近 7 天内答错过的题目;
- 考试权重加成:神经内科(neurologia)、呼吸科(pneumologia)、感染科(infectologia)在巴西住院医师考试中占比高,应获得更高优先级。
2. 巩固优势科目(Reinforce Strengths,权重 30%)
针对 success_rate > 0.75 且 < 0.90 的科目:这既是为了防止知识衰减(knowledge decay),也是为了在训练中持续给与学生正反馈与信心。注意上下限都做了约束——低于 0.75 说明还谈不上"优势",高于 0.90 则应转向更具挑战性的内容。
3. 探索新领域(Explore New Territory,权重 10%)
针对尝试次数 少于 10 次 的科目,用于引入多样性、防止学习倦怠(burnout)。权重虽小,却保证了题库覆盖面不会被"追着短板打"的策略完全锁死。
4. 会话上下文即时优化规则
在上述配比之外,coach prompt 用三条硬规则处理"当下"约束:
| 条件 | 行为 |
|---|---|
time_available_minutes < 10 |
改选难度 1–2 的简单病例(时间不足时不抛难题) |
current_streak >= 5(连续答对 5 题以上) |
挑战难度 4–5 的高阶病例(趁状态好上强度) |
cases_today > 15 |
进入高强度模式(intensive mode),只安排薄弱环节的题目 |
这一设计体现了一个关键理念:自适应不能只看历史画像,还必须响应即时状态。时间不够时保证完成率,状态火热时适度加压,单日训练量过大时收缩目标,都是为了在"挑战性"与"可完成性"之间维持平衡。
值得一提的验证角度:README 中记录的 Adaptive Engine 伪代码(1 计算分科能力 → 2 识别正确率 < 65% 的短板 → 3 按 60/30/10 配比选题 → 4 由 Claude 校验选择并准备辅导)与本提示词的策略逐条对应,说明 prompt 承载的就是引擎中"AI 决策与话术生成"那一层。
四、响应协议:STRICT JSON 与字段逐项拆解
为避免自由文本带来的解析问题,coach prompt 强制模型只返回一段严格 JSON,字段如下:
{
"selected_case_id": "uuid-of-selected-case",
"selection_reasoning": {
"primary_goal": "address_weakness | reinforce_strength | explore_new",
"specialty_targeted": "cardiologia",
"specific_gap": "Diagnóstico diferencial de síndrome coronariana aguda",
"expected_outcome": "Student will improve pattern recognition for STEMI vs NSTEMI",
"confidence_this_helps": 0.85
},
"coaching_message": "Vamos trabalhar um caso de cardiologia focado em síndrome coronariana aguda. Você teve dificuldade com este padrão nos últimos casos. Foque em: ECG, cronologia dos sintomas e fatores de risco.",
"hints_prepared": [
{
"hint_level": 1,
"hint_text": "Observe atentamente o traçado do ECG, especialmente derivações precordiais.",
"points_cost": 0
},
{
"hint_level": 2,
"hint_text": "Supradesnivelamento de ST em V1-V4 sugere qual parede do coração?",
"points_cost": 5
},
{
"hint_level": 3,
"hint_text": "Este é um STEMI de parede anterior. Qual a conduta imediata?",
"points_cost": 10
}
],
"success_criteria": {
"target_time_seconds": 150,
"key_reasoning_steps": [
"Identificar elevação de ST",
"Localizar parede acometida",
"Decidir entre angioplastia primária vs trombolítico"
]
}
}
字段设计要点如下:
- selected_case_id:与
available_cases中的候选病例 ID 对应,也是clinical_cases.id,供系统直接进入答题流程。 - selection_reasoning:决策的可解释性层。
primary_goal枚举了三种目标(补短板/固优势/探新域);confidence_this_helps是模型对"此题能帮助该学生"的自评置信度,可被产品用于后续的算法校准。 - coaching_message:展示给学生看的辅导话术,要求引用该学生的真实弱点而非空泛鼓励。
- hints_prepared:分级提示,分 1/2/3 三级渐进暴露信息,且每级带
points_cost(积分成本)。这与产品中的积分/成就系统打通——在 interactions 表 中存在hints_used、hint_count、points_earned等字段用于记录学生实际使用的提示及其开销,schema 中也为"连续答对/速度/专科掌握"等成就预设了 badges 与解锁条件。 - success_criteria:为本次作答预设的"成功标准",包括期望作答时间与关键推理步骤,便于答题完成后与 feedback prompt 交叉验证。
从工程角度,这段 JSON 的输出结构与 src/types/database.ts 中定义的 NextCaseResponse TypeScript 接口(selected_case_id、selection_reasoning、coaching_message、hints_prepared、success_criteria)完全对齐。这意味着前后端只需按该接口做一次类型约束即可安全消费模型输出,提示词中的结构约定直接落成了代码级的类型安全。
五、质量标准:DO / DON'T 行为约束
为了约束模型行为、保证辅导质量,提示词给出了一组明确的行为白名单与黑名单:
应当做的(DO)
- 临床指征要具体到模式(例如说"ST 抬高的急性冠脉综合征",而不是笼统说"cardiologia");
- 重视近因效应:最近的错误比久远错误更重要;
- 难度平衡:不能太简单(无聊),也不能太难(挫败);
- 准备的提示要引导临床推理路径,而不是直接给答案;
- 使用鼓励且专业的语言,语气设定为"资深住院医师(residente sênior)";
- 关联真实考试模式(REVALIDA 及各主流住院医师项目)。
禁止的(DON'T)
- 无明确推理地随机选病例;
- 忽略近期表现趋势;
- 给出直接泄露答案的提示;
- 使用过度学术化、令人紧张的语言;
- 忘记时间约束;
- 同一科目连续重复 5 次以上(除非属于关键短板)。
这些约束本质上是在为模型的"隐性决策"划定护栏:既防止内容无差别轰炸,也防止话术打击学生信心。feedback prompt 中把相似的语气原则(如使用"você"而非"o aluno"、避免"Erro básico"这类否定式措辞)进一步强化,二者在体验层保持了一致的人格设定。
六、典型场景推演:把策略翻译成行为
coach prompt 提供了三个端到端示例,用于给模型展示"给定数据 → 输出行为"的完整映射,这也是提升 few-shot 效果的关键设计:
场景一:学生神经内科持续薄弱
User success rate in neurologia: 0.45
Recent errors: AVC, meningite, status epilepticus
→ SELECT: 中等难度的神经内科病例,主题为卒中的鉴别诊断
→ COACHING: "Neurologia precisa de atenção. Vamos revisar diagnóstico de AVC."
场景二:学生状态火热
Current streak: 8 correct in a row
Overall rate: 0.72
→ SELECT: 在其最强专科中选择难度 4 的高阶病例以挑战上限
→ COACHING: "Você está voando! Vamos testar com um caso mais desafiador."
场景三:剩余时间不足
Time available: 8 minutes
Cases today: 3
→ SELECT: 薄弱环节中预计耗时 < 120 秒的快题
→ COACHING: "Caso rápido para fortalecer um ponto fraco antes de você sair."
三个场景分别演示了权重策略中"补短板""加压挑战"与"时间约束降级"三套分支的典型触发与对应输出,可直接用作构造测试样例或评估提示词输出的基准。
七、校准参数与领域常识内嵌
提示词最后注入了一组产品化的领域常识(Calibration Notes),让模型的选题尺度与真实备考节奏对齐:
- 巴西医学生通常需要完成约 200–300 个病例才能建立考试自信;
- 理想单次训练量为 45–60 分钟完成 8–12 个病例;
- 单日超过 20 个病例后记忆留存显著下降(认知过载),因此
cases_today > 15时进入收敛模式; - 神经内科、感染科、心内科合计约占 考试权重的 40%;
- 学生最畏惧的科目集中在神经内科、儿科、妇产科——这些科目在选题与话术上都需要格外温和且高频的正面强化。
这类"非代码参数"本质上是把产品运营经验直接烧进提示词,使模型在没有任何外部规则引擎的情况下也能产出符合教学法节奏的决策。仓库中的种子病例(seed-cases.sql)也印证了这些专科分类与难度体系——例如 CARDIO-001(STEMI 处理)标注 difficulty_level = 3 与临床算法"Manejo de STEMI - Escolha do método de reperfusão",NEURO-001(雷击样头痛/蛛网膜下腔出血)同理,说明 prompt 中的 clinical_algorithm、difficulty 字段与真实数据完全打通。
八、版本管理与落地接入要点
提示词文件尾部保留了明确的版本元数据:
Prompt Version: 1.0
Last Updated: 2024-01-25
Optimized for: Claude Sonnet 4
这提示了两条实践建议:一是提示词应当作为产品代码一样做版本管理与回归测试(每次改版记录优化目标模型与更新日期);二是结构化输出的解析侧要与 prompt 版本绑定——由于 coach prompt 的输出已映射为 NextCaseResponse 类型,任何字段增删都应同步修改 prompt 模板与 TS 类型,避免"模型输出与类型定义漂移"。
在系统接入层面,README 描述了平台整体运行所需的配置(Supabase 的 URL/anon key/service role key 与 ANTHROPIC_API_KEY),并将三份 prompt 与 Claude 的集成点规划在 src/lib/ai/claude.ts(该路径为 README 文档所描述的目录规划,当前仓库中仅收录了类型定义层)。实际部署时,建议将本 prompt 与输入上下文 JSON 一起作为系统提示(system prompt)随每次"选题请求"调用,并在收到输出后先做 JSON 解析与字段校验,再进入答题 UI。
结语
从这份 coach-prompt.md 可以看出,一个高质量的自适应选题功能 = 严格定义的输入协议 + 显式的加权决策策略 + 强约束的结构化输出 + 行为黑/白名单 + 领域校准参数。它把原本需要写死在服务端的启发式规则交给了模型执行,同时用 JSON 协议与 TypeScript 类型把输出牢牢锁进产品管线。对于任何正在构建"AI 驱动的个性化练习题选择 / 学习路径规划"能力的团队,这套提示词的设计结构都值得作为可直接借鉴的工程范本。
如需完整对照阅读整套提示词体系,可分别查看 coach-prompt.md(本文主体)、feedback-prompt.md(作答讲评)与 tutor-prompt.md(对话私教),并结合 schema.sql(数据底座)与 database.ts(类型契约)理解全链路。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0627
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00