wechat-robot-skills/skills/voice-message/SKILL.md
2026-04-06 18:11:50 +08:00

3.5 KiB
Raw Blame History

name description argument-hint
voice-message 文本转语音与语音消息发送技能。当用户想让我说话、发语音、把一段话转成语音、用某种情绪读出来时使用。支持 content、emotion、context_texts 参数,并自动把合成结果作为语音消息发给当前会话。 需要 content可选 emotion、context_texts。context_texts 可重复传入。

Voice Message Skill

描述

这是一个将文本合成为语音并直接发送到当前微信会话的技能。

技能脚本位于 voice-message/cripts/voice_message.py

触发条件

  • 用户想让你发语音、说一句话、用语音回复。
  • 用户说「把这句话读出来」「帮我发个语音」「用开心一点的语气说」。
  • 用户明确要求文本转语音。

入参规范

{
  "type": "object",
  "properties": {
    "content": {
      "type": "string",
      "description": "要转成语音的文本内容。必须保留用户原意,不要无故扩写。最长 260 个字符。"
    },
    "emotion": {
      "type": "string",
      "description": "可选,输出语音的情绪类型。仅在用户明确要求语气、情绪或声线风格时传入。",
      "enum": [
        "happy",
        "sad",
        "angry",
        "surprised",
        "fear",
        "hate",
        "excited",
        "lovey-dovey",
        "shy",
        "comfort",
        "tension",
        "tender",
        "magnetic",
        "vocal-fry",
        "ASMR"
      ]
    },
    "context_texts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "可选,语音合成辅助信息。仅在需要引导语速、情绪、音量、说话方式时使用,例如“你可以说慢一点吗?”“你用很委屈的语气说”。"
    }
  },
  "required": ["content"],
  "additionalProperties": false
}

对应命令行参数:

  • --content <文本> 必填
  • --emotion <情绪> 可选
  • --context_texts <辅助文本> 可选,可重复传入多次

参数抽取规则

  1. content 必须来自用户明确想让你说出的内容,不要加入寒暄、解释或额外总结。
  2. 如果用户只说“你用语音回复我”但没有提供具体要说的话,应先基于上下文生成一段简洁、自然、适合直接播报的回复,再把这段回复作为 content
  3. 只有当用户明确要求情绪或语气时才传 emotion
  4. context_texts 适合表达细粒度播报要求,优先用于语速、语调、音量、说话状态的补充说明。
  5. content 超过 260 个字符时,不应该调用本技能。

执行步骤

  1. 识别用户是否明确需要语音消息。
  2. 提取 content,可选提取 emotioncontext_texts
  3. 在仓库根目录执行:
python3 voice-message/scripts/voice_message.py --content '这是一条语音消息' --emotion happy --context_texts '请自然一点'
  1. 脚本会读取数据库中的 TTS 配置,调用语音合成接口并通过客户端接口 POST http://127.0.0.1:{ROBOT_WECHAT_CLIENT_PORT}/api/v1/robot/message/send/voice 直接发送语音。

依赖安装

  • 脚本首次运行时会自动创建虚拟环境并安装依赖,无需手动执行。
  • 如需手动重新安装,可执行:python3 voice-message/scripts/bootstrap.py

回复要求

  • 成功时脚本输出「ended」表示语音已直接发送无需 AI 智能体再拼装额外消息。
  • 失败时,返回脚本输出的具体错误信息。