4.FastGPT的知识库实现和调优

在FastGPT之中,我们采用了Embedding方案来构建知识库,这个Embeddeding的方案,是将文字或者图片转换为向量。然后在搜索的时候,计算不同向量之间的距离,也就是向量之间的相似度,从而得到最符合意思的大难。

因此在知识库实现中,向量的录入和搜索环节是最重要的。

在FastGPT之中,其将文本拆分为了小段的数据,并将数据转换为向量。

然后分别存储数据和向量

拆分下来就是如下图

知识库中包含多个集合,集合可以理解为文件,文件中被拆分为多段,对应的就是数据,而数据分别以内容和向量的方式存储。

而在搜索的时候则以库为粒度进行搜索。

在FastGPT中,默认使用PostgresSQL中的PG Vector插件进行向量的检索。

实际的数据存储在MongoDB的dataset.datas表中。存储了index和原数据信息。

也就是先在PgSQL中进行向量的检索,然后在MongoDB中寻找原答案。

如果同一向量对应的数据被检索到了多次。那么会采取最高分为返回。

再之后,我们说下提高向量的搜索精度的方式和实现。

常见的有

提高分词分段的方式,如果一段话的内容完整,结果单一,那么在匹配时也会很精准,

精简index的内容。Index对应的内容少,会提高匹配精度

丰富index数量,一个chunk可以对应多组index

优化检索词,用户的问题往往是模糊或者缺失的,并不一定是一个完整清晰的问题。

微调向量模型,通过微调算法的方式,增强特定领域的检索效果。

对应到知识库之中。

可以通过问题优化来增强搜索

通过concat query 来增强连续对话准确性

通过Rerank模型来后置处理,提高精度。

通过RRF来合并多个查询库的结果。

相关的配置参数有

设置搜索模式,支持语义检索,全文检索,混合检索

语义检索是通过计算向量距离,得到相似度来进行匹配的

全文检索则是匹配关键词

混合检索则是同时匹配向量检索和全文检索,通过RRF来进行结果合并,这种情况往往需要引入Rerank模型来进行结果重拍

除此外还可以设置topk的引入。

设置最相关度,这些和Dify类似。

那么主要的不同点在于

增加了问题优化,可以将上下文加入到提示词中,进行问题的优化处理。

并且FastGPT虽然支持飞书知识库,语雀知识库,Web站点同步,外部文件库

但都是商业版才支持的功能。

社区版只有本地知识库和API文件库支持。

发表评论

邮箱地址不会被公开。 必填项已用*标注