我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用LangChain和OpenAI API分析文档?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用LangChain和OpenAI API分析文档?

审校 | 重楼

从文档和数据中提取洞察力对于做出明智的决策至关重要。然而在处理敏感信息时,会出现隐私问题。结合使用LangChainOpenAI API,您就可以分析本地文档,无需上传到网上。

它们通过将数据保存在本地、使用嵌入和向量化进行分析以及在您的环境中执行进程来做到这一点。OpenAI不使用客户通过其API提交的数据来训练模型或改进服务。

搭建环境

创建一个新的Python虚拟环境这将确保没有库版本冲突。然后运行以下终端命令来安装所需的库。

pip install langchain openai tiktoken faiss-cpu pypdf

下面详细说明您将如何使用每个库

  • LangChain您将用它来创建和管理用于文本处理和分析的语言链。它将提供用于文档加载、文本分割、嵌入和量存储的模块。
  • OpenAI您将用它来运行查询并从语言模型获取结果。
  • tiktoken您将用它来计算给定文本中token(文本单位的数量。这是为了在与基于您使用的token数量收费OpenAI API交互时跟踪token计数。
  • FAISS您将用它来创建和管理向量存储,允许基于嵌入快速检索相似的向量。
  • PyPDF这个库从PDF提取文本。它有助于加载PDF文件并提取其文本供进一步处理。

安装完所有库之后,您的环境现已准备就绪

获得OpenAI API密钥

当您向OpenAI API发出请求时,需要添加API密钥作为请求的一部分。密钥允许API提供者验证请求是否来自合法来源,以及您是否拥有访问其功能所需的权限。

为了获得OpenAI API密钥,进入到OpenAI平台

然后在右上方的帐户个人资料下,点击“查看API密钥将出现API密钥页面。

点击“创建新的密钥”按钮。为密钥命名,点击“创建新密钥OpenAI将生成API密钥,您应该复制并保存在安全的地方。出于安全原因,您将无法通过OpenAI帐户再次查看它。如果丢失了密钥,需要生成新的密钥。

导入所需的库

为了能够使用安装在虚拟环境中的库,您需要导入它们。

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

注意,您从LangChain导入了依赖,这让您可以使用LangChain框架的特定功能

加载用于分析的文档

先创建一个含API密钥的变量。稍后,您将在代码中使用该变量用于身份验证。

# Hardcoded API key
openai_api_key = "Your API key"

如果您打算与第三方共享您的代码,不建议对API密钥进行硬编码。对于打算分发的生产级代码,则改而使用环境变量。

接下来,创建一个加载文档的函数。该函数应该加载PDF或文本文件。如果文档既不是PDF文件,也不是文本文件,该函数会抛出值错误

def load_document(filename):
    if filename.endswith(".pdf"):
 loader = PyPDFLoader(filename)
 documents = loader.load()
 elif filename.endswith(".txt"):
 loader = TextLoader(filename)
 documents = loader.load()
 else:
 raise ValueError("Invalid file type")

加载文档后,创建一个CharacterTextSplitter。该分割器将基于字符将加载的文档分隔成更小的块。

text_splitter = CharacterTextSplitter(chunk_size=1000, 
   chunk_overlap=30, separator="\n")

   return text_splitter.split_documents(documents=documents)

分割文档可确保块的大小易于管理,仍与一些重叠的上下文相连接。这对于文本分析和信息检索之类的任务非常有用。

查询文档

您需要一种方法来查询上传的文档,以便从中获得洞察力。为此,创建一个以查询字符串和检索器作为输入的函数。然后,它使用检索器和OpenAI语言模型的实例创建一个RetrievalQA实例。

def query_pdf(query, retriever):
  qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
   chain_type="stuff", retriever=retriever)
  result = qa.run(query)
 print(result)

函数使用创建的QA实例来运行查询并输出结果。

创建函数

函数将控制整个程序流。它将接受用户输入的文档文件名并加载该文档。然后为文本嵌入创建OpenAIEmbeddings实例,并基于加载的文档和文本嵌入构造一个量存储。将该向量存储保存到本地文件。

接下来,从本地文件加载持久的量存储。然后输入一个循环,用户可以在其中输入查询。主函数将这些查询持久化向量存储的检索器一起传递给query_pdf函数。循环将继续,直到用户输入exit

def main():
   filename = input("Enter the name of the document (.pdf or .txt):\n")
  docs = load_document(filename)
  embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
  vectorstore = FAISS.from_documents(docs, embeddings)
   vectorstore.save_local("faiss_index_constitution")
  persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
  query = input("Type in your query (type 'exit' to quit):\n")

  while query != "exit":
  query_pdf(query, persisted_vectorstore.as_retriever())
  query = input("Type in your query (type 'exit' to quit):\n")

嵌入捕获词之间的语义关系。向量是一种可以表示一段文本的形式。

这段代码使用OpenAIEmbeddings生成的嵌入将文档中的文本数据转换向量。然后使用FAISS对这些向量进行索引,以便效地检索和比较相似的向量。这便于对上传的文档进行分析。

最后,如果用户独立运行程序,使用__name__ == "__main__"构造函数来调用函数

