☰
AIRI 接入 Index-TTS 本地语音合成:从服务部署到回复启用全指南
2026/10/16 1:45:32 网站建设 项目流程
  • 人工智能
  • AI Agent
  • MCP 服务
  • 工具调用
  • GUI 自动化
  • 语音
  • 数字人
  • 交互助手

【免费下载链接】airi

💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 Factorio 游玩,支持 Web / macOS / Windows。

项目地址:https://gitcode.com/moeru-ai/airi
点击查看免费下载

本篇指南讲解如何在自托管的 AIRI 中接入由 Bilibili 开源的 Index-TTS(本地 TTS)服务:AIRI 通过本地 HTTP 服务与 Index-TTS 通信,默认访问http://localhost:11996/tts/,语音数据始终停留在本地网络。读完本文你将掌握本地服务启动、Base URL 配置、Provider Playground 验证以及最终在「Modules → Speech」中启用回复语音的完整流程,并了解底层提供者实现与故障排查方法。

为什么选择 Index-TTS

Index-TTS 是 AIRI 语音提供者目录中的本地部署类、免费方案。从仓库中的提供者属性表可以看出,index-tts-vllm被标记为freeLocal(免费 + 本地部署),与 ElevenLabs、MiniMax 等云端付费方案形成鲜明对比,参见 packages/stage-ui/src/libs/providers/attributes.ts 中的providerAttributesById映射。

官方文档给出的选择理由是:如果你已经在本地运行 Index-TTS,并希望声音数据保留在本地网络内,即可选择此方案。这意味着音频合成请求不会离开你的局域网或本机,适合对数据隐私有要求的自托管场景。

启动本地 Index-TTS 服务

接入 AIRI 前,需要先让 Index-TTS 服务在本机可用:

  1. 按照 Index-TTS 官方部署说明启动服务(典型部署方式为 vLLM 推理服务)。
  2. AIRI 默认连接http://localhost:11996/tts/;如果你使用了其他主机或端口,请记录下完整的 Base URL 地址。
  3. 确认服务可以返回模型和声音(voice)信息——这一步是后续验证配置是否成功的前提。

从 AIRI 的提供者实现源码可以确认默认地址与模型 ID:

// packages/provider-inference/src/providers/local/index-tts-vllm/index.ts const indexTtsConfigSchema = z.object({ baseUrl: z.string().default('http://localhost:11996/tts/'), model: z.string().default('IndexTTS-1.5'), })

即 Base URL 默认值为http://localhost:11996/tts/,模型 ID 默认值为IndexTTS-1.5。

本地服务安全警告

官方文档明确警告:不要将本地服务端口暴露给不受信任的公网。如果修改了服务监听地址,请自行保证服务访问安全(例如通过防火墙限制来源、使用反向代理加认证等方式)。

在 AIRI 中配置 Index-TTS 提供者

配置入口:打开Settings → Providers → Speech → Bilibili / IndexTTS。

在提供者设置页面中,主要需要填写Base URL(本地服务的完整地址)。配置完成后,AIRI 会调用服务的audio/voices接口来获取可用音色列表,其实现位于提供者源码的voicesUrl函数:

function voicesUrl(config: IndexTtsConfig) { return `${config.baseUrl ?? 'http://localhost:11996/tts/'}audio/voices` }

也就是说,AIRI 实际访问的是{你的 Base URL}/audio/voices,该接口需要返回一个 JSON 对象,其键名即被解析为可用音色 ID(每个音色同时标记为支持中文cn与英文en)。音色列表的解析逻辑在listVoices中:

listVoices: async (config) => { const response = await fetch(voicesUrl(config)) if (!response.ok) throw new Error(`Failed to fetch voices: ${response.statusText}`) const voices = await response.json() as Record<string, unknown> return Object.keys(voices).map(voice => ({ id: voice, name: voice, provider: 'index-tts-vllm', languages: [{ code: 'cn', title: 'Chinese' }, { code: 'en', title: 'English' }], })) },

如果服务无法返回该接口数据,音色列表会为空,这是后续故障排查的核心线索。

配置校验机制

