clawhub install voice-chat-skill📖 About This Skill
name: voice-chat description: "语音对话集成技能,支持双向语音交流。使用TTS和STT实现完整的语音对话功能。" homepage: https://docs.openclaw.ai metadata: { "openclaw": { "emoji": "🎤", "requires": { "bins": ["python"] } } }
语音对话技能
实现完整的双向语音对话功能,支持语音输入和语音输出。
功能特性
✅ 已实现功能
1. 文本转语音(TTS) - 使用OpenClaw内置tts工具 - 支持中英文混合 - 实时音频生成2. 语音转文本(STT) - 使用Python speech_recognition库 - 支持麦克风输入 - 多引擎支持(Google、Whisper等)
3. 对话管理 - 自动语音检测 - 对话上下文保持 - 中断处理
🔧 技术架构
语音输入 → STT转换 → 文本处理 → AI响应 → TTS转换 → 语音输出
安装要求
必需组件
1. Python 3.8+ 2. speech_recognition库 3. pyaudio库(Windows需要额外安装)可选组件
1. Whisper - 更准确的本地STT 2. ElevenLabs API - 高质量TTS 3. OpenAI API - 云端STT快速开始
1. 安装依赖
# 安装Python库
pip install SpeechRecognition pyaudioWindows pyaudio安装(如果失败)
pip install pipwin
pipwin install pyaudio
2. 基础语音对话脚本
# voice_chat.py
import speech_recognition as sr
import subprocess
import tempfile
import osclass 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}")
故障排除
常见问题
1. 麦克风无法识别 - 检查麦克风权限 - 尝试指定麦克风设备索引2. pyaudio安装失败
- Windows: 使用pipwin install pyaudio
- macOS: brew install portaudio
3. 语音识别准确率低 - 调整环境噪音 - 使用更准确的模型(Whisper large) - 添加语音训练
性能优化
1. 缓存模型:预加载Whisper模型 2. 流式处理:实时语音处理 3. 降噪处理:改善语音质量安全注意事项
1. API密钥保护:不要硬编码API密钥 2. 隐私保护:语音数据本地处理 3. 权限管理:麦克风访问权限控制
扩展功能
计划中的功能
1. 多语言支持:自动检测语言 2. 语音命令:特定语音指令识别 3. 情绪识别:从语音中识别情绪 4. 实时翻译:跨语言语音对话*技能版本: 1.0.0* *最后更新: 2026-02-28*
📋 Tips & Best Practices
1. 麦克风无法识别 - 检查麦克风权限 - 尝试指定麦克风设备索引
2. pyaudio安装失败
- Windows: 使用pipwin install pyaudio
- macOS: brew install portaudio
3. 语音识别准确率低 - 调整环境噪音 - 使用更准确的模型(Whisper large) - 添加语音训练