前言
最近有些实践,因为后面要去研究fine-tune了,想着记录一下+向量数据库构建知识库的一些实操经验,不记我很快就忘了,哈哈。
首先,提一下为啥会出现向量数据库这个技术方案?
大家经过实践发现,如果通过简单的与聊一下专业领域或实时性比较强的内容时,效果是很差的,比如公司有广告投放的业务,我们就需要一批同学去研究不同平台的广告投放文档,这些API文档实时性比较强,你让直接去生成代码,效果就很差。
为了让效果好一点,我们可以将页面的所有内容都复制出来,放到中,类似于:
context:
{document content}
please base the context generate xxxx code use python.
我们将最新的内容放到中,就会基于最新的内容去生成代码了,类似的方式,我们可以将公司内部的文档放到中,让基于文档内容回答。
但,有数量限制,我常用的GPT-3.5-16k,就是有16k的限制,即单次+的数不能超过16k,超过则会报错,所以如果文档内容稍微多一点,就无法全丢到中。
目前的折中的解决方案就是使用向量数据库,其原理就是对文本进行embed后,再进行相似度运算。
关于原理,网上内容很多,我就不费篇章了,推荐一篇比较系统讲embed的文章:
向量数据库基本使用
比较火的例子就是让基于你的PDF文件来聊天,这里的PDF文件可以有多个,比如100个PDF,那变通一下,就可以基于这套来构建公司的知识库。
我找了一张图,来自视频:
我简单描述一下:
首先要做预处理:
当用户提问时,定义问题为A,首先会将问题A通过同样的embed model转成embed ,然后再计算问题A的embed 与之前所有PDF生成的一系列embed 的相似度(你可以用余弦来算,也可以用其他计算向量距离的算法来算)。
计算后,会获得当前PDF中与问题A最相近的内容(向量在空间上距离最近的),然后将这部分PDF内容和问题A一同输入给,其实就是为提供了上下文,让基于上下文回答。
一些细节:
323AI导航网发布