Q1516项目实战与企业级真题解析通用与软实力AgentAlpha 社区真题库约 8 分钟更新 2026-09-29

What are the different approaches for choosing examples for few-shot prompting

What are the different approaches for choosing examples for few-shot prompting

1️⃣ 考察意图

面试官想考察你对 few-shot prompting 的工程化理解,而非简单背诵“选几个例子”。刁钻点在于:多数人只会说“随机选”或“选最相似的”,但实际落地时,示例选择直接决定模型在长尾分布、噪声数据上的表现。答好了能展示:① 对检索系统(如 embedding + HNSW)的熟悉度;② 对 trade-off(如相似度 vs 多样性)的权衡能力;③ 对动态选择(如 RAG 实时检索)的实战经验。这是区分“调参侠”和“系统设计者”的关键题。

2️⃣ 标准答

Few-shot 示例选择的核心目标是:用最少例子最大化模型泛化能力。常见策略分四类,各有 trade-off 和坑。

1. 随机选择(Baseline)

  • 做法:从训练集中均匀采样 k 个示例。
  • 为什么这么做:零成本、易实现,适合数据分布均匀的场景。
  • 实际落地的坑:若数据长尾(如 90% 是“正常交易”,10% 是“欺诈”),随机选可能全是正常样本,导致模型对欺诈识别为 0。解法:先做分层采样,按标签比例选例。

2. 基于相似度(k-NN + Embedding)

  • 做法:用 Sentence-BERT 或 OpenAI Embedding 将输入和候选示例编码,计算余弦相似度,选 Top-k。
  • 为什么这么做:直觉上,相似示例提供最相关上下文,尤其适合分类任务(如情感分析)。
  • 工程取舍:相似度高 ≠ 信息量大。例如,输入“今天天气真好”,最相似示例可能是“今天天气不错”,但模型已能处理,不如选“今天下雨了”提供对比。解法:用 MMR(最大边际相关性) 平衡相似度和多样性:MMR = λ * Sim(query, example) - (1-λ) * max(Sim(example, selected)),λ 通常取 0.5-0.7。
  • 实际落地的坑:embedding 模型本身有偏差。例如,用 OpenAI text-embedding-ada-002 对中文长文本(>512 tokens)会截断,导致相似度计算失真。解法:先用 chunking(如 256 tokens 滑动窗口)分段编码,再聚合。

3. 基于多样性(聚类 + 覆盖)

  • 做法:对候选示例做 K-Means 聚类(k=示例数),每类选 1 个离质心最近的样本;或用 Determinantal Point Process (DPP) 直接选子集。
  • 为什么这么做:覆盖不同模式(如正面/负面/中性情感),避免冗余。适合多标签分类或生成任务(如摘要)。
  • 实际落地的坑:聚类数需手动调,若数据类别数未知(如开放式问答),聚类可能分裂同一语义。解法:用 HDBSCAN 自动确定聚类数,再选代表例。

4. 基于难度(主动学习 + 模型不确定性)

  • 做法:用一个小模型(如 DistilBERT)在候选示例上预测,选置信度最低的(如熵最高)作为示例。
  • 为什么这么做:模型在困难样本上犯错概率高,提供这些示例能纠正偏差。适合少样本场景(如 2-4 shot)。
  • 工程取舍:计算成本高——每来一个输入都要跑一次小模型。解法:离线预计算候选示例的难度分数(如用训练集上的交叉验证误差),存到向量数据库(如 FAISS),在线只做检索。

5. 动态选择(RAG 实时检索)

  • 做法:将输入作为 query,从外部知识库(如文档、历史对话)检索最相关示例,实时拼接 prompt。
  • 为什么这么做:示例库可动态更新,适合长尾或时效性强的任务(如客服问答)。
  • 实际落地的坑:检索延迟高(embedding + HNSW 搜索约 10-50ms),若用户等待时间 > 200ms 会卡顿。解法:用 FlashAttention 加速编码,或对高频 query 做缓存(如 LRU cache)。

