RAG

0 入门

0.1 简介

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索技术与语言生成模型的人工智能技术。该技术通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。

RAG = 检索技术 + LLM 提示

解决大模型存在的一些问题:

  • LLM的知识不是实时的,模型训练好后不具备自动更新知识的能力。
  • 专业领域知识缺乏,与训练集有关
  • 幻觉,一本正经的胡说八道
  • 数据安全性

核心价值:

  • 解决知识时效性
  • 降低模型幻觉
  • 无需重新训练模型

0.2 标准流程:

示意图:

[索引构建 - 离线]
原始文档 → 加载 → 切分/分块 → 向量化(嵌入) → 存储到向量数据库

[查询生成 - 在线]
用户提问 → 查询向量化 → 从向量数据库检索相关块 → 构建上下文 → 提示LLM生成 → 返回答案(附溯源)

第一阶段:索引构建(离线,预处理阶段)

此阶段的目标是准备好一个可供快速、语义化检索的知识库。

1. 数据加载

  • 从各种数据源获取原始文档:如 PDF、Word、HTML、Markdown、API、数据库、企业内部知识库等。
  • 工具:LangChain / LlamaIndex 的 DocumentLoader,Apache Tika 等。

2. 数据切分

  • 关键步骤:将长文档分割成语义上连贯、大小合适的“块”。
  • 为什么重要:文档太长会丢失细节,太短会失去上下文。分块策略(块大小、重叠区)直接影响后续检索质量。
  • 方法
    • 固定大小分块:简单但可能切断语义。
    • 基于语义的分块(递归式、滑动窗口)。
    • 专用分块器:如按标题/段落分割。

3. 向量化(嵌入)

  • 使用嵌入模型将每个文本块转换成一个高维度的向量(一列数字)。
  • 这个过程捕获了文本的语义含义,使得语义相似的文本在向量空间中距离相近。
  • 常用模型:OpenAI text-embedding-3-smallBGEM3E等。

4. 存储

  • 文本块、对应的向量以及元数据(如来源、文件名、页码等)一起存储到向量数据库中。
  • 向量数据库专为高效近似最近邻搜索设计。
  • 常用数据库:Pinecone、Chroma、Weaviate、Qdrant、Milvus、PGVector 等。

第二阶段:查询检索与生成(在线,实时阶段)

当用户提出问题时,系统执行以下步骤:

1. 用户查询

  • 用户输入一个自然语言问题(例如:“公司今年的带薪年假政策有什么变化?”)。

2. 查询向量化

  • 使用与索引阶段相同的嵌入模型,将用户查询也转换为一个查询向量。

3. 检索

  • 在向量数据库中,执行 “近似最近邻”搜索 ANN,找出与“查询向量”最相似的 K 个文本块(向量)。
  • 返回的不仅是文本,还包括其元数据和相似度分数。
  • 进阶检索技巧
    • 重排序:使用更精细但更耗资源的模型(如 cross-encoder)对 Top K 结果进行重新排序,提升精度。
    • 混合检索:结合传统的关键词搜索(如 BM25)和向量搜索,取长补短。

4. 上下文构建

  • 将检索到的 Top K 个相关文本块(及其元数据)组合成一个“增强的上下文”或“提示上下文”。
  • 通常需要控制总长度,以适应 LLM 的上下文窗口限制。

5. 提示工程与生成

  • 构建一个结构化的提示,通常包含:
    • 系统指令:定义 LLM 的角色和回答规则(例如:“你是一个专业的客服助手,请严格根据提供的上下文信息回答问题。”)。
    • 上下文:上一步检索到的相关文本块。
    • 用户查询:原始问题。
    • 回答要求:例如“如果上下文中没有相关信息,请明确说‘我不知道’”,并引用来源。
  • 将这个完整的提示发送给 LLM(如 GPT-4、Claude、Llama 等)。
  • LLM 基于给定的上下文生成最终答案。

6. 响应与溯源

  • 将 LLM 生成的答案返回给用户。
  • 最佳实践:同时提供答案中关键信息的溯源(例如,标明引用了哪个文档的第几页),这极大增强了可信度和可验证性。

0.3 基础知识

RAG 应用核心基础知识精简版

1. 向量(向量化)

  • 是什么:将文本(词、句、文档)转换成一串数字(如 [0.1, -0.3, 0.8, …]),这串数字就是向量
  • 为什么需要:计算机无法直接理解文字,但可以计算数字之间的关系
  • 关键特性:语义相似的文本,其向量在空间中的位置也相近
  • 示例
    • “猫” → [0.2, 0.5, -0.1, …]
    • “猫咪” → [0.19, 0.51, -0.09, …] (与”猫”的向量很接近)

2. 余弦相似度(核心匹配算法)

  • 作用:衡量两个向量之间的相似程度
  • 计算原理:计算两个向量夹角的余弦值
    • 1.0​ = 完全相同(方向完全一致)
    • 0.0​ = 不相关(垂直)
    • -1.0​ = 完全相反
  • 为什么用余弦而不是距离:主要关注向量的”方向”(语义),忽略”长度”(文本长度影响)
  • 公式简记相似度 = (A·B) / (|A|×|B|)

3. 嵌入模型

  • 功能:执行”文本→向量”转换的AI模型
  • 特点
    • 训练时学习了语言的语义关系
    • 相同模型必须用于索引和查询
  • 常见模型:OpenAI的text-embedding-ada-002、BGE-M3等

4. 向量数据库

  • 专门做一件事:快速存储和查找相似向量
  • 核心技术:ANN(近似最近邻)索引
    • HNSW:像多层导航图,快速定位
    • IVF:先分区,再搜索
  • 示例:Pinecone、Chroma、Qdrant

1 RAG开发

2 项目实战

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