本文档介绍了如何构建同时处理文本和图像的检索增强生成(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系统遵循结构化的数据处理模式,系统地处理文本和图像输入。
analyze_image_sentiment()通过Vision API处理图像upload_files_to_vector_store()该系统对生成的图像和处理过的数据都使用缓存策略。
cache_path = f".local_cache/{hash(prompt)}.png"df.to_csv(output_path, index=False)cache_dir.mkdir(parents=True, exist_ok=True)这种方法优化了开发迭代,并降低了实验期间的API成本。
来源: examples/multimodal/image_understanding_with_rag.ipynb73-230