RAG 全流程是什么
RAG(检索增强生成)解决的是模型不知道你私域数据的问题:先把文档解析、切分、向量化后入库,提问时先检索出相关片段,再把这些片段作为资料交给模型作答。它相对微调的优势是更新快、可溯源、成本低。整条链路有五段:解析、切分、向量化、检索与重排、生成。按经验,效果杠杆从大到小大致是切分与重排、向量模型、提示词写法。
基本信息
| 五段链路 | 解析 → 切分 → 向量化 → 检索与重排 → 生成 |
|---|---|
| 核心组件 | 文档解析器、切分器、嵌入模型、向量库、重排模型、生成模型 |
| 质量杠杆 | 切分质量与重排效果影响最大,其次才是嵌入模型 |
| 关键指标 | 召回率、命中片段的相关性、答案可溯源性 |
| 更新方式 | 增量入库,文档变更后重建对应分块 |
| 可溯源要求 | 每个片段保留来源与位置,便于引用与核对 |
五段流水线各做什么
| 阶段 | 做什么 | 关键选择 |
|---|---|---|
| 解析 | 把 PDF、Word、HTML 还原成文本与结构 | 扫描件先做文字识别,保留标题层级 |
| 切分 | 把长文切成适合检索的片段 | 按语义边界递归切分,控制片段长度 |
| 向量化 | 把片段转成向量并与原文一起入库 | 嵌入模型选型与维度、批次效率 |
| 检索与重排 | 先粗召回再精排,取最相关片段 | 混合检索加融合排序,再上重排模型 |
| 生成 | 把片段作为资料交给模型作答 | 要求标注依据,资料不足时明确拒答 |
典型使用场景
- 内部知识问答:把制度、手册、规范做成可问答的知识库
- 客服辅助:检索产品文档并生成可直接发送的回复
- 合同与法务审阅:按条款检索并给出依据位置
- 运维排障:从历史工单与故障报告中检索相似案例
- 代码与文档助手:检索仓库说明与接口文档回答使用问题
检索到生成的最小闭环
检索到生成的最小闭环
qvec = embed(question) # 问题向量化,与入库时用同一模型
hits = vector_db.search(qvec, top_k=20) # 先粗召回,候选池要够宽
hits = rerank(question, hits)[:5] # 重排后只取最相关的几条
ctx = "\n\n".join(f"[{h.id}] {h.text}" for h in hits)
prompt = f"以下是资料,仅根据资料回答并标注编号,资料不足就说无法回答:\n{ctx}\n\n问题:{question}"
print(chat(prompt)) # 生成阶段只消费检索结果调优优先级
| 环节 | 杠杆 | 做法 |
|---|---|---|
| 切分 | 高 | 按段落与标题语义切分,重叠一小段避免答案被切断 |
| 重排 | 高 | 粗召回条数放宽到几十条,再用重排模型精排 |
| 检索方式 | 中高 | 向量加关键词的混合检索,专有名词场景收益明显 |
| 嵌入模型 | 中 | 用业务数据对比几个模型,看召回而不只看榜单 |
| 提示写法 | 中 | 明确只依据资料作答、标注依据、缺资料时说明 |
| 分块数量 | 中 | 给太少信息不足,给太多干扰增大且成本上升 |
没有评测集就没有优化方向:准备几十到上百条真实问题与标准答案,每次改动都跑一遍召回与答案质量,改动才有依据。
解析质量决定召回上限:表格错位、页眉页脚混进正文、多栏串行,这些问题在后续任何环节都无法补救。
检索到的内容一律当作资料而非指令:网页与文档里可能夹带命令式文本,处理不当会变成注入通道。