Skip to content

RAG(检索增强生成)

什么是 RAG?

检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合检索和生成的 AI 技术。它通过从外部知识库中检索相关信息,然后使用大语言模型生成回答。

RAG 的核心优势

  • 减少幻觉:基于真实文档回答,降低模型编造信息
  • 知识更新:无需重新训练模型,更新知识库即可
  • 可解释性:可以追溯回答来源
  • 领域适应:快速适应专业领域知识

RAG 工作流程

  1. 文档分块:将知识库文档切分成小段落
  2. 向量化:使用 Embedding 模型将文本转换为向量
  3. 检索:将用户查询向量化,搜索相似文档片段
  4. 生成:将检索到的上下文和查询一起输入 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 文档
  • 学术研究:文献综述生成