计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
vibe-voice【效率与协作】Run Microsoft's VibeVoice, open-source voice AI for long-form speech recognition with speaker labels and timestamps, plus real-time text-to-speech. Use when: transcribing meetings or podcasts with diarization, adding hotwords for domain terms, streaming speech recognition, serving ASR through vLLM, or building a voice assistant with a 0.5B streaming …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
VibeVoice is Microsoft's open-source family of voice models (MIT licence). As of October 2026 the repository ships:
microsoft/VibeASR.cpp engine), no GPU needed.Important: there is no VibeVoiceTTS or VibeVoiceASR Python class and no pip install vibevoice release from Microsoft. The PyPI package of that name is not the Microsoft project. Install from the GitHub clone, or use the Hugging Face Transformers integration for ASR.
VibeVoice-ASR is in Transformers 5.3 and later. The repo itself pins transformers<5, so keep the two in separate virtual environments.
python -m venv .venv-asr && source .venv-asr/bin/activate
pip install "transformers>=5.3.0" accelerate librosa
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
inputs = processor.apply_transcription_request(
audio="team_standup.wav",
prompt="Participants: Priya Raman, Tomasz Wozniak. Terms: Kubernetes, Grafana",
).to(model.device, model.dtype)
output_ids = model.generate(**inputs)
generated = output_ids[:, inputs["input_ids"].shape[1]:]
segments = processor.decode(generated, return_format="parsed")[0]
for s in segments:
print(f"[{s['Start']:.1f}-{s['End']:.1f}s] Speaker {s['Speaker']}: {s['Content']}")
return_format is "parsed" (list of dicts with Start, End, Speaker, Content), "transcription_only" (plain text) or raw. If the model output is not valid JSON, the raw string comes back unchanged.prompt argument is the context/hotword channel. Pass a list of audio files and a list of prompts of equal length for batches (use None for no prompt).git clone https://github.com/microsoft/VibeVoice.git && cd VibeVoice
pip install -e . # realtime TTS needs: pip install -e .[streamingtts]
apt install ffmpeg # the demos use it to decode audio
python demo/vibevoice_asr_inference_from_file.py \
--model_path microsoft/VibeVoice-ASR --audio_files team_standup.wav
python demo/vibevoice_asr_gradio_demo.py --model_path microsoft/VibeVoice-ASR --share
NVIDIA's PyTorch container (24.07 to 25.12) is the verified environment; install flash-attn if the container lacks it.
python demo/vibevoice_asr_streaming_inference_from_file.py \
--model_path microsoft/VibeVoice-ASR-Streaming-7B --audio_files call.wav \
--context_info "Microsoft,VibeVoice"
python demo/vibevoice_asr_streaming_fastapi_demo.py --model_path microsoft/VibeVoice-ASR-Streaming-7B
The FastAPI demo serves a page on http://localhost:7870 that keeps a WebSocket open while you speak. Chunk size is read from the checkpoint's preprocessor_config.json.
bash demo/download_experimental_voices.sh # optional extra voices
python demo/realtime_model_inference_from_file.py \
--model_path microsoft/VibeVoice-Realtime-0.5B \
--txt_path demo/text_examples/1p_vibevoice.txt --speaker_name Carter
python demo/vibevoice_realtime_demo.py --model_path microsoft/VibeVoice-Realtime-0.5B # websocket demo
Voices are shipped as embedded prompts; custom voice cloning is not offered by Microsoft for this model.
docs/vibevoice-vllm-asr.md describes a plugin with an OpenAI-compatible /v1/chat/completions endpoint. From a clone of the repo:
docker run -d --gpus all --name vibevoice-vllm --ipc=host -p 127.0.0.1:8000:8000 \
-v $(pwd):/app -w /app --entrypoint bash vllm/vllm-openai:v0.14.1 \
-c "python3 /app/vllm_plugin/scripts/start_server.py"
docker exec -it vibevoice-vllm python3 vllm_plugin/tests/test_api.py /app/audio.wav --hotwords "Microsoft,VibeVoice"
Add --dp N for N replicas or --tp N to split one model over N GPUs. Audio files must sit inside the mounted directory.
Request: "Transcribe standup.wav and tell me who said what, and make sure Grafana and Kubernetes are spelled right."
Use the Transformers snippet above with prompt="Terms: Grafana, Kubernetes" and return_format="parsed". Result: a list of segments such as [0.0-3.4s] Speaker 0: Let's review the Q3 numbers. Speaker ids are numbers, not names; map them yourself afterwards.
Request: "I want text on screen while the customer is still talking."
Start demo/vibevoice_asr_streaming_fastapi_demo.py with the streaming checkpoint, open http://localhost:7870, and record from the microphone. Text arrives once per chunk over the WebSocket. For a file test, run the ..._streaming_inference_from_file.py script; each chunk prints as it is emitted.
test_api_auto_recover.py for that.VibeVoiceTTS.from_pretrained, synthesize_conversation): they do not exist in the repository.