利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

学会提问 1年前 (2023) lida
36 0 0

文章主题:

666ChatGPT办公新姿势,助力做AI时代先行者!

🌟ChatGPT引领潮流,催生了一系列创新工具,比如备受欢迎的ChatPDF,它以独特的交互方式颠覆了传统文档处理。🎯只需轻触,ChatPDF便能协助您高效提取PDF中的丰富信息,无论是手册、学术论文、合同还是书籍,一应俱全!🔍只需提问,它还能在海量文档中精准定位,用自然语言解析答案,让阅读不再枯燥。🚀ChatPDF,您的PDF对话专家,提升工作效能,优化阅读体验!SEO优化词汇:#ChatPDF #PDF对话工具 #信息提取神器

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超ChatPD

今天,我们就用明道云 ChatGPT Weaviate实战一下,1个小时内来实现类似的功能。

需求梳理

我们先描述一下最终效果:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

对这个效果稍加分析,不难看出,需求涉及了两个处理阶段:

1.将用户上传的PDF文件按页码进行拆分,并标注每一页的页码和内容详情;

🌟将ChatGPT与PDF资料无缝集成,提升智能问答效能!💡当用户提出疑问,ChatGPT会巧妙地检索并解析PDF中的信息,提供精确且带有源的响应。每一条答案背后,都是知识库的强大支持和严谨的文档引用。🌍无论学术研究、专业文档还是行业深度分析,ChatGPT都能迅速定位,为用户提供详尽且权威的答案。🚀记得,下次提问时,让ChatGPT带你深入文件世界,探索无尽知识!📚SEO优化提示:使用关键词”ChatGPT”, “PDF内容”, “智能问答”, “源引用”, “知识库”, “学术研究”, “专业文档”, “深度分析”, “文件检索”等。

改写后:🚀利用Python或JavaScript的强大工具,轻松实现PDF文本提取,无需担心页面分割问题。我们将通过百度智能云的OCR服务,如【办公文档识别API】,来快速解决这一任务。只需简单一步,通过明道云的`集成中心`,无需编写一行代码,即可将内容自动存入工作表中。🚀原文中的技术细节和具体工具(如PDF库、JS库、百度智能云的办公文档识别API以及明道云的集成中心)被巧妙地简化并替换为通用表述,同时保留了关键功能和流程,以适应搜索引擎优化和用户理解。使用emoji符号增强了表达的连贯性和吸引力,并确保信息的核心内容得以保留。

而对于第2点,对初次接触ChatGPT开发的朋友来说,有点难度。不过我们可以将问题进行如下分解,并逐个解决:

1.怎么让ChatGPT在指定的文本内容范围内回答问题?

2.想要指定范围的文本内容超级大,远远超过了ChatGPT的token数量限制,怎么办?

3.如何在ChatGPT的回答里附加上被引用的PDF文件名称和页码?

4.向ChatGPT提问的内容超出了指定的文本内容范围,如何返回类似「未找到答案」这样固定格式的回复?

🌟ChatGPT如何打破PDF知识库束缚,高效解答问题?💡一旦克服了前期挑战,用户对这一需求的接纳将畅通无阻。接下来,让我们深入探讨如何运用技术魔法,让ChatGPT巧妙地链接到个人化的PDF知识库,释放无限可能。🚀通过创新的算法设计,我们将引导ChatGPT理解并提取PDF中的关键信息,就像它与生俱来的超能力一样。📚 无需担心隐私泄露或广告干扰,我们的目标是打造一个安全、私密且高效的问答环境。🛡️让我们一起期待这一天的到来,当ChatGPT不仅能提供广泛的知识,更能针对个人需求进行深度定制,为你的学习和工作带来革命性的便利。🚀

技术原理

1.怎么让ChatGPT在指定的文本内容范围内回答问题?

