跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

RAG 技术原理、核心流程与最佳实践指南

RAG 通过检索外部数据增强大模型生成效果。核心流程包括数据处理、特征提取、检索召回及结果利用。了数据结构化策略、Embedding 模型选择、混合检索机制及 Prompt 拼接技巧,并补充了评估指标与安全考量,为构建高效 RAG 系统提供完整技术方案。

全栈工匠发布于 2025/2/6更新于 2026/10/2085 浏览
RAG 技术原理、核心流程与最佳实践指南

RAG 技术原理、核心流程与最佳实践指南

前言

检索增强生成(Retrieval-Augmented Generation, RAG)是连接大语言模型(LLM)与私有知识库的关键技术。随着大模型应用的深入,RAG 在解决知识时效性、减少幻觉以及提升专业领域准确性方面扮演着核心角色。本文将深入解析 RAG 的原理、核心流程及工程化最佳实践。

发展历史

RAG 的概念最早由 Lewis 等人在 2020 年提出,旨在结合预训练语言模型的生成能力与外部文档的检索能力。早期研究主要集中在向量检索与文本生成的结合上。随着 Transformer 架构的普及和 Embedding 技术的成熟,RAG 逐渐从学术概念走向工业级应用,成为企业构建智能问答系统的标准范式。

原理与流程

RAG 的核心思想是通过检索外部数据,增强大模型的生成效果。其基本流程如下:

graph LR
P[数据处理] -.-> R[检索]
R --> A[利用 | 增强]
A --> G[生成]
  1. 数据预处理:这是常被忽略但至关重要的一步。高质量的效果依赖于高准确率的检索,而检索准确率直接取决于数据的清洗与处理质量。
  2. 检索(Retrieval):根据用户查询(Query),按照特定策略从海量数据中匹配相关内容。
  3. 利用与增强(Augmentation):将检索到的上下文信息整合进 Prompt,扩充模型的知识边界。
  4. 生成(Generation):大模型基于增强后的输入生成最终回答。

1. 数据处理

目标是将非结构化数据转化为模型可理解的特征。

1.1 数据结构化

传统上将数据分为三类:

  • 高度结构化:Markdown, HTML, JSON, YAML 文件。
  • 半结构化:Word 文档,带有部分格式信息的文本。
  • 低结构化:PDF, 图片,纯文本。

传统方法通常先将数据转为文本,再提取特征。例如使用 OCR 识别 PDF 中的文字。现代多模态模型(如 GPT-4V)支持直接处理图像,提供了更多操作空间,但在企业级应用中,文本向量化仍是主流。

1.2 特征提取

推荐使用大模型 Embedding 进行特征提取。Embedding 对内容的特征提取主要有三种语义模式:

1.2.1 对称语义(Symmetric Semantics)

向量相似度是对称的,即 Similarity(A, B) = Similarity(B, A)。

  • 应用场景:词向量(Word2Vec, GloVe)、文档相似度计算。
  • 度量方式:余弦相似度(Cosine Similarity)。
1.2.2 非对称语义(Asymmetric Semantics)

向量相似度具有方向性,Similarity(A, B) ≠ Similarity(B, A)。

  • 应用场景:问答系统(QA)、推荐系统、翻译模型。
  • 特点:问题与答案的关系是非对称的,用户兴趣与物品属性也是非对称的。
1.2.3 混合语义

结合前两者优点,通常配合 Instruction Tuning,让模型理解指令意图。

  • 代表模型:m3e, bge, gte 等开源 Embedding 模型。
1.2.4 范围控制

并非所有参与特征化的内容都能带来增益。在生成式场景中,精准的范围控制尤为重要。

  • 示例:在 OnCall 小助手场景中,数据集应仅包含'问题 + 原因 + 结论',而非全部通话录音转写文本,否则噪声会干扰检索精度。

1.3 大文本分块(Chunking)

受限于上下文窗口,对大文本进行分治是必要的。

  • 规则分割:使用 CharacterTextSplitter 或 RecursiveCharacterTextSplitter,基于字符数或自然段落分割,保留重叠(Overlap)以维持上下文连贯性。
  • 结构感知分割:针对特定格式,如 MarkdownTextSplitter, PythonCodeTextSplitter, HTMLHeaderTextSplitter。
  • Token 级分割:使用 SentenceTransformersTokenTextSplitter 确保 Token 计数准确。
  • 算法分割:基于 BERT 的中文分割模型 nlp_bert_document-segmentation_chinese-base,或基于 NLTK/spaCy 的分词器。
  • 总结法:对于超长文本,先利用大模型提取关键摘要再进行索引,适合文档库规模极大的场景。

2. 检索与召回

准备好数据后,检索阶段决定了信息的获取效率。

2.1 常见检索方法

  • 向量检索:将 Embedding 存入向量数据库(如 Milvus, Pinecone, ES Vector),发起 Query 时召回 Top-N 相似向量。
  • 关键字检索:使用 Elasticsearch/OpenSearch,基于 TF-IDF 或 KNN 算法计算关键词相似度。
  • 图数据检索:将数据关系存入 Neo4j/NebulaGraph,适用于社交网络分析、知识图谱关联查询。
  • 关系数据库检索:适用于电商推荐、客服场景,从结构化表中筛选信息。
  • 搜索引擎:开放域场景常先用搜索引擎填充信息,或采用后置的 ReAct 范式。

