Files
Hermes Agent ccc63d1e70 first commit
2026-05-10 13:52:46 +08:00

322 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: mimo-capabilities
description: MiMo 模型原生能力配置指南 - 图像理解、音频理解、视频理解、TTS 语音合成、网络搜索。当主模型为 MiMo 时使用这些方法。
tags: [mimo, xiaomi, vision, audio, video, tts, search, multimodal]
---
# MiMo 模型原生能力配置指南
## 概述
MiMo 是小米研发的 AI 大模型,支持多种原生能力。当主模型为 MiMo 时,应使用 MiMo 的原生 API 而非第三方工具。
## 模型感知路由规则
**关键原则:根据当前主模型选择对应的方法**
| 功能 | MiMo 模型 | MiniMax 模型 (mmx-cli) |
|------|-----------|--------------|
| 图像理解 | MiMo Vision API | `mmx vision describe` |
| 音频理解 | MiMo Audio API | 不支持 |
| 视频理解 | MiMo Video API | 不支持 |
| TTS | MiMo TTS API | `mmx speech synthesize` |
| 网络搜索 | MiMo Web Search API | `mmx search query` |
| 图像生成 | 不支持 | `mmx image generate` |
| 视频生成 | 不支持 | `mmx video generate` |
| 音乐生成 | 不支持 | `mmx music generate` |
## 1. 图像理解
### 支持的模型
- mimo-v2.5
- mimo-v2-omni
### 使用方法
```bash
python3 ~/.hermes/scripts/mimo_vision.py "https://example.com/image.jpg" "描述这张图片"
python3 ~/.hermes/scripts/mimo_vision.py /path/to/image.png "这张图片里有什么?"
```
### 图片限制
- 格式JPEG, PNG, GIF, WebP, BMP
- 大小:单张不超过 50MB
## 2. 音频理解
### 支持的模型
- mimo-v2.5
- mimo-v2-omni
### 使用方法
```bash
python3 ~/.hermes/scripts/mimo_audio.py "https://example.com/audio.wav" "这段音频说了什么?"
python3 ~/.hermes/scripts/mimo_audio.py /path/to/audio.mp3 "转录这段音频"
```
### 音频限制
- 格式MP3, WAV, FLAC, M4A, OGG
- 大小URL 不超过 100MBBase64 不超过 50MB
## 3. 视频理解
### 支持的模型
- mimo-v2.5
- mimo-v2-omni
### 使用方法
```bash
python3 ~/.hermes/scripts/mimo_video.py "https://example.com/video.mp4" "描述视频内容"
python3 ~/.hermes/scripts/mimo_video.py /path/to/video.mp4 "视频里发生了什么?" --fps 2
```
### 参数说明
- --fps: 每秒提取帧数,范围 0.1-10默认 2
- --resolution: default默认或 max最高分辨率
### 视频限制
- 格式MP4, MOV, AVI, WMV
- 大小URL 不超过 300MBBase64 不超过 50MB
## 4. TTS 语音合成
### 支持的模型
| 模型 | 功能 |
|------|------|
| mimo-v2.5-tts | 内置音色,支持唱歌 |
| mimo-v2.5-tts-voicedesign | 音色设计 |
| mimo-v2.5-tts-voiceclone | 音色克隆 |
### 内置音色列表
- 中文:冰糖(默认), 茉莉, 苏打, 白桦
- 英文Mia, Chloe, Milo, Dean
### 使用方法
```bash
# 内置音色
python3 ~/.hermes/scripts/mimo_tts.py --text "你好世界" --voice 冰糖 --output output.wav
# 音色设计VoiceDesign
python3 ~/.hermes/scripts/mimo_tts.py --text "你好世界" --design "年轻女性,温柔甜美" --output output.wav
# 音色克隆VoiceClone
python3 ~/.hermes/scripts/mimo_tts.py --text "你好世界" --clone voice_sample.mp3 --output output.wav
# 带风格指令
python3 ~/.hermes/scripts/mimo_tts.py --text "你好世界" --voice 冰糖 --style "用欢快活泼的语气" --output output.wav
```
### VoiceDesign 音色设计详解
通过自然语言描述从零生成全新音色,无需参考音频。
**描述维度**(可自由组合):
- 性别年龄:年轻女性、中年男性、小女孩、年迈老先生
- 口音语言:标准普通话、带北方口音、说英语
- 音色特征:低沉有磁性、清脆明亮、温柔甜美、略带沙哑
- 发声方式:像纪录片旁白、像新闻主播、声音位置靠后
- 性格气质:沉稳而有感染力、元气满满、饱经风霜
**高级特性**
- 对复杂、模糊、甚至相互矛盾的描述也能合理解读
- 不局限于"男/女/青年/老年"粗粒度标签
- 适合游戏NPC、动画角色、虚拟主播、品牌IP、有声剧
**示例**
```
--design "一位年迈的老先生,说带北方口音的普通话,语速缓慢而沉稳,嗓音略带沙哑和沧桑感,仿佛一位饱经风霜的老爷爷在讲故事,充满岁月的智慧。"
```
### VoiceClone 音色克隆详解
只需短至数秒的参考音频,无需训练/标注/微调,直接复刻音色。
**保留的特征**
- 原始说话人的音色身份
- 气息、节奏、习惯性停顿等个人特征
**复用能力**:克隆后的音色可叠加使用全部控制能力(自然语言指令、音频标签、导演剧本)
**示例**
```
# 提供参考音频 + 风格指令
--clone reference.mp3 --style "用尖锐刻薄的嗓音,带着狐假虎威的得意感"
```
### 风格控制标签(行内音频标签)
在文本中用括号插入标签,精准控制情绪/状态/风格:
**标签类型**
- 基础情感:开心、悲伤、生气、害怕、惊讶、兴奋
- 复杂情感:忧郁、释然、无奈、内疚、嫉妒、疲惫
- 整体语调:温柔、冷淡、活泼、严肃、慵懒、俏皮
- 音色定位:磁性、醇厚、清亮、空灵、天真、甜美
- 方言:东北话、四川话、河南话、粤语
- 唱歌:唱歌(必须放在最开头)
**高级用法**
- 支持中英双语标签
- 支持多标签叠加(用 `` 分隔)
- 支持开放文本描述
**示例**
```
(调侃) 老张你当时不是说这条航线稳得很吗……
(模仿自信,提高音量) "系统全绿,放心走。"
(突然停顿) ……现在呢?
(爆发,愤怒压不住) 现在整艘船都在报警!
(低声|情绪塌陷般平静) ……算了。
(轻笑|带点释然) 也挺好,至少是一起看的。
```
### 导演剧本级结构化输入
对于一致性要求高的场景有声剧、游戏NPC、角色化对话支持分层描述
```bash
python3 ~/.hermes/scripts/mimo_tts.py \
--text "你们求我垂怜..." \
--voice 白桦 \
--style "CHARACTER: 曾是守护九天的神祇,见证了凡人的无药可救后,决定以灭世来完成最终的净化。
SCENE: 悬浮于崩塌的祭坛之上,俯视下方在火海中哀嚎的信徒。
DIRECTION: 充分打开胸腔共鸣,声音位置靠后,音色如古钟般低沉且带有金属质感的磁性。" \
--output output.wav
```
**分层说明**
- CHARACTER人物身份、背景、性格
- SCENE场景环境、情境
- DIRECTION详细的发声指导共鸣、语调、气声、咬字等
### TTS API 要点
1. 合成文本必须放在 assistant 角色的 content 中
2. user 角色消息可选,用于传递风格指令
3. 流式调用时输出格式指定为 pcm16
## 5. 网络搜索
### 支持的模型
- mimo-v2.5-pro, mimo-v2.5, mimo-v2-pro, mimo-v2-omni, mimo-v2-flash
### 前置条件
在 MiMo Console 启用 Web Search 插件。
### 使用方法
```bash
python3 ~/.hermes/scripts/mimo_search.py "武汉明天天气"
python3 ~/.hermes/scripts/mimo_search.py "附近美食" --city 武汉 --region 湖北
```
### 参数说明
- --max-keywords: 每轮搜索最大关键词数,默认 3
- --force/--no-force: 是否强制搜索,默认强制
- --limit: 搜索结果数量,默认 1
- --country/--region/--city: 本地化搜索位置
## 环境变量
```bash
XIAOMI_API_KEY=tp-xxxxx
XIAOMI_BASE_URL=https://token-plan-sgp.xiaomimimo.com/v1
```
**注意**:环境变量需持久化到 `~/.bashrc`,否则新 terminal session 会丢失。
## ⚠️ 图片输入配置(关键)
MiMo chat API **不支持图片输入**。用户发图片时,如果 Hermes 把图片直接塞进 chat completions 请求,会返回 `404: No endpoints found that support image input`
### 必须设置 `image_input_mode: tool`
```bash
hermes config set agent.image_input_mode tool
```
- `auto`(默认)= 尝试直接把图片发给主模型 → MiMo 会 404
- `tool` = 强制图片走 vision 工具 → 正确路由到 MiMo Vision API
### Vision API Key 必须显式写入 config
`XIAOMI_API_KEY` 环境变量**不会**自动传给 Hermes vision 工具。必须手动填入 config。
**有两个 vision section 都需要 API key**
| 路径 | 用途 |
|------|------|
| `auxiliary.vision.api_key` | 主 vision 工具配置(含 provider/model/base_url |
| `tools.vision.api_key` | 工具层 vision 配置 |
```bash
# 方法:从 .bashrc 提取 key 并写入hermes config set 无法展开未 source 的环境变量)
python3 << 'EOF'
import yaml
key = open('/home/ubuntu/.bashrc').read().split('XIAOMI_API_KEY=')[1].split('\n')[0].strip().strip('"').strip("'")
with open('/home/ubuntu/.hermes/config.yaml') as f:
config = yaml.safe_load(f)
config['auxiliary']['vision']['api_key'] = key
config['tools']['vision']['api_key'] = key
with open('/home/ubuntu/.hermes/config.yaml', 'w') as f:
yaml.dump(config, f, default_flow_style=False, allow_unicode=True)
print(f'Done. Key set: {key[:10]}...')
EOF
```
## ⚠️ 常见问题排查
### 401 Unauthorized / Invalid API Key
1. **检查 base URL**:脚本默认值可能过时。正确 URL 是 `https://token-plan-sgp.xiaomimimo.com/v1`,不是 `https://api.xiaomimimo.com/v1`
2. **检查 header 格式**MiMo API 使用 `Authorization: Bearer <key>`,而非 `api-key` header。
3. **验证方式**
```bash
curl -s https://token-plan-sgp.xiaomimimo.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XIAOMI_API_KEY" \
-d '{"model":"mimo-v2.5-tts","messages":[{"role":"assistant","content":"你好"}],"audio":{"format":"wav","voice":"冰糖"}}'
```
### 404: No endpoints found that support image input
MiMo chat API 不支持图片输入。用户发图片时 Hermes 尝试直接塞进请求导致。
**修复**`hermes config set agent.image_input_mode tool`,并确保 vision API key 已配置(见上方"图片输入配置"章节)。
### 脚本报 "No API key found"
确认环境变量已 export`echo $XIAOMI_API_KEY`。如果为空,添加到 `~/.bashrc` 并 `source ~/.bashrc`。
**注意**Hermes 的 config.yaml 中可能已配置了 API key`auxiliary.vision.api_key` 或 provider 的 `api_key`),但这个 key 不会自动 export 到 shell 环境变量。脚本依赖 `XIAOMI_API_KEY` 环境变量,二者是独立的。
**快速恢复方法**:从 config.yaml 提取 key 并 export
```bash
export XIAOMI_API_KEY=$(python3 -c "import yaml; c=yaml.safe_load(open('/home/ubuntu/.hermes/config.yaml')); print(c.get('auxiliary',{}).get('vision',{}).get('api_key',''))")
```
### 网络搜索 400 Bad Request
`mimo_search.py` 可能因 API 端点变更或参数格式问题返回 400。排查步骤
1. 先用 curl 直接测试 API 是否可达:`curl -s -o /dev/null -w "%{http_code}" https://token-plan-sgp.xiaomimimo.com/v1/models -H "Authorization: Bearer $XIAOMI_API_KEY"`
2. 如果网络不通(`Network is unreachable`),是服务器出站网络问题,不是 API 问题
3. 如果网络通但 400检查请求体格式是否与最新 API 兼容
### mmx search 不可用
`mmx search query` 需要 MiniMax Token Plan 支持 `coding-plan-search` 模型。如果报错 "your current token plan not support model, coding-plan-search",说明当前 plan 不包含搜索能力。替代方案:
- 使用 MiMo 网络搜索(如果可用)
- 使用 Playwright 浏览器抓取
- 使用 `curl` 直接请求搜索引擎(注意服务器出站网络限制)
## References
- `references/sensenova-api.md` — SenseNova API 配置、模型列表、限流策略、已安装 skills 绑定情况
- `references/mimo-v2.5-tts-official-doc.md` — MiMo-V2.5-TTS Series 官方文档摘要VoiceDesign/VoiceClone/导演剧本详解)
## 脚本位置
所有 MiMo 辅助脚本位于 ~/.hermes/scripts/
- mimo_vision.py - 图像理解
- mimo_audio.py - 音频理解
- mimo_video.py - 视频理解
- mimo_tts.py - TTS 语音合成
- mimo_search.py - 网络搜索