skill_id: voice-chat-bridge version: 1.1.0 author: laoxu description: 雙向語音對話系統 - 語音識別轉文字 + Edge TTS語音合成 + Cloudflare Tunnel公網訪問 categories: [voice, speech, communication] requires: [ffmpeg] optional: [cloudflared, ngrok]
讓你的 OpenClaw 助手具備完整的雙向語音對話能力。
ffmpeg - 音訊格式轉換
bash
brew install ffmpeg
Python 依賴
bash
pip3 install edge-tts
發現更多技能外掛,請訪問7w4.net。
方案A:本地模式(最簡單) - 無需額外工具,直接在本機播放語音
方案B:公網訪問
- Cloudflare Tunnel(推薦,免費穩定)
bash
brew install cloudflared
- Ngrok(臨時使用,隨機域名)
bash
brew install ngrok
- LocalTunnel(npm安裝)
bash
npm install -g localtunnel
方案C:Web介面模式
- 僅需要瀏覽器訪問 http://localhost:8765
hear - 本地識別,無需聯網
bash
curl -LO https://github.com/sveinbjornt/hear/releases/download/0.7/hear-0.7.zip
unzip hear-0.7.zip && cp hear-0.7/hear ~/.local/bin/| 方案 | 需要域名 | 公網訪問 | 適用場景 |
|---|---|---|---|
| 本地模式 | ❌ 不需要 | ❌ 僅本機 | 個人使用,電腦上直接聽 |
| Web介面 | ❌ 不需要 | ❌ 區域網 | 同一WiFi下多裝置訪問 |
| Ngrok | ❌ 不需要 | ✅ 臨時域名 | 快速測試,分享給朋友 |
| Cloudflare | ✅ 需要自有域名 | ✅ 永久 | 長期使用,生產環境 |
| LocalTunnel | ❌ 不需要 | ✅ 臨時域名 | 免費替代Ngrok |
適合:只想在電腦上聽語音回覆
# 1. 初始化
bash skills/voice-chat-bridge/scripts/init.sh
# 2. 配置為本地模式
cat > ~/.openclaw/workspace/voice_config.json << 'EOF'
{
"mode": "local",
"tts_engine": "edge-tts",
"voice": "zh-CN-XiaoxiaoNeural",
"auto_play": true
}
EOF
# 3. 生成語音並自動播放
python3 skills/voice-chat-bridge/scripts/generate_voice.py "你好,這是本地模式測試"
AGENTS.md 配置:
## Voice Chat Bridge (本地模式)
當用戶傳送語音訊息時:
1. 使用 `transcribe.py` 轉文字
2. 生成回覆後,使用 `generate_voice.py` 生成語音
3. **自動播放**: 呼叫 `afplay` (macOS) 或 `mpg123` (Linux) 播放語音
4. 回覆文字內容: "[已播放語音] 回覆內容..."
適合:同一WiFi下手機/平板也能訪問
# 1. 配置為Web模式
cat > ~/.openclaw/workspace/voice_config.json << 'EOF'
{
"mode": "web",
"local_port": 8765,
"tts_engine": "edge-tts",
"voice": "zh-CN-XiaoxiaoNeural"
}
EOF
# 2. 啟動Web伺服器
python3 skills/voice-chat-bridge/scripts/voice_server.py --web
# 3. 瀏覽器訪問 http://localhost:8765
內建Web介面包含: - 語音播放器 - 歷史記錄 - 二維碼(方便手機掃描訪問)
適合:臨時分享給朋友,或不想配置域名
# 1. 安裝Ngrok
brew install ngrok
# 2. 註冊獲取token(免費)
ngrok config add-authtoken YOUR_TOKEN
# 3. 啟動語音伺服器
python3 skills/voice-chat-bridge/scripts/voice_server.py
# 4. 在另一個終端啟動Ngrok
ngrok http 8765
# 5. 獲取臨時域名(如 https://abc123.ngrok.io)
# 6. 更新配置
cat > ~/.openclaw/workspace/voice_config.json << 'EOF'
{
"mode": "ngrok",
"domain": "https://abc123.ngrok.io",
"local_port": 8765
}
EOF
適合:有域名,長期穩定使用
# 參考原教程...
# 使用Discord的tts引數
await channel.send("回覆內容", tts=True) # 使用Discord內建TTS
# 或傳送語音檔案
await channel.send(file=discord.File("voice.mp3"))
# 使用Slack的音訊附件
client.chat_postMessage(
channel="#general",
text="回覆內容",
attachments=[{
"audio_url": voice_url
}]
)
# 返回JSON
{
"text": "回覆內容",
"voice_url": "http://localhost:8765/voice.mp3",
"voice_base64": "..." # 可選
}
# 直接對話模式
python3 skills/voice-chat-bridge/scripts/chat.py
# > 你說: [語音輸入或文字]
# > AI回覆: [文字]
# > [自動播放語音]
適合:完整的本地化語音互動體驗
# 啟動完整對話迴圈
python3 skills/voice-chat-bridge/scripts/voice_chat_loop.py
完整流程:
按住 Ctrl+T
↓
🎤 開始錄音(聽到提示音)
↓
說話...
↓
鬆開按鍵
↓
✅ 錄音結束 → 自動轉文字
↓
🤖 AI處理(寫入.voice_trigger檔案)
↓
💬 生成回覆文字
↓
🔊 生成語音回覆
↓
🔈 自動播放語音
↓
返回等待下一段錄音
特點: - 完全本地化,無需網路(除語音合成外) - 完整的閉環:說 → 識別 → 思考 → 回覆 → 聽 - 支援連續對話
適合:只想快速語音輸入,不依賴完整對話迴圈
# 啟動快捷鍵監聽(後臺執行)
python3 skills/voice-chat-bridge/scripts/hotkey_recorder.py
# 然後任何時候:
# 1. 按住 Ctrl+T(可配置)
# 2. 說話
# 3. 鬆開按鍵
# 4. 自動轉文字並複製到剪貼簿/傳送給AI
快捷鍵配置(編輯 voice_config.json):
{
"hotkey": {
"enabled": true,
"combination": ["ctrl", "t"],
"on_release": "transcribe_and_send",
"beep_on_start": true,
"beep_on_end": true
}
}
工作流程:
按住 Ctrl+T
↓
🎤 開始錄音(聽到提示音)
↓
說話...
↓
鬆開按鍵
↓
✅ 錄音結束 → 自動轉文字
↓
📋 複製到剪貼簿 或 直接發給AI
bash skills/voice-chat-bridge/scripts/init.sh
這會建立:
- voice_output/ - 語音檔案輸出目錄
- voice_config.json - 配置檔案
編輯 voice_config.json:
{
"domain": "https://your-domain.com",
"local_port": 8765,
"voice": "zh-CN-XiaoxiaoNeural"
}
# 啟動語音伺服器
python3 skills/voice-chat-bridge/scripts/voice_server.py
# 在另一個終端啟動 Cloudflare Tunnel
cloudflared tunnel --config ~/.cloudflared/config.yml run
在 AGENTS.md 中新增:
## Voice Chat Bridge
當用戶傳送語音訊息時:
1. 使用 `skills/voice-chat-bridge/scripts/transcribe.py` 轉文字
2. 理解內容並生成回覆
3. 使用 `skills/voice-chat-bridge/scripts/generate_voice.py` 生成語音
4. 回覆文字內容 + 語音連結
### 情緒狀態更新(每次語音互動)
- connection: +0.2(語音交流增強連線感)
- 記錄語音互動頻率到 habits.json
python3 skills/voice-chat-bridge/scripts/transcribe.py /path/to/audio.ogg
python3 skills/voice-chat-bridge/scripts/generate_voice.py "要合成的文字內容"
# 輸出: https://your-domain.com/abc123.mp3
# 虛擬碼示例
if user_message.is_voice:
# 1. 轉寫
text = transcribe(user_message.audio_path)
# 2. 理解並回復
reply = generate_reply(text)
# 3. 生成語音
voice_url = generate_voice(reply)
# 4. 傳送回覆
send_message(f"{reply}\n\n🎙️ {voice_url}")
skills/voice-chat-bridge/
├── SKILL.md # 本檔案
├── scripts/
│ ├── init.sh # 初始化指令碼
│ ├── transcribe.py # 語音轉文字
│ ├── generate_voice.py # 文字轉語音
│ └── voice_server.py # HTTP伺服器
└── templates/
└── config.json # 配置模板
本 Skill 預設使用 Edge TTS,支援 100+ 種語言和方言:
| 語音ID | 描述 |
|---|---|
| zh-CN-XiaoxiaoNeural | 曉曉 - 自然女聲(中國大陸推薦) |
| zh-CN-YunxiNeural | 雲希 - 自然男聲(中國大陸) |
| zh-TW-HsiaoChenNeural | 曉臻 - 臺灣女聲 |
| zh-HK-HiuMaanNeural | 曉曼 - 香港粵語女聲 |
| 語音ID | 描述 |
|---|---|
| en-US-AriaNeural | Aria - 美式英語女聲 |
| en-US-GuyNeural | Guy - 美式英語男聲 |
| en-GB-SoniaNeural | Sonia - 英式英語女聲 |
| en-AU-NatashaNeural | Natasha - 澳洲英語女聲 |
| 語音ID | 描述 |
|---|---|
| ja-JP-NanamiNeural | 七海 - 日語女聲 |
| ja-JP-KeitaNeural | 圭太 - 日語男聲 |
| 語音ID | 描述 |
|---|---|
| ko-KR-SunHiNeural | 선희 - 韓語女聲 |
| ko-KR-InJoonNeural | 인준 - 韓語男聲 |
| 語音ID | 描述 |
|---|---|
| fr-FR-DeniseNeural | Denise - 法語女聲 |
| de-DE-KatjaNeural | Katja - 德語女聲 |
| es-ES-ElviraNeural | Elvira - 西班牙語女聲 |
| ru-RU-SvetlanaNeural | Svetlana - 俄語女聲 |
| ar-SA-ZariyahNeural | Zariyah - 阿拉伯語女聲 |
| hi-IN-SwaraNeural | Swara - 印地語女聲 |
完整列表: 執行 edge-tts --list-voices
編輯 voice_config.json:
{
"domain": "https://your-domain.com",
"local_port": 8765,
"voice": "en-US-AriaNeural", // 改成你想要的語音
"language": "en-US" // 用於語音識別
}
結合 inner-life skill,根據使用者語言自動切換:
# 在 AGENTS.md 中新增
if user_message.language == "zh":
voice_config["voice"] = "zh-CN-XiaoxiaoNeural"
elif user_message.language == "en":
voice_config["voice"] = "en-US-AriaNeural"
elif user_message.language == "ja":
voice_config["voice"] = "ja-JP-NanamiNeural"
如果 Edge TTS 在某些地區訪問受限,支援以下備選:
# 修改 scripts/generate_voice.py 中的 TTS_ENGINE
TTS_ENGINE = "say"
say -v "Ting-Ting" "你好" # 中文
say -v "Samantha" "Hello" # 英文
修改 voice_config.json 中的 voice 欄位:
在 generate_voice.py 中修改:
# 預設 16kHz,可提高至 24kHz
"-ar", "16000" # → "-ar", "24000"
問題: 轉寫失敗,提示 "No speech detected" - 解決: 音訊檔案太短(< 1秒)或格式不支援,嘗試轉換格式
問題: Cloudflare Tunnel 連線失敗
- 解決: 檢查 ~/.cloudflared/config.yml 配置,確保域名和埠正確
問題: Edge TTS 生成語音失敗 - 解決: 檢查網路連線,Edge TTS 需要訪問微軟伺服器
結合 inner-life-core skill,根據情緒狀態調整語音風格:
if inner_state.confidence > 0.8:
voice_style = "cheerful"
elif inner_state.connection < 0.3:
voice_style = "gentle"
自動將每日日記轉為語音:
python3 skills/voice-chat-bridge/scripts/diary_to_voice.py
MIT - 隨便用,歡迎改進!
這個 Skill 功能豐富,支援語音對話、本地播放和公網分享,文件寫得非常詳細。但實際程式碼質量一般,有些文件提到的功能缺少對應的指令碼檔案,安裝配置稍顯複雜,對新手不太友好。如果是技術使用者可以考慮,普通使用者建議等待更穩定的版本。