语音对话技能
实现完整的双向语音对话功能,支持语音输入和语音输出。
功能特性
✅ 已实现功能
-
文本转语音(TTS)
- 使用OpenClaw内置tts工具
- 支持中英文混合
- 实时音频生成
-
语音转文本(STT)
- 使用Python speech_recognition库
- 支持麦克风输入
- 多引擎支持(Google、Whisper等)
-
对话管理
- 自动语音检测
- 对话上下文保持
- 中断处理
🔧 技术架构
语音输入 → STT转换 → 文本处理 → AI响应 → TTS转换 → 语音输出
安装要求
必需组件
- Python 3.8+
- speech_recognition库
- pyaudio库(Windows需要额外安装)
可选组件
- Whisper - 更准确的本地STT
- ElevenLabs API - 高质量TTS
- OpenAI API - 云端STT
快速开始
1. 安装依赖
# 安装Python库
pip install SpeechRecognition pyaudio
# Windows pyaudio安装(如果失败)
pip install pipwin
pipwin install pyaudio
2. 基础语音对话脚本
# voice_chat.py
import speech_recognition as sr
import subprocess
import tempfile
import os
class VoiceChat:
def __init__(self):
self.recognizer = sr.Recognizer()
self.microphone = sr.Microphone()
def listen(self):
"""监听语音输入并转换为文本"""
with self.microphone as source:
print("🎤 请说话...")
audio = self.recognizer.listen(source)
try:
text = self.recognizer.recognize_google(audio, language='zh-CN')
print(f"📝 识别结果: {text}")
return text
except sr.UnknownValueError:
return "无法识别语音"
except sr.RequestError:
return "语音识别服务不可用"
def speak(self, text):
"""使用OpenClaw TTS朗读文本"""
# 调用OpenClaw tts工具
print(f"🗣️ 正在朗读: {text}")
# 这里可以集成OpenClaw tts工具
def conversation_loop(self):
"""对话循环"""
print("🎧 语音对话已启动,按Ctrl+C退出")
while True:
# 监听语音
user_input = self.listen()
if user_input and "退出" not in user_input:
# 生成响应(这里可以集成AI模型)
response = f"我听到你说: {user_input}"
# 语音输出
self.speak(response)
if __name__ == "__main__":
chat = VoiceChat()
chat.conversation_loop()
3. 集成OpenClaw TTS
def openclaw_tts(text, output_file="output.mp3"):
"""调用OpenClaw TTS工具"""
import subprocess
import json
# 创建临时文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
tts_request = {
"text": text,
"channel": "webchat"
}
json.dump(tts_request, f)
request_file = f.name
try:
# 调用tts工具(需要OpenClaw环境)
result = subprocess.run([
"node", "path/to/openclaw/tts-tool.js",
"--input", request_file,
"--output", output_file
], capture_output=True, text=True)
if result.returncode == 0:
print(f"✅ 语音文件已生成: {output_file}")
# 播放音频
subprocess.run(["start", output_file], shell=True)
else:
print(f"❌ TTS失败: {result.stderr}")
finally:
os.unlink(request_file)
高级配置
使用Whisper进行本地STT
def whisper_stt(audio_file):
"""使用Whisper进行语音识别"""
import whisper
model = whisper.load_model("base")
result = model.transcribe(audio_file, language="zh")
return result["text"]
使用ElevenLabs高质量TTS
def elevenlabs_tts(text, voice_id="21m00Tcm4TlvDq8ikWAM", api_key=None):
"""使用ElevenLabs TTS"""
import requests
url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
headers = {
"xi-api-key": api_key or os.environ.get("ELEVENLABS_API_KEY"),
"Content-Type": "application/json"
}
data = {
"text": text,
"model_id": "eleven_multilingual_v2",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.5
}
}
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
with open("output.mp3", "wb") as f:
f.write(response.content)
return "output.mp3"
else:
raise Exception(f"ElevenLabs TTS失败: {response.text}")
故障排除
常见问题
-
麦克风无法识别
- 检查麦克风权限
- 尝试指定麦克风设备索引
-
pyaudio安装失败
- Windows: 使用
pipwin install pyaudio - macOS:
brew install portaudio
- Windows: 使用
-
语音识别准确率低
- 调整环境噪音
- 使用更准确的模型(Whisper large)
- 添加语音训练
性能优化
- 缓存模型:预加载Whisper模型
- 流式处理:实时语音处理
- 降噪处理:改善语音质量
安全注意事项
- API密钥保护:不要硬编码API密钥
- 隐私保护:语音数据本地处理
- 权限管理:麦克风访问权限控制
扩展功能
计划中的功能
- 多语言支持:自动检测语言
- 语音命令:特定语音指令识别
- 情绪识别:从语音中识别情绪
- 实时翻译:跨语言语音对话
技能版本: 1.0.0 最后更新: 2026-02-28