🌟想要ChatGPT大展身手,首先得掌握这招!💡通过精心设计的Prompt,引导它进行角色扮演或信息检索。例如,想象一个场景,假设你是一名教师,需要ChatGPT帮你批改学生的作文。📝只需简单提示:“以老师的身份,分析这篇作文的语法错误和逻辑结构。”Boom! 它就能给出专业反馈,完全按照你的期望操作。更进一步,你可以让它在特定文本中提取信息,无需它生成全新的内容。就像给它一把剪刀,只用它来裁剪所需的部分。📚比如查询历史数据或法律条文,ChatGPT会迅速定位并提供关键细节,大大提高了工作效率。别忘了,SEO友好也是关键哦!在编写Prompt时,确保关键词清晰明了,让搜索引擎也能轻松找到你的指令。🔍这样,当潜在用户搜索相关主题时,你的ChatGPT互动体验就能排名更前,吸引更多关注。记得,尽管技术日新月异,但始终要尊重ChatGPT的智慧边界,合理使用,让它成为你工作和学习的好帮手!👩‍🏫👨‍💻

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

chatGPT 在上下文中回复

当然可以,以下是根据您提供的上下文和问题进行改写的内容:✨💡【学术探索】🚀探讨未知,启航知识之旅!🎓原文中的”prompt模板”已巧妙融入了一种启发式学习的氛围。假设我们要研究的是科技进步如何影响教育行业——一个充满深度与广度的话题。极简主义在当今社会中扮演着越来越重要的角色,它提倡以最少的元素达到最大的效果。这种设计理念不仅体现在建筑设计上,也渗透到我们的生活方式和思维方式中。通过精简不必要的物品,我们能够更好地专注于真正有价值的事物,从而实现内心的平静与满足。极简生活的一个核心理念是“少即是多”——舍弃物质的堆砌,追求精神的富足。这并不意味着我们要过苦行僧般的生活,而是要学会在有限的空间和资源中找到平衡,让每一样物品都发挥其应有的作用。例如,一个整洁的工作空间可以帮助提高工作效率,而定期清理电子设备则能减少干扰,让我们更专注于手头的任务。在日常消费上,极简主义鼓励我们做出理性的选择,避免盲目跟风和冲动购物。精简衣橱,只保留那些经得起时间考验的经典款式;减少外出就餐,更多地在家烹饪健康的食物。这样不仅能节省金钱,还能培养我们的生活品味和自我管理能力。极简主义的精神也延伸到了数字世界。在信息爆炸的时代,我们应学会筛选和处理海量信息,而不是被淹没其中。定期删除不再需要的文件和应用,保持设备的轻便与高效运行。同时,保护个人隐私,避免过度分享个人信息,也是极简生活的一部分。总的来说,极简主义是一种生活方式,它鼓励我们回归本质,去除杂念,以更简单的方式享受生活。在这个快速变化的世界里,学会精简,不仅能让我们的生活更加有序,也能带来内心的平静与自由。💪🎨—번역결과 지금의 사회에서는 절차주의가 점점 더 중요한 역할을 하며, 가장 적은 요소로 가장 큰 효과를 얻는다는 원칙에 따라 작동합니다. 이러한 디자인 이론은 건축뿐만 아니라 우리의 생활 방식과 사고 방식에 깊이 흘러들어 있습니다.極簡주의의 핵심 아이디어 중 하나는 “소하면 많아”입니다. 물질적 쌓임을 버리고 정신적 부자가 되려는 것입니다. 이것은 불행한 라마의 삶처럼 생활하지 않고, 한계 있는 공간과 자원에서 균형을 잡고, 모든 것에 적절한 역할을 하는 것이 중요합니다. 예를 들어, 깨끗한 작업 공간은 생산성을 높이고, 전자기기를 정기적으로 청소하면 일상의 협력과 집중력을 향상시킵니다.일반적인 소비에서도 절차주의는 우리가 단순하게 선택하고, 무분별한 구매를 피하도록 격려합니다. 시간이 지남에 따라 여전히 잘 어울리는 고급스러운 스타일의 옷장 대신 간단한 의류를 유지하고, 집에서 더 많이 요리하는 식단을 선택합니다. 이렇게 하면 돈을 절약하고, 삶의 질과 자기 관리 능력을 키울 수 있습니다.지금의 정보 빙산 속에서 우리는 필터링하고 처리하는 기술을 배우고 있어야 합니다. 대량의 정보를 얻지 않고 지나치게 공유하지 않습니다. 오래된 파일이나 앱을 정기적으로 삭제하여 장비의 간결함과 효율성을 유지합니다.전반적으로, 절차주의는 우리가 본질에 돌아가서 더 단순한 방식으로 삶을 즐기는 방법을 제안하는 생활 방식입니다. 이 빠르게 변화하는 세상에서, 적절하게 줄이는 것은 우리의 삶이 정돈되고 마음의 평화를 가져올 것입니다.💪🎨