2.2 混合检索(Hybrid Search)

单一检索方式往往存在局限。混合策略结合向量检索(语义匹配)与关键字检索(精确匹配),按一定权重排序,能显著提升召回率。

  • 策略:加权融合(Weighted Fusion)或重排序(Re-ranking)。

2.3 Query 生成与优化

检索前的 Query 处理直接影响准确率。

  • 直接输入:Workflow 场景下,用户输入明确,可直接作为 Query。
  • 模板拼装:结合用户画像、上下文、Prompt 设定等信息,格式化后特征化。适用于虚拟社交等复杂场景。
  • 小模型生成:为避免模板带入过多噪声导致幻觉,可用轻量级模型总结用户意图后再检索。
  • 动态检索:结合 ReAct 范式,根据推理步骤动态调整检索策略。

3. 利用、增强与生成

拿到检索结果后,需将其有效融入生成过程。

3.1 Prompt 上下文拼接

最基础的方式是将检索结果直接拼接在 Prompt 中。

  • LangChain 实现:大多数 RAG Chain 默认采用此方式。
  • 注意:需控制总 Token 数,避免超出模型上下文限制。

3.2 先拼接,再总结

为节省 Input Token,可先对检索内容进行摘要,再发送给大模型。

  • 适用场景:检索结果较多且冗余度高时。
  • 实现:通常将摘要模块集成在模型层,配合大量意图识别训练。

4. RAG 典型场景

  • Knowledge(知识库):最常见的用法,用于企业内部文档问答。
  • Memory(记忆):理论上属于 RAG 范畴,用于存储长期对话历史,但常被单独分类。
  • 意图识别:利用检索结果作为 Few-shot 辅助,增强 CoT(思维链)能力。
  • ReAct:RAG 可作为 Action 的一部分,辅助模型规划任务。

5. 评估与优化

构建 RAG 系统后,需关注以下指标:

  • 检索准确率(Recall@K):相关文档是否出现在 Top-K 结果中。
  • 生成质量:回答的准确性、流畅度及事实一致性。
  • 幻觉率(Hallucination Rate):模型编造事实的比例。
  • 延迟(Latency):端到端的响应时间。

优化建议:

  1. 引入重排序(Re-ranker):在粗排后增加精排模型,提升 Top 结果的相关性。
  2. 元数据过滤:在检索阶段增加权限、时间等元数据过滤条件。
  3. 提示词工程:优化 System Prompt,明确告知模型'若检索内容不足则回答不知道'。

6. 安全与隐私

  • 提示词注入:防止用户通过特殊构造的 Query 绕过系统限制。
  • 数据脱敏:在入库前对敏感个人信息(PII)进行掩码处理。
  • 访问控制:确保检索结果符合用户的权限范围,避免越权访问。

结语

RAG 的思想看似简单,但工程落地涉及数据治理、检索策略、模型调优等多个环节。具体实施需紧密结合业务场景,持续迭代优化。

目录

  1. RAG 技术原理、核心流程与最佳实践指南
  2. 前言
  3. 发展历史
  4. 原理与流程
  5. 1. 数据处理
  6. 1.1 数据结构化
  7. 1.2 特征提取
  8. 1.2.1 对称语义(Symmetric Semantics)
  9. 1.2.2 非对称语义(Asymmetric Semantics)
  10. 1.2.3 混合语义
  11. 1.2.4 范围控制
  12. 1.3 大文本分块(Chunking)
  13. 2. 检索与召回
  14. 2.1 常见检索方法
  15. 2.2 混合检索(Hybrid Search)
  16. 2.3 Query 生成与优化
  17. 3. 利用、增强与生成
  18. 3.1 Prompt 上下文拼接
  19. 3.2 先拼接,再总结
  20. 4. RAG 典型场景
  21. 5. 评估与优化
  22. 6. 安全与隐私
  23. 结语

更多推荐文章

查看全部
  • IntelliJ IDEA 打包 Web 项目 WAR 包及 Tomcat 部署指南
  • 算法实战:位运算解决两数之和与缺失数字问题
  • 昇腾平台 DeepSeek-R1 与 Qwen2.5 强化学习训练优化实践
  • 可解释人工智能:从经典模型到大规模语言模型全解析
  • OpenClaw 飞书机器人权限配置与安全指南
  • 基于 GLM-4.6V-Flash-WEB 解析微信聊天截图关键信息
  • 使用 Higress 将 REST API 转换为 MCP Server
  • HarmonyOS 文件预览服务避坑指南:从入门到实战
  • Ubuntu 24.04.3 LTS 配置 Git 并连接 GitHub
  • Mac 电脑安装与配置 Typora 教程
  • 智能家居中的边缘计算与隐私保护
  • Claude Code 高级编程技巧实战项目详解
  • 三年前端转韩国 CS 硕士留学复盘与得失
  • GitHub Copilot 学生认证指南及 Python 自动化实现
  • 仿生学突破:SILD 模型助力无人机电力线避障
  • Secure Boot 关闭指南:本地部署 GLM-4.6V-Flash-WEB
  • Python Collections 模块核心数据结构与工具详解
  • AI 大模型时代下易受影响的 20 种职业分析
  • C++ STL map 容器核心概念与实战应用
  • 大模型人才年薪百万引关注,行业需求旺盛

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online