Install
npx skillscat add fangbb-coder/voice-bridge-light Install via the SkillsCat registry.
SKILL.md
Voice Bridge
离线语音助手引擎,使用 Whisper + Piper,模型总大小约 160MB。
特性
- 🎤 语音识别 (ASR) - Whisper base (74MB),支持多语言,自动繁体转简体
- 🔊 语音合成 (TTS) - Piper Neural TTS (25-60MB),自然流畅
- 🤖 语音助手 - 支持唤醒词、命令处理
- 💬 多平台支持 - Telegram、企业微信、钉钉、飞书、WhatsApp、QQ
- 🚀 轻量级 - 总模型大小约 160MB,适合边缘设备
- ⚡ 自动处理 - 后台持续运行,自动接收和回复消息
- 🔧 systemd 服务 - 支持开机自启和自动重启
- 🔄 兼容接口 - 提供 Edge TTS 兼容脚本,便于迁移
使用方法
💡 OpenClaw 集成建议
推荐:纯函数调用(性能更好、更简单)
from core import text_to_speech, speech_to_text, process_text result = text_to_speech("你好")备选:HTTP API(仅当 OpenClaw 无法直接调用 Python 函数时使用)
方式 1:纯函数调用(⭐ 推荐,无 HTTP 服务)
from core import stt, tts, process_voice, process_text
# 语音识别
text = stt("audio.wav", language="zh")
print(text) # "你好"
# 语音合成
audio_file = tts("你好,我是语音助手", voice="zh_CN")
print(audio_file) # "temp/xxx.wav"
# 处理语音消息(识别 + 回复)
result = process_voice("audio.wav")
print(result["recognized_text"]) # 识别的文本
print(result["reply_text"]) # 回复文本
print(result["reply_voice"]) # 回复语音文件
# 处理文本消息
result = process_text("你好")
print(result["reply_text"]) # 回复文本
print(result["reply_voice"]) # 回复语音文件方式 2:HTTP API 服务(备选,供无法直接调用 Python 函数的场景)
启动 Flask HTTP 服务:
# 默认端口 18790
python api_server.py
# 自定义端口
python api_server.py --port 8080API 端点:
| 端点 | 方法 | 功能 | 参数 |
|---|---|---|---|
/health |
GET | 健康检查 | - |
/tts |
POST | 文本转语音 | {"text": "你好", "voice": "zh_CN"} |
/tts/file |
POST | TTS 返回音频文件 | text=你好&voice=zh_CN |
/stt |
POST | 语音转文本 | audio=file&language=zh |
/process/text |
POST | 处理文本消息 | {"text": "你好", "reply_with_voice": true} |
/process/voice |
POST | 处理语音消息 | audio=file&language=zh |
OpenClaw HTTP 配置示例(仅当无法使用纯函数调用时):
{
"qqbot": {
"stt": {
"enabled": true,
"provider": "local-whisper",
"baseUrl": "http://127.0.0.1:18790"
},
"tts": {
"enabled": true,
"provider": "local-piper",
"baseUrl": "http://127.0.0.1:18790"
}
}
}注意:如果 OpenClaw 支持直接调用 Python 函数,建议优先使用方式 1(纯函数调用),避免 HTTP 服务的网络开销和进程管理复杂度。
方式 3:启动适配器管理器(自动处理多平台消息)
# 启动所有适配器(后台持续运行)
python start_adapters.py
# 或使用适配器管理器 API
python -c "from adapters.manager import start_adapters; start_adapters()"适配器管理器功能:
- 自动轮询所有启用的平台(Telegram/QQ/企业微信/钉钉/飞书/WhatsApp)
- 收到语音消息:自动下载 → 语音识别 → 生成回复 → 语音合成 → 发送回复
- 收到文本消息:生成回复 → 语音合成(可选)→ 发送回复
- 后台持续运行,无需人工干预
配置
编辑 config.yaml:
# 基础配置
language: zh
voice: female
wake_word: "hey claw"
auto_voice_reply: true
# 模型配置
whisper_model_size: base # tiny/base/small
piper_language: zh_CN # zh_CN/en_US/en_US_low
# 回复配置
reply:
# 语音消息的回复模式
# - auto: 自动(语音消息用语音回复,文本消息用文本回复)- 默认
# - text_only: 仅文本回复
# - voice_only: 仅语音回复
# - text_and_voice: 文本+语音回复
voice_reply_mode: "auto"
# 文本消息的回复模式
# - text_only: 仅文本回复 - 默认
# - voice_only: 仅语音回复
# - text_and_voice: 文本+语音回复
text_reply_mode: "text_only"
# 语音消息回复时是否包含识别文本
include_recognized_text: true
# 适配器配置(启用需要的平台)
adapters:
telegram:
enabled: true
token: "YOUR_BOT_TOKEN"
poll_interval: 5 # 轮询间隔(秒)
qq:
enabled: true
token: "YOUR_BOT_TOKEN"
app_id: "YOUR_APP_ID"
wecom:
enabled: false
corp_id: "YOUR_CORP_ID"
corp_secret: "YOUR_CORP_SECRET"
agent_id: "YOUR_AGENT_ID"
dingtalk:
enabled: false
app_key: "YOUR_APP_KEY"
app_secret: "YOUR_APP_SECRET"
feishu:
enabled: false
app_id: "YOUR_APP_ID"
app_secret: "YOUR_APP_SECRET"
whatsapp:
enabled: false
phone_number_id: "YOUR_PHONE_NUMBER_ID"
access_token: "YOUR_ACCESS_TOKEN"模型下载
# 下载全部模型(约 160MB)
python scripts/download_models.py all
# 仅下载 Whisper ASR(74MB)
python scripts/download_models.py whisper
# 仅下载中文 TTS(60MB)
python scripts/download_models.py piper_zh
# 仅下载英文 TTS(25MB)
python scripts/download_models.py piper_en支持的语言
Whisper ASR
- 中文 (zh) - 支持自动繁体转简体
- 英文 (en)
- 日语 (ja)
- 韩语 (ko)
- 更多...
Piper TTS
- 中文女声 (zh_CN) - 60MB
- 英文女声 (en_US) - 60MB
- 英文轻量版 (en_US_low) - 25MB
命令
你好/hello- 打招呼时间/time- 查询当前时间日期/date- 查询今天日期帮助/help- 显示帮助信息- 说唤醒词
hey claw- 唤醒助手
依赖
必需:
- openai-whisper
- piper-tts
- flask(HTTP API 服务)
- fastapi(可选,备用 HTTP 框架)
- uvicorn(可选)
- pydantic
- pyyaml
- pydub
- numpy
- soundfile
- requests
可选:
- opencc-python-reimplemented - 繁体转简体(中文识别更准确)
- torch - 加速 Whisper 推理
systemd 服务部署
Linux 系统可配置为 systemd 服务,实现开机自启:
# 复制服务文件
sudo cp scripts/voice-bridge.service /etc/systemd/system/
# 编辑工作目录和用户名
sudo systemctl edit voice-bridge.service
# 修改 WorkingDirectory 和 User
# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable voice-bridge
sudo systemctl start voice-bridge
# 查看状态
sudo systemctl status voice-bridgeEdge TTS 兼容
如需兼容原有 Edge TTS 调用,使用提供的适配脚本:
# 原 edge-tts 调用方式
python scripts/edge_tts_speak.py "你好" -o output.wav -v xiaoxiao
# 实际调用 Voice Bridge Piper
# 支持语音映射:xiaoxiao → zh_CN, en → en_US部署测试
运行测试脚本验证安装:
python test_skill.py预期输出:8/8 测试通过
项目结构
voice-bridge/
├── core.py # 核心功能(纯函数,无 HTTP)
├── api_server.py # Flask HTTP API 服务
├── start_adapters.py # 启动适配器管理器
├── skill.yaml # ClawHub 配置
├── requirements.txt # 依赖
├── config.yaml # 配置文件
├── test_skill.py # 测试脚本
├── voice/
│ ├── asr_whisper.py # Whisper 语音识别(支持繁体转简体)
│ ├── tts_piper.py # Piper 语音合成
│ └── audio_utils.py # 音频处理
├── assistant/
│ └── voice_assistant.py # 语音助手逻辑
├── adapters/ # 多平台适配器
│ ├── manager.py # 适配器管理器
│ ├── base.py # 适配器基类
│ ├── telegram.py
│ ├── qq.py
│ ├── wecom.py
│ ├── dingtalk.py
│ ├── feishu.py
│ └── whatsapp.py
└── scripts/
├── download_models.py # 模型下载
├── voice-bridge.service # systemd 服务配置
└── edge_tts_speak.py # Edge TTS 兼容脚本适配器管理器架构
┌─────────────────────────────────────────────────────────┐
│ AdapterManager │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Telegram │ │ QQ │ │ WeCom │ │
│ │ Adapter │ │ Adapter │ │ Adapter │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ DingTalk │ │ Feishu │ │ WhatsApp │ │
│ │ Adapter │ │ Adapter │ │ Adapter │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ process_message │ │
│ │ (语音/文本处理) │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────┘许可证
MIT