AIRI 内置了对提供者配置的校验器(validator)。当 Base URL 为空时会提示 "Base URL is required. Default to http://localhost:11996/tts/ for Index-TTS.";填写后 AIRI 会使用5 秒超时的AbortController向audio/voices发起探测请求,根据 HTTP 状态判断服务是否可达,超时或连接失败会分别给出IndexTTS unreachable与IndexTTS connection failed错误信息。相关实现见 packages/provider-inference/src/providers/local/index-tts-vllm/index.ts 的validators.validateConfig。

支持能力与版本提示

  • 提供者 ID 为index-tts-vllm,显示名称为Index-TTS by Bilibili,能力类型为text-to-speech,注册入口见 packages/provider-inference/src/providers/index.ts(providerIndexTtsVllm)。
  • 模型清单(listModels)固定返回IndexTTS-1.5,说明这是该 vLLM 部署对应的默认模型。
  • 目前尚未支持 IndexTTS2:设置页顶部会显示紫色 Callout 提示「暂不支持 / 目前尚未支持 IndexTTS2,请使用 IndexTTS」,见 packages/i18n/src/locales/zh-Hans/settings.yaml 与 packages/stage-pages/src/pages/settings/providers/speech/index-tts-vllm.vue。

验证配置:使用 Provider Playground

配置完成后,在同一设置页面即可直接验证:

  1. 在provider playground中选择一个可用音色(该页面会使用已配置的 Index-TTS 服务以及 AIRI 的默认模型 IDIndexTTS-1.5)。
  2. 在播放台输入一段短文本,确认能够播放音频。

Playground 页面的默认测试文本为Hello! This is a test of the Index TTS Speech synthesis?.,它通过speechStore.speech()将输入文本、音色与模型 ID 交给@xsai/generate-speech完成合成。从源码看,前端在onMounted时会主动调用loadVoicesForProvider('index-tts-vllm')拉取音色目录(见 packages/stage-pages/src/pages/settings/providers/speech/index-tts-vllm.vue),音色目录请求与合成调用均由 packages/stage-ui/src/stores/modules/speech.ts 中的loadVoicesForProvider/speech统一管理。

启用 AIRI 回复语音

Playground 验证通过只代表提供者本身可用,并不会自动让 AIRI 在普通回复中使用语音。要真正启用,还需要:

打开Settings → Modules → Speech,然后:

  1. 选择语音提供者为Bilibili / IndexTTS;
  2. 选择模型 IDIndexTTS-1.5;
  3. 选择一个音色。

完成这三步后,AIRI 的正常对话回复才会调用 Index-TTS 进行语音合成。若语音模块仍然保持默认的speech-noop提供者,则不会产生任何 TTS 输出。

故障排查

症状检查项
无法连接(配置校验失败 / Playground 无音频)1. 确认本地 Index-TTS 服务确实在运行;2. 确认 Base URL 中端口正确(默认11996);3. 检查本机防火墙或反向代理是否放行该端口。
音色列表为空检查服务的audio/voices接口是否可用(完整路径为{Base URL}/audio/voices),并确认它返回的是以音色名称为键的 JSON 对象。
回复无语音输出确认已在Modules → Speech中选择提供者、模型IndexTTS-1.5与音色,Playground 单独测试不会启用回复语音。

总结

AIRI 将 Index-TTS 视为一个标准的本地 HTTP TTS 提供者(index-tts-vllm):部署好本地服务后,在Settings → Providers → Speech → Bilibili / IndexTTS填写 Base URL,通过 Playground 验证音色与合成,最后在Modules → Speech中启用该提供者与IndexTTS-1.5模型,即可让 AIRI 的回复语音完全运行在本地网络之内。所有配置参数(默认地址、默认模型、5 秒探测超时、audio/voices音色接口)都可以在上述源码路径中逐一印证。

  • 人工智能
  • AI Agent
  • MCP 服务
  • 工具调用
  • GUI 自动化
  • 语音
  • 数字人
  • 交互助手

【免费下载链接】airi

💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 Factorio 游玩,支持 Web / macOS / Windows。

项目地址:https://gitcode.com/moeru-ai/airi
点击查看免费下载

相关推荐

上一篇:JavaScript模块化开发终极指南:从CommonJS到ES6模块的完整演进
下一篇:Android-DataBackup Root环境配置:Magisk/KernelSU/APatch全支持

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询