音频与语音

探索 OpenAI API 中的音频和语音功能。


构建音频应用

功能描述
构建语音代理构建交互式语音驱动的应用程序。
音频转录即时准确地将语音转换为文本。
文本朗读实时将文本转换为自然语音。

音频应用场景概览

大型语言模型(LLM)可以通过以下方式处理音频:

  • 将音频作为输入
  • 生成音频作为输出
  • 同时进行输入和输出

OpenAI 提供多个 API 端点,帮助您构建音频应用程序或语音代理。

语音代理

语音代理能够理解音频以执行任务,并以自然语言进行响应。主要有两种构建方式:

  • 使用语音到语音模型和 实时 API
  • 将语音转文本模型、文本语言模型和文本转语音模型链接起来

语音到语音方式延迟更低且更自然,但链接方式是将基于文本的代理扩展为语音代理的可靠方法。如果您已经在使用 Agents SDK,可以通过链接方式为现有代理添加语音功能

流式音频

实时处理音频,构建语音代理和其他低延迟应用程序,包括转录用例。您可以通过 实时 API 流式传输音频输入和输出。我们的高级语音模型提供自动语音识别,以提高准确性、低延迟交互和多语言支持。

文本转语音

将文本转换为语音,请使用 Audio APIaudio/speech 端点。支持的模型有 gpt-4o-mini-ttstts-1tts-1-hd。使用 gpt-4o-mini-tts,您可以要求模型以特定方式或语气朗读。

语音转文本

将语音转换为文本,请使用 Audio APIaudio/transcriptions 端点。支持的模型有 gpt-4o-transcribegpt-4o-mini-transcribewhisper-1。通过流式传输,您可以连续传入音频并获得连续的文本流。


选择正确的 API

有多个 API 可用于转录或生成音频:

API支持的模态流式支持
实时 API音频和文本输入和输出音频流式输入和输出
聊天补全 API音频和文本输入和输出音频流式输出
转录 API音频输入音频流式输出
语音 API文本输入和音频输出音频流式输出

通用 API 与专用 API

主要区别在于通用 API 与专用 API。使用实时 API 和聊天补全 API,您可以利用我们最新模型的原生音频理解和生成功能,并将其与其他功能(如函数调用)结合使用。这些 API 可用于广泛的用例,您可以选择要使用的模型。

另一方面,转录、翻译和语音 API 是为特定模型和单一目的而设计的。

与模型对话与控制脚本

选择正确的 API 的另一种方式是考虑您需要多少控制权。要设计对话交互,让模型以语音思考和响应,请使用实时 API 或聊天补全 API,具体取决于是否需要低延迟。

您无法事先准确知道模型会说什么,因为它会直接生成音频响应,但对话会感到自然。

如果需要更多控制和可预测性,可以使用语音转文本/LLM/文本转语音模式,这样您就能准确知道模型会说什么并控制响应。请注意,这种方法会增加延迟。

推荐

  • 如果需要实时交互实时转录,请使用实时 API。
  • 如果实时不是必须条件,但您希望构建语音代理或需要函数调用等功能的音频应用程序,请使用聊天补全 API。
  • 对于单一目的的用例,请使用转录、翻译或语音 API。

为现有应用程序添加音频

GPT-4o 或 GPT-4o mini 等模型是原生多模态的,这意味着它们可以理解和生成多种模态的输入和输出。

如果您已经使用聊天补全端点构建了基于文本的 LLM 应用程序,您可能希望添加音频功能。例如,如果您的聊天应用程序支持文本输入,您可以添加音频输入和输出——只需在 modalities 数组中包含 audio,并使用音频模型,如 gpt-4o-audio-preview

注意:音频尚不支持在响应 API 中使用。

从模型获取音频输出

创建类似人类的音频响应

curl "https://api.openai.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": "金毛猎犬是否是好的家庭犬?"
        }
      ]
    }'

Node.js 示例:

import { writeFileSync } from "node:fs";
import OpenAI from "openai";

const openai = new OpenAI();

// 生成对给定提示的音频响应
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" }
);

Python 示例:

import base64
from openai import OpenAI

client = OpenAI()

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.openai.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 bytes here>",
                "format": "wav"
              }
            }
          ]
        }
      ]
    }'

Node.js 示例:

import OpenAI from "openai";

const openai = new OpenAI();

// 获取音频文件并将其转换为 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]);

Python 示例:

import base64
import requests
from openai import OpenAI

client = OpenAI()

# 获取音频文件并将其转换为 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)