📖 功能简介
本插件是为 AstrBot 设计的一款高级语音合成工具。它能将 LLM 的文本回复无缝转换为带有多样情感的语音消息,赋予您的机器人更加生动和个性化的表达能力。
- 两种语音化模式:
- 固定情感模式:使用预设的默认或切换后的情感进行语音合成。
- 自动情感识别模式:调用LLM分析文本情感,并自动匹配最合适的声音进行合成。
- 长文本加速 (v1.2.0 新增):独有的句子切分与并行合成技术,能将长篇回复拆分,并发请求至多个TTS服务器,最后无缝拼接,大幅缩短长语音的等待时间。
- 动态情感管理:通过指令自由注册、删除、查看不同的声音情感。
- 高度可配置:支持自定义翻译API (OpenAI/Gemini)、TTS服务器地址和默认角色。
- 手动合成:提供指令,可绕过 LLM 直接将指定文本合成为语音,方便测试。
- 故障转移:支持配置多个TTS服务器,一个失效时自动尝试下一个。
- 注意:该服务默认合成日语,但支持通过配置或注册指令合成其他语言(需模型支持)。
⬆️ 更新日志
v1.3.3
[!IMPORTANT]
Hugging Face Space 需要重新部署:本版本修复了后端 genie-tts 的兼容性问题。请使用最新的Dockerfile和app.py重新复制/部署您的 Space,否则中文 TTS 可能无法正常工作。
- 【修复】后端模型加载:修复了 genie-tts 2.0.2 与 HuggingFace 模型仓库的兼容问题,中文合成现已正常工作。
- 【新增】翻译开关:新增
启用翻译功能配置项。如果您使用的是中文模型,可关闭此选项直接使用原文,无需翻译。 - 【新增】超时配置:新增
TTS 超时时间配置项(默认 120 秒),支持自定义单次 TTS 请求的超时时间。 - 【优化】配置界面:重新组织配置页面,使用 emoji 分类,更加清晰美观。
- 【优化】Worker 优化:并行合成时,Worker 数量现在取 min(服务器数, 文本块数),避免创建多余的空闲 Worker。
v1.3.2
- 【修复】后端兼容性:修复了因新版 API 变更导致插件无法访问后端的问题(缺少
language参数)。 - 【新增】多语言支持:新增
tts_default_language配置项,允许设置 TTS 默认语言(默认为jp),支持jp,zh,en。 - 【新增】语言注册:
/注册感情指令现在支持可选的语言参数,允许为特定的感情单独指定语言(如zh,en),未指定则使用默认配置。
历史更新日志
v1.3.1
- 【优化】提示词增强:默认注入的提示词增加了 Markdown 标题 (
##),提升了 LLM 遵循指令的稳定性。 - 【优化】容错性提升:增强了对全角符号 (
$) 的兼容性,并增加了对 LLM 幻觉报错的自动清理机制。
v1.3.0
- 【新增】群组语音模式:新增
/ttg指令,可开启群组级语音合成,对群内所有成员生效。 - 【新增】LLM 情感注入:支持让主 LLM 直接生成情感标签(格式
[emotion=xxx]),比旧版插件单独分析更精准。 - 【新增】LLM 直接翻译:支持让主 LLM 直接生成日语翻译(格式
$xxx$),省去额外翻译 API 调用。 - 【新增】框架模型翻译:支持直接调用 AstrBot 框架内配置的模型进行翻译,无需在插件中重复配置 Key。
- 【优化】配置升级:新增“LLM 注入与高级翻译设置”配置区,支持自定义注入提示词。
v1.2.2
- 【优化】保活机制:现在支持同时对所有配置的 TTS 服务器进行保活,并可额外配置独立的保活地址。
- 【优化】缓存自动清理:新增自动清理任务,每小时清理一次超过 30 分钟的临时音频文件,防止磁盘占用过大。
- 【优化】健壮性提升:优化了保活任务的异常处理,防止任务意外终止。
v1.2.0
- 【新增】长文本快速合成模式:在配置中增加“句子切分”开关。开启后,插件会将长回复切分成短句,并行发送给多个TTS服务器合成,最后拼接成一条语音,显著提高长文本的响应速度。
- 【优化】代码结构重构:将插件代码按功能模块化拆分为多个文件,提升了代码的可读性和可维护性。
v1.1.0
- 【新增】自动情感识别模式:加入
/tts-w指令,可调用 LLM 分析文本情感,并自动匹配最合适的已注册声音进行合成。 - 【新增】配套指令:加入
/sw-w用于在自动模式下切换角色,以及/tts-w-q用于单独关闭自动模式。 - 【优化】配置体验:将 WebUI 中的“TTS 服务器地址列表”从手动输入 JSON 字符串改为更方便的列表形式,可轻松增删地址。
- 【优化】提示词可配置:将自动情感识别模式的提示词移入配置文件,方便用户自定义。
- 【调整】指令逻辑:
/tts-q现在会关闭所有语音合成模式。
⚠️ 重要前置:部署语音服务
本插件自身不进行语音合成,它依赖一个后端的 Genie TTS 服务。您必须先拥有一个可访问的该服务,插件才能正常工作。
Genie TTS 是一个强大的语音合成项目,您需要将其部署为一个Web服务。
方案一:使用 Hugging Face 一键部署
算力免费而且无需本地机器配置,但是合成速度比较慢。
复制我的 Space:
- 服务仓库: https://huggingface.co/spaces/clown145/genie-tts-t/tree/main
- 点击页面右上角的 "Duplicate this Space" 即可一键复制,拥有一个完全属于您自己的、免费的TTS服务。
使用自定义模型:
- 默认服务会从我的模型仓库 clown145/my-genie-tts-models 下载模型。该模型仓库已包含多个预置角色,例如:
kisaki(月社妃),hiy(和泉妃爱),may(椎名真由理),aoi(葵) 等,您可以直接使用。现在默认注册三个角色是kisaki,aoi,oka。您可以去app.py按照说明修改。 - 若要使用您自己的模型,请将您训练和转换好的模型上传到您自己的 Hugging Face 模型仓库,然后在 Space 的
app.py文件中修改REPO_ID和CHARACTERS字典。 - 【关键步骤】 在您的空间中,您必须创建一个名为
reference_audio的文件夹,并将所有用于注册情感的参考音频文件(如.wav,.ogg)放入其中。 - 注意: Genie 服务目前有加载3个模型的上限,请确保
CHARACTERS字典中启用的角色不超过3个。
- 默认服务会从我的模型仓库 clown145/my-genie-tts-models 下载模型。该模型仓库已包含多个预置角色,例如:
开启自动保活(可选):Hugging Face Space 超过 24 小时无人访问会休眠。插件新增了“自动保活空间”的开关,开启后会定时访问空间主页防止休眠。配置项:
- 启用:在插件配置中打开“是否自动定期访问 Hugging Face Space 以防止休眠”。
- 保活地址:默认使用 TTS 服务器列表的第一个地址,若您想单独设置,请填写“保活请求的目标地址”。
- 间隔:可通过“两次保活之间的间隔分钟数”调整访问频率,建议 15-30 分钟。
方案二:本地或 Windows 部署
- 如果您想在本地运行,请参照 Genie 官方仓库的文档进行部署。
- 作者还提供了 Windows 一键整合包,极大简化了部署流程,详情请访问其 GitHub。
部署完成后,请记下您的服务 URL (例如 https://your-name-your-space.hf.space),后续配置插件时需要用到。
📦 插件安装
方式一 (推荐): 在 AstrBot 的插件市场搜索
astrbot_plugin_tts_llm,点击安装,等待完成即可。方式二 (手动): 若安装失败,可尝试克隆源码。
# 进入 AstrBot 插件目录 cd /path/to/your/AstrBot/data/plugins # 克隆仓库 git clone https://github.com/clown145/astrbot_plugin_tts_llm.git # 重启 AstrBot
⚙️ 插件配置
安装后,在 AstrBot 的 WebUI 找到本插件并进入配置页面。
基础配置
| 配置项 | 说明 | 示例 |
|---|---|---|
| TTS 服务器地址列表 | 【核心】 填入您部署好的Genie TTS服务URL。可点击"+"添加多个。 | https://your-name.hf.space |
| 是否附带原文 | 发送语音时,是否同时发送 LLM 生成的原始文本。 | true / false |
| 默认角色名 | 自动语音模式下使用的默认角色。必须是已注册过的。 | kisaki |
| 默认情感名 | 固定情感模式下使用的默认情感。 | 开心 |
| TTS默认语言 | 默认使用的语言代码,支持 jp/zh/en。 |
jp |
| 启用翻译功能 | 是否启用翻译(中→日)。使用中文模型时请关闭。 | true (默认) |
| TTS 超时时间 | 单次 TTS 请求的超时秒数。 | 120 (默认) |
翻译API配置
| 配置项 | 说明 | 示例 |
|---|---|---|
| 翻译API配置 | 用于将中文LLM回复翻译成日语。支持 openai 和 gemini 格式。 |
|
├ base_url |
API 的基础地址。 | https://api.openai.com/v1 |
├ api_key |
您的 API 密钥。 | sk-xxxxxx |
├ model |
用于翻译的模型。 | gpt-4o-mini |
├ w_mode_prompt |
自动情感识别模式的提示词模板。 | (见插件配置页默认值) |
LLM 注入与高级翻译设置 (v1.3.0 新增)
| 配置项 | 说明 | 示例 |
|---|---|---|
| 让主LLM直接生成情感标签 | 开启后,插件会向LLM注入提示词,要求其直接生成 [emotion=xxx] 标签。 |
true / false |
| 让主LLM直接生成日语翻译 | 开启后,插件会向LLM注入提示词,要求其直接生成 $xxx$ 翻译。 |
true / false |
| 情感注入提示词模板 | 自定义情感注入的 Prompt。{emotions} 占位符会被替换为可用情感列表。 |
(见默认值) |
| 翻译注入提示词模板 | 自定义翻译注入的 Prompt。 | (见默认值) |
| 使用 AstrBot 框架内的模型进行翻译 | 如果未开启主LLM生成翻译,可开启此项使用框架内配置的其他 Provider 进行翻译。 | true / false |
| 选择用于翻译的模型提供商 | 选择具体的 Provider ID。 | openai_provider |
性能配置 (v1.2.0 新增)
| 配置项 | 说明 | 示例 |
|---|---|---|
| 启用句子切分功能 | 是否开启长文本并行合成。可显著加速。 | false (默认) |
| 每个语音分段的句子数 | 数字越小,并行度越高,请求越频繁。请根据您的TTS服务器数量调整。 | 2 (默认) |
| 用于切分句子的正则 | (高级) 用于识别句子边界的正则表达式。默认已兼容中英文标点。 | ([。、,!?,.!?]) |
⌨️ 使用说明
命令表
感情管理
| 命令格式 | 说明 |
|---|---|
/注册感情 <角色名> <情感名> <参考音频路径> <音频对应文本> [语言] |
注册一个新的情感,用于语音合成。[语言]为可选参数(默认jp),可选: jp,zh,en。注意: <参考音频路径> 必须是您上传到模型仓库 reference_audio/ 文件夹下的相对路径,例如:reference_audio/Kisaki_happy.wav。 |
/删除感情 <角色名> <情感名> |
删除一个已注册的情感。 |
/查看感情 |
列出所有已注册的角色及其拥有的情感。 |
核心功能
| 命令 (别名) | 说明 |
|---|---|
| 自动情感识别模式 (推荐) | |
/tts-w (/开启自动情感识别) |
为当前对话开启“自动情感识别”语音合成模式。 |
/sw-w <角色名> |
在“自动情感识别”模式下,为当前对话切换使用的角色。 |
/tts-w-q (/关闭自动情感识别) |
单独关闭“自动情感识别”模式。 |
| 固定情感模式 | |
/tts-llm (/开启语音合成) |
为当前对话开启“固定情感”语音合成模式。 |
/sw <角色名> <情感名> |
在“固定情感”模式下,为当前对话临时切换使用的情感。 |
| 群组指令 (v1.3.0 新增) | |
/ttg (/开启群语音) |
开启当前群组的语音合成 (对所有人生效)。 若开启了LLM情感注入,则为自动情感模式;否则为固定情感模式。 |
/ttg-q (/关闭群语音) |
关闭当前群组的语音合成。 |
| 通用指令 | |
/tts-q (/关闭语音合成) |
关闭当前对话的所有语音合成功能。 |
/合成 <角色名> <情感名> <文本> |
手动合成语音。若文本含空格,建议用英文双引号 " 括起来。 |
💡 典型使用流程
- 部署服务与配置:按照前述步骤部署Genie TTS服务,并在AstrBot WebUI中正确填写 TTS 服务器地址列表 和 翻译API 信息。
- 注册情感:使用
/注册感情指令添加至少一个您想用的情感。对于一个角色,注册的情感越丰富,自动情感识别的效果就越好。示例: /注册感情 kisaki 开心 reference_audio/Kisaki_happy.ogg ほら、ホタルもとても喜んでいます。 - 设置默认值:回到 WebUI 配置,将“默认角色名”和“默认情感名”设为您刚刚注册的,并保存。
- 选择模式并开启:
- 自动情感模式 (推荐):发送
/tts-w。现在,机器人的LLM回复将自动分析情感并使用最匹配的语音!如果想换个角色,使用/sw-w <新角色名>。 - 固定情感模式:发送
/tts-llm。回复将使用默认或通过/sw指定的固定情感。
- 自动情感模式 (推荐):发送
- 开始对话:享受带声音的机器人对话吧!
- 关闭模式:发送
/tts-q即可恢复发送纯文本。
💡 进阶技巧
如果感觉机器人回复长文本时语音等待时间较长,可以尝试在插件配置的 “性能配置” 中开启 “启用句子切分功能”。这会显著提升长语音的合成速度,尤其是在您配置了多个TTS服务器时。理论上添加的tts服务器越多,合成长文本越快,虽然tts服务本身似乎也有切分功能,但受限于抱脸免费空间的性能,合成长文本速度还是较慢。
感情配置
如果你希望使用我的模型,可以把emotions.json文件复制到AstrBot\data\plugin_data\astrbot_plugin_tts_llm文件夹下面,里面有设置好的一些感情。
📝 开发说明
本插件的开发过程得到了 AI 的大量协助,并在 v1.2.0 版本中对代码结构进行了重构,以提升可维护性。如果代码或功能中存在任何不妥之处,敬请谅解并通过 Issue 提出,感谢您的支持!
🤝 致谢
- 本插件的语音合成功能由 Genie TTS 库提供核心支持,由衷感谢原作者的杰出工作。