复制成功
请遵守本站许可
REPORT
Chapter_Post // Field_Report

Post_Ref: RL-RAG检索增强生

2026.03.21

RAG检索增强生成技术完全指南

Echo HaoRan
Echo HaoRan
#技术手册
ANALYSIS

概述#

RAG(Retrieval-Augmented Generation,检索增强生成)是由 Meta AI 研究团队于 2020 年提出的技术架构,其核心思想是让 LLM 在回答问题前先检索相关资料,再基于检索结果生成答案

RAG 完美解决了 LLM 的两大痛点:

  1. 知识过时:模型知识截止于训练时间点
  2. 幻觉问题:模型可能生成看似合理但错误的内容

为什么需要 RAG#

LLM 的知识局限#

问题说明RAG 解决方案
知识截止训练数据有时效性实时检索最新信息
领域知识不足垂直领域专业性弱接入专业知识库
幻觉生成错误但看似合理的内容答案有据可查
私有数据敏感数据不能用于训练本地知识库检索

RAG vs 传统方案#

方案知识更新成本准确性适用场景
纯 LLM需重训练通用知识
RAG更换文档知识问答
Fine-tuning需重训练中高风格定制
RAG + Fine-tuning更换文档 + 微调最高专业领域

工作流程详解#

PRTCL // PLAINTEXT
┌──────────────────────────────────────────────────────────────┐
│ RAG 系统架构 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 【离线阶段:知识库构建】 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 文档 │ → │ 文档 │ → │ 向量 │ → │ 向量 │ │
│ │ 加载 │ │ 切分 │ │ 嵌入 │ │ 存储 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ 【在线阶段:检索生成】 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用户问题 │ → │ 问题嵌入 │ → │ 向量检索 │ → │ 上下文 │ │
│ └──────────┘ └──────────┘ └──────────┘ │ 组装 │ │
│ └────┬─────┘ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │ 最终回答 │ ← │ LLM 生成 │ ←──────────────────────┘ │
│ └──────────┘ └──────────┘ │
└──────────────────────────────────────────────────────────────┘

核心组件详解#

文档加载器(Document Loader)#

支持多种格式:

格式常用库说明
PDFPyPDF2, pdfplumber需要处理布局和表格
Wordpython-docx结构化文档
Markdown直接读取天然结构化
HTMLBeautifulSoup网页内容
CSVpandas表格数据
Notionnotion-api在线文档
Confluenceatlassian-api企业知识库

文档切分(Chunking)#

切分是 RAG 效果的关键环节。

切分策略对比:

策略方法优缺点
固定大小按字数 /Token 切分简单,但可能切断语义
句子级别按句子边界切分保语义,但块太小
段落级别按段落切分语义完整,大小适中
递归切分按层级结构递归切分平衡大小和语义
语义切分用模型判断切分点效果最好,成本高

关键参数:

参数说明建议值
chunk_size每块 Token 数500-1000
chunk_overlap块间重叠 Token50-100

重叠的重要性:

PRTCL // PLAINTEXT
块 1: [句子 1][句子 2][句子 3]
块 2: [句子 3][句子 4][句子 5] ← 句子 3 重复,避免语义断裂

向量化(Embedding)#

将文本转换为向量。

主流 Embedding 模型:

模型维度特点适用场景
text-embedding-ada-0021536OpenAI 官方通用
text-embedding-3-large3072高精度英文为主
bge-large-zh-v1.51024中文最强中文为主
m3e-large1024多语言支持混合语言
Jina-embeddings-v31024Late Chunking长文档

向量数据库#

存储和检索向量。

数据库类型特点适用场景
Pinecone云服务托管,开箱即用快速上线
Weaviate云 / 自托管混合搜索强多模态
Milvus自托管大规模首选企业级
Qdrant自托管性能优秀高性能
Chroma本地轻量,开发友好原型 / 学习
FAISS离线处理单机

检索策略#

策略 1:向量检索(语义检索)

PRTCL // PYTHON
query_embedding = embed_model.encode("用户问题")
results = vector_db.search(query_embedding, top_k=5)

策略 2:关键词检索(BM25)

PRTCL // PYTHON
from rank_bm25 import BM25Okapi
bm25 = BM25Okapi(tokenized_chunks)
scores = bm25.get_scores(tokenized_query)

策略 3:混合检索

PRTCL // PYTHON
# 综合向量相似度和 BM25 分数
hybrid_score = 0.7 * vector_score + 0.3 * keyword_score

策略 4:重排序(Rerank)

