ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用LFM3-Audio-2B实现语音对话:Voice Chat完整实践指南,从语音提问到文本+语音交错回答

用LFM3-Audio-2B实现语音对话:Voice Chat完整实践指南,从语音提问到文本+语音交错回答
  • 人工智能
  • 大模型
  • 多模态
  • 语音
  • 音频
  • 本地部署

【免费下载链接】LFM3-Audio-2B

项目地址:https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM3-Audio-2B
点击查看免费下载

LFM3-Audio-2B 是 Liquid AI 推出的 20 亿参数全模态语音大模型,可以在笔记本电脑和边缘设备上本地运行,支持语音提问、文本与语音交错的流式回答(Voice Chat),以及多语言语音合成、转写和工具调用。本文面向新手,带你从安装环境到跑通第一次语音对话,完整走一遍 Voice Chat 实践流程,并解释"文本+语音交错输出"背后的原理与关键参数。

一、LFM3-Audio-2B 是什么:本地可跑的语音对话大模型

LFM3-Audio-2B 可以理解为"小而全"的语音助手底座:

项目说明
参数量2B(可在笔记本本地运行)
输入文本或音频(16 kHz 采样率)
输出文本、24 kHz 语音,或文本+语音交错
上下文长度32K tokens
流式能力因果音频编码 + 增量 prefill,首 token 延迟可低至 50 ms
语音语言中、英(美/英)、日、韩、法、德、西等 19 种语言/地区
架构LFM3 backbone + 因果音频编码器 + LiquidCodec 语音分词器

相比同类模型,它在语音合成质量(UTMOSv2 3.83)、多语言转写(FLEURS 平均错误率 6.03)和口语指令遵循(VoiceBench 73.13)上都位居第一梯队,详细数据见 README.md。

二、为什么 Voice Chat 值得做:三种回答模式怎么选

LFM3-Audio-2B 对同一个语音提问,支持三种回答方式,通过系统提示词 + 生成参数切换:

  • 🗣️Voice Chat(本文主角):系统提示词Respond with interleaved text and audio.,模型以对话风格同时输出文本和语音;
  • 📝纯文本回答:预填<think>(先推理再回答)或<think></think>(直接回答),并设置suppress_mixed=True, suppress_audio_out=True;
  • 🎙️纯语音合成(TTS):系统提示词Perform TTS in <语言> using a <voice> voice.。
模式系统提示词关键参数
交错语音对话Respond with interleaved text and audio.audio_temperature=1.0, audio_top_k=128, audio_repetition_penalty=1.1
纯文本不需要(或用Perform ASR.等)suppress_mixed=True, suppress_audio_out=True
TTSPerform TTS in ...同交错模式的音频采样参数

三、运行环境与模型准备:最快安装步骤

1. 一键安装依赖(GPU 推理)

pip install "transformers>=5.20.2" torch accelerate librosa soundfile

模型采用trust_remote_code方式加载自定义代码,推理框架源码在 modeling_lfm3_audio.py,处理器在 processing_lfm3_audio.py,音频特征提取在 feature_extraction_lfm3_audio.py。

2. 按硬件选择模型变体

硬件方案适用框架
GPUBF16 权重(即本仓库)vLLM / SGLang / Transformers
CPU / GPUGGUF 量化llama.cpp
Apple SiliconMLX 4-bitMLX-VLM
跨平台ONNXONNX Runtime

💡 提示:LiquidCodec 解码速度约为单 CPU 线程(Apple M4 Max)87 倍实时,所以即便没有 GPU,语音"播放边生成"也完全可行。

四、Voice Chat 实践:从语音提问到文本+语音交错回答

以下示例假设你已经有一段英语语音文件question.wav(换成你自己的即可)。

第 1 步:加载模型与处理器

import torch, soundfile as sf from transformers import AutoModelForMultimodalLM, AutoProcessor model_id = "LiquidAI/LFM3-Audio-2B" device = "cuda" if torch.cuda.is_available() else "cpu" dtype = torch.bfloat16 if device == "cuda" else torch.float32 model = AutoModelForMultimodalLM.from_pretrained( model_id, dtype=dtype, device_map=device, trust_remote_code=True ).eval() processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) codec = processor.audio_tokenizer.to(device=device).eval() # 权重来自 audio_tokenizer/

这里codec就是 LiquidCodec 语音解码器,源码见 modeling_liquid_codec.py,其权重位于 audio_tokenizer/ 目录。

第 2 步:构造"语音提问 + 交错回答"的对话

Voice Chat 有两个关键约定:

  1. 系统提示词用Respond with interleaved text and audio.;
  2. assistant 轮预填特殊标记<|mixed_start|>,告诉模型"这次要输出混合模态"。
