跳转到内容

这可能是讲 Coze 的知识库最通俗易懂的文章了

引言

💡

大家好,我是大圣,一个致力于使用 AI 技术将自己打造为超级个体的程序员。

对于知识库大家并不陌生,一系列的信息和知识聚集在一起就可以构成知识库。

比如我最心爱的通往 AGI 之路 就是一个使用飞书软件搭建的 AI 知识库。

当你需要了解 AI 某一领域知识的时候,你只需要在 AGI 的飞书大群中,跟机器人对话就能获取对应的资料。

而在我的大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库 也是以 AI 时代的知识库作为例子进行了讲解。

这篇文章的目的就是帮助非编程人士来理解 AI 时代的知识库,读完本文你会收获:

  1. AI 时代的知识库的概念、实现原理以及能力边界
  2. 通往 AGI 之路大群中的通过对话就能获取知识库中资料的原理
  3. 更好的使用 Coze 等 AI Agent 平台中的知识库组件,打造更加强大的智能体

请允许我自卖自夸:我这篇文章可以说是知识库文章中 Coze 讲的最好的,讲 Coze 的文章中知识库讲的最好的

另外做个预告,我正在规划一个关于 AI 时代你应该具备的编程基础系列,大纲如下:

  • 数据库|让 Coze 拥有了记忆的组件 1
  • 知识库|让 Coze 拥有了记忆的组件 2
  • 变量|让 Coze 拥有了记忆的组件 3
  • JSON|让你更好的使用 Coze 插件
  • API|外部应用程序该如何接入 Coze
  • 操作系统与服务器|那些接入了 Coze 的微机器人都是运行在哪里的
  • Docker|让你用最简单的方式部署微信机器人

先来聊聊知识库

传统意义的知识库

对于传统意义上的知识库,我相信大家都不陌生。比如上面提到的通往 AGI 之路

再比如我使用的飞书搭建自己的通往超级个体之路的知识库,里面存放了我打造超级个体过程中的所有知识和分享

知识库是我们个人或者企业的一些信息和知识的集合,一般有这么两类

  • 个人搭建的某一领域知识库,比如 AI 知识库,里面存放了你日常收集了你日常整理的 AI 信息和知识
  • 企业搭建的产品资料知识库,里面存放了关于公司售卖的产品的详细资料

这里多说一句,如果你想搭建自己的知识库,但是还没有行动,我建议你看下我的分享。

两篇文档配套 1 个半小时的直播分享,让你轻松打造自己的知识管理体系

03|利用飞书搭建自己的知识库

04|PARA方法论,打造持续升级的知识管理体系

我们日常对于传统知识库的使用很简单,当我们遇到问题时,我们可以通过知识库的目录找到对应的文章,通过阅读之前收集的信息或者写作的文章来为自己答疑解惑。

但是这里面会有两个痛点

  • 随着知识库中信息的增多,如果分类不合理,我们很难再找到当初我们搜集的文章放在哪里
  • 问题的答案可能是一篇文章中的某一段落,但是我们每次都需要重新阅读这篇文章才能找到答案

那 AI 时代来临后,是否可以改善这个痛点呢?

AI 时代的搜索

为了让大家更好的理解 AI 知识库,我用更贴近我们日常生活的搜索引擎为例来说明 AI 的作用。

如果你已经接触到以下两款软件,我相信你可能已经很久没有打开百度了吧

你有没有想过为什么?

互联网的所有信息其实就是一个巨大的知识库,为了让所有人利用好这个知识库,我们发明了百度等传统搜索引擎

我们使用传统搜索引擎的痛点跟使用传统知识库是一样的

  • 当我们搜索一些资料时,我们需要点进去一个个去找符合我们需求的文章
  • 解决我们问题的答案可能在文章中的某一个段落中,但是我们要通读整篇文章才能找到答案

但是 Kimi 或者 ChatGPT 等 AI 对话软件却可以帮助你解决以上两个痛点,他会根据你的问题精准给出问题的答案。