PRTCL // PYTHON
# 初筛后精排
from sentence_transformers import CrossEncoder
reranker = CrossEncoder('cross-encoder/ms-marco-MiniLML-12-v2')
reranked = reranker.predict(query_doc_pairs)

上下文组装#

将检索结果注入 Prompt。

组装策略:

策略说明适用场景
直接拼接简单拼接所有检索结果检索质量高
窗口拼接围绕相关片段扩大上下文上下文可能不足
摘要压缩对检索结果先摘要再注入长文档
元数据过滤用元数据先过滤再检索结构化知识

Prompt 模板:

PRTCL // PLAINTEXT
你是一个问答助手。请根据以下参考资料回答用户问题。
如果参考资料中没有相关信息,请如实告知。
参考资料:
{context}
用户问题:{question}
回答要求:
1. 基于参考资料回答,不要编造信息
2. 如涉及多个参考资料,请综合整理
3. 引用时注明来源

进阶技术#

Query 改写#

将用户口语化问题转换为检索友好表达。

PRTCL // PYTHON
# 原始问题可能模糊或口语化
query = "那个关于 Python 的文档在哪里"
# 改写为更明确的检索表达
rewritten = llm.invoke(
"将以下问题改写为适合检索的表述,保留核心信息:"
f"原问题:{query}"
)
# 结果:"Python 编程语言文档"

HyDE(假设性文档嵌入)#

用 AI 生成假设性答案来辅助检索。

PRTCL // PYTHON
# 让 AI 生成假设性答案
hypothetical = llm.invoke(f"回答以下问题:{query}")
# 用假设性答案做检索
results = vector_db.search(embed(hypothetical))

父子检索(Parent Document Retrieval)#

大文档用小 chunk 检索,用大 chunk 提供上下文。

PRTCL // PLAINTEXT
文档层级:
├── 父文档(完整章节,2000 tokens)
│ ├── 子块 1(200 tokens)← 检索用
│ ├── 子块 2(200 tokens)← 检索用
│ └── 子块 3(200 tokens)← 检索用
检索:找到相关子块
组装:返回对应父文档

Self-RAG#

让 LLM 自我评估检索必要性。

PRTCL // PYTHON
# LLM 判断是否需要检索
is_retrieval_needed = llm.invoke(
f"判断是否需要检索外部知识来回答:{query}"
)
if is_retrieval_needed:
results = retrieve(query)
rag_output = llm.invoke(f"基于以下资料回答:{results}\n\n 问题:{query}")
else:
direct_output = llm.invoke(query)

知识图谱增强#

结合知识图谱提升结构化推理能力。

PRTCL // PLAINTEXT
用户问:"张三的上司是谁?"
知识图谱:
张三 --同事--> 李四
李四 --下属--> 王五
张三 --下属--> [?]
推理:直接检索无法回答
知识图谱推理:张三的下司的下司是王五?→ 需要补充信息

工程实践#

RAG 框架选择#

框架语言特点适用场景
LangChainPython/JS功能全面生产级
LlamaIndexPython数据优先数据密集型
RAGFlowPythonUI 友好快速原型
Dify多语言低代码非技术用户
Flowise多语言低代码可视化

评估方法#

维度指标说明
检索质量HitRate@K, MRR检索是否命中相关文档
生成质量RAGAS, BERTScore回答是否准确相关
端到端Task Success用户问题是否解决

常见问题与解决#

问题原因解决方案
检索不到相关内容Chunking 不合理调整 chunk_size 和 overlap
上下文太长检索结果过多增加 rerank 或摘要
幻觉仍然存在Prompt 设计不当强化”基于资料回答”的约束
回答不够精准检索质量差优化 embedding 模型或检索策略

总结#

RAG 是当前将大模型落地最成熟的技术路径之一。它让 AI 的回答有了”据可查”的基础,大幅提升了回答的准确性和可信度。


关于我#

项目内容
编辑echowang
来源echospace
邮箱echohaoran@gmail.com
简介AI 爱好者,专注于大语言模型应用与智能体开发,分享技术与实践心得
社交欢迎交流讨论,共同成长
R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.03.21
// END OF POST

订阅

通过 RSS 订阅本站,新文章发布时第一时间收到通知。

Follow
Classified
Chapter_06
Protocol_Ref: CC-BY-NC-SA-4.0

RAG检索增强生成技术完全指南

Author: CHONGXIReleased: 2026.03.21

Licensed under CC BY-NC-SA 4.0

评论

© 2025-2026 EchoSpace
Powered by Astro & echohaoran Non-Collaborative_Entity // Protocol_V.4.21