企业内容从来不只有文字。财务模型依赖表格的行列关系,临床报告同时包含照片和病理图像,工程文档用流程图表达系统逻辑,合同中的关键信息还可能藏在扫描页和批注框里。
Box 与 Google Cloud 正在把 Gemini Multimodal Embeddings 2 集成到 Box Agentic Platform。关键变化不是简单增加一种搜索模型,而是让文本、文档页面、表格渲染图、图表和普通图片进入统一的语义向量空间,使企业智能体能够检索并交叉验证过去容易丢失的视觉与空间信息。
文本 RAG 为什么会在复杂文档上失真
传统 RAG 通常先提取文本,再按字符数或 token 数切块。处理普通报告正文时,这套方法已经相当有效;一旦内容的含义依赖版面,扁平化文本就会破坏证据结构。
以财务表格为例,下面三个值只有在保留列标题、行标题和单位后才有意义:
Revenue 120 148
Margin 18% 21%
如果解析器把标题、数字和脚注拆进不同文本块,检索系统可能找到 21%,却无法可靠回答它属于哪个年份、哪个业务单元,或者这个数字是否经过调整。
多模态嵌入提供了另一种表示路径:直接对页面渲染结果、图表或表格图像建立向量,同时保留文件、页码、区域坐标和原始文本等元数据。这样做带来三项能力:
- 保留空间关系:行列、视觉层级、批注框和图例不再只是无序字符串。
- 支持跨模态检索:自然语言问题可以召回幻灯片中的图表,图片也可以反向关联文字说明。
- 连接异构文件:PDF 政策、Excel 跟踪表、PPT 汇报和 PNG 宣传物料可以进入同一检索流程。
统一向量空间并不意味着可以丢掉 OCR、文档解析和结构化元数据。实际系统仍需保存原始文件、证据位置和权限信息,因为向量负责召回相似内容,而不是充当最终事实来源。
多模态智能体的三个高价值模式
财务分析:让数字重新回到表格和图表中
财务、审计和研究团队经常需要回答:某个指标来自哪一页、图表趋势是否支持管理层摘要、脚注是否改变了指标口径。
多模态检索可以把书面说明、财务矩阵和趋势图放入同一个候选集合。智能体随后比较文本主张与视觉证据,例如发现报告声称增长加速,但折线图显示最近两个季度已经放缓。
这里最重要的输出不是一段流畅总结,而是可定位的证据:文件版本、页码、表格区域、单位和脚注都应随答案返回。
临床辅助:跨越照片、病理图像和风险矩阵
临床资料可能同时包括外部症状照片、显微病理图像、实验室报告和分诊网格。多模态索引能够把这些内容放进统一的候选空间,帮助系统检索相关视觉模式,并与风险框架交叉参考。
但这类系统只能定位为决策支持。嵌入相似度不是诊断结论,视觉召回也不能替代经验证的医学模型、医生复核和紧急处置流程。上线时必须记录模型版本、输入证据、输出引用和人工审批结果。
跨文档核对:主动发现业务冲突
企业风险常常存在于文件之间,而不是单个文件内部。例如,最新 Excel 价目表已经更新,宣传图片仍显示旧价格;签署版 PDF 合同缺少法务邮件要求增加的条款;会议纪要中的日期与项目计划不一致。
多模态智能体可以先跨格式召回相关证据,再执行字段抽取、版本比较和冲突判断。这个模式比单纯的问答更接近可执行工作流:发现矛盾后创建审查任务,而不是直接修改受控内容。
可以这样实践:按证据单元设计索引
下面的配置是一个可改造的示例,并非 Box 或 Gemini 的官方接口定义。它展示了如何把页面、表格、图表和权限元数据组织成可审计的摄取流程。
# ingestion.yaml
collection: quarterly-reporting
embedding_model: gemini-embeddings-2
inputs:
- path: reports/q4-report.pdf
render_pages: true
extract_text: true
evidence_units:
- page
- table
- chart
- path: finance/latest-pricing.xlsx
render_sheets: true
extract_cells: true
evidence_units:
- sheet
- table_range
metadata:
required:
- document_id
- version_id
- mime_type
- page_or_sheet
- bounding_region
- source_hash
- access_policy_id
retrieval:
candidate_count: 40
rerank_count: 8
require_permission_filter: true
return_evidence_location: true
索引粒度不宜固定为整份文件,也不应退回任意 token 切块。可以把一页、一个表格区域或一张图表作为证据单元,再通过 document_id 和位置元数据恢复上下文。对于跨页流程图,还需要建立相邻页或父子区域关系。
检索质量必须通过任务级基准验证。下面的 Python 脚本可直接运行,用于计算多模态检索结果的 Recall@k 和证据位置命中率。示例结果是内置数据;接入真实系统时,只需把 ranked_ids 替换为检索服务返回的证据 ID。
# evaluate_retrieval.py
CASES = [
{
'query': '哪张图显示最近两个季度的利润率下降?',
'relevant_ids': {'report:p12:chart-2'},
'ranked_ids': [
'report:p3:text-1',
'report:p12:chart-2',
'workbook:margin:table-1',
],
},
{
'query': '宣传页价格是否与最新价目表一致?',
'relevant_ids': {
'flyer:p1:price-box',
'pricing:sheet1:range-b4-c8',
},
'ranked_ids': [
'flyer:p1:price-box',
'pricing:sheet1:range-b4-c8',
'email:pricing-update:text-1',
],
},
]
def evaluate(cases, k=3):
recalls = []
exact_evidence_hits = 0
for case in cases:
expected = case['relevant_ids']
retrieved = set(case['ranked_ids'][:k])
recalls.append(len(expected & retrieved) / len(expected))
exact_evidence_hits += int(expected <= retrieved)
return {
f'recall@{k}': sum(recalls) / len(recalls),
'complete_evidence_rate': exact_evidence_hits / len(cases),
}
if __name__ == '__main__':
metrics = evaluate(CASES, k=3)
for name, value in metrics.items():
print(f'{name}: {value:.2%}')
运行命令:
python evaluate_retrieval.py
这组内置数据会得到 100% 的结果,仅用于验证脚本。真实评测集应包含难例,例如相似图表、旧版本文件、扫描质量较差的页面、同名指标、不同币种以及用户无权访问的正确答案。除了 Recall,还应测量错误引用率、权限泄漏率、版本新鲜度和端到端回答准确率。
从搜索升级为智能体时要守住的边界
多模态嵌入解决的是表示与召回问题,不会自动解决权限、事实核验和自动执行风险。生产架构至少应包含以下控制:
- 在向量召回前或召回过程中执行用户级权限过滤,不能只在生成答案后隐藏引用。
- 保存文件版本、内容哈希、页码或区域坐标,让每个结论都能回到原始证据。
- 对冲突检测、合同审查和临床辅助设置置信度阈值与人工审批。
- 分别评测文本到视觉、视觉到文本、跨文件核对和布局敏感检索,避免平均指标掩盖薄弱模态。
- 为删除、权限变更和新版本建立索引同步机制,防止智能体继续引用过期内容。
- 限制智能体的写入权限,把发现问题、提出建议和执行变更拆成不同授权步骤。
Box 与 Gemini Embeddings 2 所代表的架构变化,是把企业内容库从被动文件存储升级为受治理的语义证据层。真正决定效果的并不只是嵌入模型,而是证据单元设计、权限继承、精度基准、版本治理和人工审批能否一起工作。对于金融、生命科学和法务等高复杂度场景,多模态理解正在从增强功能变成基础能力,但它必须与可审计性同时落地。