LangChain 语音音频集成指南:面向多媒体开发者
引言
语音音频能力(ASR/TTS)是构建智能助手、播客应用、视频字幕等多媒体应用的关键。本文将详细介绍主流语音服务的接入方式和费用信息。
一、主流语音服务对比
| 服务商 | 功能 | 免费额度 | 是否需要 API Key | 官方地址 |
|---|---|---|---|---|
| AssemblyAI | ASR(语音转文字) | 免费试用额度 | 是 | https://assemblyai.com |
| Whisper(OpenAI) | ASR | API 按用量付费 | 是(API)/否(本地) | https://openai.com |
| Whisper(本地) | ASR | 完全免费 | 否 | https://github.com/openai/whisper |
| ElevenLabs | TTS(文字转语音) | 免费层(每月 10K 字符) | 是 | https://elevenlabs.io |
| Google TTS(gTTS) | TTS | 完全免费 | 否 | https://gtts.readthedocs.io |
| 微软 Azure 语音 | ASR + TTS | 免费层(每月 5 小时) | 是 | https://azure.microsoft.com |
| 百度语音 | ASR + TTS | 免费额度 | 是 | https://ai.baidu.com |
| 讯飞语音 | ASR + TTS | 免费额度 | 是 | https://www.xfyun.cn |
二、语音转文字(ASR)
2.1 AssemblyAI
费用说明:按分钟计费,新用户有免费试用额度
获取 API Key:
- 访问 https://assemblyai.com 注册
- 登录后在 Dashboard 获取 API Key
配置环境变量:
setx ASSEMBLYAI_API_KEY "xxxxxxxxxxxxxxxxxxxxxxxx"
代码示例:
python
import os
from langchain_community.document_loaders import AssemblyAIAudioLoader
loader = AssemblyAIAudioLoader(
file_path="podcast.mp3",
api_key=os.environ.get("ASSEMBLYAI_API_KEY")
)
documents = loader.load()
print(f"转录文字:{documents[0].page_content[:500]}...")
2.2 Whisper(本地部署,免费)
特点:完全免费,本地运行,支持多种语言
安装:
pip install openai-whisper ffmpeg-python
代码示例:
python
import whisper
# 加载模型(tiny/base/small/medium/large,越小越快)
model = whisper.load_model("base")
# 转录音频
result = model.transcribe("audio.mp3", language="zh")
print(f"转录结果:{result['text'][:500]}...")
# 与 LangChain 结合
from langchain_core.documents import Document
from langchain_text_splitters import RecursiveCharacterTextSplitter
doc = Document(page_content=result["text"])
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents([doc])
print(f"分割为 {len(chunks)} 个片段")
2.3 使用 LangChain 的 Whisper 加载器
python
from langchain_community.document_loaders.generic import GenericLoader
from langchain_community.document_loaders.parsers import OpenAIWhisperParser
import os
# 通过 OpenAI API 使用 Whisper(需要付费 API Key)
os.environ["OPENAI_API_KEY"] = "sk-..."
loader = GenericLoader.from_filesystem(
"./audio_files",
glob="*.mp3",
parser=OpenAIWhisperParser()
)
documents = loader.load()
for doc in documents:
print(f"文件:{doc.metadata.get('source', 'unknown')}")
print(f"内容:{doc.page_content[:300]}...\n")
三、文字转语音(TTS)
3.1 ElevenLabs(高质量语音合成)
费用说明:免费层每月 10,000 字符,超出按用量计费
获取 API Key:
- 访问 https://elevenlabs.io 注册
- Profile → API Keys 获取 key
配置环境变量:
setx ELEVEN_API_KEY "sk_xxxxxxxxxxxxxxxxxxxxxxxx"
代码示例:
python
import os
import requests
# 使用 requests 直接调用
api_key = os.environ.get("ELEVEN_API_KEY")
voice_id = "Rachel" # 可以在控制台选择不同声音
response = requests.post(
f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}",
headers={"xi-api-key": api_key},
json={
"text": "Hello, welcome to the AI voice assistant demo.",
"model_id": "eleven_monolingual_v1",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.5
}
}
)
# 保存音频
with open("output.mp3", "wb") as f:
f.write(response.content)
print("音频已保存到 output.mp3")
3.2 Google TTS(完全免费)
特点:完全免费,支持多语言,音质一般
安装:
pip install gtts playsound
代码示例:
python
from gtts import gTTS
# 中文语音
tts = gTTS("你好,这是一个语音合成的示例。", lang="zh")
tts.save("chinese_demo.mp3")
# 英文语音
tts_en = gTTS("Hello, this is a text-to-speech demo.", lang="en")
tts_en.save("english_demo.mp3")
print("音频文件已生成")
3.3 与 LangChain Agent 结合
python
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from gtts import gTTS
import os
@tool
def text_to_speech(text: str, filename: str = "output.mp3") -> str:
"""将文本转换为语音文件"""
tts = gTTS(text, lang="zh")
tts.save(filename)
return f"语音已保存到 {filename}"
# 创建智能体
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b"
)
# 直接使用工具
response = llm.invoke("请生成一段欢迎词")
audio_file = text_to_speech.invoke({"text": response.content, "filename": "welcome.mp3"})
print(audio_file)
四、实战:语音助手完整流程
python
import os
import whisper
from gtts import gTTS
from langchain_openai import ChatOpenAI
class VoiceAssistant:
def __init__(self):
# 初始化 Whisper ASR(本地,免费)
self.asr_model = whisper.load_model("base")
# 初始化大模型(本地 Ollama,免费)
self.llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b"
)
def listen(self, audio_file: str) -> str:
"""语音转文字"""
result = self.asr_model.transcribe(audio_file, language="zh")
return result["text"]
def think(self, user_input: str) -> str:
"""大模型处理"""
response = self.llm.invoke(user_input)
return response.content
def speak(self, text: str, output_file: str = "response.mp3") -> str:
"""文字转语音(免费 gTTS)"""
tts = gTTS(text, lang="zh")
tts.save(output_file)
return output_file
def run(self, audio_file: str) -> str:
"""完整流程"""
# 1. 识别用户语音
user_text = self.listen(audio_file)
print(f"用户说:{user_text}")
# 2. 大模型处理
ai_response = self.think(user_text)
print(f"AI回答:{ai_response}")
# 3. 生成语音回复
audio_path = self.speak(ai_response)
print(f"语音回复:{audio_path}")
return ai_response
# 使用示例
if __name__ == "__main__":
assistant = VoiceAssistant()
assistant.run("user_input.mp3")
五、快速选择指南
| 场景 | 推荐方案 | 是否免费 | 质量 |
|---|---|---|---|
| 本地开发测试 | Whisper(本地)+ gTTS | 免费 | 一般 |
| 高精度 ASR | AssemblyAI | 有免费额度 | 高 |
| 高质量 TTS | ElevenLabs | 有免费额度 | 高 |
| 中文场景 | 百度/讯飞语音 | 有免费额度 | 中 |
| 企业级应用 | Azure 语音服务 | 有免费层 | 高 |
六、常见问题
Q: 本地 Whisper 速度慢怎么办?
A: 可以使用更小的模型(tiny/base),或者使用 GPU 加速。
Q: gTTS 的语音太机械?
A: 可以考虑付费服务如 ElevenLabs,音质更自然。
Q: 如何处理长音频文件?
A: 建议将音频分段处理,每段 30 秒到 1 分钟效果最佳。
LangChain 的语音音频集成让多媒体开发变得简单:
- 免费方案:Whisper(本地)+ gTTS 完全免费
- 高质量服务:AssemblyAI 和 ElevenLabs 提供专业级服务
- 统一接口:LangChain 提供标准的文档加载方式
- 完整链路:从语音识别到 AI 处理再到语音合成
推荐入门路径:先用免费的 Whisper + gTTS 开发,根据需求再考虑付费服务升级。