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 + CoT89.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 维度框架里的”价格”维度)

延伸阅读