【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
相关推荐
武天旭7 小时前
AI安全--AI大模型的后门攻击检测与防御
人工智能·深度学习·安全·机器学习
xsd2024111814 小时前
智慧园区算法平台搭建详解:从模型仓到统一推理,多模型怎么管起来
人工智能·深度学习
Smoothcloud润云16 小时前
远程纳管GPU怎么安全升级?驱动、组件灰度与回滚实战
人工智能·深度学习·安全·gpu算力·gpu·数据库管理员
tellmewhoisi16 小时前
深度学习19:PyTorch:自动微分模块
人工智能·pytorch·深度学习
怎么全是重名17 小时前
CLIP-Learning Transferable Visual Models From Natural Language Supervision
人工智能·深度学习·计算机视觉·异常检测
米饭是菜qy17 小时前
动手学深度学习(李沐)——现代循环神经网络读书笔记
人工智能·rnn·深度学习
电科_银尘19 小时前
【深度学习项目实战·04】VS Code远程开发:在本地编辑,在服务器运行与调试
服务器·人工智能·深度学习
2601_9679873720 小时前
Python迁移学习实战:图像识别、文本分类与音频识别的端到端应用指南
深度学习·迁移学习·文本分类·图像识别·音频识别
陈嘿萌20 小时前
NeurIPS | 3EED:车辆、无人机、机器狗谁更会找东西?在三维空间中定位各处万物!
人工智能·深度学习·计算机视觉·学术研究与理论基础