跳到主要内容

RAG

  • 文档解析
  • 文本清洗
  • 文档切分、切分策略
  • 文档嵌入
  • 元数据提取Metadata
  • 向量存储、Embedding 向量化
  • 检索和生成

RAG 的流程​

text
文档
→ 将文档切成片段
→ 转成向量
→ 存入向量数据库
→ 用户提问
→ 问题转成向量
→ 找相似片段
→ 交给大模型回答

RAG核心阶段​

  • 数据索引阶段
  • 数据查询阶段

RAG质量问题​

  • RAG 的效果不只取决于大模型,更多取决于文档解析质量、Metadata 设计、检索策略和工程化治理

RAG检索流程总结​

  • 向量检索负责从海量知识库中找出一批可能相关的候选 Chunk,通过 top_k 配置初次召回的 Chunk 数量。例如,top_k=10 表示先召回相关性最高的 10 个 Chunk。
  • Rerank 重排序模型负责对召回的候选 Chunk 进行更精细的相关性打分和重新排序,将最可能回答用户问题的内容排在前面,从而减少无关内容,提高最终 Prompt 的质量和 LLM 回答的准确性。
  • 可以通过top_n配置 Rerank 后最终保留的 Chunk 数量。例如,top_n=3 表示从召回的 10 个候选 Chunk 中重新排序,并保留相关性最高的 3 个发送给 LLM

简单来说

  • 用户问题 → 向量检索召回 top_k 个 Chunk → Rerank 重新排序 → 保留 top_n 个 Chunk → 发送给 LLM 生成答案
  • top_k 控制“先找多少个候选文档”,top_n 控制“最终留下多少个高质量结果”
  • 向量检索关注的是召回率 (把包含答案的内容找出来)
  • Rerank关注的是排序准确性。(真正相关的内容排在前面)
  • LLM 生成 关注的是回答准确率 (根据精选内容组织答案)
bash
模型配置解析
↓
Embedding 生成查询向量
↓
向量检索 ─┐
├─ RRF 混合融合h
全文检索 ─┘
↓
Rerank
↓
LLM 生成回答

行业RAG实际方案​

核心问题实际解决方案
精度不够高?混合检索+重排序
检索太短,生成太短?子-父分块
数据类型多,切分难?元数据驱动分块

详细方案​

核心问题实际解决方案解决思路
检索精度不够高混合检索 + RerankBM25 找关键词,向量检索找语义,再由 Rerank 精细打分
小 Chunk 检索准,但上下文不完整子—父分块用小 Chunk 检索,命中后返回所属的大父 Chunk
答案跨越相邻段落相邻 Chunk 扩展命中 Chunk 后,补充前后相邻 Chunk
文档类型多、结构复杂结构感知分块 + 元数据增强PDF 按版面,Markdown 按标题,代码按函数,表格保持表头与数据完整
问题太短或存在歧义查询改写 + 查询扩展将短问题补充为更完整、适合检索的查询
一个问题包含多个子问题查询分解 / Multi-query拆成多个子查询,分别检索后合并
不同问题需要不同数据源查询路由根据意图选择知识库、数据库、搜索引擎或 API
跨多个章节才能回答多跳检索 / Agentic RAG根据第一次检索结果继续生成下一步查询
检索结果重复、噪声多去重 + 阈值过滤 + 上下文压缩删除重叠 Chunk、低分 Chunk 和无关句子
数据持续变化增量索引 + 版本管理文档新增或修改时,只重新处理受影响的数据
企业数据需要权限控制检索前 ACL/租户过滤先根据用户权限过滤,再进行向量或关键词检索
LLM 容易编造引用溯源 + Grounded Prompt + 拒答机制要求答案必须来自检索上下文,没有依据时明确拒答
延迟和成本过高两阶段检索 + 动态参数 + 缓存便宜的检索先筛选,再对少量候选执行昂贵的 Rerank
不知道效果好不好离线评测 + 在线监控分别评估检索、重排序和最终生成效果

问题相关​

  • 文档解析的问题
    • PDF 解析难,如文字顺序错乱、页眉页脚污染、目录污染
  • 解析导致语义丢失
  • 文档里面涉及的公式、代码可能会切坏