RAG检索增强生成的工作原理与适用场景
RAG(Retrieval-Augmented Generation)将大模型的生成能力与外部知识库结合,解决纯参数化模型知识滞后和幻觉问题。企业部署AI对话系统、智能客服、文档问答时,RAG方案比微调更具性价比——无需重新训练模型,知识库更新即时生效。
RAG的核心流程分三步:文档预处理与切分 → 向量化存储与检索 → 上下文拼接与生成。每个环节的配置质量直接影响最终回答准确性。
文档切分策略:Chunk大小与重叠窗口的选择
文档切分是RAG链路中影响最大的环节。Chunk过大会稀释检索精度,过小会丢失上下文语义。生产环境推荐配置:
# 使用LangChain的RecursiveCharacterTextSplitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=['\n\n', '\n', '。', ',', ' ']
)
chunks = splitter.split_text(document_text)
chunk_size:中文场景推荐384-768 tokens,技术文档偏短,法律合同偏长。chunk_overlap:通常设为chunk_size的10%-15%,确保跨块语义不中断。separators:按优先级切分,优先段落换行,其次句号逗号,保证语义完整。
Markdown和代码文档建议用MarkdownTextSplitter,保留标题层级结构,检索时可附加章节信息提升相关性。
Embedding模型选型与向量数据库对比
Embedding模型决定语义表达质量。中文场景实测对比:
- bge-large-zh-v1.5:开源首选,MTEB中文榜单排名靠前,维度1024,推理速度快
- text-embedding-3-large:OpenAI商用方案,多语言表现稳定,维度3072可裁剪
- m3e-large:轻量级,适合GPU资源有限场景,维度1024
向量数据库选型关注读写性能和运维成本:
| 数据库 | 适用规模 | 核心优势 | 部署复杂度 |
|---|---|---|---|
| Milvus | 亿级 | GPU加速检索,云原生架构 | 中等 |
| Weaviate | 千万级 | 内置多模态,GraphQL API | 低 |
| Chroma | 百万级 | 零配置启动,Python原生 | 极低 |
| Qdrant | 千万级 | Rust实现,过滤性能强 | 低 |
小规模验证用Chroma快速启动,生产环境切分存储层和检索层则用Milvus或Qdrant。
检索策略:相似度搜索之外的关键优化
纯向量相似度搜索在面对专业术语、缩写和歧义查询时表现不足。生产系统需要叠加以下策略:
混合检索(Hybrid Search):向量检索 + BM25关键词检索加权融合。向量捕获语义相似,BM25捕获精确匹配。
# Weaviate混合检索示例
from weaviate.util import get_valid_uuid
result = client.query
.get("Document", ["content", "title"])
.with_hybrid(
query="部署Kubernetes集群的最佳实践",
alpha=0.7, # alpha越大向量权重越高
)
.with_limit(5)
.do()
查询改写(Query Rewriting):用LLM将用户口语化查询改写为结构化检索语句,提升召回率。
重排序(Reranking):粗检索取top-20,用Cross-Encoder模型对(query, chunk)对精排,返回top-5。BGE-reranker-large在中文场景表现突出。
上下文窗口管理与Prompt工程
检索到的Chunk按相关度拼接后注入Prompt,需控制总长度在模型上下文窗口内:
prompt_template = """基于以下参考资料回答问题。如果资料中不包含答案,回答"未找到相关信息"。
参考资料:
{context}
问题:{question}
回答:"""
几个实操要点:chunk之间用明确分隔符隔开(如\n—\n),避免模型混淆不同来源;在system prompt中明确要求模型区分参考信息与自身知识;对超长上下文做截断处理,优先保留相关度最高的chunk。
缓存策略也不可忽略:对高频查询的检索结果做LRU缓存,可降低Embedding推理和向量检索延迟,P99响应从2秒压到200毫秒以内。
评估指标与持续优化闭环
RAG系统上线后需要量化评估,而非凭感觉调参。核心指标:
- 召回率(Recall@K):正确答案出现在Top-K检索结果中的比例
- 答案正确率:生成答案与ground truth的语义匹配度
- 忠实度(Faithfulness):生成答案是否可被检索到的chunk支撑,衡量幻觉比例
用RAGAS或TruLens框架做自动化评估,定期用bad case驱动切分策略和检索参数调整。RAG不是一次性配置,而是持续迭代的系统工程。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/rag-jian-suo-zeng-qiang-sheng-cheng-shi-zhan-cong-wen-dang/