在本篇文章中,我们将介绍如何使用 LangChain 结合 OpenAI 进行 PDF 文档的向量化与查询。通过本教程,你将学会如何利用 LangChain 提供的工具,将 PDF 文档加载为向量,并使用 OpenAI 模型进行查询。
环境配置
首先,确保你的 Python 环境已安装必要的库:
pip install torch langchain langchain-openai langchain-community faiss-cpu pymupdf python-dotenv
设置 GPU 设备与代理(可选)
如果你的环境支持 GPU,可以设置 GPU 设备号,并配置代理以便访问 OpenAI API:
import os
import torch
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
os.environ['http_proxy'] = 'http://192.41.170.23:3128'
os.environ['https_proxy'] = 'http://192.41.170.23:3128'
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)
加载 PDF 文档并向量化
加载环境变量
使用 dotenv
读取 OpenAI API 相关的密钥:
from dotenv import load_dotenv
load_dotenv()
import os
openai_api_key = os.getenv("OPENAI_API_KEY")
openai_organization = os.getenv("OPENAI_API_ORG")
初始化 LLM 与 Embeddings 模型
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
llm = ChatOpenAI(
model_name="gpt-3.5-turbo-16k",
temperature=0,
max_tokens=4096,
openai_api_key=openai_api_key,
openai_organization=openai_organization
)
embedding_model = OpenAIEmbeddings(
openai_api_key=openai_api_key,
openai_organization=openai_organization
)
读取 PDF 并进行向量化
from langchain_community.document_loaders import PyMuPDFLoader
from langchain_community.vectorstores import FAISS
pdf_path = './docs/LLaVA.pdf'
pdf_loader = PyMuPDFLoader(pdf_path)
pages = pdf_loader.load_and_split()
vectorstore = FAISS.from_documents(
pages,
embedding=embedding_model
)
创建向量数据库工具集
from langchain.agents.agent_toolkits.vectorstore.base import create_vectorstore_agent
from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit, VectorStoreInfo
vectorstore_info = VectorStoreInfo(
name='vectorStoreTool',
description='a sample vectorstore',
vectorstore=vectorstore
)
toolkit = VectorStoreToolkit(
vectorstore_info=vectorstore_info,
llm=llm
)
创建查询代理并执行查询
我们可以创建一个代理,让其能够根据用户的查询,在存储的文档向量中进行搜索并返回结果。
PREFIX = """You are an agent designed to answer questions about sets of documents.
You have access to tools for interacting with the documents, and the inputs to the tools are questions.
"""
user_prompt = 'Summary all documents'
agent_executor = create_vectorstore_agent(
llm=llm, toolkit=toolkit, prefix=PREFIX, verbose=True
)
result = agent_executor.run(user_prompt)
print(result)
运行结果
执行代码后,代理将自动调用向量数据库,并使用 OpenAI 模型总结文档内容。
结论
通过本教程,我们实现了:
-
读取 PDF 文档并进行文本分割。
-
使用 OpenAI Embeddings 进行向量化存储。
-
创建基于向量数据库的查询代理。
-
通过 LangChain 实现智能文档查询与总结。
这种方法可以用于知识管理、智能问答、文档摘要等场景。希望本教程对你有所帮助!
如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!
欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持!