前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pdfGPT——通过AI与上传的PDF文件进行聊天

pdfGPT——通过AI与上传的PDF文件进行聊天

作者头像
山行AI
发布2023-06-14 16:18:18
2.1K0
发布2023-06-14 16:18:18
举报
文章被收录于专栏:山行AI山行AI

前言

在AI浪潮风起云涌的当下,AI正在不断地重塑着每一个行业。笔者的目标是在公众号中把所有当下流行的AI应用都梳理一遍,在整理技术拓展思路的同时也给大家做一个科普。有一段时间没有介绍aigc相关的应用了,今天翻到了一个很早之前调研过的火了很久的一个项目—pdfGPT。

PDF GPT允许你使用GPT功能与上传的PDF文件进行聊天。这时候看过笔者推文的同学就会问,这个项目和Quivr有什么区别呢?实际上,这个项目比Quivr要早,只是Quivr适配了更多的数据类型,比如文本、图片、代码片段,应有尽有。对Quivr感兴趣的可以翻一下之前的文章:Quivr - 你的第二个大脑,由AIGC赋能

本篇文章的目的更多是为了整理和科普,后面笔者会输出一些AI实战应用的文章,小伙伴们可以持续关注一下。 本篇的pdfGPT项目的github地址为:https://github.com/bhaskatripathi/pdfGPT

pdfGPT

演示

1.演示URL: https://bit.ly/41ZXBJM

注意: 如果你喜欢这个项目,请给它点赞!

问题描述 :

1.当你向Open AI传递大量文本时,它会受到4K令牌限制。它不能将整个pdf文件作为输入2.Open AI有时会变得过于健谈,并返回与你的查询无直接关系的无关应答。这是因为Open AI使用了质量较差的嵌入。3.ChatGPT不能直接与外部数据进行交互。一些解决方案使用Langchain,但如果没有正确实现,它会消耗大量的令牌。4.有许多解决方案,如https://www.chatpdf.com, https://www.bespacific.com/chat-with-any-pdf, https://www.filechat.io,它们的内容质量较差,容易产生幻觉问题。避免幻觉并提高真实性的一个好方法是使用改进的嵌入。为了解决这个问题,我建议使用Universal Sentence Encoder系列算法来改进嵌入(在这里阅读更多:https://tfhub.dev/google/collections/universal-sentence-encoder/1)。

解决方案: 什么是PDF GPT ?

1.PDF GPT允许你使用GPT功能与上传的PDF文件进行聊天。2.该应用程序智能地将文档分解成更小的块,并使用强大的Deep Averaging Network Encoder生成嵌入。3.首先在你的pdf内容上进行语义搜索,然后将最相关的嵌入传递给Open AI。4.自定义逻辑生成精确的响应。返回的响应甚至可以在方括号([])中引用信息所在的页码,增加了响应的可信度,帮助快速定位相关信息。这些响应比Open AI的原始响应要好得多。5.Andrej Karpathy在这篇文章中提到,对于类似的问题,KNN算法是最合适的:https://twitter.com/karpathy/status/16470252305468866586.使用langchain-serve[1]在生产环境中启用API。

Docker

运行docker-compose -f docker-compose.yaml up使用Docker compose。

使用langchain-serve[2]在生产环境中使用pdfGPT

本地游乐场

1.在一个终端上运行lc-serve deploy local api使用langchain-serve将应用程序作为API暴露出来。2.在另一个终端上运行python app.py进行本地gradio游乐场。3.在你的浏览器上打开http://localhost:7860并与应用程序进行交互。

云部署

通过在Jina Cloud[3]上部署使pdfGPT生产就绪。

lc-serve deploy jcloud api

显示命令输出【公众号格式问题,请移步原文】

代码语言:javascript
复制












使用cURL进行交互

(将URL更改为你自己的端点)

PDF url

代码语言:javascript
复制
curl -X 'POST' \
  'https://langchain-3ff4ab2c9d.wolf.jina.ai/ask_url' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://uiic.co.in/sites/default/files/uploads/downloadcenter/Arogya%20Sanjeevani%20Policy%20CIS_2.pdf",
  "question": "What'\''s the cap on room rent?",
  "envs": {
    "OPENAI_API_KEY": "'"${OPENAI_API_KEY}"'"
    }
}'

{"result":" Room rent is subject to a maximum of INR 5,000 per day as specified in the Arogya Sanjeevani Policy [Page no. 1].","error":"","stdout":""}

