菜单

多模态 RAG

相关源文件

本文档介绍了如何构建同时处理文本和图像的检索增强生成(RAG)系统,将视觉理解与检索能力相结合。重点是使用OpenAI的Vision API、Responses API和向量存储实现多模态RAG,以利用文本和视觉信息提供上下文感知响应。

有关仅限文本的RAG实现,请参阅RAG与向量数据库。有关通用函数调用模式,请参阅基本函数调用模式

系统架构

多模态RAG通过结合图像理解能力和文本检索,扩展了传统的基于文本的RAG。该系统处理视觉和文本数据,为生成任务提供增强的上下文。

来源: examples/multimodal/image_understanding_with_rag.ipynb1-640

核心组件

图像理解管道

该系统利用OpenAI的视觉能力来分析图像并提取语义信息,这些信息可以与文本结合,以增强检索。

encode_image()函数处理图像文件的Base64编码,而analyze_image_sentiment()则使用具有视觉能力的Responses API,从图像中提取描述性内容和情感分析。

来源: examples/multimodal/image_understanding_with_rag.ipynb181-209

合成数据生成

该系统支持两种模态的合成数据生成,以实现高效的原型设计和实验。

组件使用的API目的
client.images.generate()Images API与gpt-image-1生成合成客户评论图片
generate_food_delivery_review()Responses API与gpt-4.1生成具有指定情感的合成评论文本

合成生成允许创建具有特定情感特征的受控数据集,从而能够对多模态理解能力进行全面测试。

来源: examples/multimodal/image_understanding_with_rag.ipynb94-144

向量存储架构

该实现创建了两个并行向量存储,以比较仅文本与多模态性能。

upload_files_to_vector_store()函数处理上传过程,为每个数据条目创建单独的文本文件,并设置元数据属性以实现过滤功能。

来源: examples/multimodal/image_understanding_with_rag.ipynb263-327

检索与过滤

查询处理

该系统使用OpenAI的文件搜索工具与向量存储集成,对文本和多模态内容进行语义检索。

检索系统支持使用如month等元数据字段进行基于属性的过滤,以限制搜索范围,从而实现内容的时间或分类过滤。

来源: examples/multimodal/image_understanding_with_rag.ipynb342-397

性能比较

该实现通过比较仅文本向量存储与文本+图像向量存储的响应,展示了多模态RAG的增强能力。

功能仅文本RAG多模态 RAG
视觉内容理解仅限于文本描述直接图像分析和描述
情感检测仅基于文本的情感结合文本和视觉情感
上下文完整性可能遗漏视觉细节全面的多模态上下文

比较结果显示,当视觉信息对理解上下文至关重要时,多模态RAG能提供更准确和详细的响应。

来源: examples/multimodal/image_understanding_with_rag.ipynb334-397

评估框架

自动化性能评估

该系统与OpenAI的评估API集成,系统地比较多模态与仅文本性能。

评估框架使用string_check标准将模型输出与真实标签进行比较,从而能够对不同RAG配置下的情感分类准确性进行量化评估。

来源: examples/multimodal/image_understanding_with_rag.ipynb522-640

评估指标

prepare_evaluation_data()函数格式化DataFrame条目以进行评估,创建结构化的输入-输出对以进行系统测试。

此结构能够使用一致的评估标准对仅文本与多模态RAG性能进行自动化比较。

来源: examples/multimodal/image_understanding_with_rag.ipynb527-598

实现模式

数据处理工作流程

多模态RAG系统遵循结构化的数据处理模式,系统地处理文本和图像输入。

  1. 图像分析analyze_image_sentiment()通过Vision API处理图像
  2. 内容合并:将图像描述与现有文本内容结合
  3. 向量存储填充:对两种配置都使用upload_files_to_vector_store()
  4. 检索配置:设置并行向量存储以进行比较

文件管理

该系统对生成的图像和处理过的数据都使用缓存策略。

  • 使用基于哈希的文件名进行图像缓存:cache_path = f".local_cache/{hash(prompt)}.png"
  • DataFrame持久化:df.to_csv(output_path, index=False)
  • 本地缓存目录管理:cache_dir.mkdir(parents=True, exist_ok=True)

这种方法优化了开发迭代,并降低了实验期间的API成本。

来源: examples/multimodal/image_understanding_with_rag.ipynb73-230