大模型做 In-Context Learning(ICL,上下文学习)时,通常会先从示例库里检索若干 demonstration,再把这些示例和当前问题一起放进 prompt。
但检索得到的 Top-K 并不一定适合目标模型。示例过多会增加上下文和推理成本,无关或重复的示例也可能影响模型对当前问题的判断。
如果直接从候选池里重新寻找最优的 k 个示例,组合数量会迅速增加;一些 model-aware 方法还需要反复调用目标 LLM,对不同 demonstration set 进行评估。
清华大学自动化系研究者提出了 Local Demonstration Editing(LDE),并训练了一个小型编辑模型 Jev-LDE。它不负责最终答题,而是在目标 LLM 推理前,对已经检索出的 demonstration set 做一次编辑,只允许 Keep、Delete 或 Replace 三种操作。
实验中,Jev-LDE 在 48 个分类配置中有 46 个优于 Semantic TopK 初始化结果,在 44 个配置中取得最好或并列最好结果;跨 3 个分类数据集、4 个目标 LLM 的平均 one-shot accuracy 从 81.2% 提升到 88.1% 。


ICL 不需要更新大模型参数,只需要在输入中提供少量示例,模型就可以根据这些 demonstration 适应当前任务。
真正影响结果的,还有示例本身。
上下文窗口、显存和推理计算都有成本,因此不可能无限增加 demonstration。即使增加了 context,也不代表准确率一定会上升。与当前 query 无关、内容重复或者匹配程度不高的示例,既会占用 token,也可能影响模型的注意力分配。
因此,few-shot 场景里的一个实际问题是:
在有限的 few-shot budget 下,究竟应该把哪几个示例放进 prompt?
已有方法大致可以分成两类。
第一类是检索式方法,例如 Semantic TopK 和 BM25。前者根据语义相似度选择示例,后者更侧重词面匹配。这类方法速度较快,但与 query 相似,并不意味着示例一定最有利于目标模型完成任务。
另一类是 model-aware 方法,例如利用生成概率、交叉熵差、条件熵或者目标模型反馈重新评估候选示例。这些方法能够更直接地利用目标 LLM 的行为信息,但如果需要不断测试不同 demonstration set,目标模型的调用次数也会随之增加。

论文采用了一个更局部的思路:如果检索器已经找到了一个还不错的初始集合,是否可以不重新搜索整个空间,而只在这个集合附近做一次修改?
研究者首先在 TREC 的 4-shot 设置中,以 Semantic TopK 得到的 demonstration set 为起点,只考虑它的一次编辑邻域。
一次编辑可以有三种情况:保持不变、删除一个示例,或者用候选池中的另一个示例替换现有示例。这个很小的局部空间里,仍然存在明显的性能提升空间。
对于 Llama-3-8B,如果利用测试标签挑选最优局部动作,Oracle 相比 Semantic TopK 可以提升 26.0 个百分点;Qwen2.5-7B 上则提升 16.8 个百分点。即使不使用测试标签,由 Jev-LDE 自己选择编辑动作,也分别获得了 8.2 和 7.4 个百分点的提升。
随机进行一次局部编辑则没有明显收益。

这也是 LDE 的出发点:不一定要在很大的组合空间里寻找完整的最优 demonstration set,有些情况下,只需要把当前检索结果改对其中一个位置。
LDE 并没有替换原有的检索器,而是放在检索器之后,整个过程比较直接。

然后,把 query、当前 demonstration set 和 replacement candidates 交给 Jev-LDE。它只能输出三种动作:

具体来说:
最后,编辑后的 demonstration set 再交给目标 LLM 完成预测。

这里的限制很明确:Jev-LDE 只能做一次 membership edit。
它不会连续尝试多个上下文,也不会在测试阶段反复调用目标 LLM 为不同候选集合打分。前面的检索器负责找到一个初始集合,Jev-LDE 在这个基础上再做一次局部调整。
Jev-LDE 使用 Qwen3-1.7B,主要承担 demonstration editing 的工作。输入包括任务指令、当前 query、已经检索出的 demonstration set,以及可用于替换的候选 demonstrations。
模型最终输出结构化 JSON 动作,例如 Keep、Delete 某个示例,或者 Replace 某个示例。如果输出格式无效,训练时奖励为 0,测试时则回退到 Keep。


