speech-to-speech

GitHub
4.7k 546 中等 1 次阅读 今天Apache-2.0语言模型音频Agent图像开发框架
AI 解读 由 AI 自动生成,仅供参考

speech-to-speech 是一个开源项目,旨在帮助开发者在本地构建完全自主的语音智能体。它通过串联语音活动检测(VAD)、语音转文字(STT)、大语言模型(LM)和文字转语音(TTS)四个核心模块,形成了一套完整的端到端语音交互流水线,让用户无需依赖云端 API 即可实现低延迟、高隐私的实时对话系统。

该项目主要解决了传统语音助手依赖专有云服务、数据隐私难以保障以及定制灵活性不足的问题。其最大的技术亮点在于高度的模块化设计:用户可以自由组合 Hugging Face 生态中的各类开源模型,例如选用 Whisper 进行高精度识别,搭配指令遵循大模型处理逻辑,并利用 MeloTTS 或针对 Apple Silicon 优化的 Kokoro 生成自然语音。此外,它还原生支持 Docker 部署及 macOS 本地运行,特别适配苹果芯片以实现高效推理。

speech-to-speech 非常适合希望深入探索本地化 AI 应用的开发者、研究人员以及对数据隐私有严格要求的技术爱好者。无论是想快速原型验证新的语音交互方案,还是需要在离线环境中部署智能助手,它都提供了灵活且强大的基础架构,让构建专属的“贾维斯”变得触手可及。

使用场景

一位独立开发者希望在本地 Mac 电脑上构建一个低延迟、隐私安全的语音助手原型,用于实时处理用户指令并反馈自然语音。

没有 speech-to-speech 时

  • 集成繁琐:需要手动拼接 VAD、Whisper、LLM 和 TTS 四个独立模块,代码耦合度高且调试困难。
  • 硬件适配难:难以充分利用 Apple Silicon 的 MPS 加速,导致推理延迟高,无法实现流畅的实时对话。
  • 隐私风险:若调用云端 API 处理敏感数据,存在用户语音泄露隐患,不符合本地化部署需求。
  • 模型切换僵化:更换更轻量的 STT 或更自然的 TTS 模型时,需重写大量底层接口代码,试错成本极高。

使用 speech-to-speech 后

  • 开箱即用:直接运行预置的级联流水线,一键整合 Silero VAD、Whisper-large-v3、指令微调模型及 Kokoro TTS,大幅缩短开发周期。
  • 极致性能:自动调用 MLX Audio Whisper 和针对 Apple Silicon 优化的 Kokoro-82M 模型,将端到端延迟控制在亚秒级,对话体验丝滑。
  • 完全本地化:所有计算均在本地完成,无需联网即可运行,彻底杜绝数据外传,完美保障用户隐私。
  • 灵活模块化:通过简单配置即可在 Hugging Face Hub 上自由替换任意环节模型(如切换为 Parakeet TDT),快速验证不同组合效果。

speech-to-speech 让开发者能以模块化方式轻松构建高性能、纯本地的开源语音智能体,真正实现了从“拼凑组件”到“专注业务”的转变。

运行环境要求

操作系统
  • Linux
  • macOS
GPU
  • 非必需
  • Linux 端推荐 NVIDIA GPU(需安装 NVIDIA Container Toolkit 以支持 Docker),支持 CUDA
  • macOS 端推荐使用 Apple Silicon (M1/M2/M3),利用 MPS 加速
  • 未明确具体显存大小要求,但提及大模型运行需求
内存

未说明

依赖
notes1. 项目使用 'uv' 工具同步依赖,自动根据平台 (macOS/非 macOS) 解析依赖。2. macOS 用户若使用 MeloTTS 且遇到 MPS 错误,需升级 macOS 至最新版本。3. DeepFilterNet 与 Pocket TTS 存在 numpy 版本冲突 (前者需<2,后者需>=2),需手动修改 pyproject.toml 选择其一。4. 首次使用 MeloTTS 需运行命令下载 UniDic 词典。5. 支持多种运行模式:本地运行、Server/Client TCP 模式、WebSocket 模式及 Docker 部署。
python未说明 (通过 uv 和 pyproject.toml 管理)
torch
transformers
mlx
mlx-lm
silero-vad
whisper
MeloTTS
Pocket TTS
numpy
unidic
speech-to-speech hero image

快速开始

 

语音到语音:使用开源模型构建本地语音助手

📖 快速索引

方法

结构

