语音 AI 助手构建指南:2026年 OpenAI Realtime API / Whisper / Fish Audio 实战
用语音与 AI 交互,是 2026 年最自然的使用方式。OpenAI 的 Realtime API 让构建语音助手变得前所未有的简单。本文从零开始,手把手教你用 Realtime API + 前端框架打造一个低延迟语音 AI 助手。
💡 核心技术栈:OpenAI Realtime API(语音对话)+ Whisper(语音识别)+ Fish Audio / OpenAI TTS(语音合成)。这套组合延迟可低于 1 秒,体验接近真人对话。
OpenAI Realtime API 是什么?
Realtime API 是 OpenAI 2025 年推出的 WebSocket 实时语音对话 API,支持 GPT-4o 的实时语音交互。与传统的 STT → LLM → TTS 三步走不同,Realtime API 原生支持语音输入输出,延迟更低。
核心技术对比
| 技术 | 功能 | 延迟 | 价格 | 备注 |
|---|---|---|---|---|
| Realtime API | 端到端语音对话 | ⭐⭐⭐⭐⭐ | ¥18/1M 输入 | 最新方案 |
| Whisper API | 语音→文字 | ⭐⭐⭐ | ¥0.7/分钟 | 最成熟 |
| Fish Audio | 文字→语音 | ⭐⭐⭐⭐ | 免费(开源) | 中文效果好 |
前端实现(Vue 3 示例)
<!-- Vue 3 语音助手组件 -->
<template>
<div class="voice-assistant">
<button @click="toggleRecording" :class="{ recording: isRecording }">
{{ isRecording ? '🔴 录音中...' : '🎤 开始对话' }}
</button>
<div v-if="transcript" class="transcript">{{ transcript }}</div>
<div v-if="response" class="response">{{ response }}</div>
</div>
</template>
<script setup>
import { ref, onUnmounted } from 'vue'
const isRecording = ref(false)
const transcript = ref('')
const response = ref('')
let mediaRecorder = null
let audioContext = null
async function toggleRecording() {
if (isRecording.value) {
stopRecording()
} else {
await startRecording()
}
}
async function startRecording() {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
mediaRecorder = new MediaRecorder(stream)
// 使用 HolySheep Realtime API(WebSocket)
const ws = new WebSocket('wss://api.holysheep.ai/v1/realtime?model=gpt-4o')
ws.onopen = () => {
isRecording.value = true
// 音频数据通过 MediaRecorder 实时发送
mediaRecorder.ondataavailable = (e) => {
if (e.data.size > 0) {
ws.send(e.data)
}
}
mediaRecorder.start(100) // 每 100ms 发送一次
}
ws.onmessage = (event) => {
const data = JSON.parse(event.data)
if (data.type === 'text') {
response.value = data.content
}
if (data.type === 'audio') {
playAudio(data.content) // 播放 AI 语音回复
}
}
ws.onerror = (err) => console.error('WebSocket error:', err)
}
function stopRecording() {
if (mediaRecorder) mediaRecorder.stop()
if (ws) ws.close()
isRecording.value = false
}
// 音频播放
function playAudio(base64Audio) {
const audio = new Audio(`data:audio/mp3;base64,${base64Audio}`)
audio.play()
}
onUnmounted(() => stopRecording())
</script>
后端实现(Python FastAPI)
# pip install fastapi uvicorn openai websockets
from fastapi import FastAPI, WebSocket
from fastapi.middleware.cors import CORSMiddleware
import openai
import base64
app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=["*"])
# 配置 HolySheep API
client = openai.OpenAI(
api_key="sk-holysheep-xxx",
base_url="https://api.holysheep.ai/v1"
)
@app.websocket("/ws/voice")
async def voice_websocket(websocket: WebSocket):
await websocket.accept()
try:
# 创建 Realtime 会话
session = client.chat.completions.create(
model="gpt-4o-realtime-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "mp3"},
messages=[{
"role": "system",
"content": "你是一个友好的 AI 语音助手,请用简洁的语言回答。"
}]
)
async for chunk in session:
if chunk.type == "audio":
await websocket.send_json({
"type": "audio",
"content": base64.b64encode(chunk.audio).decode()
})
elif chunk.type == "text":
await websocket.send_json({
"type": "text",
"content": chunk.text
})
except Exception as e:
print(f"Error: {e}")
finally:
await websocket.close()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Whisper 语音识别独立使用
import openai
client = openai.OpenAI(
api_key="sk-holysheep-xxx",
base_url="https://api.holysheep.ai/v1"
)
# 音频文件转文字
with open("recording.mp3", "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text"
)
print(f"识别结果:{transcript.text}")
Fish Audio 中文语音合成
# Fish Audio 是开源中文 TTS,支持本地部署
# 安装:pip install fish_audio_sdk
from fish_audio import FishSpeech
model = FishSpeech("fish-speech-1.4")
text = "你好,我是你的 AI 语音助手,有什么可以帮助你的吗?"
audio_data = model.generate(text, voice="female_zh")
# 保存为音频文件
with open("output.mp3", "wb") as f:
f.write(audio_data)
完整架构图
用户说话
↓
麦克风采集(MediaRecorder)
↓
WebSocket 实时发送音频
↓
HolySheep Realtime API(GPT-4o)
↓
WebSocket 实时接收音频 + 文字回复
↓
前端播放音频 + 显示文字