RAG-Anything在Colab实现多模态检索,跨文本、表格、公式与图像全链路
环境准备与依赖安装
在Colab中新建笔记本后,首先通过pip安装raganything[image,text]、openai>=1.0.0以及pandas、matplotlib、reportlab等必备库。为避免Pillow版本冲突,额外指定pillow==11.3.0并刷新模块缓存,确保后续图像处理顺利进行。
安全获取 OpenAI API Key
使用getpass隐藏输入,手动粘贴OpenAI API Key,并通过clean_api_key函数去除多余字符。随后创建AsyncOpenAI客户端,并分别调用chat.completions.create和embeddings.create进行连通性测试,确保gpt-4o-mini和text-embedding-3-small模型均可用。
合成多模态报告
利用pandas构造包含月份、查询量、混合准确率、平均延迟的表格,使用matplotlib绘制趋势折线图并保存为PNG。随后通过reportlab生成PDF,嵌入文字、表格(Markdown 格式)、LaTeX 公式以及前述图表,形成一份完整的合成报告,既提供结构化数据也包含视觉元素。
构建 RAG-Anything content_list
将报告拆分为五类块:
- text:概述报告目标与背景;
- table:Markdown 表格字符串及标题、脚注;
- equation:LaTeX 公式及说明;
- image:图像路径、标题、脚注;
- text(第二段):对混合检索优势的进一步阐述。
上述块以 JSON 列表形式保存为content_list.json,为后续索引提供结构化输入。
定义 OpenAI 模型与 Embedding 函数
封装llm_model_func、vision_model_func以及openai_embedding_func,统一处理系统提示、对话历史以及可选的图像 Base64 数据。Embedding 采用EmbeddingFunc包装,使 RAG-Anything 在索引时能够直接调用 OpenAI 的向量化服务。
初始化 RAG-Anything 并插入内容
创建RAGAnythingConfig并开启图片、表格、公式处理。实例化 RAGAnything 后,调用initialize_storages准备存储目录,随后使用insert_content_list将前述五个块写入向量库。插入过程会输出统计信息,帮助确认每类内容的切分情况。
多检索模式对比实验
设置四种检索模式:naive、local、global、hybrid,分别针对以下问题进行查询:
- 报告的核心目的是什么?
- 从一月到六月,混合准确率和延迟的变化趋势?
- 为什么混合检索优于朴素检索?
- 加权多模态得分公式的含义?
实验结果显示,hybrid模式在跨模态问题上能够综合文本、表格与图像信息,答案最为完整;local侧重局部匹配,global倾向全局语义,naive仅提供最基本的文本相似度。
显式多模态查询示例
通过aquery_with_multimodal接口,直接向模型提供表格或公式块,实现“表格感知查询”“公式感知查询”以及“表格+公式联合查询”。系统成功解释了最高准确率月份、最低延迟月份以及加权得分对检索策略的影响,验证了 RAG-Anything 在显式多模态上下文中的可用性。
小结与后续方向
本教程完整演示了在云端 Colab 环境下,利用开源 RAG-Anything 框架搭建支持文本、表格、公式和图像的多模态检索管线,并通过 OpenAI 的最新模型实现高质量生成。后续可进一步探索全文档解析器(MinerU/Docling)对 PDF 的深度抽取,或将本地模型(如 Llama‑3)替换为 OpenAI,以降低成本并提升可控性。
声明:本文所有代码与实验均基于公开的 RAG-Anything 项目,未涉及任何商业机密。