如果你想搭建一个靠谱的知识库,必然离不开 RAG:检索增强生成(Retrieval- Augmented-Generation),它主要干 2 件事:
- 从资料库 检索 相关内容
- 再基于这些内容 生成 答案
RAG 是目前最常见的 AI 问答解决方案之一,包括智能客服、知识助手都离不开 RAG
RAG 会把文档分成多个片段(chunk),当用户提出问题的时候,就用这个问题在所有片段中查找相关答案,然后丢给大模型生成回复
RAG 的整体流程可以分成 2 个阶段:
- 用户提问前的准备阶段:🧩分片(有讲究)、🧠索引
- 用户提问后:🔍召回、♻️重排、✍️生成
🧩分片:分片可以有多种方式,按固定大小、按句子/段落、还有的可以按照语义切分
🧠索引:通过 Embedding 模型 将文本转换成向量,然后将向量+对应文本存储在 向量数据库
- 各个 Embedding 模型的效果可以在 MTEB排行榜上查看
🔍召回:指的是【搜索与用户问题相关的片段的过程】,用户的问题由embedding 模型转换为向量,然后从向量数据库中查询 N 个最相关的向量(片段)
- 怎么算最相关? -- 计算向量【相似度】
- 每个向量都会计算相似度,得到一个【分数】
- 目前流行的计算相似度的方案:余弦相似度、欧氏距离、点积
♻️重排:它对🔍召回的结果做【重新排序】。假设召回阶段选出了 10 个向量,可能重排之后就得到 3 个向量了。
- Q:为什么要重排?
- A:召回与重排使用的文本相似度逻辑是不一样的。召回阶段计算向量相似度速度比较快,准确率低,适合做初步筛选。重排阶段使用一种叫 cross-encoder的模型来计算【文本相似度】,它更耗时,但准确率更高
✍️生成:用户问题 + 重排得到的片段一起发送给大模型,让它根据片段内容回答用户问题