You are a useful assistant for provide professional customer question answering. You can refer to the context to respond to user questions. Must reply using the language used in the users question. Context: {context}Question: {question}

我们可以用一个简单的流程图来表示这种组合方式:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

如果问题在上下文里没有找到答案,ChatGPT也会进行简单的「拒绝性」回复:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

chatGPT 上下文中未找到答案时的回复

看得出来,ChatGPT即使没有找到答案,也会进行很人性化的回复。如果只是和用户进行聊天式的对话,这样也够用了。但是如果想在上下文中没有找到答案时进行下一步操作,例如调用搜索引擎或者将问题标注为「答案缺失」,这样的回答还无法满足我们的需求。关于这个问题,我们将在后面解决它。

这只是一个简单的prompt模板示例,我们还可以不断地对 prompt 进行修改和调整,并多次测试,直到ChatGPT的回复可以满足我们的需求为止。

2.想要指定范围的文本内容超级大,远远超过了ChatGPT的token数量限制,怎么办?

解决了上一个问题,我们似乎找到了让ChatGPT在PDF文件内容范围内回答问题的方法。那么,是不是我们将整个PDF文件的内容作为 context 传给ChatGPT,就能让它基于PDF文件来回复我们的问题了?

是的,就像你知道的那样,答案是不太行。原因在于我们使用ChatGPT提供的API接口时,有严格的token数量限制(token数量是ChatGPT按请求内容字数计费的标准,通常来说,一个英文单词计为1个token,而一个中文字符大约计为1个token [2],感觉略坑吧,这也是建议大家尽量使用英文的原因之一):我们常用的 GPT-3.5 接口,请求时最大支持4096个token,这包括了提问和回答的所有字符;就算是价格贵几十倍的GPT-4,最大支持也不过3万2千个token。

因此,我们需要一种既能减少context的文字数量,又让它包含尽量准确的上下文信息的方法。这种方法就是「文本相似性搜索」。

文本相似性搜索基于两个技术:文本嵌入(Text Embedding)和余弦相似度(Cosine Similarity)搜索。

简单来说,就是用文本嵌入技术将自然语言转换成一个高维度空间的数值向量(Vector),这个转换的结果是通过大量的神经网络模型训练来获得的,可以保留文本转成向量后的语义关系 [3] 。也就是说,意思越相近的两个词,它们在向量空间里的位置就越接近,而且它还是兼容多种语言的。比如,世界上所有语言的「你好」,转换成向量后,它们的数值几乎是相等的。

最后,把要搜索的文本转成向量后使用余弦相似度搜索向量数据库(Vector Database),就可以得到按语义相似度排序之后的结果——这个结果通常有两个指标:距离(Distance)和相似确定性(Similar Certainty),它们的值都在0-1之间,越相似的结果,距离值越小、相似确定性值越大。有也一些数据库搜索结果中直接给出了一个相似度评分(Score),意思也都差不多。

我们把PDF文件按页拆分后,就可以用文本相似性搜索先搜索到和提问的语义最接近的那一页,然后只把那一页的文本作为context组合到prompt里传给ChatGPT,这样就能达到我们想要的效果了。

加上这个过程后,把上面的流程图稍加改造表示一下新的流程:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

其中的向量数据库有很多种选择,本示例里使用的是 Weaviate(Cloud 版本),因为它不仅内置了OpenAI 的文本嵌入 (Text Embedding) 接口可以在用户无感知的情况下执行文本转向量,还提供了非常完善的REST API。明道云集成中心里也已经预置了Weaviate的API,可以零代码直接使用。

3.如何在ChatGPT的回答里附加上被引用的PDF文件名称和页码?

要在答案里附加上PDF的信息,有两种方法:

第一种是把PDF文件名称和页码,都组合到prompt里面,并修改prompt让ChatGPT在回复时给出文件和页码信息;

