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

[RAG] 基础知识

RAG基础知识

基本介绍

RAG,全称 Retrieval-Augmented Generation,中文:检索增强生成

核心思想:为大模型补充来自于外部的相关数据与上下文,从而帮助大模型生成更丰富、更准确、更可靠的内容。

也就是 临时给大模型外挂一个知识库

image-20250528091104556

解决的问题:

  1. 受限于已有知识库,无法快速新增语料信息
  2. 重新训练大模型需要很长的时间

案例

开发一个在线的自助产品咨询工具,允许客户使用自然语言进行交互式的产品问答。

假设我们的产品是:香蕉手机

请介绍一下您公司这款产品(香蕉手机)与XX产品的不同之处

为了让客户有更好的体验,决定使用大模型来构造这样的咨询功能并将其嵌入到公司的官方网站。

如果你直接使用通用大模型,那么结果可能是:

  1. 大模型回答:我不知道什么是香蕉手机
  2. 大模型胡编乱造一段回答(大模型幻觉)

【RAG技术之前的解决方案】

将公司资料作为提示词的一部分,如下图:

image-20250528093201193

🤔 思考:存在什么问题?

如果需要外挂的知识库内容非常的多(例如一本小说几十万字),那么通过这种方式提供给大模型,大模型也不能精确的找到答案。

经典架构

简单的 RAG 应用从整体上分为两个阶段:

  1. 数据索引(Data Indexing)
  2. 数据查询(Query)
    1. 检索(Retrieval)
    2. 生成(Generation)

1. 数据索引

在做数据索引时,通常分为这么几个步骤:

  1. 加载文档
  2. 切分成 chunks
  3. 转化为向量嵌入
  4. 存入向量数据库
image-20250528101753546

切分成chunks

对输入的文档进行分割,分割成一个一个知识块(Chunk),从而为后续嵌入做准备。

  1. 语义结构维度:强调的是语义完整性,防止模型拿到“断句、不完整”的上下文。

    可以按照句子的粒度进行切割,将每一段文本按句号、问号、叹号等 标点符号 分割。

    原文

    ChatGPT 是由 OpenAI 开发的大语言模型。它基于 Transformer 架构,具有强大的语言理解和生成能力。
    

    切割后

    ChatGPT 是由 OpenAI 开发的大语言模型。
    
    它基于 Transformer 架构,具有强大的语言理解和生成能力。
    
  2. 实现策略维度:满足向量模型有最大词元限制,比如 OpenAI embedding 最大约 8192 词元数。

    1. 固定长度字符切分:每 N 字符为一段,适合规则性较强的文档
    2. 词元切分:每 N 个词元切一段,兼容模型的词元数限制

上面这两个策略可以组合着来使用。

转为向量

将每个 chunk 转换为一个“高维向量”,用来表达其语义。

每个向量通常是一个长度为 1536 或 768 的浮点数数组,例如:

[0.112, -0.045, 0.203, ..., 0.087]  // 一个 chunk 的语义向量

存入向量数据库

一般会存储在功能全面的 向量数据库 里面,向量数据库会提供强大的向量检索算法与管理接口,这样可以很方便地对输入问题进行 语义检索

常见向量数据库:

向量库 特点
Supabase PostgreSQL + pgvector 扩展
Weaviate 云服务 + 本地部署均可
Pinecone 高性能、易接入
Milvus 海量数据、高性能搜索
MemoryVectorStore 纯 JS 内存向量库(测试用)

2. 数据查询

数据查询阶段的两大核心阶段是 检索生成

image-20250528134121574

检索阶段

分为下面几个步骤:

  1. 将 Query(用户的问题) 转化为向量

  2. 在向量数据库中进行相似度检索(语义检索),相似度的检索,有几种方式

    1. 余弦相似度
    2. 欧氏距离
    3. 点积
  3. 为生成阶段准备检索结果

生成阶段

graph LRA[检索到的语义相关内容] --> B{构造Prompt}C[用户Query] --> BB --> D[调用LLM]D --> E[生成回答]E --> F[返回给用户]classDef process fill:#f9f,stroke:#333;classDef data fill:#bbf,stroke:#333;classDef output fill:#9f9,stroke:#333;class A,C data;class B,D,E process;class F output;

构造出来的提示词大致如下:

[系统提示]:
你是一个智能客服助手,请基于以下资料回答用户的问题。[资料内容]:
1. 本产品支持7天无理由退货。
2. 如存在质量问题,可申请退换货。
3. ...[用户问题]:
我买的这个产品坏了还能退吗?[你的回答]:

完整的流程

image-20250528094543784

-EOF-

http://www.jsqmd.com/news/8313/

相关文章:

  • CF1408F Two Different
  • 数据结构 - 字典树 Trie
  • 激活函数实现
  • 漏洞赏金入门指南:从零开始的实战方法论
  • PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接 - 详解
  • 【C++哲学】面向对象的三大特性之 多态 - 实践
  • 2025CSP-S模拟赛58 比赛总结
  • 精读C++设计模式20 —— 结构型设计模式:桥接模式 - 详解
  • Gateway-过滤器 - 教程
  • RabbitMQ的安装集群、镜像队列部署
  • 单一训练模式适应多个机器人本体 —— skiled brain —— 机器人酷刑现场,竟是为了锻造全能大脑,网友:求AGI饶了我
  • 2025/10/4 总结
  • win10界面如何改成经典菜单?
  • Qt处理Windows平板上摄像头
  • 你必须知道的TCP和UDP核心区别,快速搞懂这两大协议!
  • 机器学习——朴素贝叶斯详解 - 指南
  • [swift 外部干涉法 extension]
  • 2025国庆Day3
  • 量子迁移计划启动:应对未来密码学挑战
  • HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包
  • 大模型原理与实践:第三章-预训练语言模型详解_第1部分-Encoder-only(BERT、RoBERTa、ALBERT) - 指南
  • 详细介绍:Linux字符设备驱动开发全攻略
  • 深入解析:uniapp集成语音识别与图片识别集成方案【百度智能云】
  • sql注入和xss漏洞
  • 数学 trick
  • Python 2025:异步革命与AI驱动下的开发新范式 - 详解
  • 完整教程:精读C++20设计模式——行为型设计模式:解释器模式
  • js疑惑
  • 使用 Git Submodule 管理微服务项目:从繁琐到高效 - 指南
  • 深入解析:单元测试学习+AI辅助单测