当前位置: 首页 > news >正文

RAG 处理流程

下面是处理流程图

User System EmbeddingModel Retriever Reranker LLM KnowledgeBase 输入问题(Query) 用嵌入模型编码Query Query向量 用Query向量检索 查找相似向量(原始使用嵌入模型编码) 返回Top K文档块 原始检索结果 对结果重排序(可选) 精排后文档 组合: Query + 相关文档 生成最终回答 返回答案 User System EmbeddingModel Retriever Reranker LLM KnowledgeBase

关键问题解释(嵌入模型不一致):

  1. 知识库编码阶段

    • 文档块使用嵌入模型A编码后存入向量数据库
    • 例如:text-embedding-ada-002bge-small
  2. 查询阶段

    • 用户Query可能被问答模型的嵌入模块B编码(如GPT的tokenizer)
    • 这时会出现嵌入空间不一致问题 → 检索质量下降

解决方案:

📥 用户Query输入
🔀 是否独立嵌入模型?
🔧 使用知识库同款模型编码
(如bge-base)
⚙️ 复用问答模型嵌入层
🔍 向量相似度检索

各模型职责说明:

组件作用典型模型示例
嵌入模型将文本转换为向量text-embedding-ada-002, bge-base
检索器计算向量相似度FAISS, Annoy
重排序模型精细化结果排序cohere-rerank, bge-reranker
问答模型生成最终答案GPT-4, LLaMA-2

处理时机总结:

  1. 预处理阶段:知识库文档 → 嵌入模型 → 向量存储
  2. 查询阶段
    • 用户输入 → (可选)独立嵌入模型 → 检索
    • 原始结果 → (可选)重排序模型 → 精排
    • 排序后文档 + 问题 → 问答模型 → 生成答案

这种设计下,确保检索和生成阶段使用兼容的嵌入表示是关键,通常建议知识库编码和查询编码使用同款嵌入模型。

在RAG(Retrieval-Augmented Generation)流程中,问答模型生成答案时的输入是原始文本形式的用户问题(Query)和检索到的文档片段(原始文本)


问答模型的输入组成(文本形式):

  1. 用户原始问题

    • 直接保留用户输入的文本(例如:“量子纠缠的原理是什么?”)。
  2. 检索到的文档片段

    • 从向量数据库返回的是原始文本段落(如:“量子纠缠是指…<知识库原文>”),而不是向量。
    • 向量仅用于检索阶段,检索完成后即丢弃,后续不参与生成。
  3. 可能的模板格式化

    • 通常会将问题和文档组合成提示词(Prompt),例如:
      请根据以下信息回答问题:
      文档1: <检索结果1的文本>
      文档2: <检索结果2的文本>
      问题: <用户原始问题>
      

完整流程对比(检索阶段 vs. 生成阶段):

💡 生成阶段 (文本空间)
🔍 检索阶段 (向量空间)
文本输入
向量化
查询向量
预存向量
相似度排序
上下文
问题
合成回答
📄 原始文本片段
❓ 原始Query文本
🤖 问答模型
(如GPT-4)
📝 生成答案
📥 用户Query文本
🔢 嵌入模型编码
(如bge-base)
📊 Query向量
🗃️ 知识库向量
🧮 向量相似度计算
📑 Top-K文本片段

关键点总结:

  1. 向量只用一次:仅在检索阶段计算相似度,之后丢弃。
  2. 问答模型的输入是纯文本:包括原始Query和检索到的文档文本。
  3. 两类模型完全解耦
    • 嵌入模型:负责检索阶段的向量表示(独立训练)。
    • 问答模型:负责文本生成(如GPT系列),不关心检索用的向量。

类比解释:

  • 检索阶段:像用ISBN号(向量)在图书馆找书,找到后ISBN就没用了。
  • 生成阶段:直接阅读书中的文本内容(原始文本)来回答问题。

相关文章:

  • 家政行业数字化变革:小程序开发技术剖析与实战指南
  • Python应用大学期末考试选择练习系统
  • Spring Boot 中ConditionalOnClass、ConditionalOnMissingBean 注解详解
  • 黑马python(五)
  • LangChain MCP Adapters Quickstart
  • Linux CPU 亲和性
  • Pip Manager本地Python包管理器
  • 第五十一天打卡
  • 如何配置Dify中的MCP服务
  • 【AI News | 20250611】每日AI进展
  • MySQL之事务与读视图
  • 看板中如何管理技术债务
  • 【Java学习日记38】:C语言 fabs 与 Java abs 绝对值函数
  • Linux相关问题整理
  • Boring Blog
  • Vue 数据代理机制对属性名的要求
  • 前端将多个PDF链接的内容拼接成一个后返回出一个链接进行打开
  • 脑机新手指南(九):高性能脑文本通信:手写方式实现(上)
  • JS之Dom模型和Bom模型
  • Java SE - 类和对象入门指南
  • 餐饮网站制作/网页seo是什么意思
  • 网站内容建设招标/成都百度推广电话号码是多少
  • 传媒公司网站建设方案/搜索引擎营销的主要方法包括
  • 做网站要学会什么语言/昆明百度推广开户
  • 怎么自己设计装修效果图/网站快速优化排名软件
  • 手机自助网站建设/查数据的网站有哪些