ChatGLM3 icon indicating copy to clipboard operation
ChatGLM3 copied to clipboard

检索文档并进行多轮问答

Open gggdroa opened this issue 1 year ago • 14 comments

求教:想实现带历史记录的RAG,多轮对话

文档内容是在外部向量库中,比如搜索:高血压有哪些症状?会返回对应内容的top3,单个长度设置在1k左右。

第二次再接着“使用哪些药物治疗?”,其实问的是"高血压有哪些治疗药物”,但流程还是会走一遍检索一遍的流程,返回药物治疗相关的内容,但不是高血压的治疗药物,这步如何解决?像这种情况是不是历史记录没起作用?还是检索的功能放的位置不对呢?使用的是glm3-6b-32k模型 image

求教 无比感谢

gggdroa avatar Apr 11 '24 07:04 gggdroa

那估计指令已经跟不上了,你试试只embedding 100字呢

zRzRzRzRzRzRzR avatar Apr 11 '24 09:04 zRzRzRzRzRzRzR

是因为历史记录太长了吗?

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年04月11日 17:47 | | 收件人 | THUDM/ChatGLM3 @.> | | 抄送人 | gggdroa @.>, Author @.> | | 主题 | Re: [THUDM/ChatGLM3] 检索文档并进行多轮问答 (Issue #1119) |

那估计指令已经跟不上了,你试试只embedding 100字呢

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

gggdroa avatar Apr 11 '24 11:04 gggdroa

那估计指令已经跟不上了,你试试只embedding 100字呢

单个的文章效果还是可以的,能实现连续,本身就有文本的限制再加上历史记忆得加持。

多个文章按照您说的是因为文档长、历史数据长,但我想是不是还因为文档数据很杂乱导致他分不清的?所以结果很差

gggdroa avatar Apr 12 '24 02:04 gggdroa

两个原因都有可能,glm3毕竟不是最新的GLM4 长文本能力没有那么好

zRzRzRzRzRzRzR avatar Apr 12 '24 12:04 zRzRzRzRzRzRzR

你这个不是GLM的问题,是RAG多轮问答的问题了...比较直接的就是query改写吧,把当前问句和之前的聊天记录塞给glm,让他改写当前问句

liyunhan avatar Apr 16 '24 00:04 liyunhan

是的 已经尝试过了

---- Replied Message ---- | From | @.> | | Date | 04/16/2024 08:27 | | To | THUDM/ChatGLM3 @.> | | Cc | gggdroa @.>, Author @.> | | Subject | Re: [THUDM/ChatGLM3] 检索文档并进行多轮问答 (Issue #1119) |

你这个不是GLM的问题,是RAG多轮问答的问题了...比较直接的就是query改写吧,把当前问句和之前的聊天记录塞给glm,让他改写当前问句

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

gggdroa avatar Apr 16 '24 00:04 gggdroa

@gggdroa 效果怎么样?我们也涉及这个问题,但是还没尝试

liyunhan avatar Apr 16 '24 00:04 liyunhan

@gggdroa 效果怎么样?我们也涉及这个问题,但是还没尝试

1.如果历史记录过长,塞给glm做标准问题的生成会出现:问题可能不准确or生成不出来。prompt的定义 2.你的历史记录只会越来越多,塞给模型做标准问题生成之前,是不是还要做处理 3.它本身是有记忆能力的,但模型问答轮次越多,会出现记忆遗失的情况

gggdroa avatar Apr 16 '24 01:04 gggdroa

@gggdroa 之前在知乎上看过一篇文章,那个作者是判断当前query和上一句或上几句是否属于一个问答chunk(大概是NSP的思路),即将历史记录分块,同属一个chunk的拿去做改写。

liyunhan avatar Apr 16 '24 01:04 liyunhan

@gggdroa 那个作者后续没有用改写,他工程应用对速度有要求,所以是同属一个chunk的用去训练query embedding。 但是如果没有时间上的要求,分chunk以后去改写应该能大幅缩减历史长度和记忆衰减的问题。

liyunhan avatar Apr 16 '24 01:04 liyunhan

@gggdroa 那个作者后续没有用改写,他工程应用对速度有要求,所以是同属一个chunk的用去训练query embedding。 但是如果没有时间上的要求,分chunk以后去改写应该能大幅缩减历史长度和记忆衰减的问题。

对的,自己demo的话可以尝试,但应用对速度有要求。 个人感觉多文档考验的不止这些,广泛的信息整合、纠错、检查错误等等·······

gggdroa avatar Apr 16 '24 01:04 gggdroa

@gggdroa 那个作者后续没有用改写,他工程应用对速度有要求,所以是同属一个chunk的用去训练query embedding。 但是如果没有时间上的要求,分chunk以后去改写应该能大幅缩减历史长度和记忆衰减的问题。

对的,自己demo的话可以尝试,但应用对速度有要求。 个人感觉多文档考验的不止这些,广泛的信息整合、纠错、检查错误等等·······

我的感受是模型越大后处理的越少,有些时候知识库检索到的东西直接一股脑丢给模型,他能自己做筛选、整合等等

liyunhan avatar Apr 16 '24 01:04 liyunhan

@gggdroa 效果怎么样?我们也涉及这个问题,但是还没尝试

1.如果历史记录过长,塞给glm做标准问题的生成会出现:问题可能不准确or生成不出来。prompt的定义 2.你的历史记录只会越来越多,塞给模型做标准问题生成之前,是不是还要做处理 3.它本身是有记忆能力的,但模型问答轮次越多,会出现记忆遗失的情况

大佬,我想问下,prompt您是在哪里定义的呢?我是纯小白,只在代码中看到了tools这个,不知道如何去弄

512625100 avatar Apr 23 '24 10:04 512625100

你这个不是GLM的问题,是RAG多轮问答的问题了...比较直接的就是query改写吧,把当前问句和之前的聊天记录塞给glm,让他改写当前问句

正解,转写补充主语才是关键

HongyuJiang avatar Apr 27 '24 02:04 HongyuJiang

@gggdroa 之前在知乎上看过一篇文章,那个作者是判断当前query和上一句或上几句是否属于一个问答chunk(大概是NSP的思路),即将历史记录分块,同属一个chunk的拿去做改写。

您好,请问是哪一篇文章呢,能否告知,我想学习一下,非常感谢!

Zhuohan007 avatar Aug 27 '24 09:08 Zhuohan007