🗣️ 说话转文本方法与 OpenAI API 的比较
概述
本笔记本为初学者提供了一个清晰、实用的指南,帮助他们快速上手使用 OpenAI API 进行语音转文本(STT)。您将探索多种实用的方法、它们的使用场景以及需要考虑的事项。
到最后,您将能够为您的用例选择并使用合适的转录方法。
注意:
- 本笔记本为简化起见,使用了 WAV 音频文件。它不演示实时麦克风流(例如来自 Web 应用或直接麦克风输入)。
- 本笔记本使用 WebSockets 连接到实时 API。或者,您也可以使用 WebRTC,有关详细信息,请参阅 OpenAI 文档。
📊 快速概览
| 模式 | 到达第一个 token的延迟 | 最适合(实际示例) | 优点 | 主要限制 |
模式 |
到达第一个 token的延迟 |
最适合(实际示例) |
优点 |
主要限制 |
文件上传 + stream=False (阻塞) |
秒 |
语音邮件、会议录音 |
设置简单 |
• 没有部分结果,用户在音频文件完成后才能看到任何内容 • 每个请求最多 25 MB(长音频必须分块) |
文件上传 + stream=True |
亚秒级 |
移动应用中的语音备忘录 |
设置简单,通过 token 流提供“实时”感觉 |
• 仍需要完整的音频文件 • 需要实现进度条/分块上传 |
实时 WebSocket |
亚秒级 |
网络研讨会的实时字幕 |
真正的实时;接受连续音频流 |
• 音频必须是 pcm16、g711_ulaw 或 g711_alaw • 会话 ≤ 30 分钟,需要重新连接和拼接 • 需要处理说话人轮次格式化以构建完整转录 |
Agent SDK VoicePipeline |
亚秒级 |
内部帮助台助手 |
实时流式传输,易于构建代理工作流 |
• 仅限 Python 的 Beta 版 • API 表面可能会更改 |
安装(一次性)
要设置您的环境,请在新的 Python 环境中取消注释并运行以下单元格:
!pip install --upgrade -q openai openai-agents websockets sounddevice pyaudio nest_asyncio resampy httpx websocket-client
这将安装运行笔记本所需的必要软件包。
身份验证
在继续之前,请确保您已将 OpenAI API 密钥设置为名为 OPENAI_API_KEY 的环境变量。您通常可以在终端或笔记本环境中设置它:export OPENAI_API_KEY="your-api-key-here"
通过运行下一个单元格来验证您的 API 密钥是否设置正确。
# ─── 标准库 ──────────────────────────────────────────────────────────
import asyncio
import struct
import base64 # 在发送 JSON 之前将原始 PCM 字节编码为 base64
import json # 组合/解析 WebSocket 消息
import os
import time
from typing import List
from pathlib import Path
# ─── 第三方库 ───────────────────────────────────────────────────────────────
import nest_asyncio
import numpy as np
from openai import OpenAI
import resampy # 高质量采样率转换
import soundfile as sf # 读取多种音频格式为 float32 数组
import websockets # 基于 asyncio 的 WebSocket 客户端
from agents import Agent
from agents.voice import (
SingleAgentVoiceWorkflow,
StreamedAudioInput,
VoicePipeline,
VoicePipelineConfig,
)
from IPython.display import Audio, display
# ───────────────────────────────────────────────────────────────────────────────
nest_asyncio.apply()
# ✏️ 将您的密钥放在环境变量中,或直接替换下面的调用。
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=OPENAI_API_KEY)
print("✅ OpenAI 客户端已就绪")
✅ OpenAI 客户端已就绪
1 · 使用音频文件进行语音转文本
模型 = gpt-4o-transcribe
何时使用
- 您有一个完整的音频文件(最多 25 MB)。支持的输入文件类型包括:mp3、mp4、mpeg、mpga、m4a、wav 和 webm。
- 适用于批量处理任务,如播客、呼叫中心录音或语音备忘录。
- 不需要实时反馈或部分结果。
工作原理

优点
- 易于使用:单个 HTTP 请求 – 非常适合自动化或后端脚本。
- 准确性:一次性处理整个音频,提高上下文和转录质量。
- 文件支持:支持 WAV、MP3、MP4、M4A、FLAC、Ogg 等格式。
限制
- 无部分结果:在处理完成之前,您无法看到任何转录内容。
- 延迟随时长而变化:录音越长,等待时间越长。
- 文件大小上限:最多 25 MB(约 30 分钟,16 kHz 单声道 WAV)。
- 仅限离线使用:不适用于实时场景,如实时字幕或对话式 AI。
让我们先预览一下音频文件。我已从 此处 下载了音频文件。
AUDIO_PATH = Path('./data/sample_audio_files/lotsoftimes-78085.mp3') # 修改我
MODEL_NAME = "gpt-4o-transcribe"
if AUDIO_PATH.exists():
display(Audio(str(AUDIO_PATH)))
else:
print('⚠️ 请提供有效的音频文件')