
OpenAI音频与语音API全解析:从功能到实战指南 原创 精华
OpenAI音频与语音API全解析:从功能到实战指南
在人工智能快速发展的今天,音频与语音交互已成为许多应用的核心能力。OpenAI API提供了丰富的音频处理功能,无论是构建语音代理、实现语音转文字还是文字转语音,都能找到对应的解决方案。本文将详细介绍OpenAI音频API的核心功能、使用场景及实战代码,帮助开发者快速上手。
音频功能概览
OpenAI API的音频能力覆盖了从音频输入处理到音频输出生成的全流程,主要包含三大核心方向:
- 构建语音代理:打造交互式语音驱动应用,实现自然的语音对话交互
- 语音转文字:实时、准确地将语音内容转换为文本
- 文字转语音:将文本实时转换为自然流畅的语音
音频使用场景详解
大语言模型(LLMs)可以通过处理音频输入、生成音频输出或两者结合的方式来处理音频内容。OpenAI提供了多个API端点,助力开发者构建音频应用或语音代理。
语音代理
语音代理能够理解音频内容以处理任务,并以自然语言回应。构建语音代理主要有两种方式:一是使用语音到语音模型和实时API(Realtime API);二是将语音转文字模型、文本语言模型(处理请求)和文字转语音模型串联起来。
语音到语音的方式延迟更低、更自然,而串联方式则是将文本型代理扩展为语音代理的可靠方案。如果已在使用Agents SDK,可通过串联方式为现有代理添加语音能力。
流式音频处理
通过实时API(Realtime API)可实现音频的实时处理,适用于构建语音代理和其他低延迟应用(包括转录场景)。先进的语音模型支持自动语音识别(提升准确性)、低延迟交互和多语言支持,可实现音频的实时流入流出。
文字转语音
若需将文本转换为语音,可使用音频API中的audio/speech
端点。兼容的模型包括gpt-4o-mini-tts
、tts-1
和tts-1-hd
。其中,gpt-4o-mini-tts
支持指定语音风格或语气。
语音转文字
将语音转换为文本可使用音频API的audio/transcriptions
端点,兼容模型有gpt-4o-transcribe
、gpt-4o-mini-transcribe
和whisper-1
。通过流式处理,可持续输入音频并获取连续的文本输出。
如何选择合适的API?
OpenAI提供了多个用于转录或生成音频的API,不同API的特性如下:
API | 支持的模态 | 流式支持 |
---|---|---|
实时API(Realtime API) | 音频和文本输入输出 | 音频流入流出 |
聊天补全API(Chat Completions API) | 音频和文本输入输出 | 音频流出 |
转录API(Transcription API) | 音频输入 | 音频流出 |
语音API(Speech API) | 文本输入和音频输出 | 音频流出 |
通用API vs 专用API
核心区别在于通用API和专用API:实时API和聊天补全API可利用最新模型的原生音频理解与生成能力,并结合函数调用等其他功能,适用于广泛场景,且可自主选择模型。
而转录API、翻译API和语音API则是专用的,仅适用于特定模型和单一用途。
模型对话 vs 脚本控制
选择API的另一角度是需求的控制程度:若需设计对话交互(模型通过语音思考并回应),根据是否需要低延迟,可选择实时API或聊天补全API。这种方式下,模型会直接生成音频回应,内容不可预知,但对话更自然。
若需要更高的可控性和可预测性,可采用“语音转文字→LLM→文字转语音”的模式,明确知道模型会说什么并控制回应内容(但会增加延迟)。这正是音频API的用途:将LLM与audio/transcriptions
和audio/speech
端点结合,处理用户语音输入、生成文本回应,再转换为语音反馈给用户。
推荐方案
- 若需要实时交互或实时转录,使用实时API。
- 若无需实时性,但需构建语音代理或需要函数调用等功能的音频应用,使用聊天补全API。
- 对于单一用途的场景,使用转录API、翻译API或语音API。
在现有应用中集成音频功能
GPT-4o或GPT-4o mini等模型是原生多模态的,可理解和生成多种模态的输入输出。如果已有基于聊天补全端点的文本型LLM应用,可轻松添加音频功能——只需在modalities
数组中包含audio
,并使用音频模型(如gpt-4o-audio-preview
)即可。
注意:响应API(Responses API)暂不支持音频。
模型生成音频回应
以下示例展示如何让模型针对提示生成类人音频回应(已调整API基础地址为稳定的中转服务地址):
import { writeFileSync } from "node:fs";
import OpenAI from "openai";
const openai = new OpenAI({
baseURL: "https://api.aaaaapi.com" // 使用稳定的API中转服务
});
// 生成对指定提示的音频回应
const response = await openai.chat.completions.create({
model: "gpt-4o-audio-preview",
modalities: ["text", "audio"],
audio: { voice: "alloy", format: "wav" },
messages: [
{
role: "user",
content: "金毛寻回犬适合作为家庭宠物吗?"
}
],
store: true,
});
// 查看返回数据
console.log(response.choices[0]);
// 将音频数据写入文件
writeFileSync(
"dog.wav",
Buffer.from(response.choices[0].message.audio.data, 'base64'),
{ encoding: "utf-8" }
);
import base64
from openai import OpenAI
client = OpenAI(
base_url="https://api.aaaaapi.com" # 使用稳定的API中转服务
)
completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
messages=[
{
"role": "user",
"content": "金毛寻回犬适合作为家庭宠物吗?"
}
]
)
print(completion.choices[0])
wav_bytes = base64.b64decode(completion.choices[0].message.audio.data)
with open("dog.wav", "wb") as f:
f.write(wav_bytes)
curl "https://api.aaaaapi.com/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o-audio-preview",
"modalities": ["text", "audio"],
"audio": { "voice": "alloy", "format": "wav" },
"messages": [
{
"role": "user",
"content": "金毛寻回犬适合作为家庭宠物吗?"
}
]
}'
模型接收音频输入
以下示例展示如何将音频作为输入提示模型(已调整API基础地址):
import OpenAI from "openai";
const openai = new OpenAI({
baseURL: "https://api.aaaaapi.com" // 依托可靠的中转服务确保稳定性
});
// 获取音频文件并转换为base64字符串
const url = "https://cdn.openai.com/API/docs/audio/alloy.wav";
const audioResponse = await fetch(url);
const buffer = await audioResponse.arrayBuffer();
const base64str = Buffer.from(buffer).toString("base64");
const response = await openai.chat.completions.create({
model: "gpt-4o-audio-preview",
modalities: ["text", "audio"],
audio: { voice: "alloy", format: "wav" },
messages: [
{
role: "user",
content: [
{ type: "text", text: "这段录音里是什么内容?" },
{ type: "input_audio", input_audio: { data: base64str, format: "wav" }}
]
}
],
store: true,
});
console.log(response.choices[0]);
import base64
import requests
from openai import OpenAI
client = OpenAI(
base_url="https://api.aaaaapi.com" # 选择稳定的API接入方式
)
# 获取音频文件并转换为base64编码字符串
url = "https://cdn.openai.com/API/docs/audio/alloy.wav"
response = requests.get(url)
response.raise_for_status()
wav_data = response.content
encoded_string = base64.b64encode(wav_data).decode('utf-8')
completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "这段录音里是什么内容?"
},
{
"type": "input_audio",
"input_audio": {
"data": encoded_string,
"format": "wav"
}
}
]
},
]
)
print(completion.choices[0].message)
curl "https://api.aaaaapi.com/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o-audio-preview",
"modalities": ["text", "audio"],
"audio": { "voice": "alloy", "format": "wav" },
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "这段录音里是什么内容?" },
{
"type": "input_audio",
"input_audio": {
"data": "<base64编码的音频数据>",
"format": "wav"
}
}
]
}
]
}'
总结
OpenAI的音频API为开发者提供了强大的语音交互能力,从语音代理到实时转录、文字语音互转,覆盖了多样化的应用场景。在实际开发中,选择合适的API(或结合使用)并依托稳定的接入方式(如通过https://link.ywhttp.com/foA8Wb 提供的中转服务),可快速构建流畅、自然的音频应用。无论是现有应用扩展还是全新项目开发,这些工具都能显著降低音频功能的实现门槛。
