离线多模态证据路由项目
项目目标
在不读取、上传或生成真实媒体的前提下,根据合成资产清单制定处理计划。项目验证 MIME 一致性、格式/大小限制、必需模态、合成成本预算、隐私动作和时空证据类型。
文件
- multimodal_router.py:Python 3 标准库路由器。
- media_manifest.json:只含合成元数据的输入夹具。
- test_multimodal_router.py:验证成功、格式冲突、缺失模态、预算与隐私路由。
- test_contract_and_cli.py:验证严格 JSON、封闭字段、输出写入失败与 CLI 退出码。
清单中的哈希、文件名和尺寸都是教学数据,不对应真实人物或媒体。
路由语义
脚本把 detected_mime 映射为 image、audio、video、document 或 text,选择处理器与证据定位:
| 模态 | 处理器示例 | 证据定位 |
|---|---|---|
| image | image_decoder、ocr | image_region |
| audio | audio_decoder、asr | audio_interval |
| video | video_probe、scene_sampler | video_interval、frame_region |
| document | document_parser、layout_extractor | page_region |
| text | text_parser | text_span |
合成 cost_units 只用于练习预算,不是任何供应商价格或 token 公式。
运行
在 PowerShell 7 中进入本目录并执行:
python -B .\examples\multimodal_router.py .\examples\media_manifest.json
python -B -m unittest discover -s .\examples -p 'test_*.py' -v
python -B -O -m unittest discover -s .\examples -p 'test_*.py'
python -B -W error -m unittest discover -s .\examples -p 'test_*.py'可把报告写到系统临时目录:
python -B .\examples\multimodal_router.py .\examples\media_manifest.json --output "$env:TEMP\multimodal-plan.json"脚本没有网络调用,不会打开清单中虚构的 file_name,也不会在知识库生成媒体或报告。
ready 返回退出码 0;策略阻断返回 1;清单契约或报告写入错误返回 2。58 项测试覆盖严格 JSON、字段合同、格式/元数据、模态路由、成本、隐私动作、输出文件和 CLI。
读懂报告
- status=ready:格式、必需模态和预算通过;
- status=blocked:errors 列出原因,不应继续模型调用;
- assets:每项的 modality、processors、evidence_kinds、privacy_action 和 cost_units;
- privacy_action=local_only:不允许外部处理;
- total_cost_units:必须不超过 policy.budget_units。
分类信任边界
夹具中的
privacy是已经由策略层确认的合成教学输入,脚本不会读取真实媒体,也不会证明它的分类正确。生产系统必须先由认证后的 asset/tenant/授权记录在服务端解析分类与允许处理位置;不能让上传者用 manifest 中的privacy: public取得外发权限。
改造练习
- 把视频 privacy 改为 restricted,观察 local_only。
- 删除音频资产,确认 missing_required_modality。
- 让 declared_mime 与 detected_mime 不一致,确认拒绝。
- 降低 budget_units,确认预算阻断。
- 新增 image/svg+xml,先决定解析安全策略,再修改 allowlist;不要仅因扩展名通过。
- 为 evidence_kinds 加入 transform_chain 和原始坐标映射。
掌握检查
- 我能区分媒体清单验证、预处理路由和模型推理。
- 我不会把 declared_mime 当可信格式。
- 我能解释每种模态需要的空间/时间证据。
- 我能在预算不足时缩小范围,而不是静默降低质量。
- 我能说明 restricted 与 personal 的不同处理策略。
- 我知道真实接入还要加入安全解码、哈希、授权、供应商限制和实际模型评测。
自测题
- 为什么项目不需要实际图片也能验证部分工程逻辑?
- 为什么成本估算不能写死为供应商 token 数?
- 若必需视频缺失,但有视频转写文本,应自动视为视频存在吗?
- MIME 合法是否意味着文件内容安全?
局限
项目不验证媒体解码、OCR/ASR 质量、真实模型能力、时间同步或坐标反变换。它只验证调用之前的合同与策略层;detected_mime 也是合成的、已由外部可信解析器提供的输入。真实上线必须另做受限解析、可信分类/授权求值、证据回链和端到端评测。