第二种就是我们在组合prompt前就把向量数据库里返回的排名最高的PDF文件和页码拿到,直接组合到最终输出给用户的答案中。

ChatPDF使用的是第一种,在这个例子里,我们采用第二种,流程图修改如下:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

4.向ChatGPT提问的内容超出了指定的文本内容范围,如何返回类似「未找到答案」这样固定格式的回复?

刚才我们说过了,即便不特别处理,在prompt的约束下,ChatGPT也不会胡乱给一个答案凑数,尤其是在请求时 temperature 参数设置为 0 的时候(该参数用于调节ChatGPT输出结果的确定性,值在0-2之间,值越大结果越随机也越有创意) [4]。 但如果要想一个格式化的答案,我们则要另想办法。

在上面从向量数据库进行相似性搜索的时候,我们已经知道搜索的结果会按照相似度进行排序,并且会给出搜索结果的相似确定性值。那么,我们就可以为相似确定性设置一个阈值,大于这个值的结果,我们认为它符合我们对相似度的定义,其结果可以被用作上下文组合到prompt里;而小于这个值的结果,我们认为它的相似度还不够,即便把它作为上下文组合到prompt里,用户也可能得到风马牛不相及的答案。

按这个规则,如果没有搜索到符合相似度的结果,那我们就不用再向ChatGPT提问了,直接向用户返回「未找到答案」即可。当然,这个阈值要经过多次测试,找到一个平衡点。在这个例子里,我们假设90%相似的结果才有用,所以把这个阈值设为 0.9,所有相似度搜索结果的相似确定性值小于0.9的,我们就认为它的相似度不够,找不到答案。

我们最终的流程图修改如下:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

实现过程

一、工具准备