PDF文件

代码语言:javascript
复制
QPARAMS=$(echo -n 'input_data='$(echo -n '{"question": "What'\''s the cap on room rent?", "envs": {"OPENAI_API_KEY": "'"${OPENAI_API_KEY}"'"}}' | jq -s -R -r @uri))
curl -X 'POST' \
  'https://langchain-3ff4ab2c9d.wolf.jina.ai/ask_file?'"${QPARAMS}" \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@Arogya_Sanjeevani_Policy_CIS_2.pdf;type=application/pdf'

{"result":" Room rent is subject to a maximum of INR 5,000 per day as specified in

在Arogya Sanjeevani Policy [Page no. 1].","error":"","stdout":""}

在本地主机上运行

鸣谢 : Adithya S[4]

1.通过在你的终端或命令提示符中输入以下命令来拉取镜像:

代码语言:javascript
复制
 docker pull registry.hf.space/bhaskartripathi-pdfchatter:latest

1.将Universal Sentence Encoder下载到你的项目的根文件夹。这很重要,因为否则,每次运行时都会下载915 MB。2.使用这个链接[5]下载编码器。3.解压下载的文件,并将其放在你的项目的根文件夹中,如下所示:

代码语言:javascript
复制
你的项目的根文件夹
  └───Universal Sentence Encoder
  |   ├───assets
  |   └───variables
  |   └───saved_model.pb
  |
  └───app.py

4. 如果你已经在本地下载了它,将API文件中第68行的代码:

代码语言:javascript
复制
self.use = hub.load('https://tfhub.dev/google/universal-sentence-encoder/4')

替换为:

代码语言:javascript
复制
  self.use = hub.load('./Universal Sentence Encoder/')

5. 现在,要运行PDF-GPT,输入以下命令:

代码语言:javascript
复制
docker run -it -p 7860:7860 --platform=linux/amd64 registry.hf.space/bhaskartripathi-pdfchatter:latest python app.py

原始源代码 (托管在Hugging Face的演示) : https://huggingface.co/spaces/bhaskartripathi/pdfChatter/blob/main/app.py

UML

代码语言:javascript
复制
sequenceDiagram
    participant User
    participant System

    User->>System: 输入API密钥
    User->>System: 上传PDF/PDF URL
    User->>System: 提问
    User->>System: 提交行动呼吁

    System->>System: 空字段验证
    System->>System: 将PDF转换为文本
    System->>System: 将文本分解为块(150字长度)
    System->>System: 检查是否存在嵌入文件
    System->>System: 如果文件存在,则加载嵌入并将拟合属性设置为True
    System->>System: 如果文件不存在,则生成嵌入,拟合推荐器,将嵌入保存到文件并将拟合属性设置为True
    System->>System: 执行语义搜索并返回KNN的前5个块
    System->>System: 加载Open AI提示
    System->>System: 在Open AI提示中嵌入前5个块
    System->>System: 使用Davinci生成答案

    System-->>User: 返回答案

流程图

代码语言:javascript
复制
flowchart TB
A[输入] --> B[URL]
A -- 手动上传文件 --> C[解析PDF]
B -->

D[解析PDF] -- 预处理 --> E[动态文本块]
C -- 预处理 --> E[动态文本块与引文历史]
E --拟合-->F[使用Deep Averaging Network Encoder在每个块上生成文本嵌入]
F -- 查询 --> G[获取顶部结果]
G -- K-最近邻 --> K[获取最近邻 - 匹配引文引用]
K -- 生成提示 --> H[生成答案]
H -- 输出 --> I[输出]

References

[1] langchain-serve: https://github.com/jina-ai/langchain-serve [2] langchain-serve: https://github.com/jina-ai/langchain-serve [3] Jina Cloud: https://cloud.jina.ai/ [4] Adithya S: https://github.com/200901002 [5] 链接: https://tfhub.dev/google/universal-sentence-encoder/4?tf-hub-format=compressed

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山行AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pdfGPT
    • 演示
      • 问题描述 :
      • 解决方案: 什么是PDF GPT ?
      • Docker
    • 使用langchain-serve[2]在生产环境中使用pdfGPT
      • 在本地主机上运行
        • 鸣谢 : Adithya S[4]
        • 原始源代码 (托管在Hugging Face的演示) : https://huggingface.co/spaces/bhaskartripathi/pdfChatter/blob/main/app.py
      • UML
        • 流程图
        • References
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档