🎙️ 前置:了解基础 LLM API 调用(LLM API 基础指南)。
1. 语音技术栈全景
用户语音输入
│
▼
┌─────────────────┐
│ VAD 检测 │ ← 检测说话开始/结束
└─────────────────┘
│
▼
┌─────────────────┐
│ ASR (Whisper) │ ← 语音 → 文本
└─────────────────┘
│
▼
┌─────────────────┐
│ LLM 文本推理 │ ← 文本 → 文本回答
└─────────────────┘
│
▼
┌─────────────────┐
│ TTS 合成 │ ← 文本 → 语音
└─────────────────┘
│
▼
语音输出
2. 语音识别(ASR):Whisper 体系
2.1 OpenAI Whisper API
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
language="zh", # 指定语言提升准确率
response_format="verbose_json", # 含时间戳
timestamp_granularities=["word"], # 词级时间戳
)
print(transcript.text)
2.2 本地 Whisper( faster-whisper )
pip install faster-whisper
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("audio.mp3", beam_size=5, language="zh")
print(f"检测到语言: {info.language}, 概率: {info.language_probability:.2f}")
for segment in segments:
print(f"[{segment.start:.2f} → {segment.end:.2f}] {segment.text}")
| 模型 | 大小 | 实时因子 (RTF) | 中文准确率 | 适用场景 |
|---|---|---|---|---|
| tiny | 39MB | 0.05 | 70% | 低功耗设备 |
| base | 74MB | 0.1 | 80% | 实时移动端 |
| small | 244MB | 0.3 | 85% | 边缘计算 |
| medium | 769MB | 0.8 | 90% | 服务器 |
| large-v3 | 1550MB | 2.0 | 95% | 高精度离线 |
3. 语音合成(TTS)
3.1 OpenAI TTS API
response = client.audio.speech.create(
model="tts-1",
voice="alloy", # alloy, echo, fable, onyx, nova, shimmer
input="欢迎来到 Birdor,您的 AI 助手已准备就绪。",
speed=1.0,
)
response.stream_to_file("output.mp3")
3.2 ElevenLabs(最佳质量)
from elevenlabs import generate, play, set_api_key
set_api_key("YOUR_KEY")
audio = generate(
text="这是一段高质量的语音合成演示。",
voice="Bella", # 或自定义克隆声音
model="eleven_multilingual_v2",
)
play(audio)
3.3 Coqui TTS(开源本地运行)
pip install TTS
from TTS.api import TTS
# 加载多语言模型
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
# 克隆声音(用 6 秒参考音频)
tts.tts_to_file(
text="你好,这是用你的声音合成的中文语音。",
speaker_wav="reference_voice.wav",
language="zh",
file_path="cloned_output.wav",
)
4. 实时语音交互架构
4.1 核心组件
import asyncio
import numpy as np
import torch
class RealtimeVoiceAgent:
def __init__(self):
self.vad = VADModel() # 语音活动检测
self.asr = WhisperModel("base") # 语音识别
self.llm = OpenAIClient() # 大语言模型
self.tts = TTSClient() # 语音合成
self.is_speaking = False # Agent 是否在说话
self.user_interrupt = False # 用户是否打断
async def audio_stream_loop(self):
"""持续监听音频输入"""
audio_buffer = []
async for chunk in microphone_stream():
# VAD 检测
speech_prob = self.vad(chunk)
if speech_prob > 0.5:
audio_buffer.append(chunk)
elif audio_buffer:
# 用户说完一句,开始处理
await self.process_utterance(audio_buffer)
audio_buffer = []
async def process_utterance(self, audio_chunks):
# 1. ASR
text = self.asr.transcribe(np.concatenate(audio_chunks))
# 2. 如果 Agent 正在说话,先中断
if self.is_speaking:
self.user_interrupt = True
await self.tts.stop()
# 3. LLM 推理
response_text = await self.llm.chat(text)
# 4. TTS 合成(流式)
self.is_speaking = True
await self.tts.speak_streaming(response_text)
self.is_speaking = False
4.2 WebRTC 实时音频管道
# 使用 aiortc 实现浏览器 ↔ 服务器的实时音频通信
from aiortc import RTCPeerConnection, MediaStreamTrack
from aiortc.contrib.media import MediaPlayer, MediaRecorder
class AudioTrack(MediaStreamTrack):
kind = "audio"
async def recv(self):
frame = await self.track.recv()
# 将音频帧送入 VAD/ASR 管道
audio_data = frame.to_ndarray()
await process_audio_chunk(audio_data)
return frame
# 前端使用 Web Audio API + getUserMedia
# 音频通过 WebRTC 传输到 Python 服务端
5. 语音克隆(Voice Cloning)
5.1 XTTS v2 本地克隆
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
# 只需 6 秒参考音频即可克隆
tts.tts_to_file(
text="这是用克隆声音说出的中文句子。",
speaker_wav="my_voice_6s.wav",
language="zh",
file_path="cloned.wav",
)
5.2 语音克隆的伦理边界
⚠️ 安全红线
├── 绝不克隆未授权人员的声音
├── 明确标注 AI 合成语音
├── 金融场景禁用语音克隆(防诈骗)
├── 提供声音水印 / 检测接口
└── 保留合成日志用于追溯
6. 成本估算
| 组件 | API 成本 | 本地成本 | 实时延迟 |
|---|---|---|---|
| ASR (Whisper API) | $0.006/分钟 | GPU $0.02/小时 | 1-3s |
| TTS (OpenAI) | $0.015/1K字符 | CPU 免费 | <1s |
| TTS (ElevenLabs) | $0.18/1K字符 | 不支持 | <1s |
| VAD | 免费(silero) | CPU 免费 | 50ms |
实时语音会话成本(10 分钟):
- ASR: $0.06
- LLM: ~$0.10(假设 2K token 往返)
- TTS: ~$0.03
- 总计: ~$0.19 / 10 分钟
7. 总结与选型
| 场景 | ASR | TTS | 架构建议 |
|---|---|---|---|
| 客服机器人 | Whisper API | OpenAI TTS | 流式 ASR → LLM → 流式 TTS |
| 播客生成 | Whisper + 校对 | ElevenLabs | 批量处理,人工校对 |
| 语音助手(设备端) | Whisper tiny | PicoTTS | 本地运行,低延迟 |
| 多语言翻译 | Whisper large | XTTS v2 | ASR → LLM翻译 → TTS 目标语言 |
| 有声读物 | Whisper | Coqui TTS | 批量,低成本 |
📂 继续阅读:
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。
「llm」更多文章
模型上下文协议(MCP)完整指南:从 Anthropic 标准到 AI 应用互操作性革命
系统拆解 Model Context Protocol(MCP)的设计哲学、协议分层和核心概念:Resources、Prompts、Tools、Sampling。 涵盖 MCP 与 Function Calling、插件系统、API 网关的区别与互补关系。 附架构全景图、协议消息格式详解,以及 MCP 在 Claude Desktop、Cline、Continue 等客户端中的实际运行机制。
多模态视频分析:从关键帧抽取到时序理解的 LLM 视频理解实战
系统拆解 LLM 视频理解的技术路径:关键帧提取、时序编码(Temporal Modeling)、视觉-时序联合推理。 覆盖 Gemini 1.5 Pro(原生视频)、GPT-4o(帧序列)、Claude(关键帧截图)、Video-LLaMA 四种实现方式。 附视频摘要生成、动作识别、异常检测、教育内容分析四个场景的完整代码与成本优化策略。
多模态生成式 AI:从 DALL-E 3 到视频生成与图生图的生产实战
系统梳理多模态生成技术:文本到图像(DALL-E 3 / Midjourney / Stable Diffusion XL)、文本到视频(Sora / Runway Gen-3 / Pika / 可灵)、图像到图像(ControlNet / IP-Adapter / Img2Img)。 涵盖 Prompt 工程(图像/视频生成专用)、负面提示词策略、分辨率与纵横比选择、版权与伦理边界。 附完整的 API 调用代码、Ollama 本地 Stable Diffusion 部署、以及批量生成与后处理流水线。