多模态 RAG 与智能体
多模态 Agent 不再局限于被动问答,而是通过检索增强、工具调用和物理交互,解决复杂的真实世界问题。
多模态 RAG 概述
| 类型 | 检索对象 | 生成模型 | 应用场景 |
|---|---|---|---|
| 文本 RAG | 文本向量 | LLM | 知识问答 |
| 多模态 RAG | 图像+文本 | MLLM | 文档理解、视觉问答 |
| 视觉 RAG | 文档页面图像 | VLM | PDF 检索 |
文档预处理:多模态 RAG 的基础
传统 RAG 的痛点:
pdf_to_text()丢失了排版、表格、公式等 90% 的关键信息!
文档布局分析(DLA)
LayoutLM 家族演进
| 模型 | 创新点 | 应用场景 |
|---|---|---|
| LayoutLM | 2D位置编码(边界框坐标) | 表单理解 |
| LayoutLMv2 | 空间感知注意力 | 文档分类 |
| LayoutLMv3 | 统一文本图像预训练 | 文档问答 |
| LayoutLLM | 结合LLM多任务 | 通用文档智能 |
GNN(图神经网络)方案
核心思想:将文档页面建模为图
图表示要素
- 节点:文本块、图片、表格、标注
- 边:空间关系(相邻、包含、层级)
- 优势:对倾斜、手写文档鲁棒性强
复杂表格识别
核心挑战:维护行列关系,尤其是合并单元格(row_span/col_span)
关键能力
- 明确识别合并单元格(row_span/col_span 属性)
- 处理无边框表格(通过对齐线索推断)
- 支持多行表头(层次化表头结构)
工具推荐
| 工具 | 技术栈 | 特点 |
|---|---|---|
img2table | OpenCV检测 + 多OCR后端 | 灵活性强 |
Camelot | PDF原生解析 | 专注PDF |
DeepDeSRT | Transformer 端到端 | 深度学习 |
数学与化学公式识别
Image-to-LaTeX 流程
主流模型
| 模型 | 技术 | 特点 |
|---|---|---|
| Pix2Tex | Transformer + CTC | 开源 |
| LaTeX-OCR | ViT Encoder + Decoder | 高准确率 |
| Mathpix | 商用方案 | 产业级 |
输出格式:LaTeX、MathML、ASCII Math
图像与图表分析
VLM 描述 + RAG 增强
python
# 使用BLIP-2描述图表
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")
question = "What does this chart show?"
inputs = processor(chart_image, question, return_tensors="pt")
out = model.generate(**inputs)
caption = processor.decode(out[0], skip_special_tokens=True)
# 使用RAG检索领域知识进一步精细化描述
context = rag_retriever.search(caption)
detailed_desc = llm.generate(f"{caption}\n\nContext: {context}")逻辑阅读顺序检测
问题:多栏布局、嵌入式图表打乱了自然阅读顺序
技术方案
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 基于规则 | XY-Cut算法(递归切分) | 标准双栏论文 |
| 深度学习 | Graph Convolutional Network | 复杂布局 |
| 混合方法 | 规则 + 启发式 + DL | 通用文档 |
XY-Cut 算法
- 横向投影找最大空白带(Y-Cut)
- 纵向投影分左右栏(X-Cut)
- 递归处理每个区域
ColPali:端到端视觉 RAG
传统 PDF 检索需要 OCR,丢失排版、图表等视觉信息。ColPali 直接用 VLM 编码文档页面。
架构设计
Late Interaction 机制
传统 Dense Retrieval
doc_emb = mean(patch_embeddings) # 压缩为单向量
score = dot(query_emb, doc_emb)ColPali MaxSim
python
def maxsim(query_tokens, doc_patches):
# query_tokens: [M, D]
# doc_patches: [N, D]
scores = query_tokens @ doc_patches.T # [M, N]
max_scores = scores.max(dim=1).values # [M]
return max_scores.sum()$$S(q, d) = \sum_{i \in q} \max_{j \in d} (q_i \cdot d_j)$$
优势分析
OCR + Dense
- 丢失排版信息,图表无法检索
- OCR 错误传播,多阶段流水线
VS
ColPali
- 保留视觉布局,图表精准定位,端到端训练
- 所见即所得
应用场景
| 场景 | 传统方法问题 | ColPali 优势 |
|---|---|---|
| 表格检索 | OCR 丢失结构 | 直接编码表格图像 |
| 图表问答 | 无法处理 | 图表内容可检索 |
| 多栏文档 | 栏序混乱 | 视觉布局保留 |
| 手写文档 | OCR 错误率高 | VLM 直接理解 |
RT-2:具身智能
RT-2(Robotic Transformer 2)将多模态大模型转化为 VLA(Vision-Language-Action) 模型。
架构设计
动作 Token 空间
核心思想:将连续动作离散化为语言 Token
python
# 机器人动作空间
action = {
'x': 0.15, # 末端位置 x
'y': -0.02, # 末端位置 y
'z': 0.08, # 末端位置 z
'roll': 0.0, # 姿态
'pitch': 0.1,
'yaw': 0.0,
'gripper': 1, # 夹爪开合
'terminate': 0 # 是否结束
}
# 离散化为 Token
# 每个维度量化为 256 个 bin
action_tokens = [128, 120, 140, 128, 135, 128, 255, 0]
# 作为"外语"输入/输出 LLMCo-Fine-Tuning
涌现能力
训练数据中未见过的指令也能执行
| 指令 | 所需能力 | 来源 |
|---|---|---|
| "把灭绝的动物捡起来" | 恐龙=灭绝动物 | VLM 世界知识 |
| "把泰勒·斯威夫特的专辑放到盒子里" | 识别专辑封面 | VLM 视觉理解 |
| "用可乐把这杯水填满" | 可乐=饮料 | VLM 常识推理 |
多模态 Agent 工作流
Agentic Patterns
多模态工具调用
示例:图片中的产品评价查询
用户:图中这款咖啡机的评价如何?
[上传咖啡机图片]
Agent 思考:需要先识别咖啡机型号,然后搜索评价
步骤1 - OCR 工具调用
输入:图片
输出:型号 "DeLonghi EC685"
步骤2 - 搜索工具调用
输入:{"query": "DeLonghi EC685 评价"}
输出:[搜索结果...]
步骤3 - 总结
输出:这款德龙 EC685 咖啡机总体评价良好,
优点是操作简单、出品稳定...工具类型
| 工具类型 | 示例 | 用途 |
|---|---|---|
| 视觉感知 | OCR、目标检测 | 理解图像内容 |
| 信息检索 | 搜索、RAG | 获取外部知识 |
| 执行操作 | 代码执行、API | 完成具体任务 |
| 生成工具 | 图像生成、TTS | 创建内容 |
规划与反思
多步规划
自我反思
python
def reflect(action_history, current_result, goal):
prompt = f"""
目标:{goal}
已执行的动作:{action_history}
当前结果:{current_result}
请分析:
1. 当前进度是否符合预期?
2. 是否需要调整策略?
3. 下一步应该做什么?
"""
return llm(prompt)多模态 Agent 框架
主流框架对比
| 框架 | 特点 | 多模态支持 |
|---|---|---|
| LangChain | 生态丰富 | 通过扩展支持 |
| AutoGPT | 自主规划 | 有限 |
| JARVIS/HuggingGPT | 模型调度 | 原生多模态 |
| TaskMatrix | 微软方案 | 视觉+API |
HuggingGPT 架构
安全与对齐
多模态 Agent 风险
| 风险类型 | 描述 | 缓解措施 |
|---|---|---|
| 越狱攻击 | 图像中隐藏恶意指令 | 输入过滤 |
| 工具滥用 | 调用危险 API | 权限控制 |
| 信息泄露 | 暴露敏感数据 | 输出审查 |
| 失控行为 | 机器人意外动作 | 安全边界 |
最佳实践
安全边界
- 最小权限原则:工具只给必要权限
- 人在回路:关键操作需人工确认
- 沙盒执行:代码在隔离环境运行
- 输出过滤:检查生成内容合规性
参考资源
| 资源 | 说明 |
|---|---|
| ColPali | 视觉 RAG |
| RT-2 | 具身智能 |
| PaLM-E | 具身语言模型 |
| HuggingGPT | 模型调度 |
| TaskMatrix | 视觉 Agent |