Appearance
十、RAG调优
10.1 高级技术一览
| 技术 | 说明 | 效果 |
|---|---|---|
| 混合检索 | 结合向量检索和关键词检索 | 提高召回率 |
| 重排序 | 对检索结果重新排序 | 提高精准度 |
| 查询重写 | 优化用户查询 | 提高检索质量 |
| 元数据过滤 | 根据元数据筛选 | 精确控制检索范围 |
| 父子索引 | 父文档存储,子文档检索 | 返回更完整的上下文 |
| 多路召回 | 使用多种策略并行检索 | 综合提升效果 |
10.2 性能优化
| 优化点 | 方法 | 效果 |
|---|---|---|
| 减小chunk_size | 500-800字符 | 提高检索精度 |
| 调整检索数量k | 3-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.710.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类型 | 不同类型的Agent | ReAct、Self-Ask、OpenAI Functions |
| 实战应用 | 构建实际Agent | 聊天机器人、任务助手 |