Models

Amazon SageMaker AI Kokoro TTS 低延迟语音流媒体实现

Voice agents often wait for an agent's full response before starting speech synthesis, adding latency users feel directly. This post shows how to stream each sentence to a Kokoro-8

Full article body is primarily in Chinese for SEO depth; key points above are localized. Use the language switcher and deep links for global navigation.

# Amazon SageMaker AI Kokoro TTS 低延迟语音流媒体实现

Voice agents 常在生成完整回应后才启动语音合成,导致用户直接感受到延迟。许多语音应用(从客服机器人到智能家居控制台)都希望语音能“边说边听”,让对话更自然。

本文介绍如何在 Amazon SageMaker AI 上部署 Kokoro-82M TTS 模型,通过 bidirectional stream(双向流)实时将生成中的每一句话推送给 TTS,合成即开始,显著降低感知延迟。

此方案特别适合中转团队和本地部署实验室,需要高性价比语音输出的场景。核心在 ml.g5.xlarge 单卡 GPU 实例上运行,仅需 82M 参数,成本和延迟均可控。

为什么需要低延迟语音流媒体

传统 TTS 集成常采用“生成完成再合成”的模式:文本生成 5 秒,语音合成也需几秒,用户等待完整回应后才听到声音。Kokoro-82M 通过 SageMaker 托管后,可实现“边生成边合成”。

Agent 生成一句话后,立即流式推送到 TTS,合成开始,用户无需等待全部回应。Kokoro-82M 参数极小(仅 82M),在 mid-tier GPU 上运行成本低,适合实时语音代理的峰值流量。

解决方案概览

方案通过 SageMaker real-time endpoint 部署 Kokoro-82M TTS,暴露 POST /invocations(完整请求)和 WS /invocations-bidirectional-stream(持久双向会话)两个接口。

Agent 后台生成文本时,每输出一句话即调用接口,TTS 合成音频并通过同一会话返回到前端。音频可通过 SSE + base64 编码传输,或直接复用双向会话(原始二进制 + JSON 控制帧)。

传输方式优点缺点适用场景
SSE + base64复用现有文本流,后端代码简单额外 33% 体积开销 + 缓冲逻辑已有的 SSE 管道
统一双向会话无体积膨胀,延迟最低需要处理二进制帧与 JSON 区分追求极致低延迟的纯前端

部署准备

  1. AWS 账户 + IAM 权限(包含 sagemaker:InvokeEndpointWithBidirectionalStream 等)。
  2. ECR 存储库 + Bedrock AgentCore runtime。
  3. AWS CDK v2 已 bootstrapped。
  4. 部署容器镜像需声明 com.amazonaws.sagemaker.capabilities.bidirectional-streaming=true 标签。
  5. Python 3.12+、uv、Docker、Boto3。

推荐参考官方 GitHub 仓库部署样例(speech-infra deploy kokoro-82m + agent-infra deploy --bedrock-model-id)。

客户端实现要点

保持会话持久:合成完一句后不要关闭连接,等待下一句。仅在客户端明确发送 {"type": "close"} 时关闭。

句子增量解析: ```python import re from starlette.websockets import WebSocket

_SENTENCE_RE = re.compile(r"(?<=[.!?])\s+")

class IncrementalSentenceChunker: def __init__(self): self._buffer = ""

def feed(self, fragment: str) -> list[str]: self._buffer += fragment parts = _SENTENCE_RE.split(self._buffer) if len(parts) == 1: return [] self._buffer = parts[-1] return [s.strip for s in parts[:-1] if s.strip]

def flush(self) -> str | None: remainder = self._buffer.strip self._buffer = "" return remainder or None ```

音频传输:优先推荐统一双向会话方案(原始二进制音频 + JSON 控制帧)。通过尝试解析 JSON 区分帧类型,避免 base64 开销。

实际效果验证

官方测试中,三句话输入在同一会话上流式传输,音频时长分别为 1.525s、2.250s、2.050s,与文本完全匹配。感知延迟大幅降低,用户可听到第一句时,Agent 可能仍在生成后续内容。

延伸阅读

风险与边界

此方案仅限已具备 SageMaker 端点管理和 IAM 权限的用户使用。容器镜像中可能包含已知安全风险(需升级 PyTorch 版本)。升级模型或容器后,可能会影响端点兼容性,请务必在测试环境验证后再上线生产。

免责声明:本文内容基于公开技术博客,仅供参考,不构成任何商业建议或技术支持。实际部署请以 AWS 官方文档和当前控制台数据为准。

English summary

This guide shows how to achieve low-latency speech streaming for AI voice agents using Kokoro-82M TTS on Amazon SageMaker AI. Instead of waiting for the full agent response, each sentence is sent to the TTS model immediately via bidirectional streaming on an ml.g5.xlarge instance, so synthesis starts right away.

Key implementation steps include maintaining a persistent WebSocket session, parsing incremental text with a sentence chunker, and choosing between SSE+base64 or unified binary+JSON transport for audio return. The solution reduces perceived latency dramatically for real-time agents while keeping costs low thanks to Kokoro’s small 82M parameter footprint.

It is suitable for teams focused on API transit and local deployment labs who need efficient voice output. Always test in a staging environment and review the official AWS blog for the latest prerequisites and code samples.

适用于 GrokCode 倍率榜。信息仅供参考,不构成购买、投资或法律意见。