知识库可以用比较通俗的方式来理解:
想象一个大语言模型就像一个非常聪明、读过无数书的人,但对于一些特定的工作场景中的细节,比如见到老板娘过来吃饭要打三折,张梦飞过去吃饭要打骨折,它可能并不清楚。这时候,知识库就像是给这个聪明的人发的一本工作手册。
从更专业的角度来说,知识库的运作原理通常包括以下几个步骤:
以车型数据为例,每个知识库的分段中保存了一种车型的基础数据。当用户问宝马 X3 的售价是多少时,就能匹配到对应车型的分段,然后从其中获取到售价信息。
海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html 国内官方文档:https://www.coze.cn/docs/guides/use_knowledge
我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading4]使用知识库[content]海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html国内官方文档:https://www.coze.cn/docs/guides/use_knowledge
大语言模型:是一个学习过无数本书、拥有无穷智慧的人。他读过无数的书、看过无数的段子,因此对公共知识、学识技能、日常聊天十分擅长。然而,在工作场景下,只会聊天侃大山可不行,你想让他帮你干活。这个时候,就需要“提示词”出场了,提示词:是你告诉这个全知全能的人,他是一个什么样的角色、他要专注于哪些技能,让他能够按照你的想法,变成一个你需要的“员工”。知识库:相当于你给这个“聪明”员工的发放了一本工作手册。即使是看过再多的书、浏览过再多的文字,也不会准确的知道见到老板娘过来吃饭要打三折,张梦飞过去吃饭要打骨折。而知识库,就是把这些内容写在了工作手册上。让这个聪明的员工,见到有人来的时候,就翻一翻手册,然后再做出反应。我的设定:AI模型:这里使用的是阿里千问模型。提示词:这里设定的角色是“美嘉”,是按照美嘉的人设、背景和对话风格做的设定。知识库:这里放的是《爱情公寓》全季的剧情,让“美嘉”拥有了自己过往的“记忆”,知道自己做过什么、好朋友是谁等等。图中右侧是一个十分简单的问答,我问:“你是谁?你和子乔在台球厅吵架那次是为了什么吵架?”她的回复是:“我是陈美嘉,那次在台球厅和吕子乔吵架是因为他约会被人撞见,我讽刺他脸大影响信号,他还反击我。后来谈到过去的事情,我指责他忘恩负义,他就说我平。最后,我伤心地说要分手,因为他之前甩过我。”
扣子提供了以下几种方式来存储和记忆外部数据,这样Bot便可以使用这些外部数据来精准回复用户。知识库:是大量知识分片,通过语义匹配,给模型补充知识。以车型数据为例,每个知识库的分段中,保存了一种车型的基础数据。当用户问宝马X3的售价是多少?,能匹配到对应车型的分段,然后模型从中获取到售价信息。数据库:类似传统软件开发的数据库功能,以表格结构存储信息,通过NoSQL方式使用。目前提供的是关系型数据库,下面列举一些应用场景:AI便签:记录用户提交的便签,支持提交、查询操作,这些操作都是通过NL2SQL完成。单词本:记录用户背过哪些单词,其中哪些单词还没有记住等。