RAG应用
RAG(Retrieval Augmented Generation)结合检索和生成,让LLM能够访问外部知识库。
LangChain·预计阅读时间:50分钟
01概述
RAG(检索增强生成)是一种将信息检索与文本生成相结合的技术。通过检索相关文档并将其作为上下文提供给LLM,RAG能够显著提升LLM的回答质量和准确性,同时减少幻觉问题。LangChain提供了完整的RAG开发工具链。
RAG优势
| 优势 | 说明 |
|---|---|
| 知识扩展 | 让LLM访问最新、私有知识 |
| 减少幻觉 | 基于真实文档生成答案 |
| 可追溯 | 答案可追溯到源文档 |
| 成本低 | 无需微调模型 |
| 易更新 | 知识库更新即可生效 |
02RAG架构
RAG应用包含两个主要阶段:索引和检索生成。
索引阶段
文档加载
从各种来源加载文档
文档分割
将长文档切分为合适大小的块
向量化
将文档块转换为向量
存储索引
将向量存储到向量数据库
检索生成阶段
处理流程
- 查询向量化: 将用户问题转换为向量
- 相似度检索: 从向量库检索相似文档
- 上下文构建: 将检索结果作为上下文
- 答案生成: LLM基于上下文生成答案
03文档处理
文档处理是RAG的基础环节。
文档加载器
| 加载器 | 支持格式 |
|---|---|
| PyPDFLoader | PDF文档 |
| TextLoader | 纯文本 |
| WebBaseLoader | 网页内容 |
| CSVLoader | CSV文件 |
| UnstructuredLoader | 多种格式 |
文档分割策略
CharacterTextSplitter
按字符数分割,简单高效
RecursiveCharacterTextSplitter
递归分割,保持语义完整性
MarkdownHeaderTextSplitter
按Markdown标题分割
CodeSplitter
按代码结构分割
04向量存储
向量存储是RAG的核心组件。
常用向量数据库
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Chroma | 轻量级,易上手 | 开发测试 |
| Pinecone | 全托管,高性能 | 生产环境 |
| Weaviate | 功能丰富,开源 | 企业应用 |
| Milvus | 分布式,可扩展 | 大规模数据 |
| FAISS | Facebook开源,高效 | 本地部署 |
05检索策略
LangChain支持多种检索策略。
相似度检索
基于向量相似度的标准检索
MMR检索
最大边际相关性,增加多样性
混合检索
结合关键词和语义检索
上下文压缩
压缩检索结果提高相关性
06高级技术
提升RAG效果的高级技术。
高级RAG技术
- 查询重写: 优化用户查询
- 多查询检索: 生成多个查询并行检索
- 重排序: 对检索结果重新排序
- 知识图谱RAG: 结合知识图谱
- 自适应检索: 根据问题类型调整策略
07最佳实践
1. 合理分块
选择合适的分块大小和重叠
2. 混合检索
结合多种检索策略
3. 元数据过滤
利用元数据提高检索精度
4. 持续优化
根据反馈持续改进检索效果
RAG应用要点
RAG是构建知识密集型AI应用的核心技术。通过合理的文档处理、向量存储和检索策略,可以让LLM访问海量知识。建议从简单RAG开始,逐步添加高级技术优化效果。