MuiseDestiny / zotero-gpt

GPT Meet Zotero.
GNU Affero General Public License v3.0
4.61k stars 190 forks source link

ask pdf的规则是什么? #99

Open caibimiaokong opened 1 year ago

caibimiaokong commented 1 year ago

如果我关闭这本书,下次再次打开是否需要重新ask整本书

caibimiaokong commented 1 year ago

image 部分文本是怎么操作的??

kongyan66 commented 1 year ago

核心代码:

window.gptInputString = Zotero.ZoteroGPT.views.inputContainer.querySelector("input").value
Zotero.ZoteroGPT.views.messages = [];

Zotero.ZoteroGPT.utils.getRelatedText(
window.gptInputString 
)

GPT解释: 这段代码的作用是获取页面中某个输入框的值,并把该值作为参数传递给 Zotero.ZoteroGPT.utils.getRelatedText() 方法,用于获取与该输入值相关的文本。同时,该段代码也将 Zotero.ZoteroGPT.views.messages 数组清空,可能是为了避免对之前的消息产生影响。 具体获取全文的多少内容,获取哪一部分内容不太清楚,确定的是肯定不是全文。

MuiseDestiny commented 1 year ago

比如你的pdf全文是:

我今天吃了白菜。

我今天喝了白开水。

我今天看了一本书。


当你提问:今天干了什么?

getRelatedText("今天干了什么") 会返回上面三件事。

当你问:今天喝了什么? getRelatedText("今天喝了什么?") 会返回 我今天喝了白开水。

然后这些与你提问高度相关的文字,对应pdf段落会输入给GPT,让他根据这些去回答你的问题。ChatPDF,chatDOC或者其它,都是这个原理。

kongyan66 commented 1 year ago

说白了就是根据用户输入内容 ,去检索全文相关的内容,再把该部分内容作为全局信息送给GPT呗 如果用户输入的问题高度抽象,例如:本文方法的意义,getRelatedText()无法检索到形似的文字,这种情况怎么解决呢?

MuiseDestiny commented 1 year ago

说白了就是根据用户输入内容 ,去检索全文相关的内容,再把该部分内容作为全局信息送给GPT呗 如果用户输入的问题高度抽象,例如:本文方法的意义,getRelatedText()无法检索到形似的文字,这种情况怎么解决呢?

这是openai做的工作。https://platform.openai.com/docs/api-reference/embeddings 我说的是方便理解的,实际搜索复杂的多。

kongyan66 commented 1 year ago

说白了就是根据用户输入内容 ,去检索全文相关的内容,再把该部分内容作为全局信息送给GPT呗 如果用户输入的问题高度抽象,例如:本文方法的意义,getRelatedText()无法检索到形似的文字,这种情况怎么解决呢?

这是openai做的工作。https://platform.openai.com/docs/api-reference/embeddings 我说的是方便理解的,实际搜索复杂的多。

谢谢答复,我再研究下

wangfh5 commented 1 year ago

请问embeddings是不是只在第一次AskPDF的时候会输入给openai? 后续的若干次提问之间是否有历史记忆, 还是说每次提问都是平行的、仅根据已经embeddings的内容来回答的?

MuiseDestiny commented 1 year ago

请问embeddings是不是只在第一次AskPDF的时候会输入给openai? 后续的若干次提问之间是否有历史记忆, 还是说每次提问都是平行的、仅根据已经embeddings的内容来回答的?

第一次会把pdf所有段落返回的向量存储本地。以后读取。不会重复请求

psychologistcy commented 1 year ago

感觉chatPDF的回答要好得多,zoteroGPT的回答总给我,太总揽全局的感觉,没办法专注到文章的一个小片段,并且回答的字数是被限制了吗?

MuiseDestiny commented 1 year ago

感觉chatPDF的回答要好得多,zoteroGPT的回答总给我,太总揽全局的感觉,没办法专注到文章的一个小片段,并且回答的字数是被限制了吗?

有一个参考数量默认是5,gpt基于5个段落总结回答,你可以设置大点,输入gpt文本就会变多,就会变好

/relatedNumber 这个命令设置。当然消耗token会更多。

至于chatpdf和插件哪个更好。都是基于gpt,我认为没有可比性,好可能好在喂的段落更多,而这个在插件可以设置。

psychologistcy commented 1 year ago

怎么在把zoteroGPT调试到比较好的状态?

MuiseDestiny commented 1 year ago

怎么在把zoteroGPT调试到比较好的状态?

你指的askpdf吗

psychologistcy commented 1 year ago

把/relatedNumber 设置成最大值的话,就会基于全文来回答吗?原来的默认设置5,每次问一下小问题,都会大半段话用来说整个文章的意义,感觉像是在基于全文回答(55555~)

psychologistcy commented 1 year ago

是的

MuiseDestiny commented 1 year ago

一方面你可以增大realtedNumber,另一方面,插件本身有解析pdf的任务。chatpdf类似服务有两个核心点一是相似段落搜索,搜索数量通过relatedNumber设置,二是把完整的段落准确解析出来,这是开发者要做的。

一个完美的chatpdf应用,需要精确的段落解析。排版不规范,解析出段落会差很多。后面的向量化,相似度搜索,都是一样的。差别只在pdf解析,你要在pdf排版规范的pdf上使用它。如果你觉得他回答太笼统,那就增大relatedNumber,另外你问的问题要尽可能详细,这有利于相似度搜索。

MuiseDestiny commented 1 year ago

把/relatedNumber 设置成最大值的话,就会基于全文来回答吗?原来的默认设置5,每次问一下小问题,都会大半段话用来说整个文章的意义,感觉像是在基于全文回答(55555~)

5个足够了,字数不会太多。你问得问题如果太笼统,那么不利于相似度搜索,则需要增加relatedNumber

psychologistcy commented 1 year ago

image image 上面是chatpdf的回答,下面是askpdf的回答,严重超纲了,他总想着回答问题之外的东西,虚拟脑分析和工作记忆都是其他段落的问题了。

psychologistcy commented 1 year ago

收到,感谢大佬指导,学到太多了!

MuiseDestiny commented 1 year ago

image image 上面是chatpdf的回答,下面是askpdf的回答,严重超纲了,他总想着回答问题之外的东西,虚拟脑分析和工作记忆都是其他段落的问题了。

pdf发一下,优化一下,因为这部分功能只是实现了,还没开始优化。chatpdf都收费了,服务肯定做的很好了。但是插件实现他的效果也不难。

MrGongqi commented 1 year ago

说白了就是根据用户输入内容 ,去检索全文相关的内容,再把该部分内容作为全局信息送给GPT呗 如果用户输入的问题高度抽象,例如:本文方法的意义,getRelatedText()无法检索到形似的文字,这种情况怎么解决呢?

这是openai做的工作。https://platform.openai.com/docs/api-reference/embeddings 我说的是方便理解的,实际搜索复杂的多。

我对askPDF有个疑问,我在使用askPDF时只是提出了一个很简单的问题,它回复的也不长,那总共消耗的token数是不是还包含它“阅读PDF”时占用的token,如果是这样的话,那消耗token就太巨大了,随便一篇论文就是六七千字。

MuiseDestiny commented 1 year ago

是不是还包含它“阅读PDF”时占用的token

不,会缓存

MrGongqi commented 1 year ago

按照你的意思,就是说一篇论文第一次点击askPDF时,会“阅读”全篇PDF吗,并且PDF的字数也是统计在token中的吗?我有一次看一篇外文的毕业论文,400多页,,,点了下askpdf,问了个简单的问题,回答的也简单,,后来在openai.api官网里看了下,消耗了1.2美元,好心疼