总结:随机选是下限,相似度选是默认,多样性选是进阶,难度选是调优,动态选是系统级方案。实际项目通常组合使用:先用聚类保证多样性,再按相似度排序,最后用 MMR 去重。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从策略分类、工程取舍、实际坑三个层面回答。策略上,有随机、相似度、多样性、难度、动态五种,核心是平衡相关性和信息量。工程上,相似度选例要用 MMR 去冗余,动态选例要控制检索延迟。实际坑包括 embedding 截断和长尾分布偏差。总结一句:没有万能策略,需根据任务类型和延迟预算组合使用。”

4️⃣ 高频追问 & 应对

追问 1:你提到 MMR,具体 λ 怎么调?有没有理论依据?

λ 控制相似度和多样性的权重。理论依据是:当任务对上下文敏感(如情感分析)时,λ 应高(0.7-0.9);当任务需要覆盖多模式(如多标签分类)时,λ 应低(0.3-0.5)。实际调参:在验证集上做网格搜索,步长 0.1,选 F1 最高的 λ。若没验证集,用启发式:先算候选示例的平均 pairwise 相似度,若 >0.8(太冗余),λ 设 0.5;若 <0.5(已多样),λ 设 0.8。

追问 2:动态选择时,如果知识库有 100 万条示例,怎么保证检索速度?

用 FAISS 的 IVF-PQ 索引:IVF 做倒排聚类(nlist=4096),PQ 做乘积量化(m=64,压缩 8 倍),搜索时只查 1 个聚类(nprobe=1),延迟可压到 5ms 内。代价是召回率从 95% 降到 85%,但 few-shot 对召回不敏感——只要 Top-5 里有一个好例就行。若需高召回,用 HNSW(延迟 20ms,召回 99%),但内存占用高(100 万条 768 维 float 约 3GB)。

追问 3:你提到难度选择,但小模型和大模型(如 GPT-4)的“困难”定义不同,怎么对齐?

这是个好问题。解法:用大模型在验证集上跑一次,标记它答错的样本作为“困难示例”,然后训练一个小模型(如 BERT)做分类器,预测大模型的错误模式。在线推理时,小模型输出置信度,低置信度就检索这些“困难示例”。这叫 proxy-based difficulty,成本可控(小模型推理 < 1ms)。

5️⃣ 避坑 · 常见错误答法

  • ❌ “选最相似的 k 个例子就行,embedding 相似度越高越好。” → ✅ “相似度选例会导致冗余,需用 MMR 或多样性约束。例如,输入‘苹果好吃’,最相似示例全是‘香蕉好吃’,不如加一个‘苹果贵’提供对比信息。”
  • ❌ “动态选择就是 RAG,直接搜 Top-5 拼到 prompt 里。” → ✅ “动态选择要考虑延迟和示例质量。RAG 的检索器可能返回噪声,需加 reranker(如 Cohere Rerank)过滤,或设相似度阈值(如 <0.6 的丢弃)。”
  • ❌ “随机选就行,反正大模型能力强。” → ✅ “大模型在长尾分布上仍会 bias。例如,GPT-4 在医疗诊断任务上,若示例全是常见病,对罕见病识别率下降 30%。随机选只适合均匀分布。”

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“动态选择”切入,强调你如何用 FAISS + MMR 在客服系统中实时检索示例,并对比了随机选和相似度选的 F1 提升(如 +15%)。
  • 如果你只做过传统 NLP:用“聚类 + 多样性”类比迁移,说你用 K-Means 对文本聚类,每类选代表例做 few-shot,类似文本分类中的“原型网络”。
  • 如果你是校招无项目:聚焦“相似度选例”的论文复现,说你用 Sentence-BERT 在 SST-2 上复现了 MMR 效果,并分析了 λ 对准确率的影响(附 GitHub demo)。
  • 《Making Pre-trained Language Models Better Few-shot Learners》(Gao et al., 2021)—— 提出 KATE 用相似度选例
  • 《Diverse Few-Shot Text Classification with Contrastive Learning》(2022)—— 用对比学习增强多样性
  • 《REALM: Retrieval-Augmented Language Model Pre-Training》(Guu et al., 2020)—— 动态选例的 RAG 基础
  • 《FAISS: A Library for Efficient Similarity Search》(Johnson et al., 2019)—— 向量检索工程实现
  • 《Active Learning for Few-Shot Text Classification》(2023)—— 基于难度的选例策略

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。