返回教程

什么是RAG(检索增强生成)

了解RAG技术如何让AI获取最新知识,解决幻觉问题

8分钟
2025-12-18
进阶概念RAG知识库

什么是RAG(检索增强生成)

简单理解

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种让AI能够访问外部知识库的技术。

简单来说:先搜索,再回答

大模型的知识有截止日期,RAG让模型可以实时获取最新信息,大大减少"幻觉"问题。

RAG的工作原理

核心架构(2025最新)

用户问题
    ↓
┌─────────────────┐
│  查询处理       │ ← 问题改写/扩展
└────────┬────────┘
         ↓
┌─────────────────┐
│  向量检索       │ ← 在向量数据库中搜索
└────────┬────────┘
         ↓
┌─────────────────┐
│  重排序         │ ← 优化检索结果
└────────┬────────┘
         ↓
┌─────────────────┐
│  生成回答       │ ← LLM基于检索结果回答
└─────────────────┘

三个核心步骤

  1. 索引(Indexing)

    • 将文档切分成小块(Chunks)
    • 使用Embedding模型将文本转换为向量
    • 存储到向量数据库中
  2. 检索(Retrieval)

    • 用户提问时,将问题也转换为向量
    • 在向量数据库中找到最相似的文档片段
    • 返回最相关的Top-K个结果
  3. 生成(Generation)

    • 将检索到的内容作为上下文
    • 连同用户问题一起发送给大模型
    • 模型基于这些信息生成回答

为什么需要RAG?

解决的问题

问题RAG如何解决
知识过时实时检索最新文档
幻觉/编造基于真实文档回答
专业知识不足接入专业知识库
无法引用来源可以标注信息出处

2025年主流技术栈

向量数据库

  • Pinecone:托管服务,企业级首选
  • Milvus:开源,高性能,支持百亿级向量
  • Chroma:轻量级,适合快速原型
  • Weaviate:功能丰富,支持混合搜索
  • Qdrant:Rust编写,性能优异

Embedding模型

  • OpenAI text-embedding-3-large:效果最好,1536/3072维
  • Voyage AI:专为RAG优化
  • BAAI/bge-m3:开源多语言,效果接近商业模型
  • Jina Embeddings v3:支持8192 tokens

开发框架

  • LlamaIndex:专注数据连接,RAG首选
  • LangChain:通用LLM框架,生态丰富
  • Haystack:企业级解决方案

进阶RAG技术(2025)

1. 混合检索(Hybrid Search)

结合关键词搜索(BM25)和向量搜索,提高召回率。

# 示例:混合检索
results = vector_search(query) + keyword_search(query)
final_results = rerank(results)

2. 重排序(Reranking)

使用专门的重排序模型(如Cohere Rerank、BGE-Reranker)对初步检索结果再次排序。

3. 查询改写(Query Rewriting)

用LLM改写用户查询,生成多个变体进行检索:

  • 原始问题:"Python怎么读文件"
  • 改写1:"Python文件读取方法"
  • 改写2:"Python open函数使用"

4. 自适应RAG(Adaptive RAG)

根据问题类型动态决定是否需要检索,简单问题直接回答。

5. Graph RAG

结合知识图谱,理解实体关系,提供更准确的答案。

实践代码示例

使用LlamaIndex构建RAG

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# 1. 加载文档
documents = SimpleDirectoryReader("./data").load_data()

# 2. 创建索引
index = VectorStoreIndex.from_documents(documents)

# 3. 创建查询引擎
query_engine = index.as_query_engine()

# 4. 查询
response = query_engine.query("什么是RAG?")
print(response)

使用LangChain构建RAG

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA

# 1. 创建向量存储
vectorstore = Chroma.from_documents(documents, OpenAIEmbeddings())

# 2. 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

# 3. 创建QA链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o"),
    retriever=retriever
)

# 4. 查询
answer = qa_chain.invoke("什么是RAG?")

最佳实践建议

  1. 文档切分:根据内容特点选择合适的chunk大小(通常500-1000字符)
  2. 重叠设置:chunk之间保留10-20%重叠,保持上下文连贯
  3. 元数据:保存文档来源、时间等元数据,便于过滤和引用
  4. 评估优化:建立评估数据集,持续优化检索效果
  5. 缓存策略:对常见问题缓存结果,提高响应速度

AI导航助手

Powered by DeepSeek

你好!我是AI导航助手,由DeepSeek驱动。 我可以帮你: • 推荐适合你的AI模型 • 解答AI相关问题 • 直接带你跳转到相关页面 试试点击下方问题,或直接输入你的问题!

快捷提问:

哪个AI模型最好?有免费的AI吗?写代码用哪个?API怎么接入?

点击按钮可直接跳转到相关页面