因此,训练并不需要人工标注 “哪个 Replace 动作是正确答案”,而是直接观察编辑之后目标模型有没有答对。
研究者随后使用 GRPO 对 Jev-LDE 进行 RL post-training。由于一个 editing state 可能存在多个有效动作,用强化学习可以让模型在这些动作之间进行探索,而不必人为指定唯一的监督标签。
测试阶段则更简单:Jev-LDE 根据当前 query 和候选 demonstrations 选择一次动作,目标 LLM 再使用编辑后的上下文完成正式预测。
论文从两个角度分析了 LDE:
第一,研究者考察了距离当前检索集合最近的正确 context 有多远。在文中的多数投票假设下,最优编辑距离的尾部以几何速度衰减。换句话说,如果当前检索结果本身已经有一定质量,那么部分错误可能只需要很小的局部修改就能修正。
第二,论文分析了学习 editing policy 所需要的反馈量。在固定策略类、精度和置信度条件下,充分反馈的上界与可选 action 数量线性相关。Keep/Delete/Replace 构成的动作空间远小于直接面对完整的组合空间。
这些分析并不是在证明 “一次编辑” 对所有任务都足够,而是在解释为什么限制搜索范围后,仍可能保留不少有效的修改机会,同时降低学习和搜索的难度。
Jev-LDE 使用 Qwen3-1.7B 作为编辑模型,并在 AGNews、TREC、DBPedia 和 GSM8K 上进行 RL post-training。训练阶段,Meta-Llama-3-8B-Instruct 是唯一的冻结反馈模型。也就是说,Jev-LDE 的 reward signal 来自这一款目标 LLM。
主实验覆盖三类分类任务:
目标模型包括 Qwen2.5-7B-Instruct、Meta-Llama-3-8B-Instruct、Qwen3-8B 和 Qwen3.5-9B,shot budget 从 1-shot 到 4-shot。
对比方法包括 Semantic TopK、BM25、TopK+ConE、LMS3 和 CASE。此外,论文还使用 Banking77、SST-2、AQuA-RAT、TACRED 等未参与 post-training 的 held-out benchmark,并进一步使用 DeepSeek-V4-Flash 测试跨目标模型迁移。
主实验中,Jev-LDE 在 48 个 classification configurations 中有 46 个超过自己的 Semantic TopK 初始化结果,并在其中 44 个配置上取得最好或并列最好准确率。
跨 TREC、DBPedia、Banking77 和四个目标 LLM 统计,平均 one-shot accuracy 从 Semantic TopK 的 81.2% 提升到 88.1% 。

如果只看 TREC 的 1-shot,单次编辑带来的变化更明显:

在 demonstration budget 较紧时,收益尤其明显。论文也测试了 8-shot 和 16-shot:更大的 shot budget 下,Jev-LDE 仍然在 24 个配置中的 18 个超过 Semantic TopK,但整体优势已经没有 1-shot 时那么集中。
Jev-LDE 的训练 reward 只来自 Meta-Llama-3-8B-Instruct,但测试时并没有限定目标模型必须是这一款。论文报告,在其他 Qwen 目标模型上,Jev-LDE 在 36 个配置中的 35 个改善了初始检索结果;在 held-out Banking77 上,16 个配置中有 14 个获得提升;在 held-out SST-2 上,图中展示的所有设置均为正收益。研究者随后换成 DeepSeek-V4-Flash,并测试 TACRED 和 TREC-50。结果仍然为正:TACRED 在不同 shot 设置下提升约 0.3–2.2 个百分点,TREC-50 提升 2.4–4.4 个百分点。

