langchain 《斗破苍穹》智谱 RAG 问题搜索

2024-09-05 20:36

本文主要是介绍langchain 《斗破苍穹》智谱 RAG 问题搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

代码

项目介绍

模型对比实验

分块方法对比

检索方法对比

结果

10条问题

15条问题

局限性


代码

https://github.com/5zjk5/prompt-engineering/tree/master

项目介绍

《斗破苍穹》小说 RAG 问答,爬虫爬取整部小说章节,并分别保存到不同的数据源中。 txt,pdf,markdown,word。

对数据进行分块,召回,根据问题生成回答。

对比了智谱 GLM 系列所有模型,以及不同召回块数(字数)的效果。

模型对比实验

spider.py 为爬虫代码

先用前 100 章节测试,再测试全部章节。 设置 10 个问题,控制变量法 测试结果如下: 

对比结果写在了 J 列,总结:

  1. glm_4_flash,glm-4-long 两个模型在效果上比较好,时间可以接受,准确率相对较好。
  2. glm-4-long 选择了这个模型去继续用。在 15w 字这个模型理解还是比较好的。

分块方法对比

  1. 字数分块,512, 1000,在 7-15w 字效果差不多
  2. 字数分块对比字数分块带上元数据的,效果也差不多,可能相差 1 个左右的准确率
  3. 并且别人有验证的带上元数据有好处的,所有后面都带上了

检索方法对比

 

  1. 较好的方法是相似性检索,及 mmr 但这两个对比在这里是一样,所以就用了相似性 similary
  2. 其他是 langchain 中的其他方法
  3. 上面的结论说了再 15w 左右是可以得到答案,且速度还可以,理解也不错,但 15w 还是太多了 ,所以先检索 150 个快,15w 字,在从 15w 在检索 50w ,这样更准确,却耗费 token 更少。

结果

上面的实验都是在选择,所以最终选择组合为:

  1. 字数分块+元数据,分块字数 1000
  2. glm-4-long 模型
  3. 检索相似性 similary,再混合检索(bm25+相似)得到 50w 字左右上下文参考

10条问题

data/test_doc_question.json 在 10 条问题上,使用前 100 章的问题,表现为 80-90%。

在 10 条问题三,使用全部章节,表现为 70-80%。因为内容多了,检索的东西会不一样且受问题影响。

例如:萧炎遇见的神秘老者是谁?

在前 100 章明显是药老,但全文不一定了,神秘老者可能多次出现,如岩浆下的老者等。问得范围太大了。

15条问题

data/doc_question.json 80-86.6% 浮动

局限性

这个属于常见的 RAG 方法,字数分块,然后检索相关内容,然后生成答案。 但通过这个检索检索会有一下局限性:

  1. 具有关联关系的问题是回答不出来的,如问题“萧炎在风雷大会上遇见的迦南学院的熟人是谁?”

检索回来可能是迦南学院有关的人,但不全,不能结合风雷大会去回答。

  1. 例如“萧炎老婆是谁?”这小说并没有明确写出‘萧炎的老婆是xxx’这种话,但读者们都知道他老婆的谁

  2. 上下文理解少,比如“萧炎晋级斗尊前跟谁打架了?”能找到晋级的那一章,但是跟谁打架了,这是需要前面的剧情的理解的,这并不会检索回来,所以跟问题有关的 上下文不太适合这种 RAG。适合检索某个片段然后回答这个片段的问题。

  3. 生成的回答,及检索的内容受问题影响,如上面说的“神秘老者”的问题,问题月具体效果越好。

这篇关于langchain 《斗破苍穹》智谱 RAG 问题搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140003

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决