引言:大模型的知识困境
大型语言模型(LLM)虽然具备强大的生成能力,但面临三个核心问题:知识截止(训练数据有时效性)、幻觉(编造不存在的事实)、私有知识盲区(无法访问企业内部文档)。RAG(Retrieval-Augmented Generation)通过将检索系统与生成模型结合,让 LLM 在回答问题时能够引用实时、准确的外部知识源。
1. RAG 核心架构
用户提问 → Query 改写/扩展
↓
Embedding 编码
↓
向量数据库检索 (Top-K)
↓
重排序 (Reranker)
↓
检索结果 + 原始提问 → LLM Prompt 构建
↓
LLM 生成基础检索的答案
↓
后处理(引用标注、事实校验)
↓
返回给用户
2. 向量检索技术深度
2.1 Embedding 模型选择
Embedding 模型的质量直接决定检索效果。当前主流选择:
| 模型 | 维度 | 场景 | MTEB排名 |
|---|---|---|---|
| text-embedding-3-small | 1536 | OpenAI 经济性场景 | Top-10 |
| BGE-M3 | 1024 | 多语言/多粒度检索 | Top-3 |
| jina-embeddings-v3 | 1024 | 长文本(8K token) | 特定场景 SOTA |
| Cohere Embed v3 | 1024 | 企业级商用 | Top-5 |
2.2 向量数据库对比
- Milvus:分布式架构、十亿级向量、支持 GPU 加速
- Qdrant:Rust 实现、高性能、支持过滤性检索(Payload Filter)
- Weaviate:内置向量化模块、GraphQL API、对象+向量混合存储
- ChromaDB:轻量级、开发友好、适合原型开发
- Pinecone:全托管、零运维、适合非技术团队
2.3 索引算法选择
- HNSW(Hierarchical Navigable Small World):高召回率、构建慢、内存占用大
- IVF-PQ(Inverted File with Product Quantization):内存高效、召回率略低
- ScaNN(Google):各向异性量化,适合 Top-K 精确检索
- Vamana(DiskANN):支持磁盘存储、超大规模检索
3. Chunk 策略:决定检索质量的关键
3.1 分块策略
文档分块是 RAG 的第一道工序,直接影响召回率:
- 固定大小分块:简单高效,但可能切断语义段落(chunk_size=512, overlap=128)
- 递归分块:按语义层级递归切割(段落 → 句子 → 词)
- 语义分块:基于 Embedding 相似度突变检测进行切分
- 文档结构分块:利用标题、列表等 Markdown 结构边界
3.2 分块优化技巧
- 句子窗口检索:检索时只取句子,返回时还原为段落上下文
- Auto-merging:小块检索、大块生成——先以小块检索提高精度,再合并相邻小块作为 LLM 上下文
- Hypothetical Questions:预生成文档可能回答的问题,以问题为索引单位
4. Reranker:精度提升的利器
向量检索返回的 Top-K 结果可能存在排序不准确的问题。Reranker 通过交叉编码器(Cross-Encoder)对候选文档进行精确评分:
# 使用 Cohere Reranker 进行重排序
import cohere
co = cohere.Client(API_KEY)
results = co.rerank(
model='rerank-english-v3.0',
query='RAG系统中的Chunk策略',
documents=retrieved_chunks, # 从向量数据库检索的候选
top_n=5 # 取重排序后的 Top-5
)
5. RAG 评估指标体系
5.1 检索质量指标
- Recall@K:前 K 个结果中包含正确答案的比例
- MAP(Mean Average Precision):正确结果在结果列表中的平均位置
- nDCG@K:考虑位置加权的排序质量
5.2 生成质量指标
- Faithfulness:生成的回答是否忠实于检索到的上下文(RASCE / ARES)
- Relevance:回答是否直接回应了用户的问题
- Correctness:回答的事实准确性(与 Ground Truth 对比)
- RAGAS 框架:开源 RAG 自动化评估库,自动计算上述指标
6. 生产部署优化
6.1 Query 改写与扩展
用户提问往往不完整或模糊。通过 LLM 进行 Query 改写可以显著提升检索精度:
- HyDE(Hypothetical Document Embedding):让 LLM 先生成假答案,再以其 Embedding 检索
- Multi-Query:将原始问题改写为 3-5 个相似问题,检索后去重
- Step-back Prompting:将具体问题抽象为更通用的大问题
6.2 缓存与会话管理
- 语义缓存:对语义相近的查询直接返回缓存结果(GPT-Cache)
- 会话内检索:结合对话历史进行上下文感知检索
- 引用溯源:记录答案来自哪些文档,便于用户验证
总结
RAG 不是简单的"向量数据库 + LLM"拼接,而是一个需要精细调优的工程系统。从 Chunk 策略选择到 Reranker 部署,从 Query 改写到评估体系建立——每个环节都需要深入理解并反复迭代。掌握 RAG 系统工程,是构建企业级 AI 应用的关键能力。

发表评论 取消回复