WhisperLiveKit:低延迟自托管语音转文本工具,带实时说话人识别
如果你需要一款能实时将语音转换成文字,还能区分不同说话人的工具,那么WhisperLiveKit(简称WLK)可能正是你在找的。它是一个开源工具,主打超低延迟、自托管,还支持多种语言的实时转录和翻译,无论是会议记录、无障碍辅助还是内容创作,都能派上用场。
什么是WhisperLiveKit?
简单说,WhisperLiveKit是一款专注于实时语音处理的工具。它能把你说的话即时转换成文字,还能认出是谁在说话——这就是“说话人识别”功能。更重要的是,它的延迟非常低,几乎能做到“说出来就显示”,而且你可以把它部署在自己的服务器上,不用担心数据隐私问题。

可能你会问,为什么不直接用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为什么能同时处理多个用户的语音?看看它的架构就明白了:

简单来说,它的后端能同时应对多个用户的连接。当你说话时,语音活动检测(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证书参数,具体看后面的“参数配置”部分。 -
命令行里输入 wlk或whisperlivekit-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扩展:
-
进入代码库的 chrome-extension目录,按照里面的说明安装扩展。 -
安装后,在需要转录的网页上启用扩展,就能实时获取音频并转录了。

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 |
流式处理策略:1或simulstreaming(用AlignAtt),2或localagreement(用LocalAgreement) |
simulstreaming |
--backend |
Whisper实现选择:auto(自动选最优,Mac优先MLX,否则Faster-Whisper),也可以指定mlx-whisper、faster-whisper、whisper或openai-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.1、10.100.0.0/16) |
None |
--pcm-input |
是否接收原始PCM音频(s16le格式),此时会跳过FFmpeg,前端用AudioWorklet | False |
--lora-path |
LoRA适配器权重的路径或Hugging Face仓库ID(仅--backend whisper支持) |
None |
翻译相关参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--nllb-backend |
翻译后端,可选transformers或ctranslate2 |
ctranslate2 |
--nllb-size |
翻译模型大小,可选600M或1.3B |
600M |
说话人识别相关参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--diarization-backend |
说话人识别后端,可选diart或sortformer |
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 |
解码器类型,可选beam或greedy |
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 |
缓冲截断策略,可选sentence或segment |
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的优势在于低延迟、自托管和多语言支持,如果你需要一款能本地部署、实时处理语音的工具,不妨试试它——从安装到使用,整个过程并不复杂,而且开源免费,还能根据自己的需求定制功能。

