在当今的技术领域,大型语言模型(LLMs)以其生成类人文本和理解复杂语言结构的能力而备受关注。通过训练大量多样化的数据,LLMs获得了理解和生成跨主题上下文相关文本的显著能力。本文将探讨如何利用OpenAI的API结合LangChain和LlamaIndex从多个PDF文档中轻松提取有价值信息的激动人心的可能性。
本文将介绍以下内容:
这两个开源库可以帮助构建利用大型语言模型(LLMs)的应用程序。LlamaIndex提供了一个简单的接口,用于LLMs和外部数据源之间的交互,而LangChain提供了一个框架,用于构建和管理由LLMs驱动的应用程序。尽管LlamaIndex和LangChain仍在开发中,但它们有潜力彻底改变构建应用程序的方式。
首先,让安装并导入所需的库。
!pip install llama-index==0.5.6
!pip install langchain==0.0.148
!pip install PyPDF2
from llama_index import SimpleDirectoryReader, GPTSimpleVectorIndex, LLMPredictor, ServiceContext
from langchain import OpenAI
import PyPDF2
import os
要开始使用OpenAI的API服务,首先需要注册一个账户。注册成功后,可以为账户创建一个特定的API密钥。建议将API密钥设置为环境变量,以确保与代码和应用程序的无缝集成。这样做可以安全地存储和检索API密钥,而无需在代码中明确暴露它。这种做法有助于保持API密钥的机密性,同时确保在需要时易于访问。
os.environ["OPENAI_API_KEY"] = “API KEY”
让获取当前工作目录,其中包含文档,并将其保存在变量中。
current_directory = os.getcwd()
现在,将为LLMPredictor类创建一个对象。LLMPredictor接受一个参数llm。这里使用OpenAI的API中的一个名为“text-davinci-003”的模型。
llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))
还可以提供几个其他可选参数,例如:
接下来,将为ServiceContext类创建一个对象。使用from_defaults方法初始化ServiceContext类,该方法初始化了几个常用的关键字参数,因此不需要单独定义它们。
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
在这种情况下,使用from_defaults方法调用,并将llm_predictor参数设置为之前创建的llm_predictor对象。这将设置ServiceContext实例的llm_predictor属性为llm_predictor对象。
下一步是通过目录中的每个文档进行迭代。
for filename in os.listdir(current_directory):
if os.path.isfile(os.path.join(current_directory, filename)):
第一行代码用于迭代current_directory中的每个文件,第二行代码确保迭代的是有效文档而不是目录。
documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()
SimpleDirectoryReader类从目录中读取数据。它接收一个名为input_files的参数,并使用filename变量动态生成单个文件名,然后将其传递给它。
在SimpleDirectoryReader实例上调用load_data方法。此方法负责从指定的输入文件加载数据并返回加载的文档。
index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)
GPTSimpleVectorIndex类旨在创建一个索引,用于高效搜索和检索文档。将使用以下参数调用类的from_documents方法:
现在将构建提示。试图提取在“网络犯罪”下注册的案件总数。因此,提示是这样的:
prompt = f"""
在网络犯罪下注册的案件总数是多少?
"""
将使用上述代码行查询之前创建的索引,结果将是一个响应。
response = index.query(prompt)
print(response)
可以将提示重写为这样以仅返回计数。
“在网络犯罪下注册的案件总数是多少?仅返回整数结果”
这将返回如下响应:
还可以将响应保存到任何数据结构中,例如字典。为此,首先创建一个空字典。并将响应分配给特定键;在情况下,可以将其分配给相关的文件名、犯罪年份等。
current_directory = os.getcwd()
def extract_data():
llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
for filename in os.listdir(current_directory):
if os.path.isfile(os.path.join(current_directory, filename)):
documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()
index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)
prompt = f"""
在网络犯罪下注册的案件总数是多少。
仅返回整数结果
"""
response = index.query(prompt)
cyber_crimes[filename] = response.response
print(response)
在本文中,探讨了结合使用OpenAI的API、LangChain和LlamaIndex从PDF文档中轻松提取有价值信息的激动人心的可能性。这些工具可以提供的可能性是无限的。在这里,只是触及了这些工具可以提供的东西的表面。
像GPT-3.5或LLMs这样的语言模型是各种目的的强大工具。它们可以生成类似人类的文本,协助自然语言理解,并提供语言相关任务,如翻译、摘要和聊天机器人交互。