Kimi 或者 ChatGPT 等大模型的原理我这里不赘述,想要了解的小伙伴请参考以下两个视频:

简单来讲,就是是大模型做了两件事情

  • 他学习了全网公开的所有知识(不考虑训练数据的时效)
  • 他能根据你的问题快速找到对应的知识点,然后输出给你

而对于 Kimi 和 ChatGPT 而言,把他们当作知识库也有缺点:

  • 大模型学习的是互联网公开的知识,如果你想让他们针对个人或者企业等私有知识进行问答,他们做不到
  • 大模型学习了互联网所有的知识,这里面的内容良莠不齐,可能会影响针对某一个问题回答的准确性

为了解决这些问题,我们进入到下一个话题:AI 时代的私人知识库

AI 时代的私人知识库

私人知识库中内容一般有两种

  • 日常从互联网收集的优质信息
  • 个人日常的思考以及分享

如果我想基于这套知识库打造个人专属的 ChatGPT 该怎么做呢?这里面常见的会有两种技术方案

  1. 训练专有大模型
  2. 利用 RAG(检索增强生成)技术

初次听到这两个名词你可能有点懵,不要慌,接下来我会通俗易懂的语言让你了解他们的原理。

训练专有大模型

KimiChat 和 ChatGPT 等 AI 聊天软件为什么能够精准的回答问题,因为他们使用了整个互联网的语料进行了训练,从而拥有了整个互联网的知识。

看到这里你应该知道我想要讲什么了,对,既然能用整个互联网的知识训练出 KimiChat 和 ChatGPT 等大模型,那我能不能使用我的知识库来训练一个专有的大模型呢?

当然可以!而且这样的效果是最好的。

但是这并不是当下主流的方案,因为他有以下几个缺陷:

  • 高成本:训练和维护一个大型专有模型的成本非常高,需要大量的计算资源和专业知识。
  • 更新难度:如果需要更新模型的知识,需要重新训练或微调模型,这可能是一个复杂且耗时的过程

下面让我们来看另一个方案:RAG(检索增强生成)

RAG(检索增强生成)

这里我们先不讨论技术原理,我们可以通过“RAG”的名字来通俗易懂地解释一下检索增强生成

  • R:Retrieval(检索)

想象一下,当你在一个图书馆里寻找一本关于某个主题的书。图书馆员会先根据你的描述,从书架上找出一些相关的书籍和文章。这就是 RAG 中的“检索”部分。在这个步骤中,系统会从知识库或文档集合中找到与用户问题相关的内容

  • A:Augmented(增强)

接下来,图书馆员会打开那些找出来的书籍和文章,挑选出最相关的段落和信息,并把它们汇总起来。这就是“增强”部分。这里,大模型会把检索到的信息进行筛选和优化,确保最相关和最有用的信息被选中。

  • G:Generation(生成)

最后,图书馆员会把汇总的信息组织成一个连贯的、易于理解的回答,用通俗易懂的语言告诉你。这就是“生成”部分。在这一阶段,大模型将整合的信息生成一个自然流畅的回答,像是一个专家在直接回答你的问题

综合解释

RAG 就像是一个超级智能的图书馆员:

  1. 检索:它会从庞大的知识库中找到与你问题相关的信息。
  2. 增强:它会筛选和优化这些信息,确保找到的是最相关的部分。
  3. 生成:它会把这些信息整合起来,用通俗易懂的语言给出一个连贯的回答

了解了 RAG 的基本概念,他的优缺点也就显而易见啦!

优点:

  • 成本效益:相比训练和维护一个大型专有模型,RAG 的实现成本更低
  • 灵活性:RAG 可以利用多种数据源,包括结构化数据和非结构化数据。它能迅速适应不同领域和变化的数据
  • 可扩展性:可以随时增加或更新知识库中的内容,而不需要重新训练模型

