Commercial Media Gateway

媒体解析网关不是“接个 OCR/ASR 接口”

它把原始文件上传、供应商路由、审计、重试、计费和预算控制,收成一套可商用网关,而不是把大文件和供应商调用直接塞进业务接口。

当前结论

已具备商用骨架,但不是最终高并发形态

  • 原始文件上传和归档校验已具备。
  • 主备供应商切换和审计已具备。
  • 本地 faster-whisper 已接入,但仍是轻量默认形态。
  • 极高并发下仍建议继续拆到专业队列。

Current Runtime

当前已跑通的商用骨架

这页只写当前仓库已经实现的能力,不写未来想象。

原始文件上传

`upload-token` 已可根据存储 driver 下发本地上传或 S3-compatible 预签名直传目标,`upload-complete` 继续做归档校验。

文档预处理降级

`ocr.document` 对 `txt/docx/pdf/doc` 已有本地文本层提取,不再一律报 document_binary_requires_preprocessing。

主备供应商切换

Provider route 已支持 `failover`,主通道报错时会自动尝试备用 provider,并写入审计日志。

异步任务队列

`ocr/asr` 接口已先返回 `pending`。生产建议由独立 worker 消费,结果通过 `GET /api/media/tasks/:taskId` 读取,`POST /api/media/tasks/drain` 只保留给运维兜底。

独立 Worker

仓库已补 `ziin-media-worker` 进程入口,并给 pending task 加了 claim lock,避免多个消费者重复处理同一任务。

当前边界

扫描版 PDF、图片型文档仍未完全闭环。任务型 ASR 仍支持本机 `faster-whisper` bridge,但官网助手语音入口已经切到 `omnimodal realtime`,两条链路职责不同。

Service Split

推荐拆分

至少拆成四层,业务问答层不要直接耦合供应商能力。

file-service

负责上传、存储、sha256、文件元数据、归属和访问控制。

ai-media-gateway

负责 OCR/ASR 统一入口、主备供应商、失败重试、结果归一和编排。

quota-billing-service

负责限流、调用量统计、成本估算、租户预算和超额降级。

audit-log-service

负责上传、调用、重试、供应商切换和安全操作的全链路留痕。

Delivery Pack

直接可交付的标准件

别再靠口头说明。接口定义、DDL 和服务拆分模板都已经单独成件,外部团队可以直接拿走。

Media OpenAPI

覆盖上传、OCR、ASR、任务查询、配额、成本、供应商配置和审计。

打开 OpenAPI

Media MySQL DDL

标准 MySQL 表结构,适合先落独立库或独立 schema。

打开 MySQL SQL

Java / Node 模块模板

把 file-service、gateway、quota、audit 的工程边界一次划清。

打开模板

Boundary

当前实现边界

外部团队最容易误判的地方,必须提前说清。
  • 扫描版 PDF 和图片型文档,当前仍需要外部视觉 OCR,仓库内只做了文本层预处理降级。
  • 本地 `faster-whisper` bridge 已上线,支持 HTTP / 本地命令两种 provider 模式;但当前默认还是 CPU + 轻量模型,不是高并发最终形态。
  • 无效音频现在会返回 `ASR_AUDIO_INVALID`,静音或无人声会返回 `ASR_RESULT_EMPTY`,不会再混成笼统的 500。
  • `contentBase64` 仍保留给演示和最小联调,正式接入优先走原始文件上传或对象存储直传。
  • 当前已具备独立 worker 进程和轻量 claim lock,但仍不是 MQ 架构,极高并发下仍建议继续拆分到专业队列。