语音与音频
音频路由允许应用通过与其它 OpenAI 兼容代理 API 相同的网关认证和模型别名层,发送语音转文本、语音翻译和文本转语音请求。
AISIX 会将 OpenAI 风格音频请求转发到支持相同音 频路由的上游。它会解析面向调用方的模型别名,执行调用方访问检查和受支持策略检查,改写上游模型 ID,并返回上游响应体和内容类型,而不会将其转换为聊天风格响应。
本指南将通过 AISIX 发送一次文本转语音请求,并说明不同音频端点的请求和响应行为差异。
准备工作
请先准备以下内容:
- 一个可以处理代理请求的 AISIX 网关。
- 一个可以访问该模型别名的调用方 API Key。
- 一个由支持目标音频路由的服务提供方和模型支撑的模型别名。
发送语音请求
通过网关代理发送语音生成请求,并在请求体中使用 AISIX 模型别名:
curl -sS -X POST "http://127.0.0.1:3000/v1/audio/speech" \
-H "Authorization: Bearer YOUR_CALLER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-prod",
"input": "Hello from AISIX.",
"voice": "alloy"
}' \
--output aisix-speech.mp3
请求成功时,输出文件应包含上游服务提供方返回的音频字节。请将响应作为二进制文件处理,而不是聊天风格 JSON 响应。
检查文件是否已写入为音频输出:
file aisix-speech.mp3
你应看到表明该文件为音频的输出。具体文字取决于操作系统和上游响应格式:
aisix-speech.mp3: MPEG ADTS, layer III, v2, 160 kbps, 24 kHz, Monaural
音频端点行为
不同音频端点不一定使用相同请求或响应形态:
| 端点 | 请求体 | 响应体 |
|---|---|---|
| 转录 | 包含音频文件和模型别名的 multipart form | 上游 JSON 转录结果 |
| 翻译 | 包含音频 文件和模型别名的 multipart form | 上游 JSON 翻译结果 |
| 语音 | 包含模型别名、文本输入和 voice 的 JSON body | 二进制音频字节 |
对于转录和翻译请求,AISIX 会在转发前使用上游模型 ID 重建 multipart form。其它表单字段会被保留,包括上传文件名和内容类型(如果存在)。
对于语音请求,AISIX 会改写 JSON body 中的 model 字段,并将其余请求字段转发给上游服务提供方。
网关会透传上游响应体和内容类型。客户端应将转录和翻译作为 JSON 响应处理,将语音作为二进制音频输出处理。
服务提供方支持
音频支持取决于解析出的服务提供方和模型。AISIX 不会在不同服务提供方族之间转换音频格式。
请将这些路由用于暴露匹配 OpenAI 风格音频端点的上游。如果上游不支持请求的音频路由,该失败通常是服务提供方能力或 base URL 问题,而不是调用方认证问题。
成功的音频请求会归因到网关用量事件中。只有当上游响应包含可识别的 token 用量时,才会填充 token 计数。语音输出和基于时长的音频成本不会从二进制响应中推断。
输入安全护栏可以在 AISIX 调用服务提供方之前检查语音请求中的文本输入。转录和翻译的文件字节会作为音频数据转发,不会被关键词安全护栏当作文本扫描。
端点选择与检查
语音转文本请使用转 录,带翻译语义的语音转文本请使用翻译,文本转音频输出请使用语音。
如果语音请求成功但客户端期望 JSON,请调整响应处理逻辑。语音端点返回的是音频字节。
如果转录或翻译请求从 AISIX 或上游返回 400,请检查 multipart form 构造。请求必须包含 model 字段和预期的音频文件字段。
如果语音安全护栏没有阻断请求,请检查请求文本。语音安全护栏检查的是输入文本,而不是生成后的音频字节。
下一步
你已经了解 AISIX 如何转发 OpenAI 风格音频请求,以及音频响应处理与 JSON 代理路由的差异。当需要访问 AISIX 尚未直接建模的服务提供方原生路由时,请继续阅读服务提供方透传。