if __name__ == "__main__":
   main()

这个应用程序是一个命令行应用程序。作为一个扩展,可以使用Streamlit为该应用程序添加Web界面。

执行文件分析

要执行文档分析,将所要分析的文档存储在项目所在的同一个文件夹中,然后运行该程序。它将询问要分析的文档的名称。输入全名,然后输入查询,以便程序分析

下面的截图显示了分析PDF的结果。

下面的输出显示了分析含源代码的文本文件的结果。

确保所要分析的文件是PDF或文本格式。如果您的文档采用其他格式,可以使用在线工具将它们转换成PDF格式

完整的源代码可以在GitHub代码库中获得:https://github.com/makeuseofcode/Document-analysis-using-LangChain-and-OpenAI。

原文How to Analyze Documents With LangChain and the OpenAI API,作者:Denis Kuria

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用LangChain和OpenAI API分析文档?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用LangChain和OpenAI API分析文档?

借助少许代码和一些实用的库,您就能构建一个功能强大的文档分析工具。
OpenAILangChain2024-11-30

如何使用 Golang 构建 RESTful API 并使用 Swagger 文档?

使用 go 构建 restful api 并在 swagger 文档中提供可读端点描述。创建 go 模块并使用 gin 框架。添加 swagger 文档以生成 api 文档。定义端点,例如“创建用户”,并相应编写 swagger 定义。使用
如何使用 Golang 构建 RESTful API 并使用 Swagger 文档?
2024-05-15

PHP如何使用Swagger生成好看的API文档

本文小编为大家详细介绍“PHP如何使用Swagger生成好看的API文档”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP如何使用Swagger生成好看的API文档”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-05

如何使用Go语言测量和分析API性能

使用 go 语言测量和分析 api 性能的方法:使用 net/http/pprof 测量 http 性能。使用 pprof 工具分析性能剖析。禁用生产环境中的性能剖析。使用适当的采样率。定期分析性能剖析并解决问题。如何使用 Go 语言测量和
如何使用Go语言测量和分析API性能
2024-05-08

C#如何使用AngleSharp库解析html文档

这篇“C#如何使用AngleSharp库解析html文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#如何使用Angle
2023-07-02

如何使用Runtime类和文档注释

这篇文章主要讲解了“如何使用Runtime类和文档注释”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Runtime类和文档注释”吧!一、Runtime类1.什么是Runtime类?R
2023-06-15

在Web API程序中如何使用Swagger做接口文档

这篇文章主要介绍了在Web API程序中如何使用Swagger做接口文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建Web API程序在VS2019中创建一个ASP.N
2023-06-03

如何使用API调用分析恶意软件

这篇文章主要为大家展示了“如何使用API调用分析恶意软件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用API调用分析恶意软件”这篇文章吧。我们发现有越来越多的恶意软件开始使用各种加密、封
2023-06-27

如何使用 Java dump 文件分析工具?(java dump文件分析工具如何使用)

在Java开发过程中,dump文件是一个非常重要的工具,它可以帮助我们分析应用程序的运行状态、内存使用情况等。本文将介绍Javadump文件分析工具的使用方法,帮助你更好地理解和解决应用程序中的问题。一、什么是Javadump文件?Javad
如何使用 Java dump 文件分析工具?(java dump文件分析工具如何使用)
dumpJava2024-12-20

如何使用 AST 解析器提取 Golang 函数文档?

如何使用 ast 解析器提取 golang 函数文档?安装 go/ast 包。使用 go/parser 包解析 go 代码。遍历 *ast.funcdecl 节点以提取函数文档。使用提取的文档进行文档生成和代码分析。如何使用 AST 解析器
如何使用 AST 解析器提取 Golang 函数文档?
2024-04-18

如何使用Pandas和SQL分析数据

我们在本教程中将探讨何时以及如何将SQL功能整合到Pandas框架中,并探讨其局限性。

如何使用Git初始化存储文档和非代码文件

如果要使用Git初始化存储文档和非代码文件,可以按照以下步骤操作:在计算机上创建一个新的文件夹来存储文档和非代码文件。打开命令行工具,并在新创建的文件夹中初始化Git仓库。可以使用以下命令:git init将文档和非代码文件添加到Git仓库
如何使用Git初始化存储文档和非代码文件
2024-04-29

如何使用 Java dump 文件分析工具?(java dump文件分析工具怎么使用)

在Java开发过程中,dump文件是一个非常重要的调试工具。它可以帮助开发人员捕获Java虚拟机(JVM)在运行时的状态信息,包括线程状态、对象状态、内存使用情况等。通过分析dump文件,开发人员可以快速定位和解决问题,提高开发效率。本文将介绍Javadump文件分析工具的
如何使用 Java dump 文件分析工具?(java dump文件分析工具怎么使用)
dumpJava2024-12-22

java dump文件分析工具如何使用

要使用Java dump文件分析工具,首先需要下载并安装适合您操作系统的工具。一些常用的工具包括MAT(Memory Analyzer Tool)和VisualVM。以下是使用MAT进行Java dump文件分析的一般步骤:1. 下载并安装
2023-10-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录