fewshot示例通常指的是单个示例,用于展示输入输出对,帮助模型理解任务格式或风格。

在RAG中向量记忆通常指将文档或知识片段向量化后存储,用于检索相关上下文。

那fewshot示例是否适合存入向量数据库作为检索对象,即当作向量记忆存储在RAG中?

绝大多数场景下few-shot 示例不应该存在向量记忆(RAG)里。

它们属于Prompt 模板/系统指令,不属于用户/业务知识库。

1 fewshot示例和RAG存储

通常不建议将 few-shot 示例作为独立的向量记忆存储在常规的 RAG 知识库中。

在某些特定场景下虽然可以采用RAG,但是有更优的替代方案。

1.1  RAG

RAG/向量记忆,一般存储的是用户数据、业务文档、历史对话、事实知识。

这些数据属于外部信息,一般采用RAG知识库方式存储。

1.2 fewshot示例

One-shot / Few-shot 示例 = 任务范式、格式、规则,属于 Prompt 结构,不属于知识库。

所以通常One-shot / Few-shot 示例写死在 System Prompt/模板里。

2 为什么不适合RAG?

RAG标准流程是根据用户查询 q 检索出相关文档片段 d,然后拼接 [d, q] 送给 LLM 生成答案。

如果将 fewshot 示例,一个输入-输出对,直接向量化存入知识库,会出现以下问题。

2.1 检索自相矛盾

RAG系统存在召回不稳定的问题,向量检索可能召回不全、召回错、漏示例。

当你问一个新问题时,检索器会去寻找与它“语义最相似”的内容。

如果知识库里有一个“Q: 北京的省会? A: 北京”的示例,那么检索“Q: 巴黎的首都?”时,

很可能因为“首都/省会”这个概念而把无关示例检索出来。

检索到的可能不是知识,而是格式模板。

另外,Few-shot 对顺序、格式极度敏感,而RAG检索打乱顺序,也会导致内容污染。

2.2 内容污染/语义干扰

示例会污染真实知识库的检索结果。

LLM 会不加区分地学习 [d, q] 中的所有信息。

如果检索到的示例是“Q: 1+1=? A: 2”,而用户问的是“计算 5*7”,模型可能会强行模仿示例的“简单问答格式”,甚至错误地输出“5*7=2”。

示例的内容,这里指错误的或特例的,会被当作事实知识。

2.3 低效上下文利用

固定示例没必要走embedding + 检索。一个 oneshot 示例可能消耗数百个 token,但其信息密度远低于同等长度的知识段落。

对于需要复杂推理的任务,挤占了真正相关文档的空间。

3 可以考虑RAG的场合

fewshot示例在有些场合是可以合理利用RAG。

如果RAG有明确功能分区,可以将 oneshot 示例存入专门的“示例库”,而非主知识库。

3.1 教会模型处理特定格式

例子:用户要求“用 JSON 列出三国名将”。

知识库中存储一个oneshot示例。

{"question": "列出唐朝诗人", "answer": "[{\"name\":\"李白\",...}]"}

检索时使用意图分类器先判断用户是否需要“格式化输出”,然后仅从“示例库”中检索格式示例,不检索主知识库。最后拼接成:[格式示例, 用户问题, 相关知识文档]

3.2 极度领域化的类比推理任务

例子:法律判决预测系统。

有一个历史案例<事实描述, 判决结果>。用户输入新案例事实。

将案例表示为向量对<事实向量,结果向量>,而非简单拼接。

检索时用新事实向量找到示例库中最相似的事实向量,然后返回对应的结果向量作为参考。

这更像是基于记忆的推理,而非标准 RAG。

3.3 示例非常多需要动态挑选

你的示例非常多,几十上百条,且需要动态挑选。比如:

1)多领域客服,每个领域一套示例

2)多任务 Agent,不同任务用不同范式

这时可以,把<任务类型,示例>存在向量库。

根据当前任务检索匹配一套完整示例,一次性塞进 Prompt,不能打散。

3.2提到的示例在某种程度上,也是示例非常多的场景,需要动态挑选。

4  替代方案

如果需要让模型学会从例子中学习(In-Context Learning),以下方案比存入RAG向量库更合理。

4.1 固定系统提示

任务格式固定场景,如总是输出 JSON,总是先分析再回答。

这时将1-3个精心设计的fewshot示例直接写在system_prompt里,这是最简单、最可靠的方法。
 

4.2 少样本动态选择

任务依赖输入内容场景,比如情感分类、代码生成。

此时,维护一个示例池(question向量化)。检索时用user_question找到最相似的k个示例,然后动态插入到prompt 中。

注意这些示例不放入主知识库,而是单独管理。

4.3 思维链(CoT)示例

复杂推理任务场景,比如数学、逻辑。

此时将带推理步骤的fewshot示例放system_prompt或动态插入,能提升推理能力。

5 fewshot示例决策树

这里通过一个fewshot示例决策树来梳理其应用场合。

详情如下

用户需要 oneshot 示例吗?

├─ 目的是教会模型【输出格式/风格】?
│   └─→ 是:直接写在 system_prompt 中(固定)。✅ 推荐

├─ 目的是提供【特定任务的类比案例】(如分类、代码)?
│   └─→ 是:维护独立示例池,动态检索 top-k 插入 prompt。⚠️ 可行但需隔离

├─ 目的是提供【事实性知识】(如“巴黎的首都是巴黎”)?
│   └─→ 否:这不是示例,这是错误的知识表示。应拆分为独立文档存入主知识库。

└─ 目的是让模型【从单个例子中泛化推理】?
    └─→ 风险极高:LLM 很容易过拟合到这个例子。更可靠的做法是使用更长的上下文窗口,提供多个多样化的示例。



 

reference

---

RAG-Based Dynamic Prompting for Biomedical NER

https://sarkerlab.org/prompts/rag-biomedical-ner/

Tutorial: Conversational RAG Agent using InMemoryChatMessageStore

https://haystack.deepset.ai/tutorials/48_conversational_rag

Agentic RAG with Llama 3.2 3B

https://haystack.deepset.ai/cookbook/llama32_agentic_rag

Retrieval Augmented Generation (RAG)

https://learn.deeplearning.ai/courses/retrieval-augmented-generation/lesson/jjf7di/prompt-engineering%253A-advanced-techniques

PERC: Plan-As-Query Example Retrieval for Underrepresented Code Generation

https://arxiv.org/abs/2412.12447

UIUC清华微软联合提出PlugMem:当Agent记忆告别经历,存储经验

https://m.163.com/dy/article/KNOPFUHD0511AQHO.html?spss=adap_pc

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