mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-06-06 05:50:41 +08:00
## Summary
- 将所有技能文件中的硬编码 `~/.desirecore/` 和 `$HOME/.desirecore/` 路径替换为
`${DESIRECORE_ROOT}/` 变量
- 递增 manifest.json version 至 1.2.1
## Why
dev 模式下 `DESIRECORE_HOME=~/.desirecore-dev`,硬编码路径导致技能读取错误的端口文件和目录。主仓库的
`variable-substitutor.ts` 会在运行时将 `${DESIRECORE_ROOT}` 替换为实际根目录。
## Test plan
- [ ] `npm run dev` 启动后触发任意技能,确认端口路径解析为
`~/.desirecore-dev/agent-service.port`
- [ ] prod 模式确认路径为 `~/.desirecore/agent-service.port`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
6.2 KiB
6.2 KiB
xiaomi-tts 技能
强制规则(违反将导致功能失败)
- 必须用 HTTPS 访问 agent-service —
https://127.0.0.1:${PORT}加-k跳过证书验证 - 必须通过
/api/media/upload上传到 media-store — 禁止保存到本地路径 - 必须使用
dc-media://协议展示音频 — 唯一能让前端正确渲染的方式 - 全程使用 Bash curl — 不要使用 HttpRequest 工具或 Python
- 使用 /chat/completions 端点 — 小米 MiMo TTS 使用 OpenAI 兼容格式
模型选择指南
| 模型 | 特点 | 适用场景 |
|---|---|---|
| mimo-v2.5-tts | 标准 TTS,多种预置音色 | 默认首选,常规语音合成 |
| mimo-v2.5-tts-voicedesign | 自定义音色设计 | 需要特定音色描述生成 |
| mimo-v2.5-tts-voiceclone | 声音克隆 | 需要克隆特定人声(需上传参考音频) |
默认规则:用户未指定模型时,使用 mimo-v2.5-tts。
音色选择指南
预置音色
| voice_id | 名称 | 特点 |
|---|---|---|
| default_zh | 默认中文 | 中文通用女声 |
| default_en | 默认英文 | 英文通用女声 |
| mimo_default | MiMo 默认 | MiMo 特色音色 |
| Bingtang | 冰糖 | 甜美女声 |
| Moli | 茉莉 | 温柔女声 |
| Suda | 苏打 | 年轻男声 |
| Baihua | 白桦 | 成熟男声 |
| Mia | Mia | 英文女声 |
| Chloe | Chloe | 英文女声 |
| Milo | Milo | 英文男声 |
| Dean | Dean | 英文男声 |
默认规则:中文内容用 Bingtang,英文内容用 Mia,用户未指定时按内容语言自动选择。
完整执行流程(严格按此三步执行)
前置条件
- 用户已在资源管理器-算力中配置小米 MiMo Provider 并填写 API Key
- agent-service 正在运行
第一步:调用 TTS API
通过 media-proxy 的 /chat/completions 端点生成语音。
重要:messages 必须使用 assistant role(不是 user),要合成的文本放在 assistant 消息的 content 中。
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"provider": "xiaomi",
"serviceType": "tts",
"endpoint": "/chat/completions",
"body": {
"model": "mimo-v2.5-tts",
"messages": [
{
"role": "assistant",
"content": "这里替换为要合成的文本内容"
}
],
"voice": "Bingtang",
"audio": {"format": "mp3"}
},
"responseType": "json"
}'
响应示例:
{
"success": true,
"data": {
"id": "chatcmpl-...",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"audio": {
"data": "base64编码的音频数据...",
"format": "mp3"
}
},
"finish_reason": "stop"
}
]
},
"statusCode": 200
}
从 data.choices[0].message.audio.data 提取 base64 编码的音频数据。
第二步:解码并上传到 media-store
音频以 base64 返回,需要解码后保存到本地 media-store。
推荐方式(先保存完整响应到文件,避免 shell 参数过长):
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
# 将完整请求和响应保存到文件
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"provider": "xiaomi",
"serviceType": "tts",
"endpoint": "/chat/completions",
"body": {
"model": "mimo-v2.5-tts",
"messages": [{"role": "assistant", "content": "要合成的文本"}],
"voice": "Bingtang",
"audio": {"format": "mp3"}
},
"responseType": "json"
}' > /tmp/xiaomi-tts-response.json
# 提取 base64 音频数据并解码
cat /tmp/xiaomi-tts-response.json | jq -r '.data.choices[0].message.audio.data' | base64 -d > /tmp/xiaomi-tts.mp3
# 上传到 media-store
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/xiaomi-tts.mp3;type=audio/mpeg"
从 JSON 响应中提取 mediaId 字段(格式如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mp3)。
第三步:用 dc-media 协议展示音频
在你的回复文本中直接写 Markdown 语法:

例如:
前端会自动检测 .mp3 扩展名并渲染为音频播放器。
参数映射
请求体参数(放在 body 中)
| 参数 | 说明 | 默认值 |
|---|---|---|
model |
模型名称 | "mimo-v2.5-tts" |
messages[0].role |
必须为 "assistant" | "assistant"(固定) |
messages[0].content |
要合成的文本 | 必填 |
voice |
音色 ID | "Bingtang"(中文)/ "Mia"(英文) |
audio.format |
音频格式 | "mp3"(可选 "wav") |
用户意图映射
| 用户意图 | 参数选择 |
|---|---|
| 甜美/可爱 | voice: "Bingtang" |
| 温柔/知性 | voice: "Moli" |
| 年轻男声 | voice: "Suda" |
| 成熟男声 | voice: "Baihua" |
| 英文女声 | voice: "Mia" 或 "Chloe" |
| 英文男声 | voice: "Milo" 或 "Dean" |
| 高音质/无损 | response_format: "wav" |
错误处理
success: false+error: "未找到匹配的供应商":未配置小米 MiMo Provider 或未启用success: false+error: "未配置 API Key":未填写 API KeystatusCode: 401:API Key 无效或已过期statusCode: 429:频率限制,稍后重试statusCode: 400:参数错误(如 voice 不存在、文本为空)statusCode: 403:模型未开通或权限不足
注意事项
- 调用是同步的,通常 3-15 秒返回(视文本长度而定)
- 音频以 base64 返回,无外部 URL 时效问题,但数据量较大时注意 shell 参数长度限制
- 长文本建议分段合成(每段不超过 500 字),然后逐段上传展示
- 如果用户未明确要求音色/格式,默认使用
mimo-v2.5-tts+ 按语言选音色 +mp3 - Token Plan 密钥(tp- 前缀)使用
https://token-plan-cn.xiaomimimo.com/v1端点 - 按量付费密钥使用
https://api.xiaomimimo.com/v1端点 - media-proxy 会自动根据配置选择正确的端点,技能无需区分