目录
上图为LLM+RAG运行的整体流程。如果想对RAG有系统化的理论认知,基本看如下三篇技术概览足矣,其它不再多做赘述了,毕竟没必要重复造轮子(bushi。
章节一的三篇技术概览了RAG理论部分,从RAG整体流程介绍,到RAG流程涉及每一步骤的细节详解、常用技术,再到总结、当下发展、未来展望。章节二为进阶部分,介绍了RAG涉及的关键技术。章节三给出了RAG实战demo。
RAG内容为LLM岗重点考察内容,涉及知识点多的嘞!!!
一、RAG理论篇(基础)
- RAG技术概览(一)高级检索增强生成技术(RAG)全面指南:原理、分块、编码、索引、微调、Agent、展望 - 知乎 (zhihu.com)
- RAG技术概览(二)深度好文!最全的大模型 RAG 技术概览 - 知乎 (zhihu.com)
- RAG技术概览(三)RAG实战全解析:一年探索之路 - 知乎 (zhihu.com)
二、RAG理论篇(进阶)
1. Token分块
官网链接:字符文本分割器# | LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通
常用知识向量库有自定义分割器、BPE、字符文本分割器(CharacterTextSplitter)、Huggingface长度函数(CharacterTextSplitter.from_huggingface_tokenizer)、Latex 文本分割器(LatexTextSplitter)、Markdown文本分割器(MarkdownTextSplitter)、NLTK文本分割器(NLTKTextSplitter)、PythonCodeTextSplitter、递归字符文本分割器(RecursiveCharacterTextSplitter)、Spacy 文本分割器(SpacyTextSplitter)、TiktokenText 分割器。
2. Embedding技术
转至链接:文本嵌入模型 text-embedding-model# | LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通
3. 知识向量库
常用知识向量库有Milvus、FAISS、Zilliz、Elasticsearch、Chroma、Lance等。详情访问LangChain中英文官网链接:Milvus# | LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通(中);Vector stores | 🦜️🔗 LangChain(英)。
4. 相似性搜索/向量检索
常用相似性搜索有:
详情访问LangChain中英文官网链接:检索器接口 Retrievers# | LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通(中);Vector store-backed retriever | 🦜️🔗 LangChain(英)
(1-4流程的demo如下)
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
### 入门 Demo
# (1)读取外加文档
with open('../../state_of_the_union.txt') as f:
state_of_the_union = f.read()
# (2)Token分块
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(state_of_the_union)
# (3)Embedding嵌入(以向量数据库Chroma为例)
embeddings = OpenAIEmbeddings()
# (4)存入向量数据库
docsearch = Chroma.from_texts(texts, embeddings)
# (5)相似性检索(similarity search)
query = "What did the president say about Ketanji Brown Jackson"
docs = docsearch.similarity_search(query)
# (6)Results
print(docs[0].page_content)
5. 知识召回
5.1 知识召回流程
(此处cue一下推荐系统的知识召回。针对推荐系统,后续也会进行系统的学习+实践+专栏整理,埋个坑先......)
图5.1 知识召回+Rank排序
(1)物料库经过Tokensize、Embedding后,得到Vectors,扔进向量数据库进行初步检索和知识召回(对称召回和非对称召回);
(2)初步召回得候选集进行粗排;
(3)粗排后,对候选集进行精排,根据Q & A的匹配程度/相似度进行Rank排序,挑选Top K个答案。涉及多种技术,包括文本召回、向量召回、推荐召回、标签召回、Embedding召回、协同召回、图召回等,以及多种召回算法混合的多路召回;(召回方法如何选择,一看具体的业务场景,二看准确率和召回速度上的平衡。一般来说,多路召回效果好、但召回和推理速度很慢,单路召回速度快,但准确率可能会有所损失。)
(4)Rerank,得到Top K检索结果,以及各检索项的得分。
5.2 RAG知识召回分类
分生成式和检索式召回(文本召回、语义召回、多路召回)召回两个角度。重点分析检索式召回和文本召回、语义召回的优缺。
图5.2 LLM常用知识召回分类
召回分类 | 文本召回(/倒排召回/稀疏向量召回) | 语义召回(/向量召回/稠密向量召回) |
优点 | (1)检索速度更快; (2)可解释能力强; (3)精确匹配能力强; (4)支持自定义停用词表,同义词表。 | (1)考虑语义相似性,更加智能; (2)语义相近即可召回,无需寻找同义词替换; (3)无需考虑复杂的传统倒排的调优手段; (4)具备支持跨模态召回的潜力。 |
缺点 | (1)无语义信息,对“一词多义”不友好; (2)语义偏移。 | 需要模型训练,对垂直领域落地支持有限: (1)垂直领域泛化性不足(不理解专有词汇;易出现语义相似但主题不相似的情况); (2)对精准匹配支持不足,难以用专业词汇精准召回; (3)可解释能力弱; (4)需要更多的计算资源; (5)对”多词一义”情况的支持不如倒排召回中的同义词表简单直接。 |
三、RAG实践篇
转至链接:大模型学习路线(10)——入门项目推荐_大模型入门实例-CSDN博客(章节二);