RAG的核心价值
为什么需要RAG?
大模型虽然能力强大,但存在三个固有局限:
RAG通过在生成前检索相关文档,让模型基于真实资料回答,有效解决了这三个问题。
RAG vs 微调
| 维度 | RAG | 微调 |
|------|-----|------|
| 知识更新 | 实时更新,无需重新训练 | 需要重新训练 |
| 计算成本 | 推理时增加检索开销 | 训练时成本高,推理无额外开销 |
| 可解释性 | 高,可追溯引用来源 | 低,知识隐含在参数中 |
| 适用场景 | 动态知识、文档问答 | 风格定制、能力强化 |
| 数据隐私 | 数据留在检索系统中 | 数据进入模型参数 |
2026年的最佳实践是:RAG处理事实性知识,微调处理风格和能力。
2026年RAG架构演进
传统RAG架构
用户查询 → Embedding → 向量检索 → Top-K文档 → 拼接Prompt → LLM生成传统架构简单直接,但存在检索精度不足、上下文过长、无法处理复杂推理等问题。
高级RAG架构(2026年主流)
用户查询
↓
查询理解与改写(Query Understanding)
↓
多路检索(Hybrid Retrieval)
├→ 向量检索(语义相似)
├→ 关键词检索(精确匹配)
└→ 知识图谱检索(关系推理)
↓
重排序(Reranking)
↓
上下文压缩与组织(Context Compression)
↓
LLM生成(带引用标注)
↓
结果验证与纠错(Self-Verification)核心组件技术选型
1. Embedding模型
2026年主流Embedding模型对比:
| 模型 | 维度 | 多语言 | 最大输入 | 特点 |
|------|------|--------|---------|------|
| BGE-M3 | 1024 | 100+语言 | 8192 | 开源,中文最佳 |
| text-embedding-3-large | 3072 | 是 | 8191 | OpenAI,效果稳定 |
| Voyage-3 | 1024 | 是 | 32000 | 专为数 据检索优化 |
| Qwen-Embedding | 1536 | 是 | 8192 | 阿里开源,性价比高 |
选型建议:中文场景首选 BGE-M3,英文场景使用 text-embedding-3-large,预算有限时使用 Qwen-Embedding。
2. 向量数据库
| 数据库 | 类型 | 特色 | 适用场景 |
|--------|------|------|---------|
| Milvus | 开源 | 分布式,高性能 | 大规模生产环境 |
| Qdrant | 开源 | Rust实现,过滤强 | 中小规模,复杂过滤 |
| Pinecone | 云服务 | 全托管,零运维 | 快速上线,不想运维 |
| pgvector | PostgreSQL扩展 | 与现有DB集成 | 已有PostgreSQL的项目 |
| Cloudflare Vectorize | 云服务 | 与Workers集成 | Serverless架构 |
2026年趋势:pgvector和Cloudflare Vectorize的份额显著增长,因为它们与现有基础设施无缝集成。
3. 重排序模型
检索后的重排序是提升RAG效果的关键步骤:
重排序能将检索准确率提升 15-30%,是高级RAG不可或缺的组件。
4. LLM选择
RAG场景下LLM的选择考量:
高级优化策略
查询改写
用户输入往往模糊或不完整。通过LLM对查询进行改写:
rewrite_prompt = '''
你是一个搜索查询优化器。将用户的自然语言问题改写为更精确的搜索查询。
用户问题:{question}
要求:
1. 提取核心意图
2. 生成2-3个不同角度的改写查询
3. 输出JSON格式
输出格式:
{{"queries": ["改写1", "改写2", "改写3"]}}
'''分块策略
文档分块直接影响检索质量:
推荐配置:
混合检索
结合向量检索和关键词检索的优势:
# 向量检索(语义相似)
vector_results = vector_db.search(query_embedding, top_k=20)
# 关键词检索(精确匹配)
keyword_results = bm25_search(query, top_k=20)
# 融合排序
merged = reciprocal_rank_fusion(vector_results, keyword_results)混合检索能同时覆盖语义理解和精确匹配两种场景,效果优于单一检索方式。
上下文压缩
检索到的文档往往包含大量无关信息。使用LLM对检索结果进行压缩:
compress_prompt = '''
以下是从知识库检索到的文档片段。请提取与用户问题最相关的信息,去除无关内容。
用户问题:{question}
检索结果:{documents}
输出:保留与问题相关的关键信息,去除无关描述。
'''自我验证
生成答案后,让LLM自我验证:
verify_prompt = '''
请验证以下答案的准确性:
问题:{question}
答案:{answer}
参考文档:{context}
检查:
1. 答案是否完全基于参考文档?
2. 是否存在未在文档中出现的信息?
3. 答案是否直接回答了问题?
输出:{{"verified": true/false, "issues": "问题描述"}}
'''评估指标
检索质量
生成质量
推荐使用 RAGAS 框架进行自动化评估:
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
results = evaluate(
dataset=test_dataset,
metrics=[faithfulness, answer_relevancy, context_precision]
)生产部署建议
架构设计
用户请求 → API网关 → 查询处理服务
↓
检索服务(向量DB + 关键词索引)
↓
重排序服务
↓
生成服务(LLM API)
↓
后处理服务(引用标注 + 验证)
↓
返回结果性能优化
监控指标
总结
2026年的RAG已经从简单的"检索+生成"演进为包含查询理解、混合检索、重排序、上下文压缩和自我验证的复杂系统。构建高质量的RAG系统不是选择最好的组件,而是让每个环节协同工作。
推荐技术栈:
💬 评论区 (0)
暂无评论,快来抢沙发吧!