RAG 进阶:多模态图片检索技术实践
在 LlamaIndex 和 LangChain 框架的学习过程中,我们通常处理的是纯文本数据。然而,现实世界中的文档往往包含丰富的非结构化信息,如图片、图表、表格等。本文旨在探讨如何将单一文本模态的 RAG(检索增强生成)升级为多模态 RAG,使系统具备读图、搜图的能力。
前沿背景
传统的 RAG 系统主要处理 PDF 中的文本和表格数据。虽然 unstructured 库和 MultiVectorRetriever 已经能很好地处理半结构化数据,但对于图片、声音、视频等非结构化数据的理解能力仍然不足。大模型技术的发展,特别是多模态模型的出现,为这一领域带来了新的解决方案。
多模态模型(Multimodal Model)能够同时处理多种类型的数据输入。例如,GPT-3.5-turbo 仅支持文生文,属于单一模态模型;而 OpenAI 发布的 GPT-4V(Vision)则是一款典型的多模态模型,它不仅能接受文本指令,还能直接解析图像内容并返回文字描述。这种能力的升级,使得 RAG 系统可以直接利用视觉信息进行检索和推理。
环境准备与数据源
为了演示多模态 RAG 的效果,我们选取了一份来自摩根大通(JPMorgan)的每周市场回顾报告作为测试数据。该 PDF 文件包含文本、图表(图片)、表格等多种模态的混合数据,非常适合用于验证系统的图文处理能力。
依赖安装
首先,确保安装了必要的 Python 库。除了常规的 LangChain 和 LlamaIndex 组件外,还需要 unstructured 库来处理文档解析,以及 Pillow 等图像处理库。
pip install langchain langchain-community unstructured[all-docs] openai pillow
获取数据
下载目标 PDF 文件到本地目录:
import os
os.makedirs("data", exist_ok=True)
!wget -o data/weekly_market_recap.pdf https://am.jpmorgan.com/content/dam/jpm-am-aem/americas/us/en/insights/market-insights/wmr/weekly_market_recap.pdf
API Key 配置
使用 GPT-4V 需要有效的 OpenAI API Key,且账号需具备访问 Vision 模型的权限。
import os
os.environ["OPENAI_API_KEY"] = "Your_OpenAI_API_Key"
文档解析与图片提取
我们继续使用 unstructured 库提供的 partition_pdf 函数来抽取 PDF 中的不同元素。与处理纯文本不同,多模态场景下必须启用图片提取功能。
配置参数详解
from typing import Any
from pydantic import BaseModel
from unstructured.partition.pdf import partition_pdf
# 创建图片输出目录
images_path = "./images"
os.makedirs(images_path, exist_ok=)
raw_pdf_elements = partition_pdf(
filename=,
extract_images_in_pdf=,
infer_table_structure=,
chunking_strategy=,
image_output_dir_path=images_path
)