缺点:

  • 相比于专有模型的方案,他的回答准确性不够

深入理解 RAG

在这篇教程:大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库发布后,

好多小伙伴都会问我一个问题:“既然 AI 知识库技术这么厉害,我能将我收集的各种文章全部投喂给知识库,打造一个专属于个人的知识库么?”

很遗憾的告诉大家不能,理想是美好的,现实是骨感的。当下 RAG 的技术能力是有边界的。

这一章节我希望可以通过讲解 RAG 的原理来让你有以下几个收获:

  • 通过了解 RAG 的原理知晓当下 AI 知识库的能力边界在哪里
  • AI 知识库目前最适用的场景有哪些?
  • 如果你要付费为自己的企业搭建知识库,你可以知道你为什么而付费,不会被人牵着鼻子走

所以我希望你可以耐心看完这个章节,而我也会尽我所能将 RAG 讲解的通俗易懂!

下面我们通过 5 个环节来了解 RAG 的主要流程

注意:如果你实在不想看这个章节,请务必阅读:影响 RAG 输出质量的因素 这个章节,那里面有我最想讲的东西。

文档准备与预处理

你要做 AI 知识库,你起码得有知识库吧,所以 RAG 的第一步就是准备知识库数据。

当下技术下 RAG 的能力仍然以处理文本数据为主,例如 PDF、在线云文档,EXCEL 等等

为了保证后续流程的质量,在文本准备时会有一个重要的环节,叫做文本的预处理。

用专业的词汇叫做数据清洗和去噪。他的目的主要有两点

  • 清理无效的数据:删除无效、过时或者不相关的数据,提高后续的检索速度
  • 统一数据的格式:将不同的数据元转换成统一的格式,便于后续的处理和检索

举个例子:当要整理书桌的时候,我们的第一步通常都是先将桌面上的垃圾给扔掉,然后才是整理桌面上的书本、电脑等物品。扔掉垃圾这一动作就是数据的清洗和去噪

文档切割

在文档准备好之后,就需要将文档进切割为了“文档片”,为什么要进行文档切块呢?主要有以下几个原因

  1. 提高后续检索效率和精度

想想我们之前的痛点,如果我想要的问题答案只在某一个段落中,如果为了获取答案每次都要阅读全文,那肯定是效率低下的。

对于程序也是一样的道理,大文档往往包含大量的信息,但是我们的查询通常只涉及其中的一小部分。所以将大文档切割成较小的文档块,可以更快更精准的定位到与查询相关的内容,从而提高效率和准确度

  1. 改善模型的生成质量

前面讲到,从知识库中查询出来的内容是要投喂到大模型进行总结的,如果查询出来的文档内容过长,会导致两个核心问题

  • 文档过长,容易达到大模型处理的上下文限制,导致生成效果不好
  • 文档过长,导致不相关内容过大,容易引起大模型的注意力分散,导致影响回答质量

举例说明:

假设我们有一个关于机器学习的长文档,我们可以将其切割成如下小块:

  1. 定义和背景:介绍机器学习的基本定义和背景知识。
  2. 算法种类:描述不同类型的机器学习算法,如监督学习、无监督学习和强化学习。
  3. 应用场景:列举机器学习在不同领域的应用,如图像识别、自然语言处理等。
  4. 发展趋势:讨论机器学习的发展趋势和未来方向。

通过将长文档切割成这些小块,检索系统可以更高效地找到用户查询所需的信息。例如,如果用户询问“机器学习有哪些主要算法?”,系统可以直接检索并返回“算法种类”这个文档块,快速且准确地回答问题。

文档存储

当文档被预处理以及切割成文档片之后,接下来就要将文档进行存储了。

这里的存储需要使用到一种叫做“向量数据库”的特殊数据库,为了更好的理解文档的存储过程,我们需要先理解向量这个概念

向量

向量是数学和计算机科学中的一个基本概念,它将信息表示为一个有序的数字列表。简单来说,向量是一组数字,这些数字可以用来描述物体的某些特性或属性