本仓库实现了一个由以下部分组成的级联式语音到语音流水线:

  1. 语音活动检测 (VAD)
  2. 语音转文本 (STT)
  3. 语言模型 (LM)
  4. 文本转语音 (TTS)

模块化

该流水线提供了一种完全开放且模块化的方案,重点利用 Hugging Face 中心库中 Transformers 库提供的模型。代码设计易于修改,并且我们已经支持特定设备和外部库的实现:

VAD

STT

LLM

TTS

设置

克隆仓库:

git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speech

使用 uv 安装依赖项:

uv sync

该项目现在使用单个带有平台标记的 pyproject.toml 文件,因此 macOS 和非 macOS 平台的依赖项会自动从一个文件中解析。

如果您使用 Melo TTS(macOS 上的默认选项),请在安装后运行一次:

uv run python -m unidic download

Apple Silicon 上的 MeloTTS 注意事项:

  • 如果 MeloTTS 在 MPS 上因“输出通道数超过 65536 不受 MPS 设备支持”而失败,请先更新 macOS。
  • 我们曾在较旧版本的 macOS 上复现过此问题,并确认在同一环境下升级到 macOS 26.3.1 后问题得以解决。

关于 DeepFilterNet 的说明: DeepFilterNet(用于 VAD 中可选的音频增强)目前由于 numpy 版本限制,与 Pocket TTS 不兼容。DeepFilterNet 需要 numpy<2,而 Pocket TTS 则需要 numpy>=2

如果您希望以 DeepFilterNet 为中心进行设置并使用 pyproject.toml

  1. 编辑 pyproject.toml:移除 pocket-tts 依赖行。
  2. deepfilternet>=0.5.6numpy<2 添加到 project.dependencies
  3. 重新同步环境:
    uv sync --refresh
    

要切换回 Pocket TTS,只需恢复 pyproject.toml 中的更改,并再次运行 uv sync --refresh

使用

该流水线可以通过三种方式运行:

  • 服务器/客户端方式:模型在服务器上运行,音频输入输出通过 TCP 套接字从客户端传输。
  • WebSocket 方式:模型在服务器上运行,音频输入输出通过 WebSocket 从客户端传输。
  • 本地方式:在本地运行。

推荐设置

服务器/客户端方式

  1. 在服务器上运行流水线:

    python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0
    
  2. 在本地运行客户端以处理麦克风输入并接收生成的音频:

    python listen_and_play.py --host <您的服务器 IP 地址>
    

WebSocket 方式

  1. 以 WebSocket 模式运行流水线:

    python s2s_pipeline.py --mode websocket --ws_host 0.0.0.0 --ws_port 8765
    
  2. 在您的客户端应用中连接到 WebSocket 服务器,地址为 ws://<服务器 IP>:8765。服务器将处理双向音频流:

    • 向服务器发送原始音频字节(16kHz,int16,单声道)
    • 从服务器接收生成的音频字节

本地方式(Mac)

  1. 为了在 Mac 上获得最佳设置:

    python s2s_pipeline.py --local_mac_optimal_settings
    

    您也可以指定特定的语言模型:

    python s2s_pipeline.py \
        --local_mac_optimal_settings \
        --lm_model_name mlx-community/Qwen3-4B-Instruct-2507-bf16
    

此设置:

  • 添加 --device mps 以在所有模型上使用 MPS。
  • 设置 Parakeet TDT 作为 STT(在 Apple Silicon 上实现快速流式 ASR)。
  • 设置 MLX LM 作为语言模型(使用 --lm_model_name 指定模型)。
  • 设置 MeloTTS 作为 TTS。
  • 需要为 MeloTTS 进行一次性 UniDic 设置:
    uv run python -m unidic download
    
  • --tts pocket--tts kokoro 也是 macOS 上有效的 TTS 选项。

Docker 服务器

安装 NVIDIA Container Toolkit

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

启动 docker 容器

docker compose up

使用 Cuda 的推荐用法

借助 Torch Compile 和 Pocket TTS,结合 Whisper 实现简单低延迟的设置:

python s2s_pipeline.py \
	--lm_model_name microsoft/Phi-3-mini-4k-instruct \
	--stt_compile_mode reduce-overhead \
  --tts pocket \
  --recv_host 0.0.0.0 \
	--send_host 0.0.0.0 

多语言支持

