从零构建微信语音助手小程序:架构与踩坑实录

5 分钟阅读
AI

本文记录我用微信云开发构建「语音助手」小程序的完整过程,涵盖技术选型、架构设计与踩坑复盘。

背景

想做一款”说话就能完成操作”的语音助手:你说一句自然语言,它帮你查天气、导航、看股票。技术栈很快定下来:

  • 微信小程序 + 云开发:免运维,云函数天然适合做 API 聚合层
  • 腾讯云 ASR / TTS:语音识别与合成
  • 混元大模型:意图理解与对话生成
  • 和风天气 / 高德地图 / 东方财富:能力供给方

整体架构

用户语音
   │  recorderManager 录音

小程序端 ── 上传音频 ──► 云函数 A:语音识别(ASR)
                               │  文本

                          云函数 B:意图理解(混元)
                               │  JSON 指令
              ┌────────────┬───┴───┬────────────┐
              ▼            ▼       ▼            ▼
          天气云函数     地图云函数  股票云函数   TTS 合成
              └────────────┴───┬───┴────────────┘

                          回复文本 ──► 云函数 C:语音合成(TTS)
                               │  音频

                           小程序播放

踩坑记录

1. 录音格式与时长限制

微信 RecorderManager 默认输出 mp3,但 ASR 接口对采样率有要求。踩坑点:

// 建议统一配置
recorderManager.start({
  duration: 60000,          // 最多 60s
  sampleRate: 16000,        // 16k 与 ASR 推荐值一致
  encodeBitRate: 48000,
  format: 'mp3',
});

2. 云函数的签名实现

腾讯云的语音接口需要 TC3-HMAC-SHA256 签名。网上不少示例把签名写错(尤其 Date 头与 Host 的顺序),排查半天后发现是请求头必须包含 Host 且参与签名

const headers = {
  'Content-Type': 'application/json',
  Host: 'asr.tencentcloudapi.com',
  'X-TC-Action': 'SentenceRecognition',
  'X-TC-Timestamp': String(Math.floor(Date.now() / 1000)),
  'X-TC-Version': '2019-06-14',
  'X-TC-Region': 'ap-guangzhou',
};

3. 混元的意图解析

直接让大模型输出自由文本再正则匹配,极易出错。可靠做法是约束输出 JSON Schema

{
  "intent": "query_weather | query_navigation | query_stock | chat",
  "params": {
    "city": "深圳",
    "keyword": "腾讯",
    "code": "00700"
  }
}

小结

整体链路跑通后,语音从按下到回复大约 2-3 秒,体验可接受。下一阶段计划加入多轮对话与本地缓存优化。

如果你也在做类似项目,欢迎在评论区交流。

评论