conversation = [ {"role": "system", "content": "Respond with interleaved text and audio."}, {"role": "user", "content": [{"type": "audio", "audio": "question.wav"}]}, {"role": "assistant", "content": "<|mixed_start|>"}, ] inputs = processor.apply_chat_template( conversation, continue_final_message=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(device)

对话模板的细节可以查看 chat_template.jinja,模型结构配置见 config.json(如codebooks=12、interleaved_n_audio=12等交错生成参数)。

第 3 步:生成并保存"文本 + 24 kHz 语音"双通道回复

with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=1024, audio_temperature=1.0, audio_top_k=128, audio_repetition_penalty=1.1, audio_repetition_window=4096, return_dict_in_generate=True, ) text = processor.decode( outputs.sequences[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True, ) waveform = codec.decode( outputs.audio_codes[:1, :, :outputs.audio_lengths[0]] ).audio_values[0] # 24 kHz print(text) sf.write("reply.wav", waveform.float().cpu().numpy(), 24_000)

运行后你会得到一份文本text和一份reply.wav——这就是"文本+语音交错"的完整回答。

五、交错输出是怎么做到的:看懂架构图

整条链路分三段理解:

  1. 输入侧:音频先做 128 维 log-mel 特征(16 kHz,参数见 feature_extraction_lfm3_audio.py),再进入因果音频编码器。编码器采用滑动窗口注意力 + 短卷积,内存占用有界,且完全因果——你说话时它就在预填充,所以说完后几乎不用等待;
  2. 骨干侧:LFM3 backbone(24 层、hidden 2048,配置见 configuration_lfm3_audio.py)同时生成文本 token 和语音 token,并按interleaved_n_text=6 / interleaved_n_audio=12的节奏交错排布;
  3. 输出侧:LiquidCodec 用 12 个离散 token 表示 80 ms 语音,并支持流式增量解码——边生成边出声,对话保持跟手。

六、关键参数与常见配置清单

参数推荐值作用
audio_temperature1.0语音 token 采样温度
audio_top_k128语音采样候选数
audio_repetition_penalty/window1.1 / 4096抑制语音复读
suppress_mixed/suppress_audio_out纯文本输出时设 True强制只出文本
streamer/audio_streamer可选分别流式接收文本 token 与语音帧,做实时应用时必配

⚠️ 常见坑:

  • 语音发飘/重复→ 检查是否漏了audio_repetition_penalty和audio_repetition_window;
  • 想要纯文本却混出语音→ 记得加suppress_mixed=True, suppress_audio_out=True;
  • 推理没结束就截断→ 纯文本思考模式下,增大max_new_tokens(输出中要有</think>才算结束)。

七、进阶玩法:让语音对话更好用

  • 🧠先推理再回答:assistant 轮预填<think>,可拿到带思考过程的文本回答(Voice Chat 目前支持英语);
  • 🔧语音工具调用:系统提示词Respond with function calls, and interleaved text and audio.,模型会把"把音量调到 30"转成set_volume(30)这样的 tool call,可与文本、语音同时返回;
  • ⚡实时转写(LiveASR):model.transcribe_live()按约 0.96 s 分块边说边出字,适合字幕与听写场景;
  • 🌍多语言翻译:系统提示词指定源语言和目标语言即可语音转文本翻译,18 种语言互译中英语表现最好。

这些示例的完整代码都在 README.md 的 Usage examples 小节。

八、常见问题 FAQ

Q1:没有 GPU 能跑吗?可以。选择 GGUF 变体走 llama.cpp,或 ONNX Runtime 跨平台推理;2B 体量在 CPU 上也可用,只是速度较慢。

Q2:Voice Chat 支持哪些语言?目前 Voice Chat 模式支持英语;多语言能力体现在语音转写、合成与翻译(中、日、韩、法、德、西、阿、土等 19 种语言/地区)。

Q3:能做复杂多步推理吗?官方定位是本地 Agent、工具调用、结构化输出与领域微调,不推荐用于 agentic coding 或复杂多步推理。

Q4:许可证允许商用吗?模型采用 LICENSE 中的 LFM Open License v1.0,商用前请自行阅读条款。

九、相关文件速查

文件说明
modeling_lfm3_audio.py模型主体(音频编码 + 交错生成)
modeling_liquid_codec.pyLiquidCodec 语音分词/解码
processing_lfm3_audio.py对话模板与多模态输入处理
feature_extraction_lfm3_audio.py16 kHz log-mel 特征提取
config.json模型结构参数(codebooks、交错节奏等)
chat_template.jinja对话模板定义
audio_tokenizer/LiquidCodec 权重

按上面的三步走下来,你就拥有了一个可以"听你说话、边打字边说话回答你"的本地语音助手。下一步建议:把streamer与audio_streamer接上麦克风与扬声器,体验 50 ms 首响的实时 Voice Chat 🎉

  • 人工智能
  • 大模型
  • 多模态
  • 语音
  • 音频
  • 本地部署

【免费下载链接】LFM3-Audio-2B

项目地址:https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM3-Audio-2B
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进