该流水线目前支持英语、法语、西班牙语、中文、日语和韩语。考虑了两种使用场景:

  • 单语言对话:通过 --language 标志强制设置语言,指定目标语言代码(默认为 'en')。
  • 语言切换:将 --language 设置为 'auto'。在这种情况下,Whisper 会检测每个语音提示的语言,并向 LLM 提示 "请用 ... 回答我的消息",以确保响应使用检测到的语言。

请注意,您必须使用与目标语言兼容的 STT 和 LLM 检查点。对于多语言 TTS,请使用 Melo(英语、法语、西班牙语、中文、日语和韩语)或 Chat-TTS。

使用服务器版本:

对于自动语言检测:

python s2s_pipeline.py \
    --stt whisper-mlx \
    --stt_model_name large-v3 \
    --language auto \
    --llm mlx-lm \
    --lm_model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

或者针对特定语言,例如中文:

python s2s_pipeline.py \
    --stt whisper-mlx \
    --stt_model_name large-v3 \
    --language zh \
    --llm mlx-lm \
    --lm_model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

本地 Mac 设置

对于自动语言检测(注意:--stt whisper-mlx 会覆盖最佳设置中的默认 parakeet-tdt,因为 Whisper large-v3 具有更广泛的语言覆盖范围):

python s2s_pipeline.py \
    --local_mac_optimal_settings \
    --stt whisper-mlx \
    --stt_model_name large-v3 \
    --language auto \
    --lm_model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

或者针对特定语言,例如中文:

python s2s_pipeline.py \
    --local_mac_optimal_settings \
    --stt whisper-mlx \
    --stt_model_name large-v3 \
    --language zh \
    --lm_model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

使用 Pocket TTS

Kyutai Labs 的 Pocket TTS 提供具有语音克隆功能的流式 TTS。要使用它:

python s2s_pipeline.py \
    --tts pocket \
    --pocket_tts_voice jean \
    --pocket_tts_device cpu

可用的语音预设包括:albamariusjavertjeanfantinecosetteeponineazelma。您也可以使用自定义语音文件或 HuggingFace 路径。

命令行使用

注意: 所有 CLI 参数的参考可以直接在 参数类 中找到,或者通过运行 python s2s_pipeline.py -h 获取。

模块级参数

参见 ModuleArguments 类。允许设置:

  • 一个通用的 --device(如果希望各部分在同一设备上运行)
  • --modelocalserver
  • 选择的 STT 实现
  • 选择的 LM 实现
  • 选择的 TTS 实现
  • 日志级别

VAD 参数

参见 VADHandlerArguments 类。值得注意的是:

  • --thresh:触发语音活动检测的阈值。
  • --min_speech_ms:被检测到的语音活动的最小持续时间,才被视为语音。
  • --min_silence_ms:用于分割语音的静音间隔的最小长度,以平衡句子切割和延迟降低。

STT、LM 和 TTS 参数

model_nametorch_dtypedevice 针对语音转文本、语言模型和文本转语音的每种实现都公开了。使用相应的前缀指定目标流水线部分(例如 sttlmtts,更多细节请查看各实现的 参数类)。

例如:

--lm_model_name google/gemma-2b-it

生成参数

模型生成方法的其他生成参数可以使用部分前缀加 _gen_ 来设置,例如 --stt_gen_max_new_tokens 128。如果尚未公开,这些参数可以添加到流水线部分的参数类中。

引用

Silero VAD

@misc{Silero VAD,
  author = {Silero Team},
  title = {Silero VAD: 预训练的企业级语音活动检测器 (VAD)、数字检测器和语言分类器},
  year = {2021},
  publisher = {GitHub},
  journal = {GitHub 仓库},
  howpublished = {\url{https://github.com/snakers4/silero-vad}},
  commit = {insert_some_commit_here},
  email = {hello@silero.ai}
}

Distil-Whisper

@misc{gandhi2023distilwhisper,
      title={Distil-Whisper:通过大规模伪标签进行稳健的知识蒸馏},
      author={Sanchit Gandhi 和 Patrick von Platen 和 Alexander M. Rush},
      year={2023},
      eprint={2311.00430},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

Parler-TTS

@misc{lacombe-etal-2024-parler-tts,
  author = {Yoach Lacombe 和 Vaibhav Srivastav 和 Sanchit Gandhi},
  title = {Parler-TTS},
  year = {2024},
  publisher = {GitHub},
  journal = {GitHub 仓库},
  howpublished = {\url{https://github.com/huggingface/parler-tts}}
}

版本历史

20252026/02/06

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

156k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|4天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|5天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架