这可能是讲 Coze 的知识库最通俗易懂的文章了
引言
大家好,我是大圣,一个致力于使用 AI 技术将自己打造为超级个体的程序员。
对于知识库大家并不陌生,一系列的信息和知识聚集在一起就可以构成知识库。
比如我最心爱的通往 AGI 之路 就是一个使用飞书软件搭建的 AI 知识库。
当你需要了解 AI 某一领域知识的时候,你只需要在 AGI 的飞书大群中,跟机器人对话就能获取对应的资料。
而在我的大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库 也是以 AI 时代的知识库作为例子进行了讲解。
这篇文章的目的就是帮助非编程人士来理解 AI 时代的知识库,读完本文你会收获:
- AI 时代的知识库的概念、实现原理以及能力边界
- 通往 AGI 之路大群中的通过对话就能获取知识库中资料的原理
- 更好的使用 Coze 等 AI Agent 平台中的知识库组件,打造更加强大的智能体
请允许我自卖自夸:我这篇文章可以说是知识库文章中 Coze 讲的最好的,讲 Coze 的文章中知识库讲的最好的。
另外做个预告,我正在规划一个关于 AI 时代你应该具备的编程基础系列,大纲如下:
- 数据库|让 Coze 拥有了记忆的组件 1
- 知识库|让 Coze 拥有了记忆的组件 2
- 变量|让 Coze 拥有了记忆的组件 3
- JSON|让你更好的使用 Coze 插件
- API|外部应用程序该如何接入 Coze
- 操作系统与服务器|那些接入了 Coze 的微机器人都是运行在哪里的
- Docker|让你用最简单的方式部署微信机器人
先来聊聊知识库
传统意义的知识库
对于传统意义上的知识库,我相信大家都不陌生。比如上面提到的通往 AGI 之路 。
再比如我使用的飞书搭建自己的通往超级个体之路的知识库,里面存放了我打造超级个体过程中的所有知识和分享
知识库是我们个人或者企业的一些信息和知识的集合,一般有这么两类:
- 个人搭建的某一领域知识库,比如 AI 知识库,里面存放了你日常收集了你日常整理的 AI 信息和知识
- 企业搭建的产品资料知识库,里面存放了关于公司售卖的产品的详细资料
这里多说一句,如果你想搭建自己的知识库,但是还没有行动,我建议你看下我的分享。
两篇文档配套 1 个半小时的直播分享,让你轻松打造自己的知识管理体系
我们日常对于传统知识库的使用很简单,当我们遇到问题时,我们可以通过知识库的目录找到对应的文章,通过阅读之前收集的信息或者写作的文章来为自己答疑解惑。
但是这里面会有两个痛点
- 随着知识库中信息的增多,如果分类不合理,我们很难再找到当初我们搜集的文章放在哪里
- 问题的答案可能是一篇文章中的某一段落,但是我们每次都需要重新阅读这篇文章才能找到答案
那 AI 时代来临后,是否可以改善这个痛点呢?
AI 时代的搜索
为了让大家更好的理解 AI 知识库,我用更贴近我们日常生活的搜索引擎为例来说明 AI 的作用。
如果你已经接触到以下两款软件,我相信你可能已经很久没有打开百度了吧
你有没有想过为什么?
互联网的所有信息其实就是一个巨大的知识库,为了让所有人利用好这个知识库,我们发明了百度等传统搜索引擎。
我们使用传统搜索引擎的痛点跟使用传统知识库是一样的:
- 当我们搜索一些资料时,我们需要点进去一个个去找符合我们需求的文章
- 解决我们问题的答案可能在文章中的某一个段落中,但是我们要通读整篇文章才能找到答案
但是 Kimi 或者 ChatGPT 等 AI 对话软件却可以帮助你解决以上两个痛点,他会根据你的问题精准给出问题的答案。
Kimi 或者 ChatGPT 等大模型的原理我这里不赘述,想要了解的小伙伴请参考以下两个视频:
简单来讲,就是是大模型做了两件事情:
- 他学习了全网公开的所有知识(不考虑训练数据的时效)
- 他能根据你的问题快速找到对应的知识点,然后输出给你
而对于 Kimi 和 ChatGPT 而言,把他们当作知识库也有缺点:
- 大模型学习的是互联网公开的知识,如果你想让他们针对个人或者企业等私有知识进行问答,他们做不到
- 大模型学习了互联网所有的知识,这里面的内容良莠不齐,可能会影响针对某一个问题回答的准确性
为了解决这些问题,我们进入到下一个话题:AI 时代的私人知识库
AI 时代的私人知识库
私人知识库中内容一般有两种:
- 日常从互联网收集的优质信息
- 个人日常的思考以及分享
如果我想基于这套知识库打造个人专属的 ChatGPT 该怎么做呢?这里面常见的会有两种技术方案
- 训练专有大模型
- 利用 RAG(检索增强生成)技术
初次听到这两个名词你可能有点懵,不要慌,接下来我会通俗易懂的语言让你了解他们的原理。
训练专有大模型
KimiChat 和 ChatGPT 等 AI 聊天软件为什么能够精准的回答问题,因为他们使用了整个互联网的语料进行了训练,从而拥有了整个互联网的知识。
看到这里你应该知道我想要讲什么了,对,既然能用整个互联网的知识训练出 KimiChat 和 ChatGPT 等大模型,那我能不能使用我的知识库来训练一个专有的大模型呢?
当然可以!而且这样的效果是最好的。
但是这并不是当下主流的方案,因为他有以下几个缺陷:
- 高成本:训练和维护一个大型专有模型的成本非常高,需要大量的计算资源和专业知识。
- 更新难度:如果需要更新模型的知识,需要重新训练或微调模型,这可能是一个复杂且耗时的过程
下面让我们来看另一个方案:RAG(检索增强生成)
RAG(检索增强生成)
这里我们先不讨论技术原理,我们可以通过“RAG”的名字来通俗易懂地解释一下检索增强生成
- R:Retrieval(检索)
想象一下,当你在一个图书馆里寻找一本关于某个主题的书。图书馆员会先根据你的描述,从书架上找出一些相关的书籍和文章。这就是 RAG 中的“检索”部分。在这个步骤中,系统会从知识库或文档集合中找到与用户问题相关的内容。
- A:Augmented(增强)
接下来,图书馆员会打开那些找出来的书籍和文章,挑选出最相关的段落和信息,并把它们汇总起来。这就是“增强”部分。这里,大模型会把检索到的信息进行筛选和优化,确保最相关和最有用的信息被选中。
- G:Generation(生成)
最后,图书馆员会把汇总的信息组织成一个连贯的、易于理解的回答,用通俗易懂的语言告诉你。这就是“生成”部分。在这一阶段,大模型将整合的信息生成一个自然流畅的回答,像是一个专家在直接回答你的问题。
综合解释
RAG 就像是一个超级智能的图书馆员:
- 检索:它会从庞大的知识库中找到与你问题相关的信息。
- 增强:它会筛选和优化这些信息,确保找到的是最相关的部分。
- 生成:它会把这些信息整合起来,用通俗易懂的语言给出一个连贯的回答
了解了 RAG 的基本概念,他的优缺点也就显而易见啦!
优点:
- 成本效益:相比训练和维护一个大型专有模型,RAG 的实现成本更低
- 灵活性:RAG 可以利用多种数据源,包括结构化数据和非结构化数据。它能迅速适应不同领域和变化的数据
- 可扩展性:可以随时增加或更新知识库中的内容,而不需要重新训练模型
缺点:
- 相比于专有模型的方案,他的回答准确性不够
深入理解 RAG
在这篇教程:大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库发布后,
好多小伙伴都会问我一个问题:“既然 AI 知识库技术这么厉害,我能将我收集的各种文章全部投喂给知识库,打造一个专属于个人的知识库么?”
很遗憾的告诉大家不能,理想是美好的,现实是骨感的。当下 RAG 的技术能力是有边界的。
这一章节我希望可以通过讲解 RAG 的原理来让你有以下几个收获:
- 通过了解 RAG 的原理知晓当下 AI 知识库的能力边界在哪里
- AI 知识库目前最适用的场景有哪些?
- 如果你要付费为自己的企业搭建知识库,你可以知道你为什么而付费,不会被人牵着鼻子走
所以我希望你可以耐心看完这个章节,而我也会尽我所能将 RAG 讲解的通俗易懂!
下面我们通过 5 个环节来了解 RAG 的主要流程
注意:如果你实在不想看这个章节,请务必阅读:影响 RAG 输出质量的因素 这个章节,那里面有我最想讲的东西。
文档准备与预处理
你要做 AI 知识库,你起码得有知识库吧,所以 RAG 的第一步就是准备知识库数据。
当下技术下 RAG 的能力仍然以处理文本数据为主,例如 PDF、在线云文档,EXCEL 等等
为了保证后续流程的质量,在文本准备时会有一个重要的环节,叫做文本的预处理。
用专业的词汇叫做数据清洗和去噪。他的目的主要有两点
- 清理无效的数据:删除无效、过时或者不相关的数据,提高后续的检索速度
- 统一数据的格式:将不同的数据元转换成统一的格式,便于后续的处理和检索
举个例子:当要整理书桌的时候,我们的第一步通常都是先将桌面上的垃圾给扔掉,然后才是整理桌面上的书本、电脑等物品。扔掉垃圾这一动作就是数据的清洗和去噪
文档切割
在文档准备好之后,就需要将文档进切割为了“文档片”,为什么要进行文档切块呢?主要有以下几个原因
- 提高后续检索效率和精度
想想我们之前的痛点,如果我想要的问题答案只在某一个段落中,如果为了获取答案每次都要阅读全文,那肯定是效率低下的。
对于程序也是一样的道理,大文档往往包含大量的信息,但是我们的查询通常只涉及其中的一小部分。所以将大文档切割成较小的文档块,可以更快更精准的定位到与查询相关的内容,从而提高效率和准确度
- 改善模型的生成质量
前面讲到,从知识库中查询出来的内容是要投喂到大模型进行总结的,如果查询出来的文档内容过长,会导致两个核心问题:
- 文档过长,容易达到大模型处理的上下文限制,导致生成效果不好
- 文档过长,导致不相关内容过大,容易引起大模型的注意力分散,导致影响回答质量
举例说明:
假设我们有一个关于机器学习的长文档,我们可以将其切割成如下小块:
- 定义和背景:介绍机器学习的基本定义和背景知识。
- 算法种类:描述不同类型的机器学习算法,如监督学习、无监督学习和强化学习。
- 应用场景:列举机器学习在不同领域的应用,如图像识别、自然语言处理等。
- 发展趋势:讨论机器学习的发展趋势和未来方向。
通过将长文档切割成这些小块,检索系统可以更高效地找到用户查询所需的信息。例如,如果用户询问“机器学习有哪些主要算法?”,系统可以直接检索并返回“算法种类”这个文档块,快速且准确地回答问题。
文档存储
当文档被预处理以及切割成文档片之后,接下来就要将文档进行存储了。
这里的存储需要使用到一种叫做“向量数据库”的特殊数据库,为了更好的理解文档的存储过程,我们需要先理解向量这个概念。
向量
向量是数学和计算机科学中的一个基本概念,它将信息表示为一个有序的数字列表。简单来说,向量是一组数字,这些数字可以用来描述物体的某些特性或属性。
举个例子
假设我们有三个不同的物体:国王、皇帝和苹果。我们可以通过某种方法将这些物体转换为向量,如下所示:
- “国王” -> [1.2, 0.5, 3.1, …]
- “皇帝” -> [1.3, 0.6, 2.9, …]
- “苹果” -> [0.9, -1.2, 0.3, …]
在这些向量中,每个数字表示物体的某个特征。例如,第一个数字可能表示权力,第二个数字可能表示地位,第三个数字可能表示颜色,依此类推。
语义相似性
通过这种方式,我们可以看到“国王”和“皇帝”的向量在某种程度上是相似的,因为它们的特征值接近。这意味着在特征空间中,它们的属性相似。而“苹果”的向量与前两者差异很大,因为它的属性与“国王”和“皇帝”完全不同。
应用
向量的优点在于,它提供了一种将复杂的信息结构化为计算机可以理解和处理的形式。向量之间的相似性可以用于后续的检索
文本嵌入(Embedding)
既然要将文档片存入向量数据库,那总得先将文档片进行向量化吧。
文本嵌入(Embedding)这一环节的目的就是将文档片转换成向量的形式
向量数据库存储
通过文本嵌入技术将文档片转成向量了,接下来就是将这些向量数据存储到一个数据库中,为后续的检索做准备了。
这里存储文本向量的数据库就是向量数据库(Vector Stores)
检索
检索就是根据用户的问题从向量数据库中获取匹配的内容。
要理解检索环节,最主要的是理解检索有那几种方式,这里我们先不用技术语言,我们先来思考下你期望的检索方式是怎样的。
假设你有一个问答对:
问题:你的产品多少钱?
答案:199 元/年
针对这个问答对,你肯定期望只要用户问了跟产品价格相关的问题,都能获取准确的答案。
例如用户的问题可能是:
- 你的产品这么卖的呀
- 这个产品是怎么收费的
- 你的产品多贵
- ......
无论上面是哪个问题,你肯定期望都能够检索出来:199 元/年 这个答案
你期望的这种检索方式使用专业术语来表达就是:语义检索
语义检索
语义匹配关注的是查询和文档内容的意义,而不仅仅是表面的词汇匹配
那语义匹配是怎么做到的呢,这里就要提到前面说的向量。
我们可以通过向量的相似性来判断语义的相似性,这里就不展开了
全文检索
语义检索成本是比较高的,成本较低的方案则是全文检索。
全文检索是基于关键词的检索方式,这里我们还是直接通过例子的方式进行说明:
有一个句子是:“猫的饮食习惯包括吃鱼和鸡肉”
如果用户输入了“猫”、“饮食”、“猫的饮食习惯”、“吃鱼”都可以搜索到这个句子。
但是如果用户搜索了猫喜欢吃什么呀,这个时候是无法搜索到上面这个句子的。
你可以简单的理解为全文检索就是根据关键词进行匹配的。
混合检索
混合模式结合了语义匹配和全文检索的优点,同时利用关键词匹配和语义理解来提高检索效果。
通常,系统先进行全文检索获取初步结果,然后再对这些结果进行语义匹配和排序。
排序
检索阶段会将匹配到的文档片全部获取,紧接着是一个排序的环节。
对于检索的文档片进行排序,确保最相关的片段排在前面。这一步通常基于文档片与输入问题之间的相似度分数来进行排序
利用大模型生成
输出就是最后一个环节了,将输入问题和排序后的文档片一起提交给大模型(LLM),由大模型生成最终答案。这一步包括:
- 上下文理解:大模型需要理解输入问题和检索到的片段之间的关系。
- 答案生成:大模型基于输入问题和检索片段生成一个连贯、合理的答案。
- 加入引用来源:非必要
总结
总结就看下面这张图就好啦
如果你已经耐心看到了这里并且理解上这一章节,那么恭喜你,对于非专业人士来讲,我们理解到这个程度已经足够了。
影响 RAG 输出质量的因素
在深入理解 RAG 这一章节,我们了解到 RAG 有如下 6 个环节
- 文档准备与预处理
- 文档切割
- 文档存储
- 检索
- 排序
- 利用大模型总结输出
从专业的角度来讲,每个环节都会对 RAG 的输出质量产生很大的影响。但是对于非研发同学来讲,我们大多时候是使用 Coze、FastGPT 这种工具,在这种情况下,我们能控制的只有如下 3 个环节
- 文档准备与预处理
- 文档切割
- 利用大模型总结输出
文档切割
这里面最关键的是文档切割,因为文档分割如果不合理,可能会破坏上下文的完整性,使得后续的检索和生成阶段难以理解和使用这些阶段。
下面我们看一个文档切割不合理的例子,假设我们有下面这样一段话:
"猫咪喜欢吃各种各样的食物,包括鱼、鸡肉和干粮。猫咪的饮食习惯取决于它们的年龄、健康状况和品种。幼猫需要更多的蛋白质,而成年猫则需要均衡的营养。确保猫咪的饮食中包含足够的水分非常重要,以避免肾脏问题。"
不合理的文档切割方式
假设我们将这段文档不合理的切割成以下文档片:
- "猫咪喜欢吃各种各样的食物,包括鱼、"
- "鸡肉和干粮。猫咪的饮食习惯取决于它们的年龄、健康状况"
- "和品种。幼猫需要更多的蛋白质,"
- "而成年猫则需要均衡的营养。确保猫咪的"
- "饮食中包含足够的水分非常重要,以避免肾脏问题。"
假设用户查询:“猫咪的饮食习惯是什么?”
由于文档切割不合理,系统可能返回以下结果:
- 文档块 1:“猫咪喜欢吃各种各样的食物,包括鱼、”
- 文档块 4:“而成年猫则需要均衡的营养。确保猫咪的”
这样,用户得到的回答是不完整且不连贯的。
合理的的文档切割方式
为了提高输出质量,合理的文档切割方式应该保持上下文的完整性。如下所示:
- "猫咪喜欢吃各种各样的食物,包括鱼、鸡肉和干粮。"
- "猫咪的饮食习惯取决于它们的年龄、健康状况和品种。"
- "幼猫需要更多的蛋白质,而成年猫则需要均衡的营养。"
- "确保猫咪的饮食中包含足够的水分非常重要,以避免肾脏问题。"
假设用户查询:“猫咪的饮食习惯是什么?”
合理的文档切割会让系统返回如下更完整的结果:
- 文档块 2:“猫咪的饮食习惯取决于它们的年龄、健康状况和品种。”
- 文档块 3:“幼猫需要更多的蛋白质,而成年猫则需要均衡的营养。”
这样,用户得到的回答是连贯且完整的。
我希望你可以通过上面这个例子了解文档切割对于 RAG 的重要性,那我们该如何将文档切割的更合理呢?
各个免费的平台一般都提供了两种文档切割方式,分别是:
- 智能切割:由系统通过上下文理解进行切割
- 手动切割:用户可以指定固定的分隔符来对文档进行切割
如果我们想通过利用 Coze 等免费平台搭建知识库,在当下的技术水平下,智能切割并不是一个很好的方式,因为目前来讲 Coze 等免费平台提供的智能切割方式效果一般。
那是不是 Coze 的知识库就完全不能用了?当然不是,对于某一个业务场景,RAG 的表现都是比较稳定的,那就是以问答为主的客服场景。
这里最主要的原因就是问答场景的格式非常固定,那就是问答对,只要我们在切割的时候将一个问答对切成一个文档片,那么在检索的时候效果就会非常好。
这里给大家一个 QA 问答对的格式:
### 问题:外贸大师这么收费的
回答:外贸大师年版会员1998/年
### 问题:外贸大师支持的付款方式有哪些
回答:微信、支付宝和银行卡转账
### 问题:外贸大师的词挖掘有什么作用
回答:词挖掘主要是为了挖掘流量词,帮助商家做广告
对于上面这样一个格式的问答对,我们只要在切割的时候选择 ### 作为分隔符号,那么每一个文档片都是完整的。
利用大模型生成
当从知识库中检索出内容之后,我们就可以利用大模型进行总结了,这里我们可以选择的有两点
- 优化 Prompt
- 选择合适的大模型
优化 Prompt 这里就不展开了,因为提示词工程对于当下 AI 时代的重要性,我已经讲过太多次了,如果你想要学习提示词,请参考以下文章
https://www.waytoagi.com/prompts?tag=7
而选择合适的大模型有两点需要考虑:
- 上下文长度
- 聪明度
- 生成速度
如果你的回答场景都是很长的文档,那么你可能会更关注上下文的长度
另外:大多数情况下,大模型越聪明,其生成速度可能越慢。
总结
终于到了我最想讲的一段了,因为自从我发布了这个教程大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库 之后,我收到的最多问题之一就是:
为什么我将我的笔记全部投喂给 Coze 之后,他的回答很不准确呢?
为了回答这个问题,我每次都要语音个 10-20 分钟,这也是我写这篇文章的目的,毕竟坑是自己埋下的,含着泪也要填完
如果你是要利用 Coze 或者 FastGPT 等工具来搭建知识库,那么在当下的技术条件下,你一定要有个预期,当下这些平台的 RAG 能力仅仅对问答这种场景是友好的,其他的场景效果都差强人意~
如果你需要企业级的复杂知识库场景,你可能需要找专业的团队了,他们的收费在几万到几十万不等(可以联系我,我这边有靠谱的资源)
如果你想使用专门搭建个人知识库的软件,我推荐你看下的另一篇文章:
这篇文章你忽略本地部署大模型这一环节,你直接看其中推荐的一个软件
这款软件据说效果不错(但是需要你自己对接一些额外的 API),并且我建议你先了解 RAG 的原理再去使用,否则你可能会头大。
我目前还没有深度使用,等后续使用了,我再了些教程!
Coze 中使用知识库
讲了一大堆,终于到了实战的环节了。
这里我虽然使用 Coze 举例子,但是我希望可以帮助你举一反三,未来在接触到 FastGPT、Dify 等等 AI Agent 工具的时候都能快速的上手知识库组件。
因为你了解了 RAG 的本质之后,无论什么知识库工具,本质都是一个皮而已!
这些也是写这篇文章的目的:让你做到知其然,知其所以然
创建知识库
- 来到个人空间,找到知识库导航栏,点击创建知识库
这里我想说明的是,知识库是共享资源,也就是你的多个 Bot 可以引用同一个知识库
- 选择知识库的格式,填写一些信息
目前(2024.06.08)Coze 支持三种格式
- 文档
- 表格(CSV、Excel 等)
- 图片(其实就是上传一张图片,然后填写个图片文字说明)
这里格式并不重要,重要的是你要看懂上个章节讲的:影响 RAG 输出质量的因素
- 我这里选择本地文档(问答对可以选择表格)
- 选择自定义的文档切割
- 数据处理完成
当数据处理完成后,你会发现,一个问答对被切割成一了一个文档片
使用知识库
关于使用知识库,大家可以看这篇教程:大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库,这篇文章已经讲的很详细了,这里就不再赘述了
AGI 大群的机器人原理
最后我们来讲下 AGI 大群中的机器人的原理,如果你跟完了整篇文章,我想你心里已经有答案了。
飞书的官方技术同学使用 RAG 技术将通往 AGI 之路 的内容进行处理,然后在飞书大群中接入一个智能机器人,当机器人被艾特回答问题的时候,其背后就是针对这个 AI 知识库进行的提问。RAG 技术会将知识库中最符合的相关文档回复给用户。
基于 RAG 技术,我也搭建了一个微信机器人帮助我进行课程相关答疑,还是挺爽的~
写在最后
分享我的三个理念给大家:
- 读十遍不如实操一遍,实操十遍不如分享一遍
- 不要沉迷于碎片化的内容,要聚焦于体系化的知识
- 不管在什么时代,了解一个东西一定要先花时间了解其本质
最后的最后请允许我打几个广告~
如果你对我本人感兴趣,请用下面的方式联系我,左手微信,右手星球
另外我和艾木合作开发了一款 Coze 的体系化课程,旨在帮助大家学习 Coze。
这篇文章有关于课程的一切信息:成为Agent工程师之Coze实战课程介绍
感兴趣的可以直接加我V信咨询(备注:Coze课程)