很多朋友装完龙虾后,觉得不能语音交流,总归是差点儿意思,小孩子用起来也不够方便。今天教大家如何不花钱,让你的龙虾愿意听你说话,还能开口说话。
如何让龙虾听懂语音
方案:
你对着手机说话->OpenClaw下载音频,使用本地ASR模型转录->发给模型文字,后面的流程照旧。
OpenClaw原生支持很多种方案,比如sherpa-onnx-offline,whisper等。据我实测,区别不大,树莓派上可能安装sherpa-onnx更适合。本文以whisper为例,虽然OpenClaw会检测whisper命令并做一些便捷处理,但是自己写脚本的话更灵活。
macOS用户
macOS上我们用优化的mlx-whisper。把下面这几段命令,一一复制到终端里面执行即可。
brew install ffmpeg
# 从镜像下载模型
export HF_ENDPOINT="https://hf-mirror.com"
# 建立工程目录
mkdir -p ~/.openclaw/my-scripts/asr
cd ~/.openclaw/my-scripts/asr
python3 -m venv .venv
source .venv/bin/activate
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
pip install mlx-whisper
# 方便OpenClaw调用的脚本
cat > mlx-whisper-transcribe.sh <<EOF
#!/usr/bin/env bash
SCRIPT_DIR=\$(cd \`dirname \$0\`;pwd)
source \${SCRIPT_DIR}/.venv/bin/activate
python3 -c "
import mlx_whisper, sys
result = mlx_whisper.transcribe(
sys.argv[1],
language='zh',
path_or_hf_repo='mlx-community/whisper-base-mlx'
)
print(result['text'])
" "\$1" 2>/dev/null
EOF
# 准备一个音频文件,触发一次模型下载
bash mlx-whisper-transcribe.sh path_to_your.mp3
# OpenClaw的配置
openclaw config set tools.media.audio '{
"enabled": true,
"scope": { "default": "allow" },
"models": [{
"type": "cli",
"command": "bash",
"args": [
"${HOME}/.openclaw/my-scripts/mlx-whisper-transcribe.sh",
"{{MediaPath}}"
]
}]
}'
Windows
先装python和pipx,把它们加到PATH变量中。然后执行以下命令
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
[Environment]::SetEnvironmentVariable("HF_ENDPOINT", "https://hf-mirror.com", "User")
winget install Gyan.FFmpeg
pip install faster-whisper
# 准备一个音频文件,触发一次模型下载
whisper your_path.mp3 --model base --language zh
# OpenClaw配置,注意改成自己的目录
openclaw config set tools.media.audio '
{
"enabled": true,
"scope": {
"default": "allow"
},
"models": [
{
"type": "cli",
"command": "python",
"args": [
"C:\\Users\\换成自己的路径\\.openclaw\\my-scripts\\whisper-transcribe.py",
"{{MediaPath}}"
]
}
]
}
'
在 C:\Users\换成自己的路径\.openclaw\my-scripts\ 新建 whisper-transcribe.py,将以下内容一行不差全部复制进去,然后重启OpenClaw测试即可。
# -*- coding: utf-8 -*-
import sys
import io
import codecs
from faster_whisper import WhisperModel
# 强制使用UTF-8编码输出
if sys.platform == "win32":
# Windows控制台编码设置
import ctypes
ctypes.windll.kernel32.SetConsoleOutputCP(65001)
# 确保stdout使用UTF-8编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
model = WhisperModel("base", device="cpu", compute_type="int8")
segments, info = model.transcribe(sys.argv[1], language="zh")
# 输出结果
for segment in segments:
print(segment.text)
重启一下龙虾,你就能在飞书(或者其它Channel)直接给它发语音了,而且它能看懂,但是此时它还不能开口说话。
如何让龙虾开口说话
方案:
SKILL来规训龙虾,在飞书场景回复用户语音的时候,使用特殊的脚本,EdgeTTS先合成,再ffmpeg转码,最后发送到飞书服务器。
开口说话确实复杂一点,不同的 Channel 方法都不一样。要完美都要花一点功夫。而且话说在前面,这种方法后面肯定会被官方(大概率是OpenClaw来做,因为OpenClaw做这个工作量比较低)以更优雅的方式替代掉,我们现在可能只是纯折腾,尝尝鲜。
选 EdgeTTS,是因为它免费,支持很多音色,其中就有小帅和小美,作为日常使用已经足够了。
虽然 OpenClaw 内置支持 EdgeTTS,但是以飞书为例,如果仅仅是按照官网执行/tts on的话,Agent返回的语音实际上是听不了的:
除此之外,我还希望每个龙虾员工,使用不同的音色。
最终我希望实现的效果:
如果你还没有多个Agent和飞书机器人,可以先参考这个文章,为每个Agent配置不同的飞书账户(不是必须,如果你没有音色区分agent的需求可以跳过):
安装edge-tts
macOS、Windows用户操作相同
pip install edge-tts
为每个飞书账户添加一个voice字段:
编辑openclaw.json。具体有哪些声音可以看上面下载的这两个文件夹的SKILL.md.
"channels": {
"feishu": {
"enabled": true,
.......省略........
"voice": "zh-CN-XiaoxiaoNeural", //默认
"streaming": "true",
"accounts": {
"wangerchui": {
"botName": "贴身秘书王二锤",
"voice": "zh-CN-XiaoxiaoNeural" //专属
},
然后与你的Agent对话,让它们学习新安装的send-voice-to-feishu技能。
技巧
- 如果你配置的声音(channels.feishu.accounts.*.voice),和agent实际使用的语音不符,你可以告诉agent在用这个技能的时候别传voice参数。
- 你可以告诉Agent换音色
有什么不懂的可以进群(新群没什么人,但有一只小蜜蜂勤劳地回答你的问题):
广告部分:
同时自己写的 macOS 软件 MagicToy 1.3.0 马上发布了,如果你不习惯macOS上没有右键新建文件,没有方便的剪切板管理软件,没有置顶窗口的,想自动切换输入法的,都可以试一试,如果帮到你了,可以支持一下作者,感谢,叩首!
下面这个菜单是能改名的:
App Store 商店链接: