跳到正文

RAG 系统有哪些常见陷阱?

从检索质量、上下文处理到生成效果,避坑指南

原题:在实现RAG系统时,有哪些关键的技术细节和常见陷阱需要特别注意?请从检索质量、上下文处理、生成效果等方面进行分析。

重排与优化 · 美团真题

30 秒回答

  1. 检索阶段:分块策略、embedding选型、多路召回、重排序优化
  2. 上下文处理:窗口长度控制、冗余去重、相关性过滤
  3. 生成阶段:prompt工程、引用溯源、幻觉抑制
  4. 系统层面:延迟优化、缓存策略、离线评估体系

回答与解析

答案要点

  • 检索阶段:分块策略、embedding选型、多路召回、重排序优化
  • 上下文处理:窗口长度控制、冗余去重、相关性过滤
  • 生成阶段:prompt工程、引用溯源、幻觉抑制
  • 系统层面:延迟优化、缓存策略、离线评估体系

一、检索质量

分块策略

  • 按语义分块优于固定长度,可用LLM辅助判断边界
  • 块大小一般256-512 tokens,需保留上下文重叠(overlap)
  • 表格/代码等特殊内容需单独处理,不能粗暴切分

Embedding与召回

  • 领域数据务必微调embedding,通用模型域外效果差
  • 多路召回:向量检索 + 关键词(BM25)+ 知识图谱
  • 重排序(Rerank)是性价比最高的优化,Cross-Encoder比Bi-Encoder准但慢

常见陷阱

  • 只测Top-1命中率,忽略MRR和召回率
  • 向量维度高≠效果好,768/1024够用,关注训练数据质量

二、上下文处理

窗口管理

  • 检索结果去重:MMR算法或语义去重避免重复段落
  • 相关性过滤:设阈值剔除低分chunk,宁可少也不要噪声
  • 动态窗口:根据问题复杂度调整检索数量(简单问题3-5条,复杂问题10条+)

结构化组织

【来源1】xxx.txt
内容:...

【来源2】yyy.pdf
内容:...
  • 显式标注来源,方便生成阶段引用和溯源

三、生成效果

Prompt设计

  • 明确指令:"仅基于以下材料回答,不知道就说不知道"
  • 加入CoT引导:"先分析材料,再给出结论"

幻觉抑制

  • 要求模型生成引用标记,事后校验答案与原文一致性
  • 置信度打分:让模型自评答案可靠性,低置信度转人工

常见陷阱

  • 检索内容多但生成忽略,需监控context utilization
  • 多文档冲突时无仲裁策略,应提示模型说明分歧

四、系统层面

  • 延迟优化:向量检索<50ms,重排序并行化,流式生成首token
  • 离线评估:构建黄金测试集,分离评估检索(Recall@K)和生成(F1/人工评分)
  • 缓存:高频query embedding缓存,热门文档预加载

口语版讲法(约4分钟)

  • RAG落地核心是检索和生成的平衡
  • 检索阶段:分块、混合检索与重排
  • 上下文处理:去重过滤与动态窗口
  • 生成阶段:prompt约束与幻觉抑制
  • 系统评估与风险意识

这道题其实问的是RAG落地时怎么平衡检索质量、上下文利用和生成效果,避免出现检索一堆但生成瞎编的尴尬。我重点讲几个实战中容易踩坑的地方。

先说检索。分块策略是个基础但容易翻车的点。固定切分简单,但遇到表格、代码或长段落,边界切在语义中间,检索召回率直接崩。我会优先按语义切,实在不行用Chunk重叠加LLM辅助判断边界。块大小一般256到512 tokens,太大模型上下文窗口塞不下,太小丢信息。前提是你的文档结构清晰,如果文档质量差,语义切分反而更乱,那不如固定切分加overlap兜底。

检索召回阶段,很多人只做向量检索,但通用Embedding在垂直领域效果很差。我会做 混合检索,向量加BM25关键词两条腿走路。向量负责语义,BM25负责精确匹配,比如订单号、错误码这种。然后一定要加 重排,用Cross-Encoder把Top-K结果精排一遍,这是性价比最高的优化,能显著提升最终生成质量。不过重排有延迟,如果要求实时响应,得权衡一下。

再来看上下文处理。检索回来的chunk往往有重复或者不相关的内容,直接塞给模型会稀释注意力。我会做两步:先去重,用语义相似度或MMR算法,避免同一信息反复出现;再过滤,设一个相关性阈值,分太低的直接扔掉,宁可少一点也不能让噪声干扰生成。但这里有个坑:阈值设太高可能漏掉关键信息,尤其当问题复杂时。所以我会 动态调整检索数量,简单问题3-5条,复杂问题10条以上,同时根据置信度动态裁剪。

生成阶段,prompt设计很关键。我会明确告诉模型:"仅基于以下材料回答,不知道就说不知道",并且在prompt里要求它生成引用标记,比如[来源1],这样事后能校验答案和原文是否一致。这也是抑制幻觉的重要手段。另外,我会让模型输出置信度评分,低分答案走人工复核。实际业务中,比如客服退款场景,文档里政策可能有冲突,比如满减和优惠券能不能叠加,模型需要主动说明分歧,不能自己编一个规则。这里有个常见的失败场景:检索内容很多但模型根本不看,自说自话。所以上线后我会监控 上下文利用率,看看模型是不是真的在引用检索结果。

另外,评估体系不能只看Top-1命中率,要关注召回率和MRR。离线评估时,我会把检索和生成分开测,检索用Recall@K,生成用F1或人工评分。但更关键的是在线效果,比如用户满意度或任务完成率。如果发现生成质量差,可能是检索没召回关键信息,也可能是prompt没约束好。这时候我会先分析失败case,定位是检索还是生成的问题,再针对性优化。

所以整体上,我会把RAG看成 检索和生成的系统工程,不是简单搭个管道就完事。每一步都要有评估和兜底,尤其是幻觉抑制和上下文利用,这两个是RAG落地的核心痛点。

关键一句:RAG评估要分离检索和生成,分别用Recall@K和F1/人工评分,但更关键的是在线效果指标。

面试官还可能这样问

  1. 问法 1 · 场景切入

    我看你做过知识库问答系统。假设用户问了一个订单问题,系统从文档里检索出5段内容,但最后生成答案时却忽略了最相关的两段,或者把两段矛盾的信息混在一起回答——你觉得这种问题可能出在哪个环节?

  2. 问法 2 · 层层追问

    RAG系统里检索回来的内容你怎么喂给模型?……如果一次检索了10段,但上下文窗口只能塞5段,你怎么办?……那你怎么保证选出来的5段是最有用的,而不是重复或者无关的?

  3. 问法 3 · 直球架构

    实现一个RAG系统,从检索质量、上下文处理、生成效果三方面,你觉得哪些技术细节最关键?常见的坑有哪些?比如分块策略、重排序、幻觉抑制这些,说说你的经验。

同模块相关题目