Active-Prompt
用 uncertainty 选择 demonstrations(CoT)
思维链(CoT)方法依赖于一组固定的人工注释范例。问题在于,这些范例可能不是不同任务的最有效示例。为了解决这个问题,Diao 等人(2023)提出了一种新的提示方法,称为 Active-Prompt,以适应 LLMs 到不同的任务特定示例提示(用人类设计的 CoT 推理进行注释)。
下面是该方法的说明。第一步是使用或不使用少量 CoT 示例查询 LLM。对一组训练问题生成 k 个可能的答案。基于 k 个答案计算不确定度度量(使用不一致性)。选择最不确定的问题由人类进行注释。然后使用新的注释范例来推断每个问题。

图片来源:Diao 等人(2023)
核心思想
传统 CoT 的问题在于:所有任务共用同一批人工标注的示例,但不同任务的难点不同,固定示例很难覆盖所有场景。Active-Prompt 的核心洞察是:让模型自己告诉我们哪些问题最难,然后优先标注这些问题作为示例。
这个过程借鉴了主动学习(Active Learning)的思想——不是随机选择训练样本,而是选择模型最"困惑"的样本来标注,从而以最少的标注量获得最大的性能提升。
四步流程详解
Step 1:不确定性估计(Uncertainty Estimation)
首先,使用 LLM 对每个训练问题生成 k 个答案(例如 k=5)。通过多次采样,可以观察模型对同一问题的回答一致性。
问题:如果一个数的3倍减去7等于20,这个数是多少?
采样1:3x - 7 = 20, 3x = 27, x = 9 → 答案:9
采样2:3x - 7 = 20, 3x = 27, x = 9 → 答案:9
采样3:20 + 7 = 27, 27 / 3 = 9 → 答案:9
采样4:3x = 20 + 7 = 27, x = 9 → 答案:9
采样5:3x - 7 = 20, x = 9 → 答案:9
→ 不一致性:0(所有答案一致,模型很确定)
问题:一列火车从A站到B站需要3小时,从B站到C站的速度是前段的1.5倍,
距离是前段的2倍。问从A站到C站共需多少小时?
采样1:AB段3小时,BC段 = 2d/(1.5v) = 4小时,总计7小时 → 答案:7
采样2:BC段速度1.5倍距离2倍,时间 = 2/1.5 × 3 = 4小时,总计7 → 答案:7
采样3:BC = 2 × 距离,速度1.5×,时间 = 2d/1.5v = 2/(1.5) × 3 = 4,→ 答案:7
采样4:1.5倍速走2倍距离,需要 2/1.5 = 1.33倍时间 = 4小时,总5 → 答案:5
采样5:3 + (2 × 3)/(1.5) = 3 + 4 = 7 → 答案:7
→ 不一致性:0.2(一个答案不一致,说明模型对此问题不够确定)
Step 2:选择最不确定的问题
按不确定性(不一致性)从高到低排序,选择排名靠前的 n 个问题。这些问题就是模型最"困惑"的,也是最值得人工标注的。
论文中使用了几种不确定性度量:
- 不一致性(Disagreement):k 个答案中不同答案的比例
- 熵(Entropy):答案分布的信息熵
- 方差(Variance):对于数值答案,使用答案的方差
Step 3:人工标注
对选出的最不确定问题,由人类标注者提供详细的 CoT 推理过程。由于只需要标注最有价值的少量问题(通常 4-8 个),标注成本远低于对所有问题的标注。
Step 4:推理
使用新标注的范例作为 few-shot 示例,对所有问题进行推理。由于这些示例是针对模型弱点"精选"的,因此通常能带来更好的效果。
实验结果
Active-Prompt 在多个推理基准上取得了显著提升:
| 基准 | CoT | Active-Prompt | 提升 |
|---|---|---|---|
| GSM8K(数学) | 74.4% | 78.0% | +3.6% |
| AQuA(代数) | 52.4% | 55.1% | +2.7% |
| SVAMP(数学) | 79.0% | 82.3% | +3.3% |
| CSQA(常识) | 73.5% | 76.2% | +2.7% |
| StrategyQA | 65.4% | 69.0% | +3.6% |
注:结果基于 code-davinci-002 模型,具体数值请参考原论文。
关键发现:
- 不确定性选择的示例始终优于随机选择的示例
- 即使标注预算很小(4-8 个示例),Active-Prompt 也能带来显著提升
- 不同的不确定性度量(不一致性 vs 熵)表现相近,不一致性是最简单有效的选择
实际应用指南
何时使用 Active-Prompt?
Active-Prompt 最适合以下场景:
- 标注预算有限:你只能标注少量示例,需要每个示例都"物超所值"
- 任务特定性强:通用示例效果不佳,需要针对特定领域定制
- 存在明显的难题分布:某些问题类型模型特别容易出错
简化版实践流程
在日常使用中,你不需要完整实现论文的流程。以下是一个简化的应用方法:
Step 1: 用你的问题集测试 LLM,找到模型经常答错的问题
Step 2: 为这些"易错题"编写详细的 CoT 示例
Step 3: 将这些示例放入你的 few-shot prompt 中
Step 4: 验证新的 prompt 在整体测试集上的表现
与其他方法的对比
| 方法 | 示例选择策略 | 适用场景 |
|---|---|---|
| Few-shot CoT | 随机或人工挑选 | 通用任务 |
| Auto-CoT | 聚类后自动生成 | 大规模自动化 |
| Active-Prompt | 不确定性驱动选择 | 精确优化、预算有限 |
| Self-Consistency | 多次采样取多数 | 提高单题准确率 |
自查清单
- 是否对模型做了充分的不确定性估计(至少 k=5 次采样)?
- 选择的标注问题是否覆盖了主要的错误类型?
- 标注的 CoT 推理是否详细且逻辑清晰?
- 是否在验证集上确认了新示例的效果提升?