部署个人知识库需要考虑硬件配置和相关技术原理。
硬件方面:
技术原理方面:
此外,搭建基于 GPT API 的定制化知识库,涉及给 GPT 输入(投喂)定制化的知识。GPT-3.5 一次交互(输入和输出)只支持最高 4096 个 Token。为了处理大量领域知识,OpenAI 提供了 embedding API 解决方案。embeddings 是一个浮点数字的向量(列表),两个向量之间的距离衡量它们的关联性,小距离表示高关联度。
所有人都会手把手教你部署XX大模型,听起来很诱人,因为不需要科学上网,不需要高昂的ChatGPT会员费用。但是在开启下面的教程之前,我希望你能有个概念:运行大模型需要很高的机器配置,个人玩家的大多数都负担不起所以:虽然你的本地可能可以搭建出一个知识库,但是它不一定能跑的起来下面我通过一组数据来让大家有个感性的认知。以下文字来源于视频号博主:黄益贺,非作者实操生成文字大模型最低配置:8G RAM + 4G VRAM建议配置:16G RAM + 8G VRAM理想配置:32G RAM + 24G VRAM(如果要跑GPT-3.5差不多性能的大模型)生成图片大模型(比如跑SD)最低配置:16G RAM + 4G VRAM建议配置:32G RAM + 12G VRAM生成音频大模型最低配置:8G VRAM +建议配置:24G VRAM而最低配置我就不建议了,真的非常慢,这个我已经用我自己8G的Mac电脑替你们试过了。讲这个不是泼大家冷水,而是因为我的文章目标是要做到通俗易懂,不希望通过夸大的方式来吸引你的眼球。这是这篇文章的第二次修改,我专门加的这段。原因就是因为好多小伙伴看了文章之后兴致冲冲的去实验,结果发现电脑根本带不动。但是这并不妨碍我们去手把手实操一遍,因为实操可以加深我们对大模型构建的知识库底层原理的了解。如果你想要私滑的体验知识库,可以参考我的另一篇文章:[胎教级教程:万字长文带你使用Coze打造企业级知识库](https://waytoagi.feishu.cn/wiki/CT3UwDM8OiVmOOkohPbcV3JCndb)好了,废话不多说,下面教程还是值得亲自上手搞一遍的,相信走完一遍流程后,你会对知识库有更深的理解。
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading2]文本加载器(Document Loaders)[content]文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理
要搭建基于GPT API的定制化知识库,涉及到给GPT输入(投喂)定制化的知识。但GPT-3.5,也就是当前免费版的ChatGPT一次交互(输入和输出)只支持最高4096个Token,约等于3000个单词或2300个汉字。这点容量对于绝大多数领域知识根本不够。为了使用GPT的语言能力来处理大量的领域知识,OpenAI提供了embedding API解决方案。参考OpenAI embedding documents。[heading2]理解embeddings[content]embeddings(直译为嵌入)是一个浮点数字的向量(列表)。两个向量之间的距离衡量它们的关联性。小距离表示高关联度,大距离表示低关联度。进一步解释:向量(列表):向量是数学中表示大小和方向的一个量,通常用一串数字表示。在计算机科学和数据科学中,向量通常用列表(list)来表示。列表是一种数据结构,它包含一组有序的元素。例如,一个二维向量可以表示为[2,3],这意味着沿着两个轴的分量分别为2和3。在这里,"list"是一种编程术语,意味着一系列有序的数据。向量之间的距离:向量之间的距离是一种度量两个向量相似性的方法。有多种方式可以计算两个向量之间的距离,最常见的是欧几里得距离。欧几里得距离计算方法是将两个向量的对应元素相减,然后取平方和,再开平方。例如,向量A =[1,2]和向量B =[4,6]之间的欧几里得距离为sqrt((4-1)^2 +(6-2)^2)= 5。较小距离意味着高相关性,因为向量间相似度高。在OpenAI词嵌入中,靠近向量的词语在语义上相似。例如,“猫”和“狗”距离近,它们都是宠物,与“汽车”距离远,相关性低。文档上给了创建embeddings的示例上面的命令访问embeddings API接口,将input语句,转化成下面这一串浮点数字。