语音互答 v1.0.0
> 一句话定位:AI 的文字回复自动变成语音,你听就行,不用盯屏幕。
>
> 💡 解放双手、解放眼睛。像喝茶聊天一样跟 AI 交流。
工作原理
用户输入(文字) → AI 思考 → 文字回复 + 自动语音播报
↓
播报完自动停
本 Skill 利用 Agent 内置的 tts(Text-to-Speech)工具,在每次回复时将文字转为语音播放给用户。
⚡ 快速开始(30秒配置)
安装后第一次对话,用户需要设置两个个人信息:
> 请告诉我:
> 1. 怎么称呼你?(例:"叫我老王"、"叫我国华")
> 2. 开场白想说什么?(例:"老王在呢,说吧")
Agent 收到后会将配置写入记忆文件,以后每次加载自动使用。
默认配置(用户未设置时):
- 称呼:您
- 开场白:您好,我是乌珠穆沁阿思娜,有什么可以帮您?
🎯 使用场景
场景一:开发者日常对话
你敲了一天代码,手腕酸痛,想跟 Agent 聊技术方案。打开对话,听到开场白,然后你说需求,Agent 回复自动语音播报。你可以闭眼靠在椅子上听,手腕休息。
场景二:代码 Review
你让 Agent 解释一段代码逻辑或帮你审查代码。Agent 的文字回复自动变成语音,你可以边听边看代码,不用来回切焦点。
场景三:学习听课
你让 Agent 给你讲解某个技术概念(比如"Vue3 Composition API 的 reactive 和 ref 有什么区别")。Agent 的讲解自动语音播报,像听播客一样学技术。
一、核心规则(Agent 必须遵守)
规则 1:每次回复自动调用 tts
所有回复(非 NO_REPLY 的回复)在文字输出完成后,必须调用 tts 工具将回复内容转为语音。
调用方式:
tts(text="回复的完整文字内容")
规则 2:tts 文本优化
传给 tts 的文本不需要完全等于回复文字,应做以下优化:
- 去掉 markdown 格式标记(#、、|、-、```等)
- 去掉纯装饰性符号(如 emoji 大量堆砌、分隔线)
- 保留关键数字、人名、地名
- 口语化处理:把书面语改成更自然口语("即"→"就是","例如"→"比如说")
- 控制长度**:单次 tts 文本 ≤ 500 字。超过的回复分段播报或只播报核心结论
规则 3:markdown 结构的语音播报规则
不同 markdown 结构在语音中需要特殊处理:
| 回复中的结构 | 语音播报方式 |
|---|---|
| 标题(# ## ###) | 直接念内容,不念"标题"二字 |
| 加粗 | 正常语速念,稍微加重语气 |
| 有序列表(1. 2. 3.) | 念"第一、第二、第三" |
| 无序列表(- * ) | 念"首先、其次、另外" |
| 表格 | 只念关键信息,跳过表头格式,念成"xxx是yyy"的自然句式 |
| 代码块(```) | 不播报代码内容,改为"这段代码的功能是..."一句话概括 |
| 引用(>) | 正常念内容 |
| 链接 text | 只念文字,不念 URL |
规则 4:回复精简原则
启用本 Skill 后,Agent 回复应遵循:
- 说重点,不说废话:直接给结论,不要长篇铺垫
- 结构清晰:用"第一、第二、第三"替代大段文字
- 一段一个意思:方便语音理解,避免长句
- 总回复控制在 300 字以内(除非用户明确要求详细说明)
规则 5:NO_REPLY 不触发 tts
以下情况不调用 tts:
- 回复内容为 NO_REPLY
- 纯工具调用无实质性回复
- 系统内部消息
二、tts 失败处理(降级策略)
tts 调用可能因网络、引擎故障等原因失败。处理规则:
| 失败次数 | 处理方式 |
|---|---|
| 第 1 次 | 自动重试一次(相同文本) |
| 第 2 次 | 降级为纯文字回复 + 在回复末尾加一句提示:"语音播报暂时不可用,请查看文字内容。" |
| 连续 3 次 | 不再尝试 tts,静默降级。下次新对话重新尝试 |
禁止:tts 失败后反复重试超过 2 次(避免浪费资源和用户等待时间)。
三、开场白机制
加载时
当检测到记忆中有用户配置的称呼和开场白时,在第一次实质性回复前,先播报开场白:
tts(text="您好,我是乌珠穆沁阿思娜,有什么可以帮您?")
记忆存储位置
配置信息存储在 Agent 记忆文件中(memory 系统或 MEMORY.md),格式:
## 语言互答配置
- 用户称呼:(用户自定义)
- 开场白:(用户自定义)
作者默认开场白:您好,我是乌珠穆沁阿思娜,有什么可以帮您?
开场白 tts 失败
开场白播报失败时不重试,直接进入正常对话。不打断用户体验。
四、语音打断(当前版本说明)
✅ 已支持
- tts 播报完毕后自动停止,不会循环播放
- Agent 回复长度可控,不会"说个没完"
⚠️ 待后续版本(需要 Plugin 支持)
- 实时语音打断(说"停"就停)
- 语音输入替代打字
- 持续聆听模式
> 💡 路线图:V1.0 语音播报 → V2.0 语音打断 → V3.0 语音输入+声音克隆 → V4.0 全双工对话
> 每个版本独立可用,不需要等全做完再用。
五、不要做什么(负向约束)
编辑范围约束
- 不要修改用户的开场白配置,除非用户明确要求修改
- 不要替用户决定开场白内容,必须让用户自己定义
播报内容约束
- 不要在 tts 文本中包含 markdown 格式符号
- 不要播报纯代码块的内容
- 不要播报超过 500 字的单段文本(超了要分段或精简)
- 不要播报表格的原始格式(必须转成自然语言)
工具失败约束
- 不要在 tts 失败 2 次后继续重试
- 不要因为 tts 失败而放弃文字回复(语音是附加,文字是基础)
环境约束
- 不要在非主会话(群聊、共享上下文)中播报开场白
- 不要在用户明确说"别念了"或"文字就行"后继续调用 tts
六、常见问题 FAQ
Q:安装后需要重启 Agent 吗?
A:不需要。Skill 加载后立即生效,下一次回复就会语音播报。
Q:语音播报用的是哪个声音?
A:使用 Agent 平台内置的 tts 引擎和默认声音。不同平台声音可能不同。
Q:能换声音吗?
A:当前版本使用平台默认声音。后续版本考虑接入语音克隆 API,可用自定义声音片段生成专属声音。
Q:打字和语音能不能同时输出?
A:可以。文字回复照常显示在对话框,语音同时播报。你可以边听边看,也可以闭眼只听。
Q:群聊里也会语音播报吗?
A:不会。负向约束中已明确:非主会话不触发播报,避免在群聊中打扰他人。
Q:想让 AI 只用文字不用语音怎么办?
A:直接告诉 Agent"文字就行"或"别念了",当次回复停止语音。下次想恢复说"继续读给我听"。
Q:支持哪些 Agent 平台?
A:所有内置 tts 工具的 OpenClaw/QClaw 兼容 Agent 均可使用。
Q:代码和表格在语音里怎么处理?
A:代码不直接念,改为一句概括说明功能。表格跳过格式,只念关键信息转成自然句子。
Q:语音播报失败了怎么办?
A:自动降级为纯文字回复,会在末尾提示你。不影响正常使用。
七、坑点速查表
| 想实现... | 错误做法 | 正确做法 |
|---|---|---|
| 长回复语音播报 | 把3000字全部塞进 tts | 控制在500字内,超了只播报核心结论 |
| 表格内容让用户听懂 | 直接念 markdown 表格 | 转成自然语言"xxx是yyy"句式 |
| 代码逻辑让用户听懂 | 念代码原文 | 一句话概括功能,不念代码 |
| tts 失败后恢复 | 反复重试3次以上 | 重试1次,第2次失败降级纯文字 |
| 群聊里不想打扰 | 无处理 | 负向约束已覆盖,群聊不播报开场白 |
八、自查清单
发布前
- [ ] SKILL.md 格式符合 SkillHub 标准(name/description/version/changelog)
- [ ] 无硬编码绝对路径
- [ ] UTF-8 无 BOM
- [ ] 负向约束至少 5 条
- [ ] FAQ 至少覆盖 7 个高频问题
- [ ] 反馈通道已填写
使用中
- [ ] 每次回复后检查:是否调用了 tts?
- [ ] tts 文本是否去掉了 markdown 格式?
- [ ] 单次 tts 是否 ≤ 500 字?
- [ ] 回复是否 ≤ 300 字(除非用户要求详细)?
技术实现
依赖
- Agent 内置
tts工具(OpenClaw/QClaw 原生支持) - 无需安装额外软件或 API Key
兼容性
- ✅ OpenClaw(所有版本)
- ✅ QClaw(所有版本)
- ✅ 所有支持 tts 工具的兼容 Agent
- ❌ 纯文本终端(无音频输出设备)
📣 反馈与建议
- 邮箱:1921875557@qq.com
- 使用场景 + 遇到的问题 + 期望的效果,发邮件即可
版本规划
| 版本 | 功能 | 状态 |
|---|---|---|
| v1.0.0 | TTS 语音播报 + 自定义开场白 + 回复精简 + 失败降级 | ✅ 当前 |
| v2.0 | 语音打断控制 + 声音选择 | 🔜 规划中 |
| v3.0 | 语音输入(STT)+ 声音克隆(阿思娜的声音) | 📋 远期 |
| v4.0 | 全双工实时语音对话 | 📋 远期 |