Przeglądaj źródła

docs(harness): 补 ASR 协议契约(供换成自建服务时照做)

用户问「想独立出来该怎么做」。要独立就得知道前端期望的协议是什么,
从 asr/index.ts 反推并写进参考文档:

- 连接:wss://<host>/common/asr_hub?project=qingpu&engine=aliyun_dashscope...
- 握手:一帧 JSON 文本 {"card_id": <id>}
- 上行:二进制帧,裸 PCM(audio/L16;rate=16000、raw),按 CHUNK_LENGTH 切片定时发
- 下行:{"data":{"result":{...}}},字段 text/pgs/command/is_sentence/is_quit/ls/ws
- 收尾:{"command":"close"}(非讯飞分支)

=> 照这张表实现自建网关,前端一行都不用改,只把 VITE_ASR 指向新地址。

Co-Authored-By: Claude Code <noreply@anthropic.com>
gongtianxiao 2 dni temu
rodzic
commit
e5377a5f86
1 zmienionych plików z 14 dodań i 0 usunięć
  1. 14 0
      harness/docs/reference/current-api-call-sites.md

+ 14 - 0
harness/docs/reference/current-api-call-sites.md

@@ -82,6 +82,20 @@ wss://{VITE_XF_ASR}/api/human_asr/v2/asr?Authorization=...
 
 与对话协议无关,历次迁移没碰它。
 
+#### 📋 ASR 协议契约(从 [asr/index.ts](../../../src/three-libs/asr/index.ts) 反推,供「换成自建服务」时照做)
+
+**连接**:`wss://<host>/common/asr_hub?project=qingpu&engine=aliyun_dashscope&is_long_connection=true&heartbeat=true`
+
+| 步骤 | 内容 |
+|---|---|
+| 1. 握手 | 客户端发**一帧 JSON 文本**:`{"card_id": <id>}`(注意:**不是**上面 XF 分支那套 `business/data` 参数) |
+| 2. 上行 | **二进制帧**,裸 PCM:格式声明为 `audio/L16;rate=16000`、`encoding: raw`,按 `CHUNK_LENGTH` 切片、`CHECK_INTERVAL` 定时发(`new Int8Array(data)` 直接 `send`) |
+| 3. 下行 | JSON:`{"data": {"result": {…}}}`,关键字段 `text`(识别文本)、`pgs`(`"apd"` 等分段标识)、`command`(`"start"` / `"stop"`)、`is_sentence`、`is_quit`、`ls`、`ws` |
+| 4. 收尾 | 非讯飞分支用 `{"command": "close"}`;讯飞分支用 `{"data": {"status": 2}}` |
+
+> 要实现自建网关,**照这张表实现即可**——前端不用改,只要把 `VITE_ASR` 指向新地址。
+> 引擎侧可以接你自己的阿里云百炼 / 讯飞 / 本地模型。
+
 ### 4. 图片 / 附件上传 —— **用户触发不到(入口被注释)**
 
 - 原设计:输入框的上传按钮(图片、pdf/doc/xlsx 等)→ `POST /common/qp_signed_url`