语音输入输出(语音转文本 / 文本转语音)
AiHummer 车把手 箱内的语音输入和语音输出 — 无需付费的语音 API。传入的音频片段会被转录(STT),文本驱动正常的代理回合,答案会被语音输出(TTS)。两个引擎都 免费且本地 并作为 边车: 使用 faster-whisper 进行转录,使用 edge-tts 进行合成。
声音转换是如何工作的
语音通话是指双方都有音频的普通代理通话:
- 网关将入站音频发送到 STT 辅助容器 (
:8001, faster-whisper) 并返回文本。 - 该文本驱动了通常的函数调用回合——相同的路由器,协调器, 将工具和记忆作为短信。
- 回复文本已发送到 TTS 辅助程序 (
:8002,edge-tts)和 口语音频会返回给呼叫者。
这是作为单一端点暴露的, POST /v1/voice/turn因此,通道或客户端可以传递音频并接收音频,而无需自行协调步骤。
端点
| 方法 | 终端 | 目的 |
|---|---|---|
POST |
/v1/voice/turn |
音频输入 → 代理回合 → 音频输出 |
GET |
/v1/voice/config |
当前语音配置(引擎、调节旋钮) |
POST /v1/voice/turn HTTP/1.1
Host: localhost:8780
Content-Type: application/json
{
"audio": "<base64-encoded clip>",
"format": "wav"
}
[!NOTE] 语音特征是……的一部分 核心 — 它们不绑定到 SIP 插件。 SIP 通道为其使用相同的 STT/TTS 引擎
local引擎,但声音 对于任何调用的客户端,进/出均可使用/v1/voice/turn.
语音边车
| 港口 | 边车 | 发动机 | 角色 | 连接有 |
|---|---|---|---|---|
| 8001 | 语音转文字 | 更快的耳语 | 语音 → 文本 | AIHUMMER_STT_URL |
| 8002 | 文字转语音 | edge-tts | 文本 → 语音 | AIHUMMER_TTS_URL |
两个引擎都是免费的并且是本地的:没有任何数据发送给付费语音供应商。和每个旁路一样,网关可以访问它们 通过 URL,这样你就可以在网关旁运行它们,或者指向一个共享实例。
布线
本地主机安装程序会为您设置STT和TTS的URL。它们是 目录设置 — 从管理员界面更改它们 (管理 → 设置) 或者与 aihummer settings set; gateway.env 仅适用于 Bootstrap,并在以下情况下被忽略:
# Voice in/out (auto-configured by the installer)
aihummer settings set AIHUMMER_STT_URL http://127.0.0.1:8001
aihummer settings set AIHUMMER_TTS_URL http://127.0.0.1:8002
[!TIP] 因为每个边车只是一个 URL,多个网关可以共享一个 STT/TTS 例子。集中较重的语音服务,而不是为每个副本运行一份 主持人。
调节音频路径
音质调节旋钮位于 媒体 · 声音 设置组,可以从网页管理员界面配置——无需重新部署。它们涵盖实时音频路径:
| 旋钮 | 它控制什么 |
|---|---|
| 双工 | 全双工(边说边听)与半双工 |
| 建筑工程与施工 | 声学回声消除 |
| 噪声抑制 | 在语音转文字之前过滤背景噪音 |
| 自动增益控制 | 自动增益控制(电平归一化) |
| VAD 阈值 | 语音活动检测灵敏度 |
| 打断 | 让呼叫者在代理回答中途打断 |
GET /v1/voice/config 返回有效的配置,以便客户端能够发现活动的引擎及其设置。
自动语音回复
何时朗读完成的回复由 「Media · Voice」 组的三个设置决定(Web 界面 → 管理 → 设置):
| 设置 | 键 | 取值 |
|---|---|---|
| 自动语音回复 | AIHUMMER_TTS_AUTO_REPLY |
off——从不;always——总是;inbound(默认)——仅在回应传入音频时;tagged——由智能体显式标记为语音时 |
| 朗读字符数上限 | AIHUMMER_TTS_MAX_CHARS |
0(默认)——朗读完整回复;100–10000——朗读文本的上限 |
| 摘要长语音回复 | AIHUMMER_TTS_SUMMARIZE |
默认开启:长回复由模型缩短到上限;模型不可用时朗读文本开头 |
无论哪种模式,回复的完整文本都保留在对话历史中。off 只关闭自动朗读——通过 tts 工具的显式合成请求仍然可用。
对于单个对话,智能体可以应对话方要求,用 voice_preferences(读取生效值)和 set_voice_preferences(设置 auto、max_chars、summarize;空对象恢复实例默认值)工具覆盖这些值。只有对话参与者才能写入。语音输出会采用网关启动后才接入的提供商,并遵循具体用户的设置。