Skip to content

多模态输入接入与资产处理:图片、音频与文档的安全异步生产链路

用户上传一张图片、一段录音或一份 PDF 后,系统面对的并不是“调一次 OCR/VLM/ASR”。它需要确认文件真实类型、隔离恶意内容、绑定租户权限、异步拆分和处理、保存证据定位、控制单位资产成本,并在用户取消或删除时把影响传播到派生产物、索引、缓存与供应商暂存。

本页把这些步骤抽象为输入资产处理控制面。富文档的解析、检索和回答评测见 富文档与多模态 RAG 系统设计,实时语音会话见 实时语音 Agent 生产化,通用异步作业编排见 LLM 离线批处理与异步作业编排。这里的重点是“资产如何安全、可恢复地变成可消费输入”。

一、把上传内容当作资产,而不是临时文件

建议用四层模型表达血缘关系:

text
asset       逻辑对象,例如“客户上传的合同”
asset_version 不可变原件版本,例如 sha256 对应的 PDF
derivative  可重建派生产物,例如缩略图、OCR 文本、转写、embedding
evidence    可定位证据,例如页码+bbox、图片区域、音频时间段

原件不可变可以让审计和重跑有稳定锚点;派生产物带 transform_version,当 OCR、ASR、VLM 或切块策略升级时可并存重建;证据负责把最终回答精确指回用户有权访问的原始版本。

统一的 evidence 结构可以是:

json
{
  "asset_version_id": "av_42",
  "kind": "pdf_region",
  "locator": {"page": 7, "bbox": [0.12, 0.38, 0.88, 0.61]},
  "derivative_id": "ocr_91",
  "processor_version": "layout-2026-07"
}

图片用区域坐标,音频用 [start_ms, end_ms],视频可用时间段加区域,文档用页码和 bbox。前端渲染、RAG 引用和人工复核都使用同一种证据对象,而不是只保存一段失去出处的文本。

二、安全接入:浏览器的 Content-Type 不可信

安全上传的正确顺序是:

text
create upload intent -> tenant/ACL binding -> pre-signed upload
-> quarantine object store -> server-side sniff/scan -> accepted asset version
-> async processing pipeline

客户端提供的 Content-Type、文件扩展名和大小都只是声明。服务端应复核 MIME/魔数,限制大小、页数、像素、压缩层级、音频时长和解压后总量;对压缩包、嵌套文档和媒体容器做解压炸弹防护;在隔离区执行恶意文件/宏/内容扫描。

租户、数据等级、保留策略和 ACL 必须在首写入隔离区时绑定,而不是等向量索引完成后再补。否则扫描、缩略图、OCR 或日志阶段已经可能把无权限内容传播到其他系统。

三、模态路由:先用便宜路径,按证据升级

不同资产需要不同处理树:

输入首选处理升级条件常见产物
图片元数据提取、OCR、缩略图OCR 低置信或图表/布局复杂时 VLM文本、区域、标签、图像 embedding
PDF/Office格式解析、文本层提取、版面分析扫描页、表格、公式或乱码时 OCR/VLM页面、块、表格、bbox、chunk
音频转码、VAD、ASR低置信、多人、噪声时 diarization/复核transcript、时间戳、说话人片段
视频抽帧、ASR、关键镜头检测任务要求事件/画面语义时 VLM帧、字幕、时段、场景标签

路由应同时考虑质量、风险和成本。例如清晰的电子 PDF 不应默认走昂贵视觉模型;OCR 低置信且字段属于合同金额时,不能静默输出猜测值,应标记不确定、升级模型或进入人工复核。

四、异步状态机与幂等处理

媒体处理通常超过在线请求预算,使用异步状态机:

text
created -> uploaded -> quarantined -> accepted -> processing
  -> quality_checked -> published -> indexed
                     -> failed / cancelled / deleting / deleted

每个 transform 以 asset_version_id + transform_version + policy_version 作为幂等键。网络重试、队列至少一次投递或用户重复上传同一文件时,应复用已有结果或安全地重放,不应重复收费、重复索引。

大型文档按页、音频按时间片、视频按片段分片执行,但最终发布采用 manifest/原子指针:只有满足最小质量与权限检查的一组派生产物才对 RAG 或业务查询可见。失败片段进入 DLQ,支持页/片段级重跑,而不是从头重算一小时音频。

五、取消、删除与权限变更的传播语义

“取消上传”可能发生在不同阶段:数据还在浏览器、对象已进隔离区、OCR 正在运行、结果已索引、回答已经引用。系统应区分:

  • 取消处理:停止尚未开始或可中断的任务,保留必要审计,不把未完成结果发布。
  • 撤回授权:立即阻止新的读取、检索和外发;后台撤销索引、缓存、缩略图和派生访问令牌。
  • 删除请求:按保留与法律义务处理原件、派生物、embedding、缓存、评测样本和供应商暂存,并产出可审计的删除进度。

删除不是一条 SQL。对不可立即物理删除的备份或供应商系统,要记录 tombstone、保留到期和可验证的处理状态;对线上引用要在权限检查处实时失效,防止“索引没来得及删就继续泄露”。

六、权限继承与模型外发控制

原件、缩略图、OCR 文本、转写、embedding、RAG chunk、缓存答案和引用卡片都必须携带同一资产/租户/ACL 血缘。检索阶段先做权限过滤,生成阶段还要验证 evidence 对应原件当前可访问。

