DeepSeek 用不起了,切换小米 MiMo 搭建语音交互的实战经验

发布时间:2026/10/4 19:03:44

DeepSeek 用不起了,切换小米 MiMo 搭建语音交互的实战经验 DeepSeek 用不起了切换小米 MiMo 搭建语音交互的实战经验DeepSeek 8/17 起要涨价峰谷价而小米的 MiMomimo-v2.5刚好出来——一个模型覆盖 ASR TTS Vision 文本TTS 限时免费ASR 仅 ¥0.5/小时。能力不差还更便宜。换完之后顺便把语音交互也搭了发现 MiMo 的 ASR/TTS 走 Chat Completions API接入成本很低踩了几个坑记录一下。1. MiMo 多模态能力实测1.1 视觉理解VisionMiMo 的视觉理解能力和其他多模态模型类似通过input_image参数传入图片。这里不展开重点说 ASR 和 TTS。1.2 语音识别ASRMiMo 的 ASR 调用方式和传统方案完全不同。它不走标准的/v1/audio/transcriptions端点调了会 404而是走 Chat Completions 接口。核心要点只能传input_audio不能传text部分。import json, base64, urllib.request API_KEY your-key BASE_URL https://token-plan-cn.xiaomimimo.com/v1 # 读取音频文件并编码为 base64 with open(voice_message.mp3, rb) as f: audio_b64 base64.b64encode(f.read()).decode() data json.dumps({ model: mimo-v2.5-asr, messages: [{ role: user, content: [{ type: input_audio, input_audio: {data: audio_b64, format: mp3} }] }], max_tokens: 2000 }).encode() req urllib.request.Request( f{BASE_URL}/chat/completions, datadata, headers{api-key: API_KEY, Content-Type: application/json} ) with urllib.request.urlopen(req, timeout60) as r: result json.loads(r.read()) text result[choices][0][message][content] print(text)⚠️坑如果 messages 里同时传了text类型的 contentAPI 会报错。MiMo ASR 的 user content 必须只有input_audio不能混入text。这和一些其他多模态模型的用法不同需要注意。成本方面MiMo ASR 按音频时长计费大约 ¥0.5/小时音频对于日常语音消息场景非常划算。1.3 语音合成TTSMiMo 的 TTS 同样走 Chat Completions API模型名是mimo-v2.5-tts。核心要点必须传audio参数否则返回 500 错误。import json, base64, urllib.request data json.dumps({ model: mimo-v2.5-tts, messages: [ {role: assistant, content: 要合成的文本内容} ], audio: {format: mp3, voice: 茉莉} }).encode() req urllib.request.Request( f{BASE_URL}/chat/completions, datadata, headers{api-key: API_KEY, Content-Type: application/json} ) with urllib.request.urlopen(req, timeout120) as r: result json.loads(r.read()) audio_data result[choices][0][message][audio][data] audio_bytes base64.b64decode(audio_data) # 保存音频文件...⚠️坑messages 必须包含assistantrole。文本放在 assistant content 里不是 user content。如果只传 user messageAPI 会报400: messages must contain an assistant role for TTS model。内置音色有茉莉、冰糖等具体列表可查 MiMo 文档。2. 语音交互搭建2.1 ASR 配置在 Hermes 的config.yaml中配置 MiMo ASR 作为 STT providerstt: enabled: true language: zh provider: mimo-asr providers: mimo-asr: command: python3 /path/to/ask_mimo_asr.py --audio {input_path} --out {output_path} format: txt language: zh timeout: 300 type: commandHermes 会在收到语音消息时自动调用这个脚本将音频文件转为文字。注意timeout要给够长语音可能需要几十秒。2.2 TTS 配置TTS 同样通过 command provider 模式接入tts: provider: mimo-tts providers: mimo-tts: command: python3 /path/to/ask_mimo_tts.py --text-file {input_path} --out {output_path} --voice xiaoai output_format: mp3 timeout: 120 type: command voice_compatible: trueHermes 会把要合成的文本写入{input_path}文件脚本读取后调用 MiMo API合成的音频输出到{output_path}。2.3 音色克隆MiMo TTS 支持音色克隆——传入一段参考音频模型会用这个音色来合成新内容。核心原理在 user message 的 content 中传入input_audio参考音频assistant content 放要合成的文本。# 读取参考音频 with open(reference_voice.mp3, rb) as f: ref_audio base64.b64encode(f.read()).decode() # 克隆调用格式 data json.dumps({ model: mimo-v2.5-tts, messages: [ { role: user, content: [ {type: input_audio, input_audio: {data: ref_audio, format: mp3}}, {type: text, text: 用这个声音的音色来说} ] }, {role: assistant, content: 要合成的文本内容} ], audio: {format: mp3} # 注意克隆模式不传 voice 参数 }).encode()实测中我们用小爱同学的语音片段作为参考音频进行克隆效果不错。参考音频的获取流程从视频网站找到目标音色的干净语音片段用yt-dlp下载音频用ffmpeg截取 5-30 秒无背景噪音的片段调用克隆 API 生成音频再用 MiMo 听一下验证相似度⚠️参考音频质量直接影响克隆效果需要干净的人声背景噪音太多会导致音色偏差。3. 多平台接入3.1 QQ Bot 语音消息QQ Bot 原生支持语音消息发送。在 Hermes 中配置 QQ Bot 后语音交互可以直接打通platforms: qqbot: enabled: true extra: app_id: your-app-id client_secret: your-secret dm_policy: pairing group_policy: pairing stt: provider: mimo-asrQQ Bot 支持send_voice()方法TTS 合成的音频可以直接作为语音消息发送。完整的语音交互链路是这样的用户在 QQ 发送语音消息Hermes 收到后调用ask_mimo_asr.py将音频转为文字文本经过 MiMo 模型推理生成回复内容调用ask_mimo_tts.py将回复文本合成为语音通过 QQ Bot 的send_voice()将语音发送给用户全链路都在 MiMo 生态内完成不需要跨多个服务商。下面是实际效果——QQ 上的语音对话截图用户发送语音消息AI 用 MiMo ASR 转录为文字经过推理后用 MiMo TTS 合成语音回复全程自动完成。另外有个常见坑如果dm_policy设为open需要同时设置环境变量GATEWAY_ALLOW_ALL_USERStrue否则 Gateway 会拒绝启动日志里会看到Refusing to start: qqbot has dm_policy/group_policy set to open but neither GATEWAY_ALLOW_ALL_USERS nor QQ_ALLOW_ALL_USERS is enabled这样的报错。3.2 微信语音条为什么不支持微信 Bot API 目前不支持发送语音条——API 层面接受消息但客户端静默丢弃。这是平台限制不是代码问题。目前微信渠道只支持文字消息收发语音交互建议走 QQ Bot。4. 踩坑记录TTS 必须传audio参数不传会返回 500 错误请求体中需包含audio: {format: mp3}ASR 不能传textcontentuser message 只能包含input_audio类型和 Vision 等其他多模态调用方式不同TTS 必须用assistantrole文本放在 assistant content 里放 user 会报 400 错误克隆模式不传voice参数voice只用于内置音色选择克隆模式下传了可能导致意外行为OGG 格式需要转换MiMo TTS 不直接支持 OGG 输出需要先出 WAV 再用 ffmpeg 转换5. 总结MiMo 的统一 API 设计让语音交互搭建变得很简单——ASR TTS Vision 一个模型搞定不用再维护多个 API。目前 TTS 限时免费ASR 仅 ¥0.5/小时性价比很高。如果你也在做类似的语音交互项目可以试试 MiMo。有问题欢迎评论区交流。
延伸阅读

