以下是用 AI 搭建个人知识库的方法:
首先,要搭建基于 GPT API 的定制化知识库,需要给 GPT 输入(投喂)定制化的知识。但 GPT-3.5(即当前免费版的 ChatGPT)一次交互(输入和输出)只支持最高 4096 个 Token,约等于 3000 个单词或 2300 个汉字,容量对于绝大多数领域知识往往不够。为解决此问题,OpenAI 提供了 embedding API 解决方案。
embeddings 是一个浮点数字的向量(列表),两个向量之间的距离衡量它们的关联性,小距离表示高关联度,大距离表示低关联度。比如,向量是数学中表示大小和方向的一个量,通常用一串数字表示,在计算机科学和数据科学中,向量通常用列表(list)来表示。向量之间的距离是一种度量两个向量相似性的方法,最常见的是欧几里得距离。在 OpenAI 词嵌入中,靠近向量的词语在语义上相似。
具体操作时,可将大文本拆分成若干个小文本块(也叫 chunk),通过 embeddings API 将小文本块转换成 embeddings 向量,并在一个地方(向量储存库)中保存这些 embeddings 向量和文本块,作为问答的知识库。当用户提出一个问题时,该问题先通过 embeddings API 转换成问题向量,然后将这问题向量与向量储存库的所有文本块向量比对,查找距离最小的几个向量,把这几个向量对应的文本块提取出来,与原有问题组合成为新的 prompt(问题/提示词),发送给 GPT API。
例如,有一篇万字长文,拆分成多个 Chrunks 包含不同内容。如果提问是“此文作者是谁?”,可以直观地看出与问题关联度最高的文本块,通过比较 embeddings 向量也能得到结论。最后发送给 GPT API 的问题会类似于“此文作者是谁?从以下信息中获取答案:本文作者:越山。xxxx。《反脆弱》作者塔勒布xxxx。”
此外,还有案例展示了如何在 AI 时代把碎片化信息内化为自己的知识/智慧。比如在读书时看到有触动的文本,将其整理归纳,标记重点,打赏标签,放入笔记系统,准备展开深度思考和实践。基于笔记中提到的 AI 对人的赋能模式,展开深度实践,生成自己的观点和决策,并打造成体系化的内容产品,实现价值。通过一个碎片化知识在左侧知识库中的“点、线、面、体”式的流转,从一个书摘变成一个体系化内容或课程,把“别人说的话”变成“自己的智慧”。
上面将文本转换成向量(一串数字)能大大节省空间,它不是压缩,可简单理解为索引(Index)。接下来就有意思了。比如我有一个大文本,可以先把它拆分成若干个小文本块(也叫chunk),通过embeddings API将小文本块转换成embeddings向量,这个向量是跟文本块的语义相关。在一个地方(向量储存库)中保存这些embeddings向量和文本块,作为问答的知识库。当用户提出一个问题时,该问题先通过embeddings API转换成问题向量,然后将这问题向量与向量储存库的所有文本块向量比对,查找距离最小的几个向量,把这几个向量对应的文本块提取出来,与原有问题组合成为新的prompt(问题/提示词),发送给GPT API。这样一来就不用一次会话中输入所有领域知识,而是输入了关联度最高的部分知识。一图胜千言,转一张原理图。再举一个极其简单的例子,比如有一篇万字长文,拆分成Chrunks包含:文本块1:本文作者:越山。xxxx。文本块2:公众号越山集的介绍:传播效率方法,分享AI应用,陪伴彼此在成长路上,共同前行。文本块3:《反脆弱》作者塔勒布xxxx。文本块4:“科技爱好者周刊”主编阮一峰会记录每周值得分享的科技内容,周五发布。...文本块n如果提问是”此文作者是谁?“。可以直观的看出上面的文本块1跟这个问题的关联度最高,文本块3次之。通过比较embeddings向量也可以得到这结论。那最后发送给GPT API的问题会类似于”此文作者是谁?从以下信息中获取答案:本文作者:越山。xxxx。《反脆弱》作者塔勒布xxxx。“这样一来,大语言大概率能回答上这个问题。
要搭建基于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语句,转化成下面这一串浮点数字。
[heading3]一条书摘[content]在读书(万维钢的新书《拐点》)的时候,看到一段有触动但保持批判性思考和怀疑的文本:如果你足够强势,当前AI对你的作用有三个:第一:信息杠杆第二:发现自己真正想要的第三:帮助形成自己的观点和决策[heading3]一个笔记[content]将上述书摘整理归纳,标记重点,打赏标签,放入笔记系统,准备展开深度思考和实践[heading3]对笔记的思考和实践[content]基于笔记中提到的AI对人的三种最终的赋能模式,以自己深度思考的问题为例,践行这套方法论,体会何谓“信息杠杆”可以令你的“思维换挡”,感受如何“让自己发现究竟想要什么”在这一步,对于每一步,展开自己的深度实践,例如:通过AI信息杠杆,利用AI搜索引擎和大模型,迅速掌握“如何用好飞书文档”“markdown语法基础”并结合两者完成“永飞书创建提示词库、飞书+markdown打造个人知识库”等思考。[heading3][heading3]生长出的自己的观点和内容[content]基于上述实践,生成“自己的观点和决策”(这部分只是示例)[heading3]教授和分享[content]基于“自己的观点和决策”,打造成体系化的内容产品,实现价值。(这部分只是示例)[heading3]总结一下:[content]通过一个碎片化知识再左侧知识库中的“点、线、面、体”式的流转,从一个书摘变成一个体系化内容或课程。把“别人说的话”变成“我自己的智慧”。最后:希望大家都能利用AI高效的把自己的知识管理体系搭建起来,运用起来