Skip to content

接入 ASR terms 与 capability_id fail-closed 校验 #57

Description

@zj1123581321

背景

上游 funasr_spk_server 的 I1 已合并(PR zlxlabs/funasr_spk_server#4),服务端现在支持结构化 ASR terms,并通过 HTTP/WS capabilities 明确声明当前默认引擎是否可消费该能力。

本 issue 只跟踪 VideoTranscriptAPI 消费侧接入;上游仓不会跨仓修改这里的代码。

协议

  1. 先请求 ASR server GET /capabilities
  2. 建立 WebSocket 后读取 connected.data.capabilities
  3. 两侧都必须满足:
    • schema_version == 1
    • features.terms == true
    • engine 与预期 effective engine 一致
    • capability_id 存在且完全相同
  4. 只有上述检查全部通过,才可在 upload_request.data.terms 中发送非空字符串数组。
  5. 缺失、404、超时、非 JSON、schema 不支持、engine 不符、terms=false、两侧 id 不一致或重连后未重新探测,均须 fail closed:不发送非空 terms,并返回/记录稳定的 terms_not_supported 原因。
  6. 空 terms 不触发 capability gate,也不改变现有上传与转录行为。

capability_id 绑定 schema_version/engine/runtime/features 的 canonical 内容;客户端不自行计算,只比较 HTTP 与当前 WS 连接收到的值。

terms 来源与整理

  • 从当前业务的 KeyInfo/术语库提取专名词条,在调用 ASR 前完成来源聚合。
  • 只发送词条数组,不发送任意 prompt 或整段上下文。
  • 保持稳定顺序;空项、重复项可以由上游再次规范化,但消费侧应避免无意义膨胀。
  • 不在日志中记录术语原文;只记录数量、能力判定和失败原因。

验收标准

  • 单文件上传:missing / empty / nonempty terms 三种路径行为正确。
  • 分片上传:首次 upload_request 携带 terms;后续 chunk/finalize 不重复携带或改写 terms。
  • queue_full 后只重试 finalize,不重传文件,且仍绑定最初通过校验的 terms。
  • HTTP/WS capability_id 一致时才发送非空 terms。
  • capability 缺失、false、不一致、旧 server、断线重连均 fail closed。
  • 空 terms 对当前生产 FunASR 流程零影响。
  • 非空 terms 的服务端 task_complete.result.metadata 回显 context_applied=true 与正确 terms_count
  • 日志与错误中不泄露 KeyInfo/术语原文。
  • 对服务端 invalid_terms + reason 做结构化错误映射,不静默截断或吞错。

非目标

  • 不在客户端构造 Qwen prompt。
  • 不引入 terms fingerprint/cache variant。
  • 不修改上游 speaker diarization、word_align 或转录引擎选择。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions