以下是关于如何搭建定制知识库的相关内容:
要搭建基于 GPT API 的定制化知识库,需要给 GPT 输入定制化的知识。但 GPT-3.5(即当前免费版的 ChatGPT)一次交互支持的 Token 数量有限,约 4096 个,相当于 3000 个单词或 2300 个汉字,容量对于多数领域知识不够。为处理大量领域知识,OpenAI 提供了 embedding API 解决方案,可参考 OpenAI embedding documents。
embeddings 是浮点数字的向量(列表),两个向量之间的距离衡量它们的关联性,小距离表示高关联度,大距离表示低关联度。向量是用一串数字表示大小和方向的量,在计算机科学和数据科学中通常用列表表示。向量之间的距离是度量相似性的方法,常见的如欧几里得距离。在 OpenAI 词嵌入中,靠近的向量词语在语义上相似。
LlamaIndex 是更高一层 LangChain 的抽象,之前叫 GPT Index。之前的文章基于 GPT3.5 搭建定制化知识库中的例子使用了 LlamaIndex 包,它简化了 LangChain 对文本分割和查询的接口,并提供了更丰富的 Data Connector。LlamaIndex 只针对 GPT Model 做 Index,而 LangChain 可对接多个 LLMs,可扩展性更强。参考 https://gpt-index.readthedocs.io/en/latest/
在基于大模型+知识库的 Code Review 实践中,对于自定义知识库-飞书文档(自定义),没有格式要求,能看懂正确代码即可。可直接使用 LangChain 提供的LarkSuite文档加载类,对有权限的飞书文档进行获取,使用 CharacterTextSplitter/RecursiveCharacterTextSplitter 将文本分割成固定长度的块(chunks),方法有两个主要参数:chunk_size 控制每个块的长度,如设置为 1024,则每个块包含 1024 个字符;chunk_overlap 控制相邻两个块之间的重叠长度,如设置为 128,则每个块会与相邻块重叠 128 个字符。
因为大模型有足够多的数据,想让大模型按要求执行就需要用到“Prompt 提示词”。
最近各家大厂接连放大招,AI 技术和应用突飞猛进,GPT-4 接口已支持最大 32K 输入,AI 的开发和使用门槛会越来越低。垂直领域知识库的搭建和优化可能更多是业务问题,而非技术问题。
要搭建基于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语句,转化成下面这一串浮点数字。
LlamaIndex是更高一层LangChain的抽象,之前叫GPT Index。之前的文章[基于GPT3.5搭建定制化知识库](http://mp.weixin.qq.com/s?__biz=MzIyNDAzMzYxNQ==&mid=2652028778&idx=1&sn=985a386f915dea0d4dc97186af7c50b6&chksm=f3f3314ac484b85ce64579538987cea764181f92a4bb953724b055f0f2b9c73c03b109cfbe27&scene=21#wechat_redirect)中的例子就是使用的LlamaIndex包。它简化了LangChain对文本分割,查询这块的接口,提供了更丰富的Data Connector。LlamaIndex只针对GPT Model做Index,而LangChain是可以对接多个LLMs,可扩展性更强。参考https://gpt-index.readthedocs.io/en/latest/[heading2]写在最后[content]最近各家大厂接连放大招,AI技术和应用突飞猛进,GPT-4接口已经支持最大32K输入,AI的开发和使用门槛肯定会越来越低,就像当年的Windows,Office。垂直领域知识库的搭建和优化可能更多的是一个业务问题,而不是一个技术问题。欢迎关注公众号”越山集“,多交流。让我们保持好奇心,不断探索,共同进步。
飞书文档没有格式要求,能看懂正确代码是怎样就行这里直接使用LangChain提供的[LarkSuite](https://link.zhihu.com/?target=https%3A//python.langchain.com/docs/integrations/document_loaders/larksuite)文档加载类,对有权限的飞书文档进行获取,使用CharacterTextSplitter/RecursiveCharacterTextSplitter将文本分割成固定长度的块(chunks),方法有两个主要参数:chunk_size:控制每个块的长度。例如设置为1024,则每个块包含1024个字符。chunk_overlap:控制相邻两个块之间的重叠长度。例如设置为128,则每个块会与相邻块重叠128个字符。[heading3]Prompt指令设计[content]因为大模型有足够多的数据,我们想让大模型按要求执行就需要用到『Prompt提示词』。图源Stephen Wolfram