【DL99】RAG--让LLM连接外部知识

RAG核心思想:不要什么都塞进模型参数里,而是在需要的时候,从外部知识库把相关信息找出来,再交给 LLM。它可以减少幻觉,因为模型回答问题时,可以参考真实的外部资料,而不是完全依赖参数中记住的知识。

复制代码
用户问题
   ↓
先去知识库找资料
   ↓
找到相关内容
   ↓
把内容放进 Prompt
   ↓
LLM 根据这些内容回答

RAG
├── Retrieval
│      检索,找到相关知识
│
└── Generation
       生成,llm根据知识生成答案

一个完整的RAG系统

复制代码
                 用户问题
                    ↓
                 Query
                    ↓
              ┌──────────┐
              │ Retriever │
              └─────┬────┘
                    ↓
              相关文档 Chunks
                    ↓
              ┌──────────┐
              │   LLM    │
              └─────┬────┘
                    ↓
                  Answer

1.准备知识库

假设:

复制代码
docs/
├── handbook.pdf
├── product.md
├── architecture.md
└── faq.txt

我们需要把这些数据加载进来,统一文本

2.chunking

当我们只需要局部知识的时候,如果把这个文档全部扔进去是不是太浪费了,所以我们需要把文档进行切分,分为chunk1,2...n;分别代表各个部分。它不能太大,也不能太小,太大的话和整个文档有什么区别,太小的话可能会将语义给拆散了。甚至有点会有重叠。

3.embedding

Embedding 就是把文本转换成一个能够表达语义的向量,然后比较两个向量的相似度,方向越接近,相似度越高。

4.Vector Database

保存 Embedding

快速相似度搜索

复制代码
                 【离线 Indexing】

Documents
    ↓
Document Loader
    ↓
Chunking
    ↓
Embedding Model
    ↓
Vector Database
    │
    │
    │
    ↓
──────────────────────────────

                 【在线 Query】

User Question
      ↓
Query Embedding
      ↓
Vector Search
      ↓
Top-K Chunks
      ↓
Prompt Construction
      ↓
LLM
      ↓
Answer

事实上embedding相似不不代表一定真正相关所以我们需要使用reranker将top-k进行缩小,reranker擅长更加精确的判断query和chunk是否真的相关。

复制代码
Retriever
 ↓
重点解决 Recall(真正相关的东西,你找到了多少?)

Reranker
 ↓
进一步提升 Precision(你找出来的东西,有多少是真的相关?)

                         RAG
                          │
            ┌─────────────┴─────────────┐
            ↓                           ↓
       Offline Indexing            Online Query
            ↓                           ↓
        Documents                    Question
            ↓                           ↓
         Chunking                  Query Embedding
            ↓                           ↓
        Embedding                  Retrieval
            ↓                           ↓
       Vector Database              Top-K
                                        ↓
                                    Reranker
                                        ↓
                                  Context
                                        ↓
                                      LLM
                                        ↓
                                     Answer
相关推荐
维克兜率天1 小时前
5.3 宏观因子:抬头看天
笔记·python·深度学习·算法·量化
YHL1 小时前
🔍 结构化输出:从 `JSON.parse` 到 `withStructuredOutput` 的三级火箭
前端·深度学习
vicky05172 小时前
Anaconda管理
深度学习
论文复现现场3 小时前
课程作业要跑 PyTorch 训练,学校机房不够用去哪租?云 GPU 选型、环境迁移与防丢数据指南
人工智能·pytorch·深度学习·云计算·gpu·cuda
崖边看雾3 小时前
深度学习——PyTorch 实现 CBOW 词向量模型:从数据预处理到训练与保存
pytorch·深度学习
hans汉斯3 小时前
数据挖掘|基于BP神经网络的少数民族村寨文化型旅游体验产品潜在游客挖掘
深度学习·神经网络·算法·yolo·软件工程·bp·汉斯出版社
ai小陈13 小时前
CUDA Stream实战:让数据传输与GPU计算真正重叠
人工智能·深度学习·ai·pdf·云计算·gpu算力
renhongxia117 小时前
数字孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·算法·机器学习·数字孪生
ysu_031418 小时前
边界条件的硬约束与软约束——从试函数构造到谱分析诊断
人工智能·pytorch·深度学习·物理信息神经网络·pinns·边界条件·ntk