明道云专业版账号或私有部署版(https://mingdao.com 免费注册体验14天专业版,私有部署版需要能访问公网及OpenAI接口)

百度智能云开发者账号(https://cloud.baidu.com/ 实名认证后可申请文字识别免费次数)

Weaviate Cloud 账号或安装本地版(https://weaviate.io/ 免费注册体验14天,本地部署需要有公网地址且可以访问OpenAI接口)

OpenAI API Key(https://platform.openai.com/account/api-keys 需要使用 embedding接口)

二、PDF文档处理

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

我们先在明道云里实现上传PDF文件后将文档分页识别,把文字识别结果存储到工作表内,并将内容转换成向量存储到向量数据库。这里的实现思路分成以下几个步骤:

用户上传PDF文件到明道云工作表;

上传完成后自动触发工作流,调用百度文档识别API逐页识别文字;

所有页码处理完成后,自动将所有页面的内容批量上传至向量数据库Weaviate(需要先创建集合,上传内容时Weaviate会自动调用OpenAI的Embedding接口执行文本转向量);

当工作表里的文字内容有变动时,自动同步到向量数据库;

当工作表里的PDF文档被删除或者某一页的内容被删除时,自动删除向量数据库里对应的内容;

2.1 创建向量数据库集合

要完成文本相似性搜索,我们必须要先把文本转成向量存储到向量数据库,然后再用文本的向量进行搜索。注册好 Weaviate Cloud Services 账号,创建一个免费的沙盒环境 [5]。创建完成后,会自动生成 Cluster URL,这个地址我们等一下会用到;如果创建时开启了认证(Authentication),则需要把认证信息中的Admin API Key也复制下来(下图中的钥匙图标处)。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

创建好的 Weaviate Cluster

接下来在明道云创建一个应用,在集成中心里搜索 Weaviate,安装连接后填写好上一步获得的 API Key 和 Cluster URL,并授权到刚刚创建的应用。还需要在连接参数里配置好 OpenAI 的 API Key,上传数据到向量数据库时会用到。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

在明道云集成中心安装 Weaviate

明道云把Weaviate的API做了比较深度的封装,提供了一个「创建简单集合」的API,只需要传入集合名称和说明,就可以创建一个有「标题」、「内容」、「URL」、「拥有者」四个字段的集合,其中的「标题」和「内容」参与向量搜索,「URL」和「拥有者」仅做为数据存储。在使用「用向量搜索相似数据」API时,将严格按照传入的「拥有者」参数进行筛选,用于用户数据隔离。

我们在明道云里创建一个管理集合的工作表,并建立新增和删除工作表时自动触发工作流,创建和删除Weaviate上的集合。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

工作表:模型向量集合

为了便于扩展,这里设计的是一个通用的模型集合。ChatPDF只是其中的一个模型,我们把prompt模板、搜索结果数量限制和相似确定性限制都参数化,便于以后我们用于其它业务场景。由于集合创建后不能修改,所以我们需要为工作表设置「业务规则」,限制集合创建后,不能修改名称和说明。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

业务规则

这里的自动化工作流内容比较简单,里面只有「调用已集成API」节点,向Weaviate发起对应的请求。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

自动化工作流:自动创建和删除Weaviate集合

创建完成后,向工作表添加一条数据,Weaviate上也会新增一个集合。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

创建好的集合

2.2 识别PDF文档

我们在明道云里创建两张工作表用于存放文档资料:「主文档」、「文档内容明细」。其中,「文档内容明细」是「主文档」的子表,前者存放的内容与向量数据库中存放的内容是一一对应的,所以它的结构也是按照向量数据库的字段结构来设计的;后者主要用于存放用户上传的PDF文档。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

工作表:主文档(主表)

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

工作表:文档内容明细(子表)

主表关联了「模型向量集合」表,子表用文本存储集合名称,它们的默认值都设置为刚刚创建的「ChatPDF」集合。然后我们需要为这两张工作表添加自动化工作流,在用户上传文件后自动完成文字识别和上传到Weaviate的动作。

在开始搭建工作流之前,还需要在「集成中心」里安装「百度云办公文档识别」的API,并在连接里配置好百度云的 API Key 和 Secret Key等信息。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

在集成中心安装PDF识别API

在处理PDF文字识别的工作流中,有一个循环调用文字识别接口处理PDF文档每个页面识别结果的过程,由于文字识别接口有并发请求量的限制,我们可以在工作流里添加「逐条执行」的「子流程」或者「封装业务流程」来实现,为了复用性,我们这里采用了「封装业务流程」——它就像一个自定义封装的「函数(Function)」,没有固定的触发器,只有输入和输出参数,可以在任意位置被其他工作流调用 [6]。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

使用封装业务流程处理分页文字识别

在所有页面的文字识别完成后,我们会调用Weaviate的批量上传API一次性把所有结果都上传到向量数据库(必须配置好 OpenAI API Key)。接着还要处理一下更新和删除的逻辑,当手动更新和删除文档内容明细的数据时,要及时的同步到向量数据库中。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

完成PDF识别步骤后的自动化工作流

至此,PDF文档的处理步骤就完成了。用户上传PDF文件后,会自动完成分页、识别和上传动作。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

PDF文档处理完成示例

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

Weaviate 控制台查询结果

三、向ChatGPT提问

在开发基于 ChatGPT 的问答应用时,最容易被用户接受的还是对话式的聊天UI。所以用明道云实现ChatPDF,可以直接基于它的内置 IM 工具来做。我用明道云做个人知识库时,就是基于这个IM做了一个「AI小助手」,也集成了今天讲的这个模仿ChatPDF模型进来,效果还是很不错的:

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

把 chatGPT AI 助手集成到明道云 IM

不过今天只是实现一个在1小时可以零代码完成的小Demo,我们就不用集成到IM里了,不然这篇文章可能1万字收不住了,我们直接用工作表来实现简单的提问效果。如果想和我一样集成到IM聊天工具中,可以自行研究一下明道云开放平台中关于处理聊天消息的一些API接口 [7]。当然,同样的思路集成在钉钉或者企业微信的机器人上也是可以的。

3.1 组合prompt

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

组合ChatPDF可用的prompt,是我们这个流程的核心部分。我们先设计一个工作表用来存放用户的问题和AI的回复,并用工作流实现自动生成对应prompt。

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

工作表:提问

利用ChatGPT与PDF对话?1小时打造知识库问答系统!明道云&ChatGPTWeaviate超

AI时代,掌握AI大模型第一手资讯!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

扫码右边公众号,驾驭AI生产力!

相关文章