RAG(检索增强生成)
什么是 RAG?
检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合检索和生成的 AI 技术。它通过从外部知识库中检索相关信息,然后使用大语言模型生成回答。
RAG 的核心优势
- 减少幻觉:基于真实文档回答,降低模型编造信息
- 知识更新:无需重新训练模型,更新知识库即可
- 可解释性:可以追溯回答来源
- 领域适应:快速适应专业领域知识
RAG 工作流程
- 文档分块:将知识库文档切分成小段落
- 向量化:使用 Embedding 模型将文本转换为向量
- 检索:将用户查询向量化,搜索相似文档片段
- 生成:将检索到的上下文和查询一起输入 LLM 生成回答
常用技术栈
- Embedding 模型:OpenAI text-embedding-ada-002, BGE, M3E
- 向量数据库:Chroma, Pinecone, Milvus, Weaviate
- LLM:GPT-4, Claude, Llama, ChatGLM
- 框架:LangChain, LlamaIndex
代码示例
python
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA
# 1. 创建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(embedding_function=embeddings, persist_directory="./chroma_db")
# 2. 添加文档
texts = ["文档1内容", "文档2内容", ...]
vectorstore.add_texts(texts)
# 3. 创建检索问答链
llm = ChatOpenAI(model="gpt-4")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# 4. 提问
result = qa_chain.run("你的问题")
print(result)最佳实践
- 使用合适的文本分块策略(如按 token 数、语义分割)
- 选择高质量的 Embedding 模型
- 优化检索参数(k 值、相似度阈值)
- 添加重排序(Re-ranking)提升精度
- 设置上下文长度限制
应用场景
- 客服机器人:基于产品文档回答问题
- 知识库搜索:企业内知识检索
- 代码助手:检索 API 文档
- 学术研究:文献综述生成