模型调用前应执行数据驻留、脱敏和供应商路由策略:高度敏感文档只能走私有模型或指定区域;可外发的文本也可能需要去除身份证、银行卡、手机号和人脸等信息。不要仅对最终回答做安全检查,因为敏感数据可能已经在 prompt 中离开边界。

引用 UI 也要做 ACL:无权限用户不应看到文件名、缩略图、页码或时间戳。一个“引用卡片”本身就是潜在的数据泄露面。

七、成本与容量:按资产生命周期计量

多模态成本不只是一笔模型 token 账单。建议归因:

text
upload bytes + storage days + scan CPU
+ pages/pixels/audio seconds/video frames
+ OCR/ASR/VLM tokens + embedding
+ retry/reprocess + retrieval/cache storage
= asset lifecycle cost

创建处理任务时可根据页数、分辨率、音频时长和策略预估预算,超过租户阈值时排队、降级或要求确认。高优先级交互上传与历史批量回灌应走隔离队列,避免大批 PDF 抢占在线识别的容量。

成本优化不能牺牲证据与权限。例如为省钱直接丢弃页码/bbox,后续无法解释回答来源;更好的做法是分级路由、结果去重、派生物复用、按需升级高成本模型和对异常重试设置预算。

八、质量门禁、可观测性与运维

指标说明
accepted-to-published P95一个资产多久可被安全消费
parser/OCR/ASR confidence哪些资产需要升级或人工复核
evidence resolution rate引用能否准确定位到页面/区域/时间段
ACL denial / leakage test rate权限继承是否完整
cancel/delete propagation lag撤回是否及时覆盖派生产物和索引
cost per successful asset单位可用资产的真实成本
duplicate/retry reuse rate幂等与缓存是否减少重复处理

运维演练应包含伪装 MIME、解压炸弹、超大扫描 PDF、低质量录音、重复上传、处理中撤权、索引后删除、供应商区域不可用等情况。把这些样本脱敏后加入回归集,才能让安全和删除语义不随着解析器升级而失效。

九、系统设计题回答框架

题目:“设计一个企业知识助手,支持员工上传合同 PDF、现场照片和电话录音,并在回答中精确引用来源。”

  1. 澄清模态规模、同步体验要求、数据等级、保留期、外发边界和引用精度。
  2. 用预签名上传把文件放入隔离区,服务端复核魔数、大小、压缩风险并在首写绑定租户与 ACL。
  3. 建模 asset/version/derivative/evidence;原件不可变,派生物可重建,证据可定位。
  4. 通过异步队列按模态路由 OCR/布局/ASR/VLM,使用版本化幂等键、分片重跑、DLQ 和原子发布。
  5. 让派生物继承权限;检索与生成前均做 ACL、数据驻留和脱敏检查。
  6. 以页码/bbox、图像区域、音频时间段返回证据,引用卡片也执行权限校验。
  7. 支持取消、撤权和删除向索引、缓存、评测和供应商暂存传播;按资产全生命周期计量成本。

十、面试高频问答

Q1:为什么不能相信浏览器上传的 Content-Type?

它可被伪造,扩展名也无法证明内容。服务端要根据魔数/容器解析复核真实类型,并对大小、页数、像素、嵌套压缩和恶意内容做限制与扫描。

Q2:如何统一图片 bbox、音频时间戳和 PDF 页码引用?

统一为 evidence:绑定不可变 asset_version、证据 kind、locator 和生成该证据的派生产物/处理器版本。不同模态只是在 locator 字段上不同,权限和引用渲染逻辑一致。

Q3:为什么 ACL 要在隔离区首写时绑定?

如果等索引后再补,缩略图、日志、OCR 或外发模型已经可能接触了未授权内容。首写绑定让所有后续任务默认继承策略,避免先扩散后治理。

Q4:用户撤回授权时正在运行的 OCR/VLM 怎么办?

立即阻断新读取和发布,向队列发送取消标记;可中断任务停止,已完成派生物和索引打 tombstone/撤权,供应商调用与备份按保留策略对账。要记录进度,不承诺不存在技术上无法立即物理清除的副本。

Q5:OCR 低置信或 ASR 低置信时如何处理?

按字段风险和成本分流:低风险内容可标记不确定并走较低成本升级;合同金额、身份或医疗等高风险字段要升级模型、交叉验证或人工复核,不能静默编造。

Q6:怎样防止重复上传导致重复收费和重复索引?

以内容 hash、asset version 与 transform version 做幂等;创建时预留预算,完成后按实际结算;队列重试复用同一工作单元与派生物,而不是每次都重新提交模型调用。

Q7:删除如何证明真正生效?

维护原件、派生产物、索引、缓存、评测样本和供应商暂存的删除任务清单与状态;在线权限先失效,后台逐项完成并保留审计证据。备份/法定留存要明确不可立即删除的原因与到期计划。

十一、60 秒收束回答

我会把图片、音频和文档统一为带版本与证据的输入资产,而不是临时上传文件。资产进入隔离区时就绑定租户、ACL 和保留策略,服务端复核魔数、限制资源并扫描风险;之后用版本化幂等任务按模态路由 OCR、ASR、VLM 或布局解析,派生产物只有通过质量与权限门禁才原子发布。回答引用统一绑定到原件版本的页码/bbox/时间段,并在展示时再次校验权限。取消、撤权和删除会向索引、缓存、评测和供应商暂存传播;成本按每个资产从上传到可消费的全生命周期归因。这样既能支撑多模态 RAG,也能回答企业最关心的安全、可追溯和成本问题。

基于 MIT 许可发布