大模型技术 RAG 概述

RAG (Retrieval-Augmented Generation) ,即检索增强生成,是目前大模型应用中最核心、落地最广的技术架构。

简单来说,RAG 就是给大模型配了一个**"外部知识库""实时搜索增强"**。


一、 为什么需要 RAG?(核心痛点)

虽然大语言模型(LLM)很强大,但它有三个致命弱点:

  1. 幻觉问题:模型会一本正经地胡说八道,尤其是面对它不熟悉的专业领域。
  2. 知识过时:模型的知识停留在预训练结束的那一刻(例如 GPT-4 可能不知道昨天发生的新闻)。
  3. 缺乏私有数据:模型无法查看你的公司文档、私人笔记或实时数据库。

RAG 的比喻 :大模型就像一个"博学但记性不太好"的考官。如果不使用 RAG,他是闭卷考试;使用 RAG 后,他变成了开卷考试------在回答问题前,先去翻阅你提供的参考资料。


二、 RAG 的五步标准流程

一个典型的 RAG 系统主要分为两个阶段:索引(离线)检索生成(在线)

1. 加载 (Loading)

使用 LangChain 的 Document Loaders 从 PDF、网页、数据库或 Notion 中读取原始数据。

2. 分割 (Splitting)

大模型的上下文长度有限。Text Splitters 会将长文档切分成更小的块(Chunks),例如每块 500 字,并保持语义连贯。

3. 向量化 (Embedding)

将文本块转换成一串数字向量。这一步是让计算机能够通过"语义"来计算文本之间的相似度,而不仅仅是关键词匹配。

4. 存储 (Vector Stores)

将向量存储在专门的向量数据库(如 Chroma, FAISS, Pinecone)中。

5. 检索与生成 (Retrieval & Generation)

  • 用户提问:系统先将用户的问题也转化成向量。
  • 检索:在数据库中寻找语义最接近的几个文本块。
  • 生成 :将这几个文本块作为"参考上下文"喂给 LLM,提示词如下: "基于以下资料:检索到的内容,请回答用户的问题:用户问题。"

三、 LangChain 代码示例

以下是一个基于 LangChain 和本地向量库 FAISS 实现的极简 RAG 示例:

python 复制代码
import os
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough

# 1. 准备本地知识库内容
text_content = """
2024年某公司发布了全新的AI芯片X1。
该芯片采用3nm工艺,主频高达4.0GHz。
相比上一代产品,性能提升了50%,功耗降低了30%。
"""

# 2. 文档分割与向量化存储
# 使用递归字符分割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
chunks = text_splitter.split_text(text_content)

# 创建本地向量库(需要 OpenAI API Key 用于 Embedding)
vectorstore = FAISS.from_texts(chunks, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()

# 3. 构建 RAG 链
template = """你是一个专业的助手。请根据以下上下文回答问题。
如果你不知道答案,就说你不知道,不要胡编乱造。

上下文:{context}

问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI(model="gpt-4o")

# 定义处理流程
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
)

# 4. 运行
response = rag_chain.invoke("新发布的X1芯片相比上一代性能提升了多少?")
print(response.content)
# 输出:相比上一代产品,新发布的X1芯片性能提升了50%。

四、 RAG vs 微调 (Fine-Tuning)

很多初学者会纠结:我是该 RAG 还是该微调模型?

特性 RAG (检索增强) Fine-Tuning (微调)
知识更新 实时更新(改下数据库就行) 困难(需重新训练)
外部数据 擅长处理海量动态文档 不适合存储事实性知识
幻觉控制 (有据可查,可提供来源) 较高(模型仍可能胡编)
成本 较低 较高(算力开销大)
透明度 高(可以看到引用了哪段话) 低(黑盒,不知道知识在哪)

结论 :如果你的目标是让模型学习新知识基于私有文档回答首选 RAG ;如果你的目标是让模型模仿某种特定语态学习某种复杂指令,才考虑微调。


五、 RAG 的未来趋势:高级 RAG

基础 RAG(如上代码)在复杂问题上表现有限,目前行业正在向高级 RAG (Advanced RAG) 演进:

  • 多路召回:同时使用语义检索和关键词搜索。
  • 重排序 (Rerank):从检索回来的 10 条结果中,用更精密的模型选出最相关的 3 条。
  • Query Transformation:自动把用户的模糊问题改写成更容易检索的关键词。
  • GraphRAG:结合知识图谱,处理跨文档的复杂逻辑关系。
相关推荐
元Y亨H1 小时前
大模型技术 Agent添加MCP工具
langchain·llm
元Y亨H1 小时前
大模型技术-RAG 向量存储和检索 概述
langchain·llm
元Y亨H1 小时前
大模型技术 LangChain使用MCP
langchain·llm
chaors1 小时前
DeepResearchSystem 0x07:搜索缓存
llm·agent·ai编程
玉鸯16 小时前
多 Agent 系统通信的实现原理与最佳实践
llm·agent·mcp
TunerT_TQ17 小时前
Valhalla 静态工程审阅 #009|Continue 源码证据驱动评测【大厂开源基础设施特辑】
vscode·测试工具·开源·llm·github·jetbrains·ai编程助手
weixin_4713830318 小时前
01 LLM简介
llm
元Y亨H1 天前
LangChain API 调用语言模型
langchain·llm
元Y亨H1 天前
大模型技术 LangChain 概述
langchain·llm