当前位置: 首页 > news >正文

Question mutiple pdf‘s using openai, pinecone, langchain

题意:使用 OpenAI、Pinecone 和 LangChain 对多个 PDF 文件进行提问。

问题背景:

I am trying to ask questions against a multiple pdf using pinecone and openAI but I dont know how to.

我正在尝试使用 Pinecone 和 OpenAI 对多个 PDF 文件进行提问,但我不知道该怎么做。

The code below works for asking questions against one document. but I would like to have multiple documents to ask questions against:

下面的代码可以用于对一个文档进行提问,但我想要能够对多个文档提问:

# process_message.py
from flask import request
import pinecone
# from PyPDF2 import PdfReader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import ElasticVectorSearch, Pinecone, Weaviate, FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
import os
import json
# from constants.company import file_company_id_column, file_location_column, file_name_column
from services.files import FileFireStorage
from middleware.auth import check_authorization
import configparser
from langchain.document_loaders import UnstructuredPDFLoader, OnlinePDFLoader, PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitterdef process_message():# Create a ConfigParser object and read the config.ini fileconfig = configparser.ConfigParser()config.read('config.ini')# Retrieve the value of OPENAI_API_KEYopenai_key = config.get('openai', 'OPENAI_API_KEY')pinecone_env_key = config.get('pinecone', 'PINECONE_ENVIRONMENT')pinecone_api_key = config.get('pinecone', 'PINECONE_API_KEY')loader = PyPDFLoader("docs/ops.pdf")data = loader.load()# data = body['data'][1]['name']# Print information about the loaded dataprint(f"You have {len(data)} document(s) in your data")print(f"There are {len(data[30].page_content)} characters in your document")# Chunk your data up into smaller documentstext_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=0)texts = text_splitter.split_documents(data)embeddings = OpenAIEmbeddings(openai_api_key=openai_key)pinecone.init(api_key=pinecone_api_key, environment=pinecone_env_key)index_name = "pdf-chatbot"  # Put in the name of your Pinecone index heredocsearch = Pinecone.from_texts([t.page_content for t in texts], embeddings, index_name=index_name)# Query those docs to get your answer backllm = OpenAI(temperature=0, openai_api_key=openai_key)chain = load_qa_chain(llm, chain_type="stuff")query = "Are there any other documents listed in this document?"docs = docsearch.similarity_search(query)answer = chain.run(input_documents=docs, question=query)print(answer)return answer

I added as many comments as I could there. I got this information from 

我在代码中添加了尽可能多的注释。我从以下来源获取了这些信息:https://www.youtube.com/watch?v=h0DHDp1FbmQ

I tried to look at other stackoverflow questions about this but could not find anything similar

我试图查看其他与此相关的 Stack Overflow 问题,但没有找到类似的内容。

问题解决:

You can load multiple PDFS with PyPDFDirectoryLoader

你可以使用 `PyPDFDirectoryLoader` 加载多个 PDF 文件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 新160个crackme - 045-CyTom-crackme
  • 如何用GPT进行编程辅助?
  • MyBatis 源码解析:DefaultSqlSessionFactory 的创建与管理
  • 基于QT与STM32的电力参数采集系统(华为云IOT)(211)
  • 面试经验分享 | 华为安全面试--年薪50万offer
  • MySQL中的分组统计
  • 记一次ssh伪终端修改为shell
  • 案例-KVM高级功能部署(虚拟化技术实战)
  • nuxt3连接mongodb操作
  • 线性代数 第五讲:线性方程组_齐次线性方程组_非齐次线性方程组_公共解同解方程组_详解
  • k8s-pod 实战八 (gRPC 探测详细分析)
  • Linux虚拟机搭建K8S环境
  • pbds库
  • Python 从入门到实战5(列表的其它操作)
  • Gazebo Harmonic gz-harmonic 和 ROS2 Jazzy 思考题 建图和导航 SLAM Navigation
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • css布局,左右固定中间自适应实现
  • DataBase in Android
  • isset在php5.6-和php7.0+的一些差异
  • nginx 负载服务器优化
  • Python_OOP
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • vue--为什么data属性必须是一个函数
  • 从零开始的无人驾驶 1
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #HarmonyOS:基础语法
  • #mysql 8.0 踩坑日记
  • #NOIP 2014#Day.2 T3 解方程
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)elasticsearch 源码之启动流程分析
  • (五)Python 垃圾回收机制
  • (转)Linux下编译安装log4cxx
  • (转)VC++中ondraw在什么时候调用的
  • **PHP二维数组遍历时同时赋值
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .naturalWidth 和naturalHeight属性,
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET企业级应用架构设计系列之结尾篇
  • /var/log/cvslog 太大
  • @AutoConfigurationPackage的使用
  • [《百万宝贝》观后]To be or not to be?
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BUUCTF 2018]Online Tool(特详解)
  • [C++]Leetcode17电话号码的字母组合
  • [C++初阶]list的模拟实现