什么是RAG
一、RAG概述
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合检索和生成的AI技术。
核心思想:
- 从知识库检索相关信息
- 将检索结果作为上下文
- 结合用户问题生成回答
解决的问题:
- 知识时效性:模型训练后无法获取新知识
- 幻觉问题:模型可能生成虚假信息
- 领域知识:模型缺乏特定领域知识
- 数据隐私:敏感数据不能用于训练
二、RAG架构
基本流程
1 | 用户问题 |
核心组件
文档处理:
- 文档加载
- 文本分割
- 向量化
向量数据库:
- 存储向量
- 相似度检索
检索模块:
- 问题向量化
- 相似度计算
- 结果排序
生成模块:
- 提示组装
- LLM调用
- 结果生成
三、文档处理
文档加载
1 | from langchain.document_loaders import TextLoader, PDFLoader |
文本分割
1 | from langchain.text_splitter import RecursiveCharacterTextSplitter |
分割策略:
- 固定长度分割
- 递归字符分割
- 按段落分割
- 按语义分割
向量化
1 | from langchain.embeddings import OpenAIEmbeddings |
常用嵌入模型:
- OpenAI Embeddings
- BERT Embeddings
- Sentence Transformers
四、向量数据库
常用向量数据库
| 数据库 | 特点 |
|---|---|
| Pinecone | 托管服务,易用 |
| Milvus | 开源,高性能 |
| Weaviate | 开源,支持混合检索 |
| Chroma | 轻量级,本地部署 |
| FAISS | Facebook开源,高效 |
存储向量
1 | from langchain.vectorstores import Chroma |
相似度检索
1 | # 相似度检索 |
混合检索
结合关键词检索和向量检索:
1 | from langchain.retrievers import EnsembleRetriever |
五、检索优化
重排序
1 | from langchain.retrievers import ContextualCompressionRetriever |
查询改写
1 | from langchain.chains import LLMChain |
多查询检索
1 | from langchain.retrievers.multi_query import MultiQueryRetriever |
六、生成回答
提示模板
1 | from langchain.prompts import PromptTemplate |
RAG链
1 | from langchain.chains import RetrievalQA |
引用来源
1 | for doc in result["source_documents"]: |
七、评估指标
检索质量
- 召回率:相关文档被检索出的比例
- 精确率:检索结果中相关文档的比例
- MRR:平均倒数排名
生成质量
- 准确性:回答是否正确
- 相关性:回答是否切题
- 完整性:回答是否完整
评估方法
1 | from ragas import evaluate |
八、应用场景
企业知识库:
- 产品文档问答
- 内部知识检索
- 流程指引
客服系统:
- 智能问答
- 问题诊断
- 解决方案推荐
法律医疗:
- 法规检索
- 病历分析
- 专业问答
九、最佳实践
文档处理
- 合理设置chunk_size和overlap
- 保留文档元数据
- 定期更新知识库
检索优化
- 使用混合检索
- 实施重排序
- 查询改写和扩展
生成优化
- 设计清晰的提示模板
- 控制上下文长度
- 提供引用来源
十、总结
RAG核心要点:
- 检索和生成结合
- 解决知识时效性和幻觉问题
- 文档处理、向量存储、检索、生成四个环节
- 持续优化检索质量和生成效果
RAG是构建知识问答系统的核心技术,广泛应用于企业知识库、智能客服等场景。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夏天的风吹向哪里!
