RAG 系统的核心设计决策
向量化、检索策略、融合生成——每一步都是取舍
RAG 解决的根本问题
LLM 的知识有两个根本局限:训练截止日期和参数容量上限。RAG(Retrieval-Augmented Generation)不修改模型权重,而是在推理时动态注入相关知识。
Query → Embedding → 向量检索 → Top-K 文档 → Prompt 拼接 → LLM 生成
每个箭头都是设计决策点。
分块策略:被低估的关键决策
固定大小分块(Fixed-size chunking)最简单,按字数或 token 数切割。问题是可能切断语义单元——一句话被切成两块。
语义分块(Semantic chunking)按段落、章节切割,保留语义完整性。推荐用于结构化文档(技术文档、法律文本)。
分块大小的取舍:
- 块太小 → 上下文不足,LLM 难以生成完整答案
- 块太大 → 噪声多,检索精度下降,且受 context window 限制
实践中常用 512 token,overlap 64 token。
向量模型选型
不同 Embedding 模型的能力差异巨大。中文场景推荐:
text-embedding-3-large(OpenAI):综合效果强,有成本bge-m3(BAAI):多语言,开源,支持稠密/稀疏/多向量stella_en_1.5B:英文长文本效果优秀
维度选择:高维向量(3072d)精度更高,但存储和检索成本翻倍。可用 Matryoshka Representation Learning(MRL)动态截断维度。
检索策略
稠密检索(Dense retrieval):基于向量相似度(cosine/dot product)。语义匹配能力强,对措辞变化不敏感。
稀疏检索(Sparse / BM25):基于关键词匹配。对专有名词、代码、产品型号等精确词汇匹配更可靠。
混合检索(Hybrid)= 稠密 + 稀疏,用 RRF(Reciprocal Rank Fusion)合并排名:
rrf_score = Σ 1 / (k + rank_i) # k 通常取 60
生产环境推荐混合检索,召回率比单一方式提升 15-30%。
重排序(Reranking)
Top-K 检索的结果送入 Cross-encoder 重排序,精度显著提升:
向量检索 Top-50 → Reranker → Top-5 → LLM
Cross-encoder 同时编码 query 和 document,比双塔模型精度高,但速度慢,只适合对 Top-K 小集合精排。
推荐模型:bge-reranker-v2-m3、jina-reranker-v2。
常见失败模式
| 问题 | 症状 | 解决方案 | |------|------|----------| | 文档切割不当 | 答案不完整 | 调整分块策略,增加 overlap | | 向量模型与业务不匹配 | 语义偏差大 | Fine-tune 或更换模型 | | Top-K 太小 | 召回率低 | 增大 K,配合 Reranker 精排 | | Prompt 过长 | 超出 context window | 压缩或分层检索 | | 幻觉仍然存在 | 答案与文档矛盾 | 添加引用来源,让 LLM 引用原文 |