举个例子

假设我们有三个不同的物体:国王、皇帝和苹果。我们可以通过某种方法将这些物体转换为向量,如下所示:

  • “国王” -> [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. "猫咪喜欢吃各种各样的食物,包括鱼、"
  2. "鸡肉和干粮。猫咪的饮食习惯取决于它们的年龄、健康状况"
  3. "和品种。幼猫需要更多的蛋白质,"
  4. "而成年猫则需要均衡的营养。确保猫咪的"
  5. "饮食中包含足够的水分非常重要,以避免肾脏问题。"

假设用户查询:“猫咪的饮食习惯是什么?

由于文档切割不合理,系统可能返回以下结果:

  • 文档块 1:“猫咪喜欢吃各种各样的食物,包括鱼、”
  • 文档块 4:“而成年猫则需要均衡的营养。确保猫咪的”

这样,用户得到的回答是不完整且不连贯的。


合理的的文档切割方式

为了提高输出质量,合理的文档切割方式应该保持上下文的完整性。如下所示:

  1. "猫咪喜欢吃各种各样的食物,包括鱼、鸡肉和干粮。"
  2. "猫咪的饮食习惯取决于它们的年龄、健康状况和品种。"
  3. "幼猫需要更多的蛋白质,而成年猫则需要均衡的营养。"
  4. "确保猫咪的饮食中包含足够的水分非常重要,以避免肾脏问题。"

假设用户查询:“猫咪的饮食习惯是什么?”

合理的文档切割会让系统返回如下更完整的结果:

  • 文档块 2:“猫咪的饮食习惯取决于它们的年龄、健康状况和品种。”
  • 文档块 3:“幼猫需要更多的蛋白质,而成年猫则需要均衡的营养。”

这样,用户得到的回答是连贯且完整的。

我希望你可以通过上面这个例子了解文档切割对于 RAG 的重要性,那我们该如何将文档切割的更合理呢?

各个免费的平台一般都提供了两种文档切割方式,分别是:

  • 智能切割:由系统通过上下文理解进行切割
  • 手动切割:用户可以指定固定的分隔符来对文档进行切割

如果我们想通过利用 Coze 等免费平台搭建知识库,在当下的技术水平下,智能切割并不是一个很好的方式,因为目前来讲 Coze 等免费平台提供的智能切割方式效果一般。

那是不是 Coze 的知识库就完全不能用了?当然不是,对于某一个业务场景,RAG 的表现都是比较稳定的,那就是以问答为主的客服场景。

这里最主要的原因就是问答场景的格式非常固定,那就是问答对,只要我们在切割的时候将一个问答对切成一个文档片,那么在检索的时候效果就会非常好。

这里给大家一个 QA 问答对的格式:

### 问题:外贸大师这么收费的

回答:外贸大师年版会员1998/年

### 问题:外贸大师支持的付款方式有哪些

回答:微信、支付宝和银行卡转账

### 问题:外贸大师的词挖掘有什么作用

回答:词挖掘主要是为了挖掘流量词,帮助商家做广告

对于上面这样一个格式的问答对,我们只要在切割的时候选择 ### 作为分隔符号,那么每一个文档片都是完整的。

利用大模型生成

当从知识库中检索出内容之后,我们就可以利用大模型进行总结了,这里我们可以选择的有两点

  • 优化 Prompt
  • 选择合适的大模型

优化 Prompt 这里就不展开了,因为提示词工程对于当下 AI 时代的重要性,我已经讲过太多次了,如果你想要学习提示词,请参考以下文章

https://www.waytoagi.com/prompts?tag=7

Prompts 共学快闪活动

而选择合适的大模型有两点需要考虑:

  • 上下文长度
  • 聪明度
  • 生成速度

如果你的回答场景都是很长的文档,那么你可能会更关注上下文的长度

另外:大多数情况下,大模型越聪明,其生成速度可能越慢。

总结

终于到了我最想讲的一段了,因为自从我发布了这个教程大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库 之后,我收到的最多问题之一就是:

为什么我将我的笔记全部投喂给 Coze 之后,他的回答很不准确呢?

为了回答这个问题,我每次都要语音个 10-20 分钟,这也是我写这篇文章的目的,毕竟坑是自己埋下的,含着泪也要填完

如果你是要利用 Coze 或者 FastGPT 等工具来搭建知识库,那么在当下的技术条件下,你一定要有个预期,当下这些平台的 RAG 能力仅仅对问答这种场景是友好的,其他的场景效果都差强人意~

如果你需要企业级的复杂知识库场景,你可能需要找专业的团队了,他们的收费在几万到几十万不等(可以联系我,我这边有靠谱的资源)

如果你想使用专门搭建个人知识库的软件,我推荐你看下的另一篇文章:

手把手教你本地部署大模型以及搭建个人知识库

这篇文章你忽略本地部署大模型这一环节,你直接看其中推荐的一个软件

这款软件据说效果不错(但是需要你自己对接一些额外的 API),并且我建议你先了解 RAG 的原理再去使用,否则你可能会头大。

我目前还没有深度使用,等后续使用了,我再了些教程!

Coze 中使用知识库

讲了一大堆,终于到了实战的环节了。

这里我虽然使用 Coze 举例子,但是我希望可以帮助你举一反三,未来在接触到 FastGPT、Dify 等等 AI Agent 工具的时候都能快速的上手知识库组件。

因为你了解了 RAG 的本质之后,无论什么知识库工具,本质都是一个皮而已!

这些也是写这篇文章的目的:让你做到知其然,知其所以然

创建知识库

  1. 来到个人空间,找到知识库导航栏,点击创建知识库

这里我想说明的是,知识库是共享资源,也就是你的多个 Bot 可以引用同一个知识库

  1. 选择知识库的格式,填写一些信息

目前(2024.06.08)Coze 支持三种格式

  • 文档
  • 表格(CSV、Excel 等)
  • 图片(其实就是上传一张图片,然后填写个图片文字说明)

这里格式并不重要,重要的是你要看懂上个章节讲的:影响 RAG 输出质量的因素

  1. 我这里选择本地文档(问答对可以选择表格)

  1. 选择自定义的文档切割

  1. 数据处理完成

当数据处理完成后,你会发现,一个问答对被切割成一了一个文档片

使用知识库

关于使用知识库,大家可以看这篇教程:大圣:胎教级教程:万字长文带你使用Coze打造企业级知识库,这篇文章已经讲的很详细了,这里就不再赘述了

AGI 大群的机器人原理

最后我们来讲下 AGI 大群中的机器人的原理,如果你跟完了整篇文章,我想你心里已经有答案了。

飞书的官方技术同学使用 RAG 技术将通往 AGI 之路 的内容进行处理,然后在飞书大群中接入一个智能机器人,当机器人被艾特回答问题的时候,其背后就是针对这个 AI 知识库进行的提问。RAG 技术会将知识库中最符合的相关文档回复给用户。

基于 RAG 技术,我也搭建了一个微信机器人帮助我进行课程相关答疑,还是挺爽的~

写在最后

分享我的三个理念给大家:

  • 读十遍不如实操一遍,实操十遍不如分享一遍
  • 不要沉迷于碎片化的内容,要聚焦于体系化的知识
  • 不管在什么时代,了解一个东西一定要先花时间了解其本质

最后的最后请允许我打几个广告~

如果你对我本人感兴趣,请用下面的方式联系我,左手微信,右手星球

另外我和艾木合作开发了一款 Coze 的体系化课程,旨在帮助大家学习 Coze。

这篇文章有关于课程的一切信息成为Agent工程师之Coze实战课程介绍

感兴趣的可以直接加我V信咨询(备注:Coze课程)