基于 Python 的自然语言处理系列(68):LangChain 与 OpenAI 进行 PDF 文档处理

        在本篇文章中,我们将介绍如何使用 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 模型总结文档内容。

结论

通过本教程,我们实现了:

  1. 读取 PDF 文档并进行文本分割。

  2. 使用 OpenAI Embeddings 进行向量化存储。

  3. 创建基于向量数据库的查询代理。

  4. 通过 LangChain 实现智能文档查询与总结。

        这种方法可以用于知识管理、智能问答、文档摘要等场景。希望本教程对你有所帮助!

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

### 如何在 Python 中使用 OpenAI 的 LLM 要在 Python 中使用 OpenAI 的大型语言模型 (LLM),可以通过安装 `openai` 库并 API 进行交互实现。以下是具体方法: #### 安装依赖库 首先,需要确保已安装必要的 Python 库。可以使用以下命令安装所需的包: ```bash pip install openai langchain ``` #### 配置 OpenAI API 密钥 为了调用 OpenAI 的服务,需设置环境变量或直接在代码中提供 API 密钥。推荐的方式是通过环境变量配置密钥以提高安全性。 ```python import os os.environ["OPENAI_API_KEY"] = "your-api-key-here" ``` 或者,在脚本开头导入并初始化 OpenAI 模块时传递密钥: ```python from openai import OpenAI client = OpenAI(api_key="your-api-key-here") ``` #### 调用 OpenAI 大型语言模型 下面是一个简单的例子,展示如何利用 GPT-3 或其他支持的模型生成文本响应[^4]。 ```python from openai import OpenAI def generate_text(prompt, model_name='gpt-3.5-turbo'): client = OpenAI() response = client.chat.completions.create( model=model_name, messages=[ {"role": "user", "content": prompt}, {"role": "assistant", "content": ""} ] ) return response.choices[0].message.content.strip() prompt = "Alice has a parrot. What animal is Alice's pet?" generated_response = generate_text(prompt) print(generated_response) ``` 上述代码片段展示了如何发送提示给指定的大规模预训练语言模型,并获取其返回的回答。这里选择了较新的聊天接口版本 `chat.completions.create()` 方法作为示范。 对于更复杂的场景,比如结合本地文档处理流程,则可能涉及多个阶段的工作流设计。例如先解析 PDF 文件内容再转化为向量形式存入索引数据库以便后续检索操作等步骤[^2][^3]。 最后值得注意的是实际部署过程中还需要考虑性能优化以及成本控制等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的Anthony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值