声纹向量库
把一段音频提取成紧凑的声纹,客户端缓存起来组成声纹库;再用查询音频对整个库做 1-vs-N 排序匹配,返回 top-K 命中。完全无状态 — 库由你自己维护、组织、分片。
限制与约束
所有限制均可通过环境变量调整,生产部署可按业务需要放宽或收紧。超出会返回 400 配合具体错误码 (见 §05)。
性能指标
待补充 — 我们会在生产硬件(单实例 GPU / CPU)上对 /v1/voiceprint/extract + /v1/voiceprint/identify 跑一轮 P50/P95 延迟和吞吐基准,这一节会贴出延迟分布、QPS 上限,以及不同库大小下的耗时拆分。
在线体验
左侧"注册"上传音频 + 起个名字,直接调 /v1/voiceprint/extract 把返回的 base64 向量塞进页面里的临时声纹库。右侧"匹配"用 query 音频对这个库调 /v1/voiceprint/identify,结果按相似度排序。整个体验过程不会持久化任何东西。
请求与响应
两个接口都是 multipart/form-data。先选接口看请求字段 + 响应,再切到下方语言 tab 复制可直接运行的代码片段。
上传一段音频,返回紧凑的 base64 声纹向量(每条约 ~684 字节)。客户端把这串字符串原样缓存,下次直接用 /v1/voiceprint/identify 的 type=embedding 条目匹配,免去重复处理。
请求字段
| 字段 | 类型 | 要求 | 说明 |
|---|---|---|---|
| audio | file | 必填 | 常见音频格式(wav / mp3 / m4a / flac / ogg / webm)。建议 3–5 秒真实语音。 |
响应
// 512 维声纹向量 — 紧凑 base64 编码,载荷约 684 字节 { "embedding": "AgUEAQQF/vwB+wTu/fwOAwD6APcHBwX/CQgCAvv+BgMICPz/...AAQ=", "dim": 512, "dtype": "int8", "encoding": "base64", "duration_seconds": 3.420 } // 客户端解码(若需要 float 数组做点积): // bytes = base64.b64decode(embedding) # 512 个有符号字节 // vec = np.frombuffer(bytes, dtype=np.int8)/127.0 # → float32, ≈ unit norm
查询音频对一个声纹库做 1-vs-N 排序匹配。声纹库是 JSON 数组 — 既可以传预计算的声纹向量,也可以混入临时音频文件,返回按相似度降序的 matches 列表 + 便利字段 best_match。
请求字段
| 字段 | 类型 | 要求 | 说明 |
|---|---|---|---|
| query | file | 必填 | 待识别的查询音频。常见音频格式均可。 |
| library | string (JSON) |
必填 | 候选数组的 JSON 字符串(见下方 schema)。每条元素是 {id, type, embedding | audio_ref}。id 单次请求内必须唯一,长度 ≤ 1000 条。 |
| lib_audio_<ref> | file | 条件必填 | 当 library 中有 type=audio 条目时,每条对应的 audio_ref 都必须有一个同名文件字段。例:{"id":"alice","type":"audio","audio_ref":"r0"} → 上传字段 lib_audio_r0。 |
| threshold | float | 可选 | 同人判定阈值,范围 [-1, 1]。不传使用服务端默认 0.372。 |
| top_k | int | 可选 | 只返回前 K 条,值必须 ≥ 1。不传返回全部。 |
声纹库 JSON 格式
// 同一个数组里可以混合两种条目类型 [ // type=embedding —— 直接传预计算向量(/v1/voiceprint/extract 返回的 base64 字符串原样塞进来) { "id": "alice", "type": "embedding", "embedding": "AgUEAQQF/vwB+wTu/fwOAwD6APcHBwX/...AAQ=" }, // type=audio —— 现场上传音频,服务端自动 /v1/voiceprint/extract 后再比对 { "id": "bob", "type": "audio", "audio_ref": "r0" // 对应 multipart 字段 lib_audio_r0 } // 兼容性:embedding 也可以传 [float32, ...] 数组(老格式),服务端自动识别。 ]
响应
{
"threshold": 0.372,
"top_k": null,
"best_match": { "id": "alice", "score": 0.847, "is_same_speaker": true },
"matches": [
{ "id": "alice", "score": 0.847, "is_same_speaker": true },
{ "id": "bob", "score": 0.183, "is_same_speaker": false },
{ "id": "carol", "score": 0.124, "is_same_speaker": false }
]
}
调用示例
错误码
所有业务错误返回统一信封 {"error": {"code": "...", "message": "..."}}。HTTP 状态码与 code 配套使用。
AI 集成 — 一键复制提示词
将预制的、经过实战验证的提示词复制到 Claude、Cursor 或 ChatGPT 中,一分钟内即可完成集成。提示词涵盖 /v1/voiceprint/extract + /v1/voiceprint/identify 接口契约、library JSON 结构、鉴权、错误处理,以及配套的 TypeScript / Python 脚手架代码。
用AI快速集成
已在主流编码 Agent 上测试通过。包含 API 结构、认证、错误处理和示例输入/输出。只需粘贴并说 "用我的技术栈实现这个"。