RAG 检索增强生成

发布时间:2026-03-22 | 分类:AI核心技术

定义

世界上有一种技术叫做RAG,它就像AI的私人图书馆——每次你要找资料,它都会递给你那本最对味的书...

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合检索和生成的AI架构,先从外部知识库检索相关信息,再将检索结果作为上下文输入大模型生成答案。

核心原理

1. RAG流程


用户问题
    ↓
┌─────────────┐
│  Embedding  │  ← 问题向量化
└──────┬──────┘
       ↓
┌─────────────┐
│ 向量检索    │  ← 在知识库中找相似内容
└──────┬──────┘
       ↓
┌─────────────┐
│ 上下文构建  │  ← 问题 + 检索结果
└──────┬──────┘
       ↓
┌─────────────┐
│  LLM生成    │  ← 基于上下文生成答案
└──────┬──────┘
       ↓
   最终答案
          

2. 核心组件

组件 功能 常用技术
文档处理 分块、清洗文档 LangChain, LlamaIndex
Embedding模型 文本向量化 OpenAI, Cohere, 本地模型
向量数据库 存储和检索向量 Pinecone, Milvus, Chroma
检索器 相似度搜索 余弦相似度, BM25混合
生成器 生成答案 GPT, Claude, 本地LLM

3. 检索策略

  • 语义检索:基于向量相似度
  • 关键词检索:BM25等传统方法
  • 混合检索:结合语义+关键词
  • 重排序:对检索结果二次排序
  • 多跳检索:迭代检索获取更多信息

4. Chunk策略


固定大小分块: 每500字符一块
语义分块: 按段落/章节分块
滑动窗口: 有重叠的分块
递归分块: 先按章节,再按段落
          

OpenClaw实战应用

OpenClaw知识库能力

OpenClaw通过SKILL.md加载知识作为上下文:


# SKILL.md - 企业知识助手

## 知识库
用户提问时,优先从以下来源检索:
- 飞书文档库
- 企业Wiki
- 产品文档

## 检索策略
1. 先用关键词过滤
2. 再用语义相似度排序
3. 取Top 5相关片段
4. 整合生成答案
          

案例:智能客服


用户: "退货流程是什么?"

1. 问题向量化: [0.12, -0.34, 0.56, ...]
2. 向量检索: 找到相似FAQ文档
   - 匹配: "退货政策.pdf" (相似度 0.89)
   - 匹配: "售后服务说明.pdf" (相似度 0.82)
3. 构建上下文:
   问题: 退货流程是什么?
   相关文档: [退货政策片段] [售后服务片段]
4. LLM生成: 基于文档详细解答
          

OpenClaw工具支持


feishu_wiki: 搜索飞书知识库
feishu_doc: 读取飞书文档内容
web_fetch: 获取网页内容
feishu_bitable: 查询多维表格数据
          

代码示例

基础RAG实现


from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

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

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

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

# 4. 提问
result = qa_chain({"query": "产品保修期多久?"})
print(result["result"])
          

高级RAG:混合检索+重排序


from langchain.retrievers import EnsembleRetriever
from langchain.retrievers import BM25Retriever

# 语义检索
semantic_retriever = vectorstore.as_retriever(k=10)

# 关键词检索
bm25_retriever = BM25Retriever.from_documents(documents)
bm25_retriever.k = 10

# 混合检索
ensemble_retriever = EnsembleRetriever(
    retrievers=[semantic_retriever, bm25_retriever],
    weights=[0.5, 0.5]
)

# 重排序
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank

compressor = CohereRerank()
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=ensemble_retriever
)
          

进阶技术

RAG优化方向

  • Query改写:优化用户问题提高检索质量
  • 假设文档:生成假设答案辅助检索
  • 多跳推理:迭代检索复杂问题
  • 上下文压缩:减少噪音信息
  • 引用溯源:标注答案来源

最佳实践

  • ✅ 文档预处理:清洗、去重、标准化
  • ✅ 合理分块:根据文档类型选择策略
  • ✅ 元数据过滤:利用时间、分类等筛选
  • ✅ 监控检索质量:记录检索命中率
  • ✅ 定期更新:保持知识库新鲜度
  • ❌ 避免过度检索:过多的上下文影响生成

延伸阅读