更多相关文章

2026/10/3 0:46:52

参赛意识到,民私营经济崛起在钱、不在内涵

这是用豆包写的。 从一场编程竞赛说起:当“大厂光环”照不进细节,我们还能期待什么?一场比赛,折射出的不仅是一家公司的组织能力,更是一家企业对“人”的基本态度。写在前面 前几天,我参加了一场头部科技公…

2026/10/1 4:15:24

多数据库检索中的重复数据问题与去重技术方案

1. 多数据库检索中的重复数据问题在科研、市场调研或商业分析工作中,我们经常需要从多个数据库检索信息。比如同时查询PubMed、Web of Science和CNKI等学术数据库,或者从不同电商平台抓取商品数据。这时最头疼的问题就是:不同来源的检索结果中…

2026/10/2 18:53:24

ARM Cortex-M查表跳转指令TBB/TBH原理与编译器优化实战

1. 项目缘起:一个被忽视的底层指令在嵌入式开发,尤其是基于ARM Cortex-M系列内核的项目中,我们每天都在和C语言、编译器、链接器打交道。高级语言和开发框架的便利性,常常让我们忽略了处理器最底层的执行机制。直到有一天&#xf…

2026/10/4 19:01:55

Cryptomatte Nuke插件安装全攻略:从路径配置到排错详解

一个做合成的朋友前几天问我:“Cryptomatte那个插件到底怎么装?我扔进Nuke安装目录了,打开软件还是找不到节点。”这个问题我听过不下十次了。很多人拿到Cryptomatte压缩包,解开一看里面既没有安装程序也不是.nk工具,而…

2026/10/4 19:01:55

VibeCoding 的原理:从 401 报错到 TaoToken 统一 Key 的调用链拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 18:56:54

从零开始搭建AI工程能力:算法到生产的完整闭环

做AI工程这行久了,经常有朋友问我“怎么从零开始入门”。我一开始没太当回事,觉得照着教程跑通几个模型就算入门了。直到我亲眼看到不少科班出身、算法调参很熟练的同学,在把一个模型真正变成线上服务时被各种工程问题捶得没脾气,…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