RAG (Retrieval-Augmented Generation) 是将外部知识检索与大语言模型生成相结合的技术框架,旨在解决大模型的时效性与幻觉问题。
一、 基础理解
1. 什么是 RAG?解决什么问题?
RAG 通过在生成答案前从外部知识库检索相关信息,并将其作为上下文提供给 LLM,从而提升回答的准确性。
核心解决问题:
| 问题 | 说明 |
|---|---|
| 知识时效性 | LLM 训练数据有截止日期,RAG 可接入实时数据 |
| 幻觉问题 | 通过真实文档约束生成,减少编造 |
| 领域知识 | 弥补通用模型在垂直领域(如医疗、法律)的不足 |
| 可溯源性 | 支持引用原文,证据可查 |
2. RAG vs Fine-tuning (微调)
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 数据需求 | 无需训练,只需索引文档 | 需要大量高质量标注数据 |
| 成本 | 低(维护向量库) | 高(计算资源与人工成本) |
| 时效性 | 实时更新(增删索引即可) | 极低(需重新训练) |
| 灵活性 | 高,易于调整知识库 | 低,模型权重固化 |
建议:知识问答选 RAG;风格迁移或特定任务选微调;复杂场景可两者结合。
二、 RAG Pipeline 与核心环节
标准的 RAG 流程:文档加载 → 文本分割 → Embedding → 向量存储 → 检索 → 重排序 → 生成。
环节详解
- Chunk 切分策略:
- 固定长度:简单但易切断语义。
- 递归切分:按段落/句子分层。
- 语义切分:按主题分布切分,最为精准。
- 重叠切分:通常设置 20-30% 重叠区,确保上下文连续。最佳实践建议 Chunk 大小在 256-512 tokens 之间。
- Embedding 模型选择:
- 通用场景:
text-embedding-3-small/large(OpenAI)。 - 中文场景:
BGE(BAAI)、M3E。 - 多语言:
E5(Microsoft)。
- 通用场景:
- 混合检索 (Hybrid Search): 由于向量检索在语义上精细但在关键词匹配(如 ID、专有名词)上较弱,通常结合 BM25 (稀疏向量) 与 Dense Vector (稠密向量)。
最终分数 = alpha * 向量分数 + (1 - alpha) * BM25 分数
三、 深水区优化
1. 召回率 (Recall) vs 精确率 (Precision)
- 召回优化:扩大 Top-K、多路召回、Query 扩展。
- 精确优化:引入 Rerank (重排序) 模型进行精排(如 Cross-encoder)。
2. 什么是 GraphRAG?
将知识图谱(Entity-Relation)引入 RAG。相比传统基于向量块的 RAG,它能捕捉显式的实体关系,擅长处理多跳推理(如:A 的校友 B 创办的公司 C 是做什么的?)。
3. 长文档与冲突处理
- 冲突处理:时效优先原则(使用最新版本)或置信度加权。
- 长文档:采用分层摘要(Map-Reduce)或滑动窗口检索。
四、 前端结合实战
1. 系统架构
前端 (Vue/React) 上传文件后,后端完成解析并索引。问答界面通过 SSE (Server-Sent Events) 实现流式输出。
2. UX 设计要点
- Streaming 设计:逐字显示的打字机效果,Markdown 实时渲染,代码块高亮跟随。
- 引用溯源 (Citation):
- 生成内容中标记
[1],[2]。 - 悬浮显示引用片段,点击跳转原文高亮位置。
- 侧边栏展示资源清单。
- 生成内容中标记
留言板