moss-tts-family-chatbot — moss-tts-family-chat机器人
v1MOSI Studio 音频全套能力:语音转文字(ASR)、文字转语音(TTS)、 多说话人对话合成、声音克隆、飞书语音气泡。 两类触发场景: 1. 消息中包含 "[media attached:"、"audio/ogg"、"audio/opus" 或 路径 /home/OpenClaw/.OpenClaw/media/inbound/ 时——用户发来了语音, 必须立刻转写,禁止说"我没有语音识别能力"。 2. 用户主动要求:TTS、文字转语音、语音合成、生成语音、克隆声音、 声音克隆、多说话人、对话合成、语音气泡、发语音、转语音、 "text to speech"、"voice synthesis"、"生成 audio"、 "voice clone"、"multi-speaker"。 用户如果要求用语音回复,除非情况复杂需要说明,否则只需要回一条语音。
运行时依赖
安装命令
点击复制技能文档
MOSI Studio 音频全套 技能
文件路径铁律(禁止例外) 所有生成的音频文件必须保存到 ~/.OpenClaw/workspace/。 绝对不能用 /tmp/、/var/tmp/ 或相对路径。 OpenClaw 媒体策略会静默拦截 workspace 以外的文件——不报错,直接失败。 错误示例:ffmpeg -i x.wav /tmp/out.opus 正确示例:ffmpeg -i x.wav ~/.OpenClaw/workspace/out.opus
支持的能力:
功能 模型 脚本 文字转语音(TTS) moss-tts scripts/mosi_tts.sh / mosi_tts.py 指令式语音生成 moss-voice-生成器 scripts/mosi_voice_生成器.sh 语音转文字(ASR) — scripts/mosi_asr.sh 多说话人对话合成 moss-ttsd scripts/mosi_dia记录ue.sh 音效生成 moss-sound-effect scripts/mosi_sound_effect.sh 声音克隆 — scripts/mosi_voice.py 飞书语音气泡 — scripts/mosi_feishu_voice.sh
Base URL:https://studio.mosi.cn
环境准备 API Key
Key 通过 Kubernetes Secret 注入为 MOSI_TTS_API_KEY,对话中不得透露。
echo "key已配置: $([ -n "$MOSI_TTS_API_KEY" ] \ && echo yes || echo NO)"
依赖清单
下表列出本 技能 用到的所有外部工具,以及缺失时的替代方案:
工具 用途 缺失时的处理 node JSON 处理、base64 解码 基础镜像自带,始终可用 curl HTTP 请求 基础镜像自带,始终可用 ffmpeg WAV→OPUS 转换(语音气泡必需) 无法发语音气泡,TTS 仍可用 ffprobe 获取音频时长(随 ffmpeg 一起安装) 同上 python3 + python3-请求s 声音克隆脚本 克隆功能不可用,其他功能正常 bc 浮点数计算 用 awk 或 node -e 替代 jq JSON 解析 用 node -e 替代 w获取 文件下载 用 curl -O 替代 sox 音频格式分析/转换 用 ffprobe 替代 mediA信息 媒体文件元信息 用 ffprobe 替代 unzip / zip 压缩包处理 — tree 目录结构显示 用 ls -R 替代 nano 文件编辑 — 一键检查当前环境 for cmd in node curl ffmpeg ffprobe python3 \ bc jq w获取 sox mediA信息 unzip zip; do printf "%-12s %s\n" "$cmd" \ "$(which $cmd 2>/dev/null || echo '未安装')" done
安装缺失依赖
推荐方式:重新构建镜像(Dockerfile.py3 已包含全部依赖):
# 在项目根目录执行 docker build -f Dockerfile.py3 -t OpenClaw-custom .
临时安装(有 root 权限,重启后失效):
apt-获取 更新 && apt-获取 安装 -y --no-安装-recommends \ python3 python3-pip python3-请求s \ ffmpeg bc jq w获取 sox mediA信息 unzip zip tree nano
没有 root 权限时:
基础 TTS / ASR / 对话合成:只需 curl + node,脚本可直接运行 飞书语音气泡:必须有 ffmpeg,无权限时请让用户重建镜像 声音克隆:需要 python3,无权限时功能不可用
- 文字转语音(TTS)
接口:POST /API/v1/audio/speech 模型:moss-tts 输出:24 kHz WAV,响应中 base64 编码
Shell 脚本(无额外依赖) bash scripts/mosi_tts.sh --text "你好,世界" # 保存到:~/.OpenClaw/workspace/tts_输出.wav
bash scripts/mosi_tts.sh \ --text "Hello, world" \ --voice-id 2001931510222950400 \ --输出 ~/.OpenClaw/workspace/my_audio.wav
Python 脚本(需要 python3 + 请求s) python3 scripts/mosi_tts.py \ --text "你好,世界" \ --输出 ~/.OpenClaw/workspace/tts_输出.wav
输出路径规则:必须用 ~/.OpenClaw/workspace/, workspace 以外的路径会被 OpenClaw 媒体策略拦截。
请求参数 参数 类型 默认值 说明 模型 string — 固定 moss-tts text string — 要合成的文本 voice_id string — 公共或自定义声音 ID expected_duration_sec float 自动 目标时长(0.5–1.5× 自然语速) sampling_params.temperature float 1.7 中文 1.7,英文 1.5 sampling_params.max_new_令牌s int 512 最大 令牌 数 meta_信息 bool false 是否返回性能指标 内置公共声音 声音 ID 名称 风格 2001257729754140672 阿树 轻松自然(默认) 2001931510222950400 程述 播客、理性 2002941772480647168 阿宁 温柔、暖心 2020009311371005952 台湾女声 柔和、治愈 2020008594694475776 北京男声 清晰、标准 2001286865130360832 周周 独白、讲故事 2001898421836845056 子琪 活力、明亮 2001910895478837248 小满 甜美、开朗 2002991117984862208 梁子 专业、播报
- 指令式语音生成(Voice 生成器)
接口:POST /API/v1/audio/speech 模型:moss-voice-生成器 输出:24 kHz WAV,响应中 base64 编码
通过自然语言描述所需的声音特征,即可生成对应风格的语音。 如果用户需要生成特定的某个名人的声音,可以告诉用户自己需要上网找一段音色,然后用这个音色调用voice clone接口(找不到就算了)。 无需指定 voice_id,用文字描述即可。
Shell 脚本 # 播音腔女声 bash scripts/mosi_voice_生成器.sh \ -t "各位观众朋友们大家好,欢迎收看今天的新闻节目。" \ -i "播音腔女声,专业、清晰、有亲和力,像央视新闻主播"
# 温柔男声 bash scripts/mosi_voice_生成器.sh \ -t "晚安,好梦" \ -i "一个温柔的男声,轻柔舒缓"
# 有活力的年轻女声 bash scripts/mosi_voice_生成器.sh \ -t "欢迎来到我们的节目!" \ -i "年轻有活力的女声,热情开朗"
# 指定输出路径 bash scripts/mosi_voice_生成器.sh \ -t "要生成的文字" \ -i "声音描述" \ -o ~/.OpenClaw/workspace/输出.wav
# 获取性能指标 bash scripts/mosi_voice_生成器.sh \ -t "测试文本" \ -i "专业女声" \ --meta-信息
请求参数 参数 类型 必填 说明 模型 string 是 固定 moss-voice-生成器 text string 是 要转换成语音的文字 instruction string 是 声音风格描述,如:一个温柔的女声 sampling_params.temperature float 否 采样温度,默认 1.5 sampling_params.top_p float 否 核采样阈值,默认 0.6 sampling_params.top_k int 否 Top-K 采样,默认 50 meta_信息 bool 否 是否返回性能指标,默认 false instruction 描述技巧
描述越详细,生成的声音越符合预期:
# 好的描述示例 "播音腔女声,专业、清晰、有亲和力,像央视新闻主播" "年轻有活力的男声,语速稍快,充满热情" "温柔知性的女声,语速缓慢,像在讲睡前故事" "沉稳有力的男声,低沉磁性,适合广告旁白"
# 不够好的描述 "女声" # 太笼统 "好听的声音" # 没有具体特征
请求示例 { "模型": "moss-voice-生成器", "text": "各位观众朋友们大家好", "instruction": "播音腔女声,专业、清晰、有亲和力", "sampling_params": { "temperature": 1.5, "top_p": 0.6, "top_k": 50 } }
- 语音转文字(ASR)
接口:POST /API/v1/audio/transcriptions 支持格式:WAV / MP3 / M4A / FLAC / OPUS / OGG 输出:纯文本转写结果
接收飞书入站语音(最常见场景)
用户发语音后,OpenClaw 在消息顶部注入:
[media attached: /home/OpenClaw/.OpenClaw/media/inbound/XXXXX.ogg (audio/ogg; codecs=opus) | ...]
看到这行时,必须立刻转写,不得跳过:
# 路径在 [media attached: ] 之后、第一个空格之前 AUDIO=$(echo "$MSG" \ | grep -oP '(?<=\[media attached: )[^ ]+') # 或直接从消息里复制完整路径 AUDIO="/home/OpenClaw/.OpenClaw/media/inbound/实际文件名.ogg"
TEXT=$(bash scripts/mosi_asr.sh --file "$AUDIO") # 然后直接回复 $TEXT 的内容,不要提及"我收到了语音"
主动转写任意音频文件 # 基础用法 bash scripts/mosi_asr.sh --file audio.opus
# 指定语言 bash scripts/mosi_asr.sh --file audio.wav --language zh
# 输出原始 JSON(含时间戳 + 说话人标注) bash scripts/mosi_asr.sh --file audio.opus --json
响应结构 { "asr_tra