WhisperLiveKit:低延迟自托管语音转文本工具,带实时说话人识别

如果你需要一款能实时将语音转换成文字,还能区分不同说话人的工具,那么WhisperLiveKit(简称WLK)可能正是你在找的。它是一个开源工具,主打超低延迟、自托管,还支持多种语言的实时转录和翻译,无论是会议记录、无障碍辅助还是内容创作,都能派上用场。

什么是WhisperLiveKit?

简单说,WhisperLiveKit是一款专注于实时语音处理的工具。它能把你说的话即时转换成文字,还能认出是谁在说话——这就是“说话人识别”功能。更重要的是,它的延迟非常低,几乎能做到“说出来就显示”,而且你可以把它部署在自己的服务器上,不用担心数据隐私问题。

WhisperLiveKit Demo

可能你会问,为什么不直接用Whisper模型处理音频片段呢?其实Whisper原本是为完整的语音片段设计的,比如一整段录音。如果强行分割成小片段处理,很容易丢失上下文,甚至把一个词劈成两半,转录效果会很差。而WhisperLiveKit用了最新的实时语音处理技术,能智能缓冲和增量处理音频,避免了这些问题。

背后的核心技术

WhisperLiveKit能做到低延迟、高准确度,离不开这些前沿技术的支持:

  • Simul-Whisper/Streaming(2025年最先进):用AlignAtt策略实现超低延迟转录,简单说就是能边听边处理,不用等一句话说完。
  • NLLW(2025年):基于NLLB模型开发,支持200多种语言的实时互译,无论是把中文翻译成法语,还是把西班牙语翻译成日语,都能胜任。
  • WhisperStreaming(2023年最先进):用LocalAgreement策略降低延迟,让转录更流畅。
  • Streaming Sortformer(2025年最先进):进阶的实时说话人区分技术,能更精准地判断“谁在说话”。
  • Diart(2021年最先进):另一款实时说话人识别工具,作为技术补充。
  • Silero VAD(2024年):企业级的语音活动检测技术,能准确判断“有没有人在说话”,没人说话时就暂停处理,节省资源。

架构:它是怎么工作的?

想知道WhisperLiveKit为什么能同时处理多个用户的语音?看看它的架构就明白了:

Architecture

简单来说,它的后端能同时应对多个用户的连接。当你说话时,语音活动检测(VAD)会先判断“是否有声音”,没人说话时就减少处理,节省服务器资源;有人说话时,就把音频传给处理引擎,实时转换成文字,同时结合说话人识别技术标记是谁说的,最后把结果返回给你。

安装:三步搞定部署

基础安装

不管你用的是Windows、Mac还是Linux,第一步都是安装WhisperLiveKit。最简单的方法是用pip:

pip install whisperlivekit

如果你想获取最新版本,可以直接从代码库安装:

# 克隆代码库
git clone https://github.com/QuentinFuxa/WhisperLiveKit.git
# 进入目录
cd WhisperLiveKit
# 安装开发版本
pip install -e .

可选依赖:让工具更高效

根据你的设备和需求,还可以安装这些可选依赖,提升性能:

功能需求 安装命令 适用场景
Windows/Linux优化 pip install faster-whisper 让转录速度更快,适合这两个系统的用户
Apple Silicon优化 pip install mlx-whisper 苹果M系列芯片用户专用,提升本地处理速度
翻译功能 pip install nllw 需要在转录的同时翻译语言时安装
说话人识别(推荐) pip install git+https://github.com/NVIDIA/NeMo.git@main#egg=nemo_toolkit[asr] 启用说话人区分功能时需要
OpenAI API支持 pip install openai 想用OpenAI的API处理转录时安装
说话人识别(备选) pip install diart 作为NeMo的替代方案,不推荐优先使用

快速开始:5分钟体验实时转录

第一步:启动转录服务器

打开终端,输入命令启动服务器。这里以基础模型和英语为例:

wlk --model base --language en
  • --model 后面跟模型大小(比如base、small、medium、large-v3),模型越大,准确率越高,但需要的电脑性能也越强。
  • --language 后面跟语言代码(比如en是英语,zh是中文,fr是法语),完整的语言列表可以看这里

第二步:在浏览器中使用

打开浏览器,访问 http://localhost:8000,然后开始说话——你会看到文字实时出现在页面上,就这么简单!

小提示

  • 如果你需要用HTTPS(比如在生产环境),可以在启动时加上SSL证书参数,具体看后面的“参数配置”部分。
  • 命令行里输入 wlkwhisperlivekit-server 效果一样,随便用哪个都行。
  • 如果启动时遇到GPU或环境问题,可以参考 troubleshooting指南

进阶用法:满足不同场景需求

1. 命令行:定制你的转录服务

除了基础用法,你还可以通过命令行参数定制功能。比如:

  • 翻译功能:把法语实时翻译成丹麦语

    wlk --model large-v3 --language fr --target-language da
    
  • 公开访问+说话人识别:让服务器在所有网络接口上运行(别人也能访问),并启用说话人识别

    wlk --host 0.0.0.0 --port 80 --model medium --diarization --language fr
    

