目录
RAG的工作流程:
知识库的构建:
调用:
RAG的目标:如何提高Query和知识库的匹配度
如何优化Query:
如何优化知识库:
扩展:Embedding模型
RAG的工作流程:
上一节内容如何与大模型交互?从提示词工程到RAG,介绍到了RAG(Retrieval-AugmentedGeneration)检索增强生成。实际上,只要是先搜索,再把搜索到的信息用来辅助回答问题,都叫做检索增强生成,如跟豆包对话,互联网搜索,Sql语句查询等等。
大模型中的RAG是指,给大模型外挂一个知识库;提问的时候,先查资料,再让大模型照着资料回答问题。核心就两个大步骤,一个叫构建知识库,一个叫调用。我们用下面这张图去讲讲这两个大步骤:
知识库的构建:
如上图中,虚线框中的步骤就是是构建知识库了。它里面又分了如下三个步骤:
1)整理文档(Documents)
收集各种各样不同类型的原始文档,格式包含 Word、PDF、PPT、Excel、图片、视频、网页等。通过人工或者AI辅助去做处理,把它们全部都处理成纯文字格式。
2)文本切片(Chunk / Chunking)
将处理完成的大段纯文字,切分成一个个独立的知识切片。切片字数范围一般一两百字~两三千字,常用 六百~八百 字;切片的原则是尽量让每一个切片能够独立完整表述一个主题或者讲清一件事情;人工、代码、AI 辅助均可参与切片工作。
3)存入向量数据库(Vector DataBase)
我们需要用到Embedding模型,将知识切片转化成数学向量存入向量数据库中。所谓的数学向量就是一串数字,用数学的语言描述了你原本的那段文字。每一条数学向量和你的每一个文字的知识切片都是一一对应的关系,且它极大程度地包含了原本那段文字里面要表达的语言的意思。
调用:
1)用户提问(Query)
用户的Query是一个问题或者是一个任务,将这段文字描述,送入Embedding模型(必须要和生成知识库的Embedding模型一致),生成代表问题语义的数学向量。
2)向量数据库相似度检索(Retrive)
拿着问题向量,和向量数据库里预先存储的向量逐一计算相似度系数,得到0~1之间的一个数值,数值越接近 1 代表内容越匹配。筛选出相似度较高的向量,再通过向量与知识切片一一对应的映射关系,还原出对应的原始文本知识切片。(不存在完全没有相似度的情况,只会出现相似度偏低)。
一条数学向量跟几千条数学向量去比较相似度,计算量虽然大,但是一点都不慢。原因就是这个向量数据库对这种向量检索的过程专门做了索引,做了加速。所以你哪怕是上百万条,它的检索速度都不会特别慢。
3)提示词拼接(Augment)
将①系统提示词(System Prompt)②检索得到的相关知识切片文本(Relevent Context) ③用户原始提问(Query)这三部分的内容,拼接成最终的提示词。
4)交给大模型(LLM)生成答案(Generate)
将拼接完成的完整提示词交给大语言模型(如豆包等),由大模型输出回答返回给用户。
RAG的目标:如何提高Query和知识库的匹配度
这个RAG的最终目标,就是希望左边的用户Query能够检索出能真正跟它问题相关的知识切片(即相似度系数比较高),用以辅助大模型给用户输出精确的回复。想要提升用户Query与知识库切片的匹配效果,不能只优化知识库一侧,用户 Query和知识库两边都要做优化,两者策略要互相匹配。
如何优化Query:
用户原始提问经常存在缺陷:缺少主语、依赖对话上下文、对比类问题、多问题连环提问、反问句式等,直接拿去检索知识库效果很差。在标准 RAG 检索之前增加一个小 Agent(Agented RAG),对原始问题做改写、补全。
如何优化知识库:
知识库的匹配的内容和回答的质量息息相关,我们需要梳理该业务场景下用户的问题及情况,收集的资料,要尽量能够覆盖业务场景的情况。
虽然写的很简单,但是RAG的优化工作是无穷的,比如有一天收集到100个用户问题,有30个问题在搜索的时候知识库匹配的相关度系数比较高,还有40个问题在搜索的时候知识库匹配的相关度系数比较低。那么就应该把这些问题导出来,去分析原因,并不断迭代知识库。
扩展:Embedding模型
Embedding模型是一种专门的向量化模型,它跟我们平时用的豆包、DeepSeek、通义千问这些不太一样。我们平时用的豆包通义千问这个叫大语言模型。
就跟大语言模型一样。Embedding模型也有很多种,有阿里巴巴提供的Embedding模型,有字节跳动提供的Embedding模型,我们都是要做选型的,不同的Embedding模型也有不同的功能和作用。