一、RAG 系统架构概览
检索增强生成(Retrieval-Augmented Generation, RAG)是当前最具实用价值的企业 AI 技术方案。它通过将大语言模型的知识生成能力与外部向量数据库的精确检索相结合,解决了模型幻觉、知识过期和领域适配等核心问题。
一个完整的企业级 RAG 系统包含以下核心组件:数据接入层(文档解析、分块处理)、Embedding 引擎(文本向量化)、向量数据库(相似度检索)、重排序模块(结果精排)以及生成层(上下文组装与 LLM 调用)。
二、Embedding 模型选型指南
Embedding 模型的选择直接影响检索质量。目前主流选择包括:
- OpenAI text-embedding-3-large:维度3072,商业级精度,适合英文场景
- Cohere embed-v3:多语言支持优秀,擅长长文本语义表达
- 本地 BGE-large-zh:中文开源首选,可私有化部署降低延迟和成本
- Multilingual E5:在多语言场景表现均衡
from sentence_transformers import SentenceTransformer
# 中文场景推荐使用 BGE 系列
model = SentenceTransformer('BAAI/bge-large-zh-v1.5')
documents = [
'React 19 引入了 Server Components 和 Actions 机制',
'向量数据库通过近似最近邻算法实现高效检索',
'混合搜索结合关键词匹配与语义相似度提升召回率'
]
embeddings = model.encode(documents, normalize_embeddings=True)
print(f'向量维度: {embeddings.shape}') # 输出: 向量维度: (3, 1024)
三、文档分块策略优化
分块(Chunking)策略决定检索的精度和召回率。常见策略对比:
| 策略 | 块大小 | 优点 | 缺点 |
|---|---|---|---|
| 固定大小分块 | 512 tokens | 实现简单 | 语义可能断裂 |
| 递归分块 | 256-1024 | 保留层级结构 | 复杂文档效果有限 |
| 语义分块 | 动态 | 语义完整 | 计算开销较大 |
| 滑动窗口 | 重叠50% | 减少边界遗漏 | 存储冗余增加 |
from llama_index.core.node_parser import SentenceSplitter
# 推荐的递归分块配置
splitter = SentenceSplitter(
chunk_size=512,
chunk_overlap=50,
separator="
", # 优先按段落分割
paragraph_separator="
",
secondary_chunking_regex="[^,.;。]+[,.;。]?"
)
nodes = splitter.get_nodes_from_documents(documents)
print(f'生成节点数: {len(nodes)}')
四、混合搜索:向量 + 关键词协同
单纯的向量检索在面对专有名词、代码片段、产品SKU等精确匹配场景时存在不足。混合搜索将语义相似度(向量检索)与关键词匹配(BM25)相结合,通过 RRF(Reciprocal Rank Fusion)算法融合排序结果。
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever
from langchain_community.vectorstores import Chroma
# 向量检索器
vector_retriever = Chroma(
embedding_function=embeddings,
persist_directory="./chroma_db"
).as_retriever(search_kwargs={"k": 10})
# BM25 关键词检索器
bm25_retriever = BM25Retriever.from_documents(documents)
bm25_retriever.k = 10
# 混合检索器(权重可调整)
hybrid_retriever = EnsembleRetriever(
retrievers=[vector_retriever, bm25_retriever],
weights=[0.6, 0.4] # 向量60% + 关键词40%
)
results = hybrid_retriever.invoke("RAG系统中的Embedding模型选择")
for doc in results:
print(f'[{doc.metadata["source"]}] {doc.page_content[:100]}...')
五、重排序(Reranker)精排优化
初步检索返回候选集后,使用专门的 Cross-Encoder 模型进行重排序,可显著提升 Top-K 结果的相关性精度。常用模型包括 Cohere Rerank、bge-reranker-v2-m3 等。
from sentence_transformers import CrossEncoder
reranker = CrossEncoder('BAAI/bge-reranker-v2-m3')
# 对候选文档进行重排
pairs = [(query, doc.text) for doc in candidate_docs]
scores = reranker.predict(pairs)
# 按得分排序取 Top-K
scored_docs = list(zip(candidate_docs, scores))
top_k = sorted(scored_docs, key=lambda x: x[1], reverse=True)[:5]
六、多模态 RAG:图文混合检索
2024年以来,多模态 RAG 成为热门方向。通过 CLIP 等视觉编码器,系统可以同时索引图像、表格、图表等非文本内容,实现真正的跨模态理解。
关键技术路径:使用 GPT-4V/Claude Vision 为图像生成描述文本、用 Table Transformer 提取表格结构、采用 ColPali 模型实现视觉文档直接 embedding、最终统一在向量空间中实现图文联合检索。
七、生产部署与监控
企业级 RAG 系统上线需要关注:检索延迟优化(P99 < 200ms>
建议采用渐进式优化策略:先搭建最小可用版本,再逐步引入混合搜索、重排序和多模态能力,最后通过 A/B 测试和用户反馈持续迭代检索质量。

发表评论 取消回复