2. 网页捕获音频:Chrome扩展

如果你想在网页上捕获音频并转录(比如在线会议、网络课程),可以用它的Chrome扩展:

  1. 进入代码库的 chrome-extension 目录,按照里面的说明安装扩展。
  2. 安装后,在需要转录的网页上启用扩展,就能实时获取音频并转录了。
WhisperLiveKit Chrome Extension Demo

3. Python API:集成到你的程序中

如果想把WhisperLiveKit的功能集成到自己的Python项目里,可以用它的API。下面是一个简单的例子:

import asyncio
from contextlib import asynccontextmanager

from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse

from whisperlivekit import AudioProcessor, TranscriptionEngine, parse_args

transcription_engine = None

@asynccontextmanager
async def lifespan(app: FastAPI):
    # 初始化转录引擎,使用medium模型,启用说话人识别,语言设为英语
    global transcription_engine
    transcription_engine = TranscriptionEngine(model="medium", diarization=True, lan="en")
    yield

app = FastAPI(lifespan=lifespan)

async def handle_websocket_results(websocket: WebSocket, results_generator):
    # 把转录结果通过WebSocket发给前端
    async for response in results_generator:
        await websocket.send_json(response)
    await websocket.send_json({"type": "ready_to_stop"})

@app.websocket("/asr")
async def websocket_endpoint(websocket: WebSocket):
    global transcription_engine

    # 为每个连接创建一个音频处理器
    audio_processor = AudioProcessor(transcription_engine=transcription_engine)    
    results_generator = await audio_processor.create_tasks()
    results_task = asyncio.create_task(handle_websocket_results(websocket, results_generator))
    await websocket.accept()
    while True:
        # 接收音频数据并处理
        message = await websocket.receive_bytes()
        await audio_processor.process_audio(message)        

更完整的例子可以看代码库中的 basic_server

4. 前端实现:自定义你的界面

WhisperLiveKit自带一个HTML/JavaScript的前端示例,在 whisperlivekit/web/live_transcription.html 目录下。你也可以直接在Python中导入它:

from whisperlivekit import get_inline_ui_html
page = get_inline_ui_html()  # 获取前端HTML代码

然后把这段代码集成到你的网页中,就能得到一个现成的转录界面。

参数配置:详细了解每个选项

启动服务器时,你可以通过各种参数定制功能。下面是所有可用参数的详细说明:

基础参数

