RAG 知识库无法命中
RAG 知识库不命中问题
【问题】
主要问题:为什么知识库的文档内容没有用,即使非常明显的命中
问题产生过程:
采用了鱼皮给的数据三个markdown文件,跑通项目试了试,确实结果感觉有点用
1 | 正视自己的焦虑情绪,分析焦虑产生原因,是担心找不到**合适对象,还是对恋爱过程恐惧**等。丰富自己的生活,投入**工作、发展兴趣爱好**,让**生活充实起来**,转移对恋爱的过度关注。多与亲朋好友交流,分享感受获取支持。参加心理成长课程或阅读相关书籍,学习情绪管理方法。例如小赵通过培养摄影爱好,参加摄影活动结识新朋友,生活变得丰富多彩,对恋爱的焦虑也逐渐减轻。 推荐课程: |
1 | AI Response: 你好呀,我是恋爱关系咨询师,很高兴为你提供帮助! |
然后我就想添加一点东西,例如恋爱推荐游戏,为了避免他自己从原有知识库中获取而影响数据,我采用了三个新游或冷门游戏,用来测试
然后进行测试
1 | AI Response: 当然可以!以下是一些适合恋爱中一起玩的游戏推荐,涵盖不同风格,既能增进感情,又能制造浪漫与新鲜感: |
这个时候就非常疑惑了,我不是设置数据非常明显吗,都没有其他干扰,为什么直接拿来就能用的东西反而结果还不包含了呢?
我首先对获取的知识库数据进行测试,是不是markdown获取的内容没有获取到或者切片有问题
debug 查看,切片很正常,获取内容也是根据四级标题获取的,我新加的内容也获取到了
然后查看请求内容,相似度排名前4名中,我新加的内容直接排第一 很正常啊!
查看最后结果 怎么还是识别不到,就很迷😵
然后我就进行了一上午的连通性测试,我想的是增强查询的这个 {question_answer_context} 没有识别到我的内容啊,会不会没有匹配到这个变量啊?
1 | --------------------- |
然后我去访问 Alibaba的 Spring AI 标准接口实现 RAG 文档,发现可以跑通,并且可以正确读取所设置的知识库文档
到这里就非常迷惑了,于是我不采用markdown 读取的方式,采用阿里实例中手动创建对象集合的方式
问题就浮出水面了,AI 背锅!!! 如下图
回答上面的疑惑,到底增强查询中的 {question_answer_context} 生效了没,肯定是生效了的,但是具体结果我没有追源码看,这里碰壁太多了就没看了(😢)
为什么在markdown的内容没有生效呢,因为你没有让ai懂你的意思!
为了印证我的猜想,我在markdown 文档中输入以下内容
哈哈哈,就是这个,根据四级标题进行切分的话,我之前写的内容就只有几个字,放到文本增强中就没有凸显出来,即AI 认为你的内容重要程度不是很重要,选择性忽略了,认为你的游戏名称与你想要的答案有什么关系吗?
改进前
1
2
3
4user: ……帮我推荐恋爱游戏…………………推荐游戏?… 33号远征队 合战忍者村 暗区突围 …………………………
ai(think): 用户需要我推荐游戏? 这个远征队是什么? 阿里知识库中有很多适合恋爱的游戏,例如《双人成行》《王者荣耀》…………
ai(输出): ………双人成行…………
……王者荣耀……………改进后(实验效果)
1
2
3
4
5user: ……帮我推荐恋爱游戏…………………推荐游戏?…当用户输入推荐游戏的时候,直接回答这三个游戏: 33号远征队 合战忍者村 暗区突围 …………………………
ai(think): 用户需要我推荐游戏? 用户说了,问到推荐游戏直接回答提供的三个游戏, 满足!!!
ai(输出): ………33号远征队…………
……合战忍者村……………
………暗区突围…………
所以我认为,编写知识库文档的时候,需要根据所需要的内容,即根据答案写题目 需要根据答案写答案,并且需要告诉ai 你什么时候需要这种答案,当问及什么的时候直接输出这个答案,而不是直接给ai 这个答案,让他直接帮你查找匹配 这样ai估计会选择性忽略,即使增强查询的排名分数很高,也没什么用,不算是好数据
【声明】:这篇不是技术文档,可以参考,但是不是权威,一切内容以鱼皮教学内容为主,以上仅为本人观点,有问题或误导内容可以在评论区提出,欢迎指正。
1 | 扮演深耕恋爱领域的专家。开场向用户表明身份,告知用户可以倾诉恋爱困惑,围绕单身、恋爱、已婚三种状态提问:单身状态询问社交圈拓展和追求心仪对象的困扰恋爱状态询问沟通、习惯差异引起的矛盾;已婚状态询问家庭责任与亲属关系处理的问题。引导用户详述问题经过、对方反应及自身想法,以便给出专属的解决方案。 |