Skip to content

十、RAG调优

10.1 高级技术一览

技术说明效果
混合检索结合向量检索和关键词检索提高召回率
重排序对检索结果重新排序提高精准度
查询重写优化用户查询提高检索质量
元数据过滤根据元数据筛选精确控制检索范围
父子索引父文档存储,子文档检索返回更完整的上下文
多路召回使用多种策略并行检索综合提升效果

10.2 性能优化

优化点方法效果
减小chunk_size500-800字符提高检索精度
调整检索数量k3-10个结果平衡准确性和效率
使用混合检索向量+BM25提高召回率
添加重排序交叉编码器/RRF提高精准度
上下文压缩去除无关内容减少Token消耗

10.3 质量提升

python
# 1. 查询重写
rewrite_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个查询优化专家。请将用户查询重写为更适合检索的形式。"),
    ("human", "{query}")
])
rewrite_chain = rewrite_prompt | llm | StrOutputParser()

# 2. 多轮查询扩展
def expand_query(query):
    expanded = llm.invoke(f"生成3个与'{query}'相关的搜索查询,用逗号分隔")
    return [query] + [q.strip() for q in expanded.content.split(",")]

# 3. 检索后验证
def verify_relevance(query, doc):
    score = llm.invoke(f"查询: {query}\n文档: {doc.page_content}\n相关吗(0-1)?")
    return float(score.content) > 0.7

10.4 常见问题

问题原因解决方案
检索不到相关内容chunk_size太大或太小调整chunk_size,增加overlap
返回重复内容相似度检索过于集中使用MMR增加多样性
Token消耗过大检索结果过多减小k值,使用压缩
响应速度慢检索效率低使用更快的向量库,缓存结果

十一、总结与展望

11.1 技术栈回顾

11.2 概念速查

组件核心要点关键类/方法
文档加载多种加载器,支持多种数据源UnstructuredMarkdownLoader, MinerU
文档切分保持语义完整,适当重叠RecursiveCharacterTextSplitter
嵌入模型文本转向量,支持稠密+稀疏HuggingFaceEmbeddings, BGEM3FlagModel
向量存储高效相似度搜索Milvus, Chroma, FAISS
检索稠密/稀疏/混合/标量检索client.search, client.hybrid_search
RAG链使用LCEL组合`retriever

11.3 技术选型

场景推荐方案原因
快速原型Chroma + OpenAIEmbeddings轻量级,易上手
生产环境Milvus + BGE-M3性能好,支持混合检索
中文场景BGE系列嵌入模型中文优化效果好
多语言BGE-M3 或 OpenAI支持多语言
本地部署FAISS + HuggingFace无需外部服务
高精度混合检索 + RRF重排序召回和精准都优化

11.4 学习路线

入门阶段:
  文档加载 → 文档切分 → 向量嵌入 → Chroma存储 → 基础RAG链

进阶阶段:
  混合检索 → 元数据过滤 → 父子索引 → 上下文压缩

高级阶段:
  重排序 → 查询重写 → 多路召回 → RAG评估优化

实战阶段:
  构建完整RAG应用 → 性能优化 → 生产部署 → 监控维护

11.5 下一步

下一节我们将学习Agents智能代理

章节内容核心概念
Agent基础Agent工作原理ReAct循环、工具调用
工具定义自定义工具@tool装饰器、StructuredTool
Agent类型不同类型的AgentReAct、Self-Ask、OpenAI Functions
实战应用构建实际Agent聊天机器人、任务助手

参考资料