huggingface/speech-to-speech

GitHub: huggingface/speech-to-speech

Hugging Face 开源的模块化低延迟语音代理框架,通过可替换的 VAD、STT、LLM、TTS 流水线与 OpenAI Realtime 兼容 API,帮助开发者使用开源模型在本地构建端到端的实时语音交互应用。

Stars: 5344 | Forks: 654

 
# Speech To Speech:使用开源模型构建语音代理 [![PyPI](https://img.shields.io/pypi/v/speech-to-speech)](https://pypi.org/project/speech-to-speech/) [![Python](https://img.shields.io/pypi/pyversions/speech-to-speech)](https://pypi.org/project/speech-to-speech/) [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](./LICENSE)
这是一个低延迟、完全模块化的语音代理 pipeline:**VAD -> STT -> LLM -> TTS**,通过兼容 **OpenAI Realtime 的 WebSocket API** 提供。每个组件都是可替换的。LLM 插槽支持 OpenAI 兼容协议,因此您可以将其指向托管提供商、[HF Inference Providers](https://huggingface.co/inference-providers),或者指向您自己硬件上的 vLLM 或 llama.cpp 服务器,从而实现完全本地、完全开源的技术栈。 该 pipeline 已在生产环境中运行,作为数千台 [Reachy Mini](https://huggingface.co/blog/reachy-mini) 机器人的对话后端。

Switching an OpenAI Realtime client endpoint from hosted OpenAI to a self-hosted speech-to-speech server

## 快速开始 ``` pip install speech-to-speech export OPENAI_API_KEY=... speech-to-speech ``` 这将启动一个兼容 OpenAI Realtime 的服务器,地址为 `ws://localhost:8765/v1/realtime`,使用 Parakeet TDT 进行本地 STT,使用兼容 OpenAI 的 LLM,并使用 Qwen3-TTS 进行本地语音输出。 从源码检出版本中,在第二个终端与其进行对话: ``` python scripts/listen_and_play_realtime.py --host 127.0.0.1 --port 8765 ``` 更喜欢让 LLM 运行在您自己的机器上?使用 llama.cpp 部署 Gemma 4: ``` llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full ``` 然后将兼容 OpenAI 的 LLM 后端指向它: ``` speech-to-speech \ --model_name "ggml-org/gemma-4-E4B-it-GGUF" \ --responses_api_base_url "http://127.0.0.1:8080/v1" \ --responses_api_api_key "" ``` 任何兼容 OpenAI Realtime 的客户端都可以连接。有关协议请参阅 [Realtime API](#realtime-api),有关提供商和本地服务器选项请参阅 [LLM 后端](#llm-backends)。 ## 目录 * [工作原理](#how-it-works) * [安装说明](#installation) * [支持的组件](#supported-components) * [运行模式](#run-modes) * [Realtime API](#realtime-api) * [LLM 后端](#llm-backends) * [多语言支持](#multi-language-support) * [Pocket TTS](#pocket-tts) * [CLI 参考](#cli-reference) * [贡献指南](#contributing) * [引用](#citations) ## 工作原理 该 pipeline 是由四个组件组成的级联结构,每个组件都在各自的线程中运行并通过队列连接: 1. **语音活动检测 (VAD)**:[Silero VAD v5](https://github.com/snakers4/silero-vad) 检测语音边界和话轮转换。 2. **语音转文本 (STT)**:转录用户的话轮,可选提供实时部分转录。 3. **语言模型 (LLM)**:生成回复、流式文本和工具调用。 4. **文本转语音 (TTS)**:合成音频并将其流式传输回客户端。 每个阶段都有多个可通过 CLI 标志选择的可互换后端。代码设计易于修改,重点关注可通过 Transformers 和 Hugging Face Hub 获取的模型。 ## 安装说明 需要 Python 3.10+。 ``` pip install speech-to-speech ``` 默认安装涵盖标准的 realtime 路径: - 用于 STT 的 Parakeet TDT - 用于语言模型的兼容 OpenAI 的 API - 用于语音输出的 Qwen3-TTS,在非 macOS 平台上默认使用 GGML 后端,在 Apple Silicon 上使用 `mlx-audio` - 本地音频和 realtime 服务器模式 macOS 和非 macOS 的依赖项通过 `pyproject.toml` 中的平台标记自动解析。 ### Qwen3-TTS 的 CUDA 说明 在 Linux 上,Qwen3-TTS GGML 后端来自 `faster-qwen3-tts[ggml]`。其在 PyPI 上的默认 `qwentts-cpp-python` wheel 针对 CUDA 12.8。如果您的机器没有该 wheel 预期的 CUDA 12 运行时,请在安装 `speech-to-speech` 之前从 Hugging Face wheelhouse 安装匹配的 wheel: ``` # CUDA 13.x pip install "qwentts-cpp-python==0.3.0+cu130" \ -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu130 # CUDA 12.4 pip install "qwentts-cpp-python==0.3.0+cu124" \ -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu124 # 仅 CPU 回退 pip install "qwentts-cpp-python==0.3.0+cpu" \ -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cpu pip install speech-to-speech ``` 要使用以前的 CUDA-graphs 实现而不是 GGML,请传入 `--qwen3_tts_backend torch`。 ### 可选后端 额外的后端通过 pip extras 安装: ``` pip install "speech-to-speech[kokoro]" # Kokoro-82M TTS on non-macOS pip install "speech-to-speech[pocket]" # Pocket TTS pip install "speech-to-speech[chattts]" # ChatTTS pip install "speech-to-speech[facebook-mms]" # MMS TTS pip install "speech-to-speech[faster-whisper]" # Faster Whisper STT pip install "speech-to-speech[whisper-mlx]" # Lightning Whisper MLX STT on macOS pip install "speech-to-speech[paraformer]" # Paraformer STT through FunASR pip install "speech-to-speech[mlx-lm]" # mlx-vlm support for vision models on macOS ``` 已弃用的实现(包括 MeloTTS)位于 [`archive/`](./archive) 中,不再接入 CLI。 **关于 DeepFilterNet 的说明:** DeepFilterNet 用于 VAD 中的可选音频增强,需要 `numpy<2`,这与需要 `numpy>=2` 的 Pocket TTS 冲突。仅在您不使用 Pocket TTS 的环境中手动安装它。 ### 从源码安装 ``` git clone https://github.com/huggingface/speech-to-speech.git cd speech-to-speech uv sync ``` 这将以可编辑模式安装该包,并使 `speech-to-speech` CLI 可用。 ## 支持的组件 | 组件 | 后端 | 平台 | 安装 | |---|---|---|---| | VAD | [Silero VAD v5](https://github.com/snakers4/silero-vad) | 所有平台 | 内置 | | STT | [Parakeet TDT](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3)(默认) | 通过 nano-parakeet 支持 CUDA / CPU,通过 MLX 支持 Apple Silicon | 内置 | | STT | 通过 Transformers 支持 [Whisper](https://huggingface.co/docs/transformers/en/model_doc/whisper) | CUDA / CPU | 内置 | | STT | [Faster Whisper](https://github.com/SYSTRAN/faster-whisper) | CUDA / CPU | `faster-whisper` | | STT | [Lightning Whisper MLX](https://github.com/mustafaaljadery/lightning-whisper-mlx) | Apple Silicon | `whisper-mlx` | | STT | [MLX Audio Whisper](https://github.com/huggingface/mlx-audio) | Apple Silicon | macOS 上内置 | | STT | [Paraformer](https://github.com/modelscope/FunASR) | CUDA / CPU | `paraformer` | | LLM | 兼容 OpenAI 的 API (`responses-api`, `chat-completions`) | 托管提供商或自托管服务器 | 内置 | | LLM | [Transformers](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending) | CUDA / CPU | 内置 | | LLM | [mlx-lm](https://github.com/ml-explore/mlx-lm) | Apple Silicon | macOS 上内置 | | TTS | [Qwen3-TTS](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice)(默认) | Linux 上的 GGML / CUDA,macOS 上的 mlx-audio | 内置 | | TTS | [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) | CUDA / CPU, Apple Silicon | 非 macOS 上为 `kokoro`;macOS 上内置 | | TTS | [Pocket TTS](https://github.com/kyutai-labs/pocket-tts) | CPU / CUDA | `pocket` | | TTS | [ChatTTS](https://github.com/2noise/ChatTTS) | CUDA / CPU | `chattts` | | TTS | [MMS TTS](https://huggingface.co/docs/transformers/model_doc/mms) | CUDA / CPU | `facebook-mms` | 使用 `--stt`、`--llm_backend` 和 `--tts` 选择实现。运行 `speech-to-speech -h` 获取确切值和特定于后端的标志。 ## 运行模式 | 模式 | 传输 | 适用场景 | |---|---|---| | `realtime`(默认) | WebSocket,位于 `/v1/realtime` 的 OpenAI Realtime 协议 | 您正在针对标准语音 API 构建应用程序或设备。 | | `local` | 您机器的麦克风和扬声器 | 您想直接与 pipeline 对话,无需客户端。 | | `websocket` | 通过 WebSocket 传输原始 PCM | 您需要一个没有 Realtime 协议的极简自定义客户端。 | | `socket` | 通过 TCP 传输原始 PCM | 模型在远程服务器上运行,配合一个简单的麦克风/播放客户端。 | ### Realtime 服务器 ``` export OPENAI_API_KEY=... speech-to-speech ``` 这等效于: ``` speech-to-speech \ --thresh 0.6 \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --qwen3_tts_model_name Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \ --qwen3_tts_speaker Aiden \ --qwen3_tts_language auto \ --qwen3_tts_backend ggml \ --qwen3_tts_non_streaming_mode True \ --qwen3_tts_mlx_quantization 6bit \ --model_name gpt-5.4-mini \ --chat_size 30 \ --responses_api_stream \ --enable_live_transcription \ --mode realtime ``` 默认模型是通过 OpenAI Responses API 调用的 `gpt-5.4-mini`。使用 `--model_name` 覆盖它,并为其他兼容 OpenAI 的提供商或服务器设置 `--responses_api_base_url`。 ### 本地 Mac ``` speech-to-speech --local_mac_optimal_settings ``` 可选择使用特定的 LLM: ``` speech-to-speech \ --local_mac_optimal_settings \ --model_name mlx-community/Qwen3-4B-Instruct-2507-bf16 ``` 此设置: - 添加 `--device mps` 以将 MPS 用于所有模型。 - 将 Parakeet TDT 设置为 STT。 - 将 MLX LM 设置为 LLM 后端。 - 将 Qwen3-TTS 设置为 TTS,默认情况下使用 `mlx-audio` 和 `6bit` MLX 变体。 - 设置 `--mode local`。 `--tts pocket` 和 `--tts kokoro` 在 macOS 上也是有效的。 要在本地比较 MLX 量化变体: ``` python scripts/benchmark_tts.py \ --handlers qwen3 \ --iterations 3 \ --qwen3_mlx_quantizations bf16 4bit 6bit 8bit ``` ### WebSocket 1. 在 WebSocket 模式下运行 pipeline: speech-to-speech --mode websocket --ws_host 0.0.0.0 --ws_port 8765 2. 从您的客户端连接到 `ws://:8765`。发送原始音频字节,格式为 16 kHz、int16、单声道 PCM,并接收生成的音频字节。 ### TCP Socket TCP socket 模式特意保持极简。它流式传输原始 PCM 音频,但不提供完整的 Realtime API 功能集,包括中断处理、实时转录事件或工具调用事件。 1. 在服务器上运行 pipeline: speech-to-speech --mode socket --recv_host 0.0.0.0 --send_host 0.0.0.0 2. 在本地运行客户端以处理麦克风输入和播放: python scripts/listen_and_play.py --host <服务器的 IP 地址> ### Docker 安装 [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html),然后: ``` docker compose up ``` compose 文件将启动一个带有 Gemma 4 的 llama.cpp 服务器,启动 TCP socket 服务器,并公开端口 `8080`、`12345` 和 `12346`。 ## Realtime API Realtime 模式使用 OpenAI Realtime 协议通过 WebSocket 流式传输音频,并具有实时转录和低延迟话轮转换功能。服务器公开了 `/v1/realtime`,任何兼容 OpenAI Realtime 的客户端都可以连接: ``` from openai import OpenAI client = OpenAI( base_url="http://localhost:8765/v1", websocket_base_url="ws://localhost:8765/v1", api_key="not-needed", ) with client.realtime.connect(model="local") as conn: conn.send( { "type": "session.update", "session": { "type": "realtime", "instructions": "You are a helpful assistant.", "audio": { "input": { "turn_detection": { "type": "server_vad", "interrupt_response": True, } } }, }, } ) for event in conn: print(event.type) ``` 该服务器实现了核心 Realtime 事件集:入站包括 `input_audio_buffer.append`、`session.update`、`conversation.item.create`、`response.create` 和 `response.cancel`;出站包括语音开始/停止、流式转录、音频增量、工具调用和 `response.done`。完整的事件参考、架构和设计细节位于 [Realtime Engine README](./src/speech_to_speech/api/openai_realtime/README.md) 中。 ## LLM 后端 LLM 是 pipeline 中计算最密集且延迟最高的组件。大型模型的单次前向传递可能会主导端到端的响应时间,因此为您的硬件和延迟预算选择合适的后端非常重要。该 pipeline 支持: - **本地推理**:在 CUDA / CPU 上的 `transformers`,以及 Apple Silicon 上的 `mlx-lm`。 - **自托管服务器**:`responses-api` 和 `chat-completions` 可以指向本地的 [vLLM](https://github.com/vllm-project/vllm) 或 [llama.cpp](https://github.com/ggerganov/llama.cpp) 服务器。 - **提供商 API**:相同的后端可与 OpenAI、[HF Inference Providers](https://huggingface.co/inference-providers)、[OpenRouter](https://openrouter.ai) 和其他兼容 OpenAI 的提供商配合使用。 有两个 API 后端可用,它们共享相同的 `--responses_api_*` 连接标志: - `--llm_backend responses-api`(默认)针对 `/v1/responses`。 - `--llm_backend chat-completions` 针对 `/v1/chat/completions`。 下面的示例将用于本地 STT 的 Parakeet TDT 和用于本地 TTS 的 Qwen3-TTS 与不同的 LLM 后端搭配使用。 ### Responses API 后端 适用于任何实现 OpenAI Responses API 的提供商或服务器。将 `--responses_api_base_url` 指向该 endpoint 并相应地设置 `--model_name`: | 提供商 / 服务器 | `--responses_api_base_url` | `--responses_api_api_key` | |---|---|---| | OpenAI | 省略,使用 OpenAI 默认值 | `$OPENAI_API_KEY` | | HF Inference Providers | `https://router.huggingface.co/v1` | `$HF_TOKEN` | | OpenRouter | `https://openrouter.ai/api/v1` | `$OPENROUTER_API_KEY` | | vLLM | `http://localhost:8000/v1` | 省略或任意字符串 | | llama.cpp | `http://127.0.0.1:8080/v1` | 空字符串 | ``` # OpenAI speech-to-speech \ --mode local \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --qwen3_tts_mlx_quantization 6bit \ --model_name "gpt-4o-mini" \ --responses_api_api_key "$OPENAI_API_KEY" \ --responses_api_stream \ --enable_live_transcription ``` ``` # HF Inference Providers: 通过 Together 使用 Qwen3.5-9B speech-to-speech \ --mode local \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --qwen3_tts_mlx_quantization 6bit \ --model_name "Qwen/Qwen3.5-9B:together" \ --responses_api_base_url "https://router.huggingface.co/v1" \ --responses_api_api_key "$HF_TOKEN" \ --responses_api_stream \ --enable_live_transcription ``` ``` # HF Inference Providers: 通过 Groq 使用 GPT-oss-20B speech-to-speech \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --qwen3_tts_mlx_quantization 6bit \ --model_name "openai/gpt-oss-20b:groq" \ --responses_api_base_url "https://router.huggingface.co/v1" \ --responses_api_api_key "$HF_TOKEN" \ --responses_api_stream \ --enable_live_transcription ``` ### Chat Completions 后端 配置与 `responses-api` 相同,重用相同的 `--responses_api_*` 连接标志,但与 `/v1/chat/completions` 而不是 `/v1/responses` 通信。在以下情况优先使用它: - 提供商在 Responses 路径上忽略 `chat_template_kwargs.enable_thinking` 并且需要一个 `ing_effort` 旋钮来抑制推理,或者 - 服务器的 Responses 流式工具调用路径不可靠,而其 Chat Completions 工具调用流式传输很稳定。这对于某些 vLLM 构建很有用;参见 [#312](https://github.com/huggingface/speech-to-speech/issues/312)。 添加 `--responses_api_reasoning_effort none` 以在 chat-template 标志无效的提供商上禁用推理: ``` # vLLM 提供支持 tool calling 的 Qwen 模型 speech-to-speech \ --mode realtime \ --stt parakeet-tdt \ --llm_backend chat-completions \ --tts qwen3 \ --model_name "Qwen/Qwen3-4B-Instruct-2507" \ --responses_api_base_url "http://localhost:8000/v1" \ --responses_api_stream ``` ``` # 通过 Cerebras 上的 HF router 使用 Gemma 4 31B,并禁用 reasoning 以实现低语音延迟 speech-to-speech \ --mode realtime \ --stt parakeet-tdt \ --llm_backend chat-completions \ --tts qwen3 \ --model_name "google/gemma-4-31B-it:cerebras" \ --responses_api_base_url "https://router.huggingface.co/v1" \ --responses_api_api_key "$HF_TOKEN" \ --responses_api_reasoning_effort none \ --responses_api_stream ``` ### 完全本地 在单独的 llama.cpp 进程中运行 LLM,以实现最简单的完全本地设置,如 [Reachy Mini 本地对话指南](https://huggingface.co/blog/local-reachy-mini-conversation) 中所示: ``` # 终端 1:llama.cpp 提供 Gemma 4 服务 llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full ``` ``` # 终端 2:使用该本地 LLM 服务器进行 speech-to-speech speech-to-speech \ --mode realtime \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --model_name "ggml-org/gemma-4-E4B-it-GGUF" \ --responses_api_base_url "http://127.0.0.1:8080/v1" \ --responses_api_api_key "" \ --responses_api_stream \ --enable_live_transcription ``` 当您想直接通过运行服务器的机器进行对话时,可以使用 `--mode local` 代替 `--mode realtime`。在 Apple Silicon 上使用 `--llm_backend mlx-lm` 或在 CUDA / CPU 上使用 `--llm_backend transformers`,进程内本地后端仍然可用。 ## 多语言支持 语言覆盖范围取决于您选择的 STT 和 TTS 后端,而不是 pipeline 本身: | 组件 | 后端 | 语言 | |---|---|---| | STT | Parakeet TDT(默认) | 25 种欧洲语言 | | STT | Whisper / Whisper MLX / Faster Whisper | 广泛的多语言覆盖,取决于所选的 Whisper checkpoint | | STT | Paraformer | 取决于所选的 FunASR checkpoint;默认以中文为主 | | TTS | Qwen3-TTS(默认) | 多语言,默认使用 `--qwen3_tts_language auto` | | TTS | Kokoro | 多种语言/语音映射,取决于后端可用性 | | TTS | ChatTTS | 英语和中文 | | TTS | MMS TTS | 通过 MMS checkpoint 实现广泛的多语言覆盖 | 确保您搭配的 STT、LLM 和 TTS 都支持您的目标语言。两种使用模式: - **单一语言**:将 `--language` 设置为目标语言代码。默认为 `en`。 - **语言切换**:设置 `--language auto`。STT 会检测每个语音提示的语言并将其转发给 LLM。可选择添加 `--enable_lang_prompt` 以附加一条“Please reply to my message in ...”的指令。它默认为 `False`;大型 LLM 通常会从上下文中推断语言,但明确的指令可以帮助较小的模型。 自动语言检测: ``` speech-to-speech \ --stt parakeet-tdt \ --language auto \ --llm_backend mlx-lm \ --model_name "mlx-community/Qwen3-4B-Instruct-2507-bf16" ``` 单一的非英语语言,在此示例中为中文: ``` speech-to-speech \ --stt whisper-mlx \ --stt_model_name large-v3 \ --language zh \ --llm_backend mlx-lm \ --model_name mlx-community/Qwen3-4B-Instruct-2507-bf16 ``` 这两个命令也可以在 `--local_mac_optimal_settings` 之上运行;显式的 `--stt` 标志会覆盖其设置的默认值。 ## Pocket TTS 来自 Kyutai Labs 的 Pocket TTS 提供带有语音克隆的流式 TTS: ``` speech-to-speech \ --tts pocket \ --pocket_tts_voice jean \ --pocket_tts_device cpu ``` 可用的语音预设:`alba`、`marius`、`javert`、`jean`、`fantine`、`cosette`、`eponine`、`azelma`。自定义语音文件和 Hugging Face 路径也适用。 ## CLI 参考 所有 CLI 参数的参考位于 [arguments classes](./src/speech_to_speech/arguments_classes) 和 `speech-to-speech -h` 中。 ### 模块级参数 参见 [ModuleArguments](./src/speech_to_speech/arguments_classes/module_arguments.py)。它允许设置: - 一个通用的 `--device`,如果每个部分都应运行在同一个设备上 - `--mode`:`realtime`(默认)、`local`、`socket` 或 `websocket` - STT 实现 (`--stt`) - LLM 后端 (`--llm_backend`:`transformers`、`mlx-lm`、`responses-api` 或 `chat-completions`) - TTS 实现 (`--tts`) - 日志级别 - realtime pipeline 池大小 (`--num_pipelines`) ### VAD 参数 参见 [VADHandlerArguments](./src/speech_to_speech/arguments_classes/vad_arguments.py)。值得注意的选项: - `--thresh`:触发语音活动检测的阈值。 - `--min_speech_ms`:被视为语音的已检测语音活动的最短持续时间。 - `--min_speech_continuation_ms`:在重新打开窗口内,维持可重新打开的软结束、未提交话轮的持续语音的迟滞阈值。默认且推荐的搭配是 `--min_speech_ms 384 --min_speech_continuation_ms 192`。 - `--min_silence_ms`:用于分割语音的静音间隔的最短长度。默认值为 64 毫秒。 - `--short_segment_merge_ms`:用于拼接每个都比 `--min_speech_ms` 短的相邻 VAD 分段的可选合并窗口。 - `--unanswered_reopen_ms`:对尚未收到任何助手输出的软结束推测性话轮保持可重新打开状态的时间的合理上限。 ### STT、LLM 和 TTS 参数 每个 STT、LLM 和 TTS 实现都公开了 `model_name`、`torch_dtype` 和 `device`。STT 和 TTS 参数使用 handler 前缀,例如 `--stt_model_name` 或 `--qwen3_tts_device`。LLM 模型选择和聊天设置通过无前缀的标志在各个后端之间共享,例如 `--model_name` 和 `--chat_size`;特定于后端的标志对于 `responses-api` 和 `chat-completions` 后端使用 `responses_api_` 前缀,对于本地后端使用 `llm_` 前缀。 例如: ``` # 本地 transformers/mlx-lm backend --model_name google/gemma-2b-it # 兼容 OpenAI 的 backend --llm_backend responses-api --model_name deepseek-chat --responses_api_base_url https://api.deepseek.com ``` ### 生成参数 其他生成参数可以使用 handler 前缀加上 `_gen_` 进行设置,例如 `--stt_gen_max_new_tokens 128` 或 `--llm_gen_temperature 0.7`。尚未公开的参数可以添加到相应的参数类中。 ## 贡献指南 欢迎提交 Issues 和 PR。很好的起点是 [开放的 issues](https://github.com/huggingface/speech-to-speech/issues)。对于较大的更改,请先开启一个 issue 讨论该方法。 对于本地开发: ``` uv sync pytest ruff check ``` ## 引用 如果您使用了此 pipeline,请同时引用您运行的组件模型。默认项为: ### Silero VAD ``` @misc{SileroVAD, author = {Silero Team}, title = {Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier}, year = {2021}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {\url{https://github.com/snakers4/silero-vad}}, email = {hello@silero.ai} } ``` ### Parakeet TDT ``` @misc{parakeet-tdt, author = {NVIDIA}, title = {Parakeet TDT 0.6B v3}, publisher = {Hugging Face}, howpublished = {\url{https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3}} } ``` ### Qwen3-TTS ``` @misc{qwen3-tts, author = {Qwen Team}, title = {Qwen3-TTS}, publisher = {Hugging Face}, howpublished = {\url{https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice}} } ``` 诸如 Kokoro、Pocket TTS、ChatTTS、Whisper 变体、Paraformer 和 MMS 等可选后端的引用位于各自的 [组件 README](./src/speech_to_speech) 中。
标签:DLL 劫持, IPv6支持, Python, 人工智能, 凭据扫描, 大语言模型, 开源模型, 无后门, 用户模式Hook绕过, 系统调用监控, 语音代理, 语音合成, 语音识别, 请求拦截, 逆向工具