summaryrefslogtreecommitdiff
path: root/INSTALL.md
blob: f3bcae0b8eb1a055e0fed060e3e81c55fae33807 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Xiaomi MiMo ASR (mimo-v2.5-asr) — Hermes STT 安装说明

将小米 MiMo ASR 语音识别模型接入 Hermes 的语音转文字功能。

本版本针对 **Windows + Hermes Desktop** 进行了适配,使用纯 Python 实现,不依赖 bash/git-bash 环境。

---

## 前置条件

- Hermes Agent 已安装且正常运行
- Xiaomi MiMo API Key([https://platform.xiaomimimo.com](https://platform.xiaomimimo.com) 获取)
- ffmpeg(用于非 wav/mp3 格式的自动转换)
  - 可在 [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) 下载,或 `winget install Gyan.FFmpeg`
  - 确保 `ffmpeg` 在系统 PATH 中
- Python(Hermes 自带,无需额外安装)

---

## 工作原理

Xiaomi ASR **不使用**标准的 `/v1/audio/transcriptions` 端点,而是通过 `/v1/chat/completions` 接口 + `input_audio` 格式工作。该脚本负责:

- 音频格式检测(wav/mp3 直接发送,其他格式通过 ffmpeg 转为 16kHz 单声道 WAV)
- Base64 编码音频数据
- 构造 chat completions JSON payload
- 解析响应提取转录文本

### 为什么用 Python 而不是 Shell 脚本?

Hermes 在 Windows 上通过 **cmd.exe** 执行 command provider,cmd.exe **不识别**:
- `~` 波浪号(不会展开为用户目录)
- `.sh` 扩展名(不知道用什么程序打开)

Python 脚本(`.py`)可以被 `python` 解释器直接调用,无上述问题。

---

## 安装步骤

### 1. 复制脚本

将 `xiaomi-asr.py` 复制到 Hermes 的脚本目录:

```powershell
# 创建脚本目录(如果不存在)
mkdir $env:USERPROFILE\.hermes\scripts -Force

# 复制脚本
copy .\xiaomi-asr.py $env:USERPROFILE\.hermes\scripts\xiaomi-asr.py
```

或在 bash (git-bash) 中:

```bash
mkdir -p ~/.hermes/scripts
cp xiaomi-asr.py ~/.hermes/scripts/xiaomi-asr.py
```

### 2. 配置环境变量

在 `D:\Program Files\Hermes\.env`(或 `$env:HERMES_HOME\.env`,视你的安装位置而定)中添加:

```env
# Xiaomi MiMo ASR
XIAOMI_API_KEY=你的API_Key
XIAOMI_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1
```

> 中国站用户:`https://token-plan-cn.xiaomimimo.com/v1`
> 国际站用户:`https://api.xiaomimimo.com/v1`

### 3. 修改 Hermes 配置

编辑 `D:\Program Files\Hermes\config.yaml`(或 `$env:HERMES_HOME\config.yaml`)的 `stt` 部分:

```yaml
stt:
  enabled: true
  provider: xiaomi-asr
  providers:
    xiaomi-asr:
      type: command
      command: python C:/Users/<你的用户名>/.hermes/scripts/xiaomi-asr.py {input_path} {output_path} mimo-v2.5-asr {language}
      language: zh
      format: txt
      timeout: 120
```

> **注意**:请将 `<你的用户名>` 替换为实际的 Windows 用户名,并用**正斜杠**(`/`)代替反斜杠。
>
> 也可用 `hermes config set` 来快速配置:
> ```bash
> hermes config set stt.provider xiaomi-asr
> hermes config set stt.providers.xiaomi-asr.type command
> hermes config set stt.providers.xiaomi-asr.command "python C:/Users/<你的用户名>/.hermes/scripts/xiaomi-asr.py {input_path} {output_path} mimo-v2.5-asr {language}"
> hermes config set stt.providers.xiaomi-asr.language zh
> hermes config set stt.providers.xiaomi-asr.format txt
> hermes config set stt.providers.xiaomi-asr.timeout 120
> ```

### 4. 重启 Hermes

- **Desktop**:关闭并重新打开
- **Gateway**:运行 `/restart`

---

## 验证

创建一个测试音频文件并用脚本手动测试:

```bash
# 创建 3 秒 440Hz 正弦波测试音频
ffmpeg -y -f lavfi -i "sine=frequency=440:duration=3" -ar 16000 -ac 1 test.wav

# 手动测试(确保 XIAOMI_API_KEY 和 XIAOMI_BASE_URL 已导出为环境变量)
python C:/Users/<你的用户名>/.hermes/scripts/xiaomi-asr.py test.wav output.txt mimo-v2.5-asr zh

# 查看结果
cat output.txt
```

---

## 注意事项

| 问题 | 说明 |
|------|------|
| 音频格式 | 只支持 wav 和 mp3,其他格式自动通过 ffmpeg 转换 |
| 纯音乐 | 无法识别纯音乐内容,会返回空结果 |
| 语言 | 主要针对中文优化,其他语言效果较差 |
| ffmpeg | 非 wav/mp3 格式必须安装 ffmpeg |
| Windows 路径 | 建议在配置中使用**正斜杠**(`/`),Python 脚本内部会自动转换反斜杠 |
| 环境变量 | `XIAOMI_API_KEY` 必须在 `.env` 文件中,Hermes 会自动加载到子进程环境 |

---

## 文件清单

```
mimo-asr-for-hermes/
├── INSTALL.md         # 本安装说明
├── xiaomi-asr.py      # STT 适配脚本(Python)
└── xiaomi-asr.sh      # STT 适配脚本(Bash,仅 Linux/macOS)
```