首页
/ MEDCARDS.AI 自适应病例选择教练提示词工程解析:用 60/30/10 加权策略驱动个性化临床训练

MEDCARDS.AI 自适应病例选择教练提示词工程解析:用 60/30/10 加权策略驱动个性化临床训练

2026-09-07 20:05:46作者:殷蕙予

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_attemptedtotal_cases_correctcurrent_streak 等)。
  • specialty_performance:分科能力明细。数据库侧等价查询被以 SQL 注释形式保留在 schema.sql 的 users 表说明中——按近 30 天 interactions 与 clinical_cases 联表,GROUP BY specialty 计算每科尝试数、正确数与正确率。
  • recent_interactions:最近作答记录,重点标注 is_correctclinical_pattern 与耗时,用于判断"近期错误"。
  • weak_clinical_algorithms:系统预计算的学生薄弱临床决策路径(如"AVC 的鉴别诊断")。
  • available_cases:候选病例池,每个病例携带 specialtydifficulty(1–5)、clinical_algorithmglobal_success_rate(全站正确率)与 estimated_time。这些字段与 clinical_cases 表一一对应:difficulty_level(1–5)、clinical_algorithmglobal_success_rate(由触发器基于 times_presentedtimes_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_usedhint_countpoints_earned 等字段用于记录学生实际使用的提示及其开销,schema 中也为"连续答对/速度/专科掌握"等成就预设了 badges 与解锁条件。
  • success_criteria:为本次作答预设的"成功标准",包括期望作答时间与关键推理步骤,便于答题完成后与 feedback prompt 交叉验证。

从工程角度,这段 JSON 的输出结构与 src/types/database.ts 中定义的 NextCaseResponse TypeScript 接口(selected_case_idselection_reasoningcoaching_messagehints_preparedsuccess_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_algorithmdifficulty 字段与真实数据完全打通。

八、版本管理与落地接入要点

提示词文件尾部保留了明确的版本元数据:

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(类型契约)理解全链路。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
915
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388