共计 1938 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要 RAG 技术?
传统大型语言模型(LLM)虽然能生成流畅文本,但存在三个关键缺陷:

- 知识固化:训练后无法更新知识,例如 GPT- 3 的知识截止到 2021 年
- 幻觉问题:可能生成看似合理实则错误的内容
- 领域局限:通用模型在专业领域表现欠佳
RAG(检索增强生成)通过实时检索外部知识库,将最新信息注入生成过程,有效解决了这些问题。2023 年 MIT 研究发现,采用 RAG 架构的系统事实准确性提升 40% 以上。
核心架构图解
典型 RAG 系统工作流程分为三个阶段:
graph LR
A[用户提问] --> B(Query 理解模块)
B --> C[向量化检索]
C --> D[相关文档片段]
D --> E(生成模块)
E --> F[最终回答]
- Query 理解 :解析用户意图,可能包含拼写纠正、术语扩展等
- 检索阶段 :将问题向量化,从知识库查找最相关的文档片段
- 生成阶段 :将检索结果作为上下文,指导 LLM 生成最终回答
最小可行系统搭建
环境准备
确保安装 Python 3.8+ 和必要库:
pip install langchain chromadb openai tiktoken
核心代码实现
import os
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 初始化组件
embeddings = OpenAIEmbeddings(openai_api_key=os.getenv('OPENAI_API_KEY'),
model="text-embedding-ada-002" # 推荐使用的嵌入模型
)
# 创建示例文档库
docs = [
"RAG 系统包含检索和生成两个阶段",
"向量数据库能高效存储文档嵌入",
"GPT- 4 的上下文窗口达到 32k tokens"
]
# 构建向量存储
db = Chroma.from_texts(
texts=docs,
embedding=embeddings,
persist_directory="./rag_demo_db" # 本地持久化
)
# 创建检索链
qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(temperature=0), # 降低随机性
chain_type="stuff",
retriever=db.as_retriever(search_kwargs={"k": 3} # 返回 top3 结果
),
return_source_documents=True
)
# 执行查询
result = qa_chain("RAG 系统有哪些组件?")
print(f"答案: {result['result']}")
print(f"来源: {result['source_documents']}")
性能优化实战
检索参数调优
- top- k 选择 :
- 学术论文建议初始值设为 5 -10
- 可通过评估指标动态调整
# 动态调整检索数量
def adaptive_retrieval(query):
query_length = len(query.split())
return max(3, min(10, query_length // 5)) # 根据问题长度调整
上下文管理
- 采用滑动窗口处理长文档
- 实现代码示例:
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 每个片段 token 数
chunk_overlap=200, # 重叠部分避免信息割裂
length_function=len
)
生产环境注意事项
安全防护措施
- 敏感信息过滤 :
- 部署前扫描知识库内容
- 使用正则表达式过滤隐私字段
import re
def sanitize_text(text):
patterns = [r'\b\d{3}-\d{2}-\d{4}\b', # 美国社保号
r'\b\d{16}\b' # 信用卡号
]
for pattern in patterns:
text = re.sub(pattern, '[REDACTED]', text)
return text
监控指标设计
建议监控以下维度:
- 检索耗时百分位(P99<500ms)
- 缓存命中率
- 用户满意度评分
开放思考题
- 评估体系设计:
- 如何量化检索结果相关性?
-
生成内容的事实准确性如何验证?
-
多模态扩展:
- 图像检索如何融入现有架构?
- 视频内容的时间维度如何处理?
RAG 技术正在快速演进,本文介绍的基础架构可帮助开发者快速入门。建议从简单场景开始,逐步迭代优化各模块组件。
正文完