从这些实验可以看到,Jev-LDE 并不只针对训练时使用的那一个目标模型。论文认为,它可能学到了一些更通用的 demonstration editing 判断,例如示例与 query 的相关性、内容冗余,以及对 label boundary 的帮助。不过,这仍然属于论文给出的解释,并没有通过单独实验验证具体机制。
LDE 对前面的检索器没有硬性要求。研究者分别使用 BM25、CASE 和 TopK+ConE 的结果作为初始 demonstration set,再交给 Jev-LDE 进行一次编辑。在测试的 24 个 selector–target–shot 组合中,Jev-LDE 全部带来了提升。

因此,它更接近一个放在检索器后面的后处理模块:前面先找一批示例,Jev-LDE 再根据当前 query 做一次调整。候选池大小也会影响结果。在 one-shot TREC 上,默认的 N=16 candidate pool 达到 80.6% accuracy;扩展到 N=32 后,准确率反而降到 79.4% 。候选项增加以后,编辑器面对的决策空间也随之变大,并不意味着一定能得到更好的结果。
论文进一步比较了不同 editing policy。在 one-shot TREC、Meta-Llama-3-8B-Instruct 作为目标模型的设置下:

Jev-LDE 比 Keep 原始集合高 12.8个百分点,比直接让 Meta-Llama-3-8B-Instruct 根据提示进行编辑高 7.8 个百分点。
从这组结果来看,效果并不是 “随便修改一下 context” 带来的。RL post-training 后,Jev-LDE 对 Keep/Delete/Replace 三类动作的选择更有效。
如果 demonstration refinement 本身需要大量额外计算,那么局部编辑的价值也会受到影响。论文在 one-shot TREC + Qwen2.5-7B-Instruct 上比较了端到端 wall time。Semantic TopK 的运行时间约为 82.1 秒,Jev-LDE 为 91.1 秒,额外时间约 11.0% ;与此同时,准确率从 65.4% 提升到 80.6% 。
相比之下,需要更多目标模型评估的 TopK+ConE 运行时间约为 197.5 秒。Jev-LDE 的时间开销则更接近 LMS3 和 CASE。

因此,Jev-LDE 并不是完全没有额外成本,而是把原本可能需要多次目标模型打分的搜索过程,换成一次小模型编辑,再进行一次正式的目标模型推理。
论文没有把分类任务上的结果直接推广到所有 ICL 场景。在 GSM8K 上,Jev-LDE 与 Semantic TopK 的平均准确率差异基本控制在 1 个百分点以内;在 held-out AQuA-RAT 上,Qwen2.5-7B-Instruct 和 Meta-Llama-3-8B-Instruct 反而分别下降 0.8 和 1.9 个百分点。因此,目前最明显、最稳定的结果还是集中在分类任务。现有实验还不能说明同样的收益会自然出现在数学推理或更开放的生成任务中。
方法本身也有明确限制。LDE 只能在当前 candidate pool 内进行一次 Keep、Delete 或 Replace。如果真正有用的 demonstration 没有进入候选池,或者需要同时修改多个示例,一次编辑就无法处理。换句话说,LDE 是用更小的搜索空间换取更低的推理和学习成本,它并没有取代完整的 demonstration selection。
这项工作的核心思路并不复杂:已有检索器通常已经能够找到一组可用的 demonstration,因此不一定每次都需要重新搜索整个组合空间。
LDE 先保留原有的 demonstration selection,再围绕当前结果做一次局部修改。Jev-LDE 则通过目标模型的可验证反馈进行训练,学习什么时候 Keep、什么时候 Delete、什么时候 Replace。
从实验结果看,这种方式在 few-shot 分类任务中表现比较明显:48 个分类配置中有 46 个改善初始检索结果,平均 one-shot accuracy 从 81.2% 提升到 88.1% ;在 one-shot TREC 上,端到端推理时间相比 Semantic TopK 增加约 11% 。
同时,Jev-LDE 不需要针对每个新的目标模型重新训练,在多个 held-out 分类 benchmark 和新的 target LLM 上也观察到了迁移效果。
对于 ICL,这项工作提供的是一种比较具体的优化方式:不是一味增加 demonstration,也不是重新搜索整个组合空间,而是在已有检索结果上再做一次调整。
文章来自于"机器之心",作者 "机器之心"。