检索增强生成(Retrieval-Augmented Generation,简称RAG)是当前大模型应用领域最具突破性的技术之一。它通过将传统的信息检索技术与现代生成式AI相结合,有效解决了大语言模型在实际应用中面临的核心痛点。
大语言模型虽然展现出了惊人的语言理解和生成能力,但在实际应用中仍然存在三个关键限制:
知识时效性问题:模型训练数据存在截止日期,无法获取和利用之后的新知识。例如,使用2023年训练的模型询问2024年的政策变化,模型要么回答"不知道",要么基于旧知识产生错误回答。
私有数据盲区:企业内部的专有数据、个人私有文档等未公开信息,大模型无法访问和利用。
幻觉问题:当模型遇到超出其知识范围的问题时,往往会生成看似合理但实际错误的回答。
这些问题严重制约了大模型在企业级场景中的应用。传统解决方案如全量微调(Fine-tuning)虽然能让模型"记住"新知识,但成本高昂且无法实时更新。RAG技术正是在这样的背景下应运而生。
RAG的基本思想可以类比为"开卷考试":
闭卷考试(纯大模型):学生只能依靠记忆中的知识答题,遇到没学过的问题要么放弃要么瞎猜。
开卷考试(RAG):学生可以查阅参考资料,基于权威信息作答,既准确又有据可依。
这种机制带来了几个显著优势:
一个完整的RAG系统通常包含以下关键组件:
RAG的工作流程可以分为四个关键阶段:
这是RAG系统的"学习"阶段,主要完成以下工作:
文本分块是这一阶段的关键技术,需要考虑以下因素:
当用户提出查询时,系统:
相似度计算通常采用余弦相似度,其公式为:
cos(θ) = (A·B) / (||A|| ||B||)
其中A和B分别是查询向量和文档向量,θ是它们之间的夹角。
将检索到的相关文档与原始查询组合,构建增强的Prompt:
code复制基于以下参考信息回答问题:
[相关文档1内容]
[相关文档2内容]
...
问题:[用户原始问题]
Prompt设计需要考虑:
大模型基于增强后的Prompt生成最终回答。这一阶段的关键是:
嵌入模型的质量直接影响检索效果,主流选择包括:
OpenAI text-embedding-ada-002:
BGE (BAAI General Embedding):
Nomic Embed:
选择时需要考虑:
FAISS:
Chroma:
Milvus/Pinecone:
选择标准:
文本分块是RAG系统中容易被忽视但至关重要的环节。以下是经过验证的最佳实践:
分层分块策略:
重叠设计:
元数据保留:
特殊内容处理:
以下是使用LangChain实现RAG的完整代码示例:
python复制from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import Ollama
# 1. 文档加载
loader = DirectoryLoader('./docs', glob="**/*.pdf")
documents = loader.load()
# 2. 文本分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=300,
chunk_overlap=50,
length_function=len
)
chunks = text_splitter.split_documents(documents)
# 3. 向量化存储
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh")
vector_db = FAISS.from_documents(chunks, embeddings)
vector_db.save_local("faiss_index")
# 4. 检索增强生成
llm = Ollama(model="qwen2-7b")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vector_db.as_retriever(),
chain_type="stuff"
)
# 5. 查询
result = qa_chain.run("2025年公司新员工福利政策是什么?")
print(result)
查询扩展:
重排序:
混合检索:
反馈循环:
企业知识问答:
法律与合规:
教育领域:
医疗健康:
分析成功落地的RAG应用,通常具有以下特点:
检索质量:
生成质量:
系统性能:
检索不到相关文档:
模型忽视参考文档:
回答包含无关信息:
| 特性 | RAG | 全量微调 |
|---|---|---|
| 知识更新 | 实时 | 需要重新训练 |
| 成本 | 低 | 高 |
| 可解释性 | 高 | 低 |
| 领域适应性 | 快 | 慢 |
| 处理复杂推理 | 一般 | 优秀 |
| 特性 | RAG | 提示工程 |
|---|---|---|
| 知识容量 | 大 | 有限 |
| 维护成本 | 中 | 低 |
| 响应质量 | 稳定 | 波动大 |
| 实时性 | 支持 | 不支持 |
更智能的检索:
端到端优化:
行业专用方案:
RAG技术正在快速发展,随着大模型能力的提升和基础设施的完善,它将成为企业知识管理和智能应用的核心技术之一。