Medprompt 方法论解析:用提示词组合打败专用模型
来源:微软研究院 microsoft/promptbase 论文:Can Generalist Foundation Models Outcompete Special-Purpose Tuning?(2023) 核心结论:不重新训练模型,光靠组合提示词技巧,通用模型就能在专业领域超越专用微调模型
背景:为什么这个研究重要
传统思路:要让 AI 在医学/法律/金融等专业领域表现好 → 必须用领域数据做 fine-tune(微调,即用专业数据重新训练模型)。
Medprompt 证明了另一条路:通用大模型 + 精心设计的提示词策略 = 超越专用模型。
这意味着:
- 不需要几万条标注数据
- 不需要 GPU 训练成本
- 不需要 ML 工程师
- 只需要把提示词技巧用对、用好、组合起来
Medprompt 三大核心技巧
技巧一:动态少样本选择(Dynamic Few-Shot Selection)
普通做法:每次都用固定的几个示例(人工挑选的”万金油”例子)。
Medprompt 做法:根据当前问题,自动从数据库中找最相似的示例。
实现步骤:
1. 把所有候选示例用 embedding 模型转成向量
(embedding = 把文本变成一串数字,语义相近的文本数字也相近)
2. 新问题来了 → 也转成向量
3. 用 kNN(k近邻算法)找最近的 k 个示例
4. 把这些"最相关"的示例塞进 prompt 作为 few-shot
效果:比固定示例准确率高 3-5%
原因:相关的例子比泛泛的例子更能引导模型走对方向
类比:考试前复习,与其把整本书看一遍(固定 few-shot),不如只看和考题最像的历史真题(动态 few-shot)。
本质:这就是 RAG(检索增强生成)的思路,只不过检索的不是”知识文档”,而是”示例题目”。
技巧二:自动生成思维链(Self-Generated Chain of Thought)
普通做法:人工为每道示例题写推理过程(费时费力,且人写的不一定是模型最容易理解的格式)。
Medprompt 做法:让模型自己给训练题生成推理步骤,然后把这些自动生成的 CoT 当作 few-shot 示例。
实现步骤:
1. 拿到一批训练题(有标准答案)
2. 让 GPT-4 对每道题生成详细推理过程
3. 只保留推理正确(最终答案和标准答案一致)的 CoT
4. 把这些"AI 自己写的解题过程"存起来
5. 动态检索时,连同 CoT 一起塞进 prompt
效果:比人工写的 CoT 效果更好
原因:模型生成的推理格式更符合模型自己的"思维习惯"
类比:让学霸自己写解题笔记给自己看,比老师写的笔记更适合学霸的思路。
关键防护:只保留答案正确的 CoT,过滤掉推理错误的(防止”错误示范”污染 prompt)。
技巧三:选项打乱 + 多数投票(Choice-Shuffle Ensembling)
问题:大模型对选择题有”位置偏好”——倾向于选 A 或选 C,不是因为内容对,而是因为位置。
Medprompt 做法:
实现步骤:
1. 同一道题跑 5-20 次
2. 每次把 ABCD 选项的顺序随机打乱
3. 模型每次基于打乱后的选项独立推理
4. 统计每个"内容"(不是位置)被选中的次数
5. 取出现最多的答案作为最终答案
效果:消除位置偏好,准确率提升 1-3%
原因:如果一个答案在不同位置都被选中,说明模型真的认为它对
类比:问 5 个人同一道题,每次把选项顺序打乱再问。如果大家不管选项怎么排都选同一个内容,那这个答案大概率是对的。
本质:这是”自我一致性”(Self-Consistency)的增强版——不仅多次推理,还通过打乱选项增加了多样性。
Medprompt+ 的进阶优化
在 57 个学科的 MMLU 综合测试上,微软进一步优化:
策略路由(Strategy Routing)
不是所有题都适合同一种策略。有的题需要多步推理(数学证明),有的只需要直接回忆事实(历史年份)。
做法:
1. 先问模型:"这道题需要草稿纸吗?"(即是否需要多步推理)
2. 如果需要 → CoT 权重加倍(让推理型 prompt 主导)
3. 如果不需要 → 用简单的直接回答 prompt(避免过度推理反而出错)
效果:+0.5% 准确率
原因:简单题用复杂方法反而容易"想多了"出错
类比:1+1=2 不需要列竖式,但解方程需要。根据题目难度选择合适的解题策略。
扩大集成规模
把投票次数从 5 次提到 20 次,准确率从 89.1% → 89.56%。更多独立推理 = 更稳定的共识。
最终效果
| 测试集 | 方法 | GPT-4 得分 |
|---|---|---|
| MMLU(57学科综合) | Medprompt+ | 90.10% |
| GSM8K(小学数学) | 零样本 | 95.3% |
| MATH(竞赛数学) | 零样本 | 68.4% |
| HumanEval(代码) | 零样本 | 87.8% |
| BIG-Bench-Hard(推理) | Few-shot + CoT | 89.0% |
关键对比:GPT-4 + Medprompt 在医学测试上超过了专门为医学微调的模型(如 Med-PaLM 2)。
方法论总结:组合 > 单一
Medprompt 的核心洞察:
单独用 few-shot → 还行
单独用 CoT → 不错
单独用 self-consistency → 有提升
三个组合起来 + 动态化 → 突破性提升
这不是 1+1+1=3,而是 1+1+1=5 的协同效应
对实际应用的指导意义
什么时候该用 Medprompt 思路?
✅ 有一批历史数据(哪怕只有几百条)可以做动态 few-shot 检索
✅ 任务有明确的对错标准(可以过滤错误 CoT)
✅ 对准确率要求高,愿意多花 API 调用成本换精度
✅ 不想/不能做模型微调
❌ 纯开放式创作(没有"对错"之分,投票没意义)
❌ 数据极少(连做 few-shot 检索的候选池都没有)
❌ 对延迟敏感(多次调用 = 更慢)
成本考量
Medprompt 用 20 次集成意味着一道题要调用 20 次 API。成本是普通调用的 20 倍。
实际使用时的折中:
- 简单场景:3-5 次集成就够
- 高风险场景(医疗诊断):10-20 次集成值得投入
- 可以先用策略路由判断难度,简单题不集成,难题才集成
典型应用场景举例
| Medprompt 技巧 | 通用应用场景 |
|---|---|
| 动态 few-shot | 任何有历史案例库的分类/诊断任务(医疗、法律、客服) |
| 自动 CoT | 需要多步推理的专业问答(考试、技术排查、数据分析) |
| 多数投票 | 对准确率要求高的关键决策(合规审查、安全检测) |
| 策略路由 | 输入类型多样的系统(简单问题快速回答,复杂问题深度分析) |
与本知识库其他章节的关联
- 提示词工程系统教程:本笔记是「高级提示词工程」的具体实战案例,系统的入门到进阶请走 02_提示词工程 子项目
- 动态 few-shot 的底层就是 RAG:动态少样本检索的实现思路(embedding + kNN)与 RAG学习笔记.md 完全一致——只不过 RAG 检索的是”知识文档”,Medprompt 检索的是”示例题目”
- “不微调”路线 vs “微调”路线的对照:Medprompt 是”通用模型 + 复杂提示”路线的代表,与之对照的”训练专用模型”路线见 模型训练技术速查.md(SFT / 蒸馏 / RFT 等)
- 医学场景的工程落地案例:Medprompt 在医学测试上超过专用模型 Med-PaLM 2,与之配套的真实业务场景案例见 宠物 CT 影像 AI 辅助诊断方案.md(也用了”多模态大模型 + RAG”的思路)
- 20 次集成的成本估算:Medprompt 一道题调用 20 次 API,成本计算 / fallback 设计参见 LLM-API 选型方法论.md(5 维度框架里的”价格”维度)