🗣️ 说话转文本方法与 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。
  • 适用于批量处理任务,如播客、呼叫中心录音或语音备忘录。
  • 不需要实时反馈或部分结果。

工作原理

STT 非流式转录流程

优点

  • 易于使用:单个 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('⚠️ 请提供有效的音频文件')