返回博客列表

RAG:给大模型外挂一个知识库

HUTAO667
AI RAG 向量数据库

说白了,RAG 就是给大模型外挂了一套知识库。每次提问时先去知识库里翻翻资料,然后让大模型根据找到的信息回答,这样就不会瞎编了。

我在做 AI 项目的时候遇到一个问题:大模型对我自己的笔记、项目文档、学习资料一无所知。这些东西在训练时根本没包含进去,问它就只能瞎编。

后来发现,RAG 就是为了解决这个问题。

大模型的盲点

大模型都是用公开数据训练的,而且训练都是有时间节点的。这就导致两个问题:

  1. 最新的东西不知道:不过现在有联网搜索,这个问题基本解决了
  2. 私人的东西不知道:我的笔记、项目文档、学习资料、自己写的代码,这些大模型根本没见过

RAG 就相当于给大模型外挂了一套知识库。每次提问时,先去知识库里翻翻资料,然后让大模型根据找到的信息回答。这样就不会瞎编了。

RAG 怎么工作的

第一步:准备知识库

首先要把文档处理一下:

  1. 清洗:去掉没用的东西
  2. 切块:把文档切成小块,可以按词切、按句子切、按段落切
  3. 转成数字:用语义模型把文字转成向量(就是一堆数字)

这里有个坑:准备知识库用的哪个语义模型,查询时就必须用哪个。要不然就对不上了,就好比拿着中国地图在美国找回家的路。

为什么要转成数字?因为 AI 只认识数字。

第二步:用户提问

当你问问题时,RAG 会做这几件事:

  1. 把问题也转成数字:用同样的语义模型
  2. 去知识库里找相关的内容:找那些数字相似的文档块
  3. 把找到的内容和问题一起给 AI:让 AI 根据这些资料回答

整个流程就是:你提问 → 转成数字 → 知识库里找 → 把资料给 AI → AI 回答

我的实践

我在项目里实现过 RAG,主要用来处理项目文档和代码库的查询。

通过实践,我发现 RAG 最大的挑战是找得准不准

知识库太长的话,人为可以处理。而且如果知识库不是特别特别大,长度应该不是问题。

关键是怎么让它找得更准:

  • 切块的策略要合理
  • 语义模型要选好
  • 找相似内容的算法要优化

我的理解

RAG 的核心就是让大模型不再”闭门造车”。

以前大模型只能靠训练时学到的知识回答问题,遇到没见过的就只能瞎编。

RAG 给大模型加了一个”查资料”的能力:先去知识库里找相关信息,然后根据找到的信息回答。这样就能处理私人知识,也能减少瞎编。

说白了,RAG 就是把”记忆”和”推理”分开了:

  • 知识库负责”记忆”(存东西)
  • 大模型负责”推理”(理解和回答)

这种分工让 AI 更实用,也更靠谱。


参考资料