使用GPT-4o进行实时PDF分析
用OpenAI来驱散围绕文件处理的神话
介绍
关于基于人工智能的文件分析存在一个常见误解,即只有特定的多模型,如Gemini或Claude,才能高效处理复杂的PDF文件,尤其是包含图片的文件。虽然这些模型很强大,但它们通常并不是唯一的选择——OpenAI的Azure托管语言模型GPT-4o也可以直接从PDF内容执行强大的文件分析和总结。
在这篇博客中,我们将探讨一种解决方案,可以直接分析 PDF 内容,无需借助支持 Azure 服务(如存储帐户、嵌入和Azure AI搜索)。相反,我们利用 Python 处理 PDF 文件,使其成为 GPT-4o 可以理解和分析的格式,从而使其可供内容和图像洞察使用。
这一步步指南将为那些仍然认为使用GPT-4o或GPT-4omini语言模型不可能进行复杂PDF分析的人进行开眼界。
挑战
通常情况下,处理PDF进行AI分析涉及步骤如下:
- 将文本和图像内容预处理为嵌入以用于上下文和搜索。
- 使用Azure AI Search存储和检索内容。
- 构建管道将PDF图像转换为可读文本,使用OCR技术。
这是有效的,这些步骤可以增加复杂性和成本,特别是对于那些只需要直接从PDF中提取洞察信息的简单工作流程来说,尤其是对于实时处理。
为了缓解这个问题,我创建了一个Python解决方案,该解决方案包括:
- 从PDF中提取文本和图像。
- 将内容直接传送到GPT-4o,无需额外的存储或搜索层。
- GPT-4o可以提取有意义的见解和建议,进一步将其定位为其他LLM的完美轻量级替代方案。
直接将内容传送到GPT-4o,无需更多的存储或搜索层。
GPT-4o 能够提取有意义的见解和建议,进一步将其定位为完美的轻量级替代其他 LLMs。
为什么选择GPT-4o?
GPT-4o的关键优势在于它广泛的上下文窗口和适应性,使其能够处理各种内容,包括文本和图像描述,而无需多模升级。通过战略性地构建PDF内容,GPT-4o可以在以下方面提供全面的见解:
- 长文档总结
- 情境分析
- 从图像标题或元数据中提取见解
这种灵活性使得 GPT-4o 成为文档处理的经济实惠而强大的选择。
解决方案: Python + GPT-4。
让我们浏览使这成为可能的代码。在这个例子中,我使用Python和GPT-4o来阅读和总结PDF,而无需额外的Azure服务。
先决条件:
为了复制这个解决方案,您需要:
- 一个带有PyMuPDF等软件包(用于提取PDF中的文本和图像)的Python环境。
- 通过Azure OpenAI访问GPT-4o。
安装必需的库:
pip install pymupdf openai
代码漫步
这里是一个Python脚本,可以读取PDF文件,提取文本和图片内容,并将处理的数据发送到GPT-4o。
import os
import requests
import base64
from pdf2image import convert_from_path
import io
import fitz # PyMuPDF
# Configuration
API_KEY = "<<Your-GPT-4O Key>>"
pdf_file_path = r"<<your-pdf-file-path>>" # Use raw string literal
ENDPOINT = "https://<<your-azure-openai-resource-name>>.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview"
text = ""
encoded_images = []
with fitz.open(pdf_file_path) as pdf:
for page in pdf:
text += page.get_text()
images = page.get_images(full=True)
for img_index, img in enumerate(images):
xref = img[0] # image reference number
base_image = pdf.extract_image(xref)
image_data = base_image["image"]
# Save image
image_filename = os.path.join(r"<Your_PDF File Path WITHOUT FILENAME>", f"img_{img_index + 1}.png")
with open(image_filename, "wb") as image_file:
image_file.write(image_data)
encoded_images.append(base64.b64encode(open(image_filename, 'rb').read()).decode('ascii'))
# Prepare payload for GPT-4
messages = [
{
"role": "system",
"content": "You are an AI assistant that helps people analyze the text."
}
]
messages.append({
"role": "user",
"content": f"Analyze the following pdf text: {text} and Image: {encoded_images}"
})
payload = {
"messages": messages,
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 800
}
headers = {
"Content-Type": "application/json",
"api-key": API_KEY,
}
# Send request to GPT-4
try:
response = requests.post(ENDPOINT, headers=headers, json=payload)
response.raise_for_status() # Will raise an HTTPError if the HTTP request returned an unsuccessful status code
response_data = response.json()
print(response_data)
except requests.RequestException as e:
raise SystemExit(f"Failed to make the request. Error: {e}")
如何工作
- 提取文本和图像:我使用PyMuPDF Python库从PDF中提取文本和图像。这是非常快速的,对于一个10页的PDF文件,处理时间不多。
- GPT-4o分析:提取的文本和图像随后被输入到GPT-4o中,在一个请求中进行处理。 这里的主要注意事项是保持对话在一个可控范围窗口内。
- 输出:GPT-4o对提取的内容进行了总结,并以其标准的Json格式输出。
限制和考虑因素
这种方法非常高效,可以实时分析PDF文档,但有几个重要的要点需要记住:
- 图像分析的限制:GPT-4o可以从图像中获取描述和元数据,但它无法执行真正的图像识别。因此,如果您的PDF中有包含关键视觉数据的图像,那么GPT-4o将仅处理提取出的描述性数据。
- 上下文窗口:GPT-4o具有一定有限的上下文窗口。大型PDF文件可能需要分割成较小的部分。在制作块后,管理它们可能会很复杂。在这些情况下,我们可以使用AI代理 - AutoGen框架中的Group Conversable代理应该可以使用,或者您可以选择适合您完整使用情况的任何其他模式。
- 潜在增强功能:您还可以为图像中的文本提取添加OCR功能。LangChain还可以帮助对PDF内容进行分块和结构化,以优化处理方式。
结论
我们看到GPT-4o能够直接分析您的PDF文件以及图像,无需嵌入、Azure AI Search或任何其他额外的Azure服务。这展示了GPT 4O在内容处理相关工作中利用最少资源的潜力。对于那些正在寻求通过OpenAI实现这一目标并且不想使用Gemini、Claude或其他多模态LLMs进行文档分析的人来说,这个解决方案可以取得类似的效果但质量更好。唯一需要的就是需要有一些Python知识。
这不仅仅是一种便利,对于那些需要更精简、成本效益高的解决方案却不愿牺牲功能的人来说,这是一次颠覆性的改变。所以,下次想要深入了解PDF内容,考虑一下GPT-4o。
希望这能激励其他人探索GPT-4o的潜力。编程快乐!
感谢您抽出时间阅读我的故事!如果您喜欢它并觉得它有价值,请考虑鼓掌(或50次!)以表达您的支持。您的鼓掌可以帮助其他人发现这篇内容,也能激励我继续创作更多。
另外,不要忘记关注我,获取更多关于人工智能的见解和更新。您的支持对我很重要,帮助我继续与您分享有价值的内容。谢谢!