多模态输入接入与资产处理:图片、音频与文档的安全异步生产链路
用户上传一张图片、一段录音或一份 PDF 后,系统面对的并不是“调一次 OCR/VLM/ASR”。它需要确认文件真实类型、隔离恶意内容、绑定租户权限、异步拆分和处理、保存证据定位、控制单位资产成本,并在用户取消或删除时把影响传播到派生产物、索引、缓存与供应商暂存。
本页把这些步骤抽象为输入资产处理控制面。富文档的解析、检索和回答评测见 富文档与多模态 RAG 系统设计,实时语音会话见 实时语音 Agent 生产化,通用异步作业编排见 LLM 离线批处理与异步作业编排。这里的重点是“资产如何安全、可恢复地变成可消费输入”。
一、把上传内容当作资产,而不是临时文件
建议用四层模型表达血缘关系:
asset 逻辑对象,例如“客户上传的合同”
asset_version 不可变原件版本,例如 sha256 对应的 PDF
derivative 可重建派生产物,例如缩略图、OCR 文本、转写、embedding
evidence 可定位证据,例如页码+bbox、图片区域、音频时间段原件不可变可以让审计和重跑有稳定锚点;派生产物带 transform_version,当 OCR、ASR、VLM 或切块策略升级时可并存重建;证据负责把最终回答精确指回用户有权访问的原始版本。
统一的 evidence 结构可以是:
{
"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 不可信
安全上传的正确顺序是:
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 低置信且字段属于合同金额时,不能静默输出猜测值,应标记不确定、升级模型或进入人工复核。
四、异步状态机与幂等处理
媒体处理通常超过在线请求预算,使用异步状态机:
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 账单。建议归因:
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、现场照片和电话录音,并在回答中精确引用来源。”
- 澄清模态规模、同步体验要求、数据等级、保留期、外发边界和引用精度。
- 用预签名上传把文件放入隔离区,服务端复核魔数、大小、压缩风险并在首写绑定租户与 ACL。
- 建模 asset/version/derivative/evidence;原件不可变,派生物可重建,证据可定位。
- 通过异步队列按模态路由 OCR/布局/ASR/VLM,使用版本化幂等键、分片重跑、DLQ 和原子发布。
- 让派生物继承权限;检索与生成前均做 ACL、数据驻留和脱敏检查。
- 以页码/bbox、图像区域、音频时间段返回证据,引用卡片也执行权限校验。
- 支持取消、撤权和删除向索引、缓存、评测和供应商暂存传播;按资产全生命周期计量成本。
十、面试高频问答
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,也能回答企业最关心的安全、可追溯和成本问题。