Skip to content
🔗 分享本题
查看我的学习进度 →

记忆点:静态示例成本低但容易过时,动态检索更准但有延迟开销。

💡 答案要点

Static Few-Shot(静态)vs Dynamic Few-Shot(动态)核心差异:

维度Static Few-ShotDynamic Few-Shot
示例来源硬编码在 Prompt 里运行时从知识库检索
适用场景固定任务、简单分类开放域任务、领域多样
维护成本低(改一次即可)高(需维护示例库 + 向量索引)
准确率上限~75%(示例不匹配时大幅下降)~92%(能选到最佳示例)
延迟影响几乎零额外延迟+检索时间(通常 <50ms)
Token 消耗固定(最多 5 个示例 × 上下文)动态(可能 0~N 个示例)

何时该用什么(面试高频决策题):

✅ 用 Static Few-Shot:
- 任务类型固定且单一(如情感分类、NER)
- 用户群体和输入分布稳定
- Token 预算紧张 / 延迟敏感
- 快速原型阶段

✅ 用 Dynamic Few-Shot:
- 开放域问答(用户问题跨度大)
- 多领域混合场景(医疗+金融+法律混用)
- 需要持续优化但不想频繁调参
- 示例库足够大(100+ 优质示例)

❌ 两者都不适合:
- 简单规则就能解决的任务
- 实时性要求极高的场景(如 <100ms SLA)

Dynamic Few-Shot 实现模式:

python
class DynamicFewShot:
    def __init__(self, example_db, embedding_model):
        self.db = example_db       # 向量数据库存储示例
        self.embedder = embedding_model
    
    def retrieve_examples(self, user_query, k=3):
        """根据用户查询语义相似度检索最相关的示例"""
        query_emb = self.embedder.encode(user_query)
        return self.db.similarity_search(query_emb, k=k)
    
    def build_prompt(self, user_query, retrieved_examples):
        """把检索到的示例动态拼入 Prompt"""
        prompt = "请根据以下示例回答问题:\n\n"
        for i, ex in enumerate(retrieved_examples, 1):
            prompt += f"示例 {i}:\n输入:{ex.input}\n输出:{ex.output}\n\n"
        prompt += f"\n问题:{user_query}\n回答:"
        return prompt

效果数据(行业基准测试):

方法GSM8K(数学)OpenQA(开放问答)Code Translation平均延迟
Zero-shot52%41%35%基准
Static Few-Shot64%53%48%+5ms
Dynamic Few-Shot78%68%62%+40ms

面试话术:

"Static Few-Shot 胜在简单高效,适合任务边界清晰的场景;Dynamic Few-Shot 的核心优势是通过语义检索为每个输入选择最优的 N 个示例,典型提升 15-20 个百分点。但在生产环境要权衡检索延迟——我的做法是预计算好 top-K 示例缓存层,配合异步检索,让用户体验无感知。对于冷启动期(示例库不足),自动降级到 Static 或 Zero-shot。"