本地知识库优化,让 AI 回答更精准

发布于 2024-12-3 14:29
浏览
0收藏

大家在使用百度和谷歌搜索引擎的时候,搜索出来的内容第一页都是强相关的(广告不算),越往后内容可能越偏离。

这是因为搜索引擎会根据相似度&相关度进行综合排列后,按照从高到低的顺序进行返回,这就会导致越靠后就离搜索内容越偏移。

而由于文字是有多种类型,并且拥有成千上万种组合方式,因此在转成向量进行相似度匹配时,很难保障其精确性。在向量方案构建的知识库中,通常使用 topk 召回的方式,也就是查找前 k 个最相似的内容,丢给大模型去做更进一步的语义判断、逻辑推理和归纳总结,从而实现知识库问答。因此,在知识库问答中,向量搜索的环节是最为重要的。

影响向量搜索精度的因素非常多,主要包括:向量模型的质量、数据的质量(长度,完整性,多样性)、检索器的精度(速度与精度之间的取舍)。与数据质量对应的就是检索词的质量。


本地知识库优化,让 AI 回答更精准-AI.x社区


基于 FastGPT 项目,我们来挨个进行讲解。从索引阶段(数据导入)和召回阶段(数据搜索)两个方面进行优化。

一、索引阶段

索引阶段主要是两种方式,一种是分段导入,一种是 QA 导入。

1、分段导入

直接分段会利用句子分词器对文本进行一定长度拆分,大家可以看到我在导入​​个人经历​​后会被切割成好几段内容。


本地知识库优化,让 AI 回答更精准-AI.x社区


由于上下文长度是有限制的,所以在导入过长数据时会被自动切割成好几份,切割后就可能会出现连贯语义数据被切割。

  • 提示词工程(Prompt Engineering):借助提示词工程理解数据内容,只能相对保证连贯语义内容不会被切割。
  • 手动切割:既然内容太多,我们就可以自己手动切割,按照 Markdown 结构化格式进行拆分,大语言模型读取时很容易就能够识别出来。

手动切割比起利用提示词工程自动切割好处就在于:我们更加了解内容,可以将内容按照模块进行准确分割,保证知识库数据的完整性。

手动切割前:

大家好,我是知白。一个专注于输出 AI+ 编程内容的大厂资深程序员,全国最大付费社群 AI 破局初创合伙人,关注我一起进步......后续省略1000字


手动切割后:

# 知白
## 个人信息
大家好,我是知白。一个专注于输出 AI+ 编程内容的大厂资深程序员,全国最大付费社群 AI 破局初创合伙人,关注我一起进步......

## 工作经历
进入到工作后,第一个项目是做一个物业系统,是一家国企外包出来的千万项目......

由我们自己将数据切割好,并明确告诉模型每个模块对应的内容,这样检索起来效率和准确度都会更好。

2、QA 方式

QA 指的是 Question(问题) 和 Answer(答案),我们直接将数据拆分成问题-答案的方式来进行导入。

但仍然需要使用到句子分词器对文本进行拆分,但长度比直接分段大很多。在导入后,会先调用大模型对分段进行学习,并给出一些问题和答案,最终问题和答案会一起被存储到 Q 中。

导入数据格式为:

Q1:问题
A1:答案
Q2:问题
A2:答案
......


数据借助 AI 做拆分,让 AI 返回这样的数据格式给我们。

二、召回阶段

在做数据检索和生成回答时,就有很多配置可以调整。

1、温度&回复上限

本地知识库优化,让 AI 回答更精准-AI.x社区


可以看到温度的两头分别是严谨和发散,具体含义如下:

  • 严谨:生成的内容要求精确,降低废话和错误信息,适用于学术、医学、报告解读等场景
  • 发散:生成的内容会具有创造性,AI 会根据已有信息编造内容,适用于小说、创意生成等场景

而回复上限控制 AI 回复的最大 Tokens,较小的值可以一定程度上减少 AI 的废话,但也可能导致 AI 回复不完整。

2、相似度

本地知识库优化,让 AI 回答更精准-AI.x社区


学名称为距离,两个向量之间距离,可以认为是两个向量的相似度,又可以映射成文本之间的相似度

在进行内容检索时,会将所有检索生成的信息与输入内容匹配,从而生成相似度。

需要注意的是,不同的向量模型之间的相似度是不能比较的,因为他们的距离值计算出来差距很大。例如,openai 的 embedding 模型,通常 0.8 以上的才是较为准确的内容,而 M3E 模型则是 0.35。


本地知识库优化,让 AI 回答更精准-AI.x社区


这里相似度配置调整,就是可以直接将低于这个相似度的内容剔除掉,从而保证结果的准确性。

3、单次搜索数量

每次触发搜索模块时,最多取 n 条作为最终引用,又称 topN。需要注意的是,取了 n 条引用不代表对话模型都可以使用,还会受对话模型最大 Tokens 的影响。

通过控制每次结果的搜索个数,从而只将高相似度内容同步给 ChatGPT 从而提升准确性,同时还能节约 Token 数。但是可能出现内容回答不完整的情况,需要按需调整。

4、提示词调整

当然通过调整提示词也能够提升准确性,我们可以在提示词中严格规则限定,从而保证输出结果。

例如我们可以这样约束模型:

你的背景知识:
"""
{{quote}}
"""
对话要求:
1. 背景知识是最新的,其中 instruction 是相关介绍,output 是预期回答或补充。
2. 使用背景知识回答问题。
3. 背景知识无法回答问题时,你可以礼貌的的回答用户问题。
我的问题是:"{{question}}"

三、总结

对于原始数据的清洗也是非常重要,去除数据中的脏乱差等现象,从而保证数据的可用性和准确度。这部分工作我们也可以借助 AI 来完成,帮我们找出其中的​​脏数据​​。

参考文章:FastGPT 官网(https://doc.fastgpt.in/docs)

本文转载自 AI探索者知白​,作者: 知白

收藏
回复
举报
回复
相关推荐