参数 说明 默认值
--model Whisper模型大小,可选值参考这里 small
--model-path 本地模型文件路径或Hugging Face仓库ID,会覆盖--model参数 None
--language 转录的语言(代码列表见这里),设为auto会自动检测(但可能偏向英语) auto
--target-language 翻译目标语言(支持200多种,列表见这里),如果想翻译成英语,也可以用--direct-english-translation None
--diarization 是否启用说话人识别 False
--backend-policy 流式处理策略:1simulstreaming(用AlignAtt),2localagreement(用LocalAgreement) simulstreaming
--backend Whisper实现选择:auto(自动选最优,Mac优先MLX,否则Faster-Whisper),也可以指定mlx-whisperfaster-whisperwhisperopenai-api(仅LocalAgreement支持) auto
--no-vac 禁用语音活动控制器(不建议) False
--no-vad 禁用语音活动检测(不建议) False
--warmup-file 模型预热用的音频文件路径 jfk.wav
--host 服务器绑定的主机地址 localhost
--port 服务器端口 8000
--ssl-certfile SSL证书文件路径(用于HTTPS) None
--ssl-keyfile SSL私钥文件路径(用于HTTPS) None
--forwarded-allow-ips 允许反向代理的IP或IP段(如127.0.0.110.100.0.0/16 None
--pcm-input 是否接收原始PCM音频(s16le格式),此时会跳过FFmpeg,前端用AudioWorklet False
--lora-path LoRA适配器权重的路径或Hugging Face仓库ID(仅--backend whisper支持) None

翻译相关参数

参数 说明 默认值
--nllb-backend 翻译后端,可选transformersctranslate2 ctranslate2
--nllb-size 翻译模型大小,可选600M1.3B 600M

说话人识别相关参数

参数 说明 默认值
--diarization-backend 说话人识别后端,可选diartsortformer sortformer
--disable-punctuation-split 禁用基于标点的分割(0.2.15/0.2.16版本暂不可用) False
--segmentation-model Diart用的分割模型ID(可选模型见这里 pyannote/segmentation-3.0
--embedding-model Diart用的嵌入模型ID(可选模型见这里 speechbrain/spkrec-ecapa-voxceleb

SimulStreaming后端参数

参数 说明 默认值
--disable-fast-encoder 禁用Faster Whisper或MLX Whisper的编码器(适合GPU内存不足时) False
--custom-alignment-heads 自定义对齐头(用scripts/determine_alignment_heads.py提取) None
--frame-threshold AlignAtt的帧阈值(值越小越快,越大越准) 25
--beams 波束搜索的数量(1为贪婪解码) 1
--decoder 解码器类型,可选beamgreedy auto
--audio-max-len 最大音频缓冲长度(秒) 30.0
--audio-min-len 最小处理音频长度(秒) 0.0
--cif-ckpt-path 词边界检测的CIF模型路径 None
--never-fire 从不截断未完成的词 False
--init-prompt 模型的初始提示 None
--static-init-prompt 不滚动的静态提示 None
--max-context-tokens 最大上下文 tokens 数(取决于模型,通常是448) 模型默认值

WhisperStreaming后端参数

参数 说明 默认值
--confidence-validation 是否用置信度分数加速验证 False
--buffer_trimming 缓冲截断策略,可选sentencesegment segment

生产环境部署指南

如果你想在正式环境中使用WhisperLiveKit(比如公司内部会议系统、产品集成),可以按以下步骤部署:

1. 服务器设置

安装生产级ASGI服务器,并启动多个工作进程以提高并发能力:

# 安装依赖
pip install uvicorn gunicorn
# 启动服务器(4个工作进程)
gunicorn -k uvicorn.workers.UvicornWorker -w 4 your_app:app

这里的your_app:app需要替换成你的Python应用入口(比如前面提到的basic_server)。

2. 前端部署

定制html示例中的前端界面,确保WebSocket连接地址正确(比如生产环境的域名)。

3. Nginx配置(推荐)

用Nginx作为反向代理,处理静态资源和WebSocket转发,提升稳定性:

server {
    listen 80;
    server_name your-domain.com;  # 替换成你的域名

    location / {
        proxy_pass http://localhost:8000;  # 指向WhisperLiveKit服务器
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

4. HTTPS支持

如果需要安全连接(比如在线服务),要使用wss://协议(WebSocket的HTTPS版本),并在启动服务器时指定SSL证书:

wlk --ssl-certfile /path/to/cert.pem --ssl-keyfile /path/to/key.pem

Docker部署:更简单的跨平台方案

如果不想手动配置环境,可以用Docker快速部署,支持GPU和CPU两种模式。

前提条件

  • 安装Docker
  • 若用GPU加速,需要安装NVIDIA Docker运行时

快速启动

GPU加速(推荐,处理速度更快)

# 构建镜像
docker build -t wlk .
# 启动容器(使用所有GPU,映射8000端口)
docker run --gpus all -p 8000:8000 --name wlk wlk

CPU仅用(适合没有GPU的设备)

# 构建CPU镜像
docker build -f Dockerfile.cpu -t wlk .
# 启动容器
docker run -p 8000:8000 --name wlk wlk

自定义配置

启动容器时可以加参数,比如指定模型和语言:

docker run --gpus all -p 8000:8000 --name wlk wlk --model large-v3 --language fr

高级构建选项

构建镜像时可以用--build-arg添加额外配置:

  • 安装额外依赖:docker build --build-arg EXTRAS="whisper-timestamped" -t wlk .
  • 预加载模型缓存:docker build --build-arg HF_PRECACHE_DIR="./.cache/" -t wlk .
  • 加入Hugging Face令牌(用于下载受限模型):docker build --build-arg HF_TKN_FILE="./token" -t wlk .

内存要求

大模型(如large-v3)需要较多内存,确保Docker运行时有足够的内存分配。

常见问题(FAQ)

1. WhisperLiveKit支持哪些语言?

转录支持的语言列表可以看这里,翻译功能支持200多种语言,列表见这里

2. 如何启用说话人识别?

启动服务器时加上--diarization参数即可,比如:

wlk --model medium --diarization --language zh

如果用Diart作为后端,需要先在Hugging Face接受模型的使用条件(分割模型嵌入模型),然后用huggingface-cli login登录。

3. 模型大小怎么选?

  • 小模型(base、small):速度快,适合CPU或低配置设备,准确率稍低。
  • 大模型(medium、large-v3):准确率高,适合GPU设备,处理速度较慢。

具体推荐可以参考这里

4. 可以在浏览器外使用吗?

可以。除了网页界面,你还可以通过Python API集成到其他程序,或者用Chrome扩展捕获任意网页的音频。

5. 为什么转录会有延迟?

延迟受模型大小、设备性能、网络速度影响。如果延迟太高,可以尝试:

  • 换用更小的模型(如small代替large-v3)
  • 降低--frame-threshold值(SimulStreaming策略)
  • 启用硬件加速(如GPU、Apple Silicon的MLX)

应用场景:WhisperLiveKit能帮你做什么?

  • 会议记录:实时转录多人会议内容,自动区分说话人,会后直接导出文字稿。
  • 无障碍辅助:帮助听障人士实时获取对话内容,提升沟通效率。
  • 内容创作:自动转录播客、视频中的语音,快速生成字幕或文字素材。
  • 客户服务:转录客服通话,结合说话人识别区分客服和用户,方便后续分析。

WhisperLiveKit的优势在于低延迟、自托管和多语言支持,如果你需要一款能本地部署、实时处理语音的工具,不妨试试它——从安装到使用,整个过程并不复杂,而且开源免费,还能根据自己的需求定制功能。