用 LFM3 构建专用多模态模型
本文目录
作者:Liquid AI 团队(Leonie Monigatti、Jimmy T.H. Smith、Anthony Maltsev、Maxime Labonne 等)
发布于 2026 年 10 月 27 日
LFM3 是我们新一代的液体基础模型(Liquid Foundation Models,LFMs),设计目标是成为专用智能的起点。它把文本、视觉、音频、全模态(omni)和决策模型统一到同一个共享主干(backbone)上,全部位于 2B 参数区间。这意味着你可以按模态挑选模型,在单块 GPU 上用你自己的数据微调,并把它部署到应用实际运行的地方。
相比之前的 LFM2 家族,LFM3 带来四项主要变化:
- 每参数更多能力:新的三混合(tri-hybrid)架构与训练配方,让 LFM3-1.7B 在使用少 35% 参数的情况下超过 LFM2.5-2.6B。
- 所有模态共享一个主干:六个 2B 级模型(文本、视觉、音频、全模态和决策)都从 LFM3-1.7B-Base 训练而来,其中包括我们的首个全模态模型,以及视觉模型的视频输入能力。
- 为边缘端而建:文本模型在 4 比特精度下约只占 1 GB,新的自研视觉与音频编码器加快处理速度,文本模型的 256K 上下文窗口让智能体可以在设备端运行。
- 为专用化而生:每个模型都能在单块 GPU 上微调,因此你可以让它适配你的数据、术语和部署环境。
我们如何构建更具表现力的主干#
LFM2 表明,短卷积与注意力机制的混合可以在设备端快速运行而不牺牲质量。对于 LFM3,我们用"硬件在环"(hardware-in-the-loop)架构搜索重新设计该架构,面向智能体用例——这类用例需要每参数更多能力,以及在长上下文上的快速推理。该搜索现在覆盖 14 种设备与后端组合,从手机和树莓派 5 到笔记本、云端 CPU、GPU,以及高通 Hexagon NPU。
LFM3-1.7B-Base 有 24 层和四项主要变化:
- 三混合层组合:13 层门控短卷积、5 层滑动窗口注意力(sliding-window attention,SWA,窗口为 256 token)和 6 层全局注意力。卷积核大小从 LFM2 的 3 提高到 7。
- 逐头门控注意力(head-wise gated attention):一个 sigmoid 门控缩放每个头的输出,使某个头在无话可说时可以被关掉。这有助于抑制伤害量化的激活离群值。
- 部分 RoPE(partial RoPE):全局注意力层只旋转每个头中频率最高的那一半,另一半则按内容匹配、与距离无关。SWA 层保留完整 RoPE。
- 夹心归一化(sandwich norm):每个块对输入和输出都做归一化,保持激活值处在良好尺度上。
收益在长上下文上显现。按参数计,LFM3-1.7B 在各边缘设备上与 LFM2-1.2B 在短提示上持平,而当上下文达到 8K token 时,它大约快 25%。LFM3-1.7B-Base 用 22T token 预训练,词表与 LFM2.5-8B-A1B 相同的 128K。最后 3.5T token 是在精选数据上做的中期训练(mid-training)阶段,其中智能体轨迹和工具调用的占比更高,同时也把上下文窗口扩展到 256K token。
一个主干,六个模型#
每个 LFM3 模型都从 LFM3-1.7B-Base 分支出来。与其运行一个大型通用模型,不如挑选适合你输入的那个,加以定制,并在设备端运行。
| 模型 | 输入 | 输出 | 基于 |
|---|---|---|---|
| LFM3-1.7B | 文本 | 文本 | LFM3-1.7B-Base |
| LFM3-VL-2B | 文本、图像、视频 | 文本 | LFM3 主干 + 视觉编码器 |
| LFM3-Audio-2B | 文本、音频 | 文本、语音 | LFM3 主干 + 音频编码器、音频解码器与 LiquidCodec |
| LFM3-Omni-2B | 文本、图像、视频、音频 | 文本、语音 | LFM3 主干 + 视觉与音频编码器、音频解码器 |
| d1-2B | 文本、图像、视频 | 校准后的答案 | LFM3-VL-2B |
| d1-omni-2B | 文本、图像、视频、音频 | 校准后的答案 | LFM3-Omni-2B |
视觉和音频模型还获得了两个新的自研编码器:
- 视觉编码器:结合卷积与注意力,计算量比此前 LFM VL 模型中的 SigLIP2 编码器少 3 倍。我们 164M 参数的编码器在准确率上与 Qwen3.5-2B 的视觉编码器相当,而所需 FLOPs 少 2.2 倍(两者都以相同的 LFM2.5-230M 语言主干测量)。对于视频,它把每两帧采样帧嵌入同一个时间切片,从而把时间序列长度减半。
- 音频编码器与 LiquidCodec:音频编码器混合滑动窗口注意力与短卷积,且完全因果,因此模型可以在你说话时预填充(prefill),首 token 时间低至 50 ms。LiquidCodec 是我们新的音频分词器(audio tokenizer),在 Apple M4 Max 的单 CPU 线程上以约 87 倍实时速度把生成的 token 转成语音,并支持流式解码。
如何使用 LFM3 模型#
每个模型都能在 transformers 中运行。下面的代码片段来自模型卡,模型卡还列出了每个模型支持的其他推理引擎。
LFM3-1.7B#
当你需要本地智能体、工具调用、结构化输出,或领域专用微调的基础模型时,选 LFM3-1.7B。它经过后训练,可在 Hermes Agent、Pi 和 OpenClaw 等智能体框架中运行。它以少 35% 的参数超过前代 LFM2.5-2.6B,且最大提升出现在智能体任务上:在 WebArena-Verified 上它得 38.42 分,前代为 3.02 分;在浏览器与业务应用中的长任务上,它甚至击败了 Qwen3.5-9B。更多细节见 LFM3-1.7B 模型卡。
运行 LFM3-1.7B 需要安装最新版本的 transformers:
pip install -U transformers
然后加载并运行模型:
from transformers import pipeline
generator = pipeline(
"text-generation",
model="LiquidAI/LFM3-1.7B",
trust_remote_code=True,
)
messages = [{"role": "user", "content": "What is C. elegans?"}]
output = generator(
messages,
do_sample=True,
temperature=0.1,
top_k=50,
repetition_penalty=1.1,
max_new_tokens=2048,
)
print(output[0]["generated_text"][-1]["content"])
本地智能体的配置方法见 Agent Harnesses 指南。
LFM3-VL-2B#
当你需要设备端视觉理解时,选 LFM3-VL-2B。它是首个接受视频输入的 LFM 视觉模型;它在回答前会逐步推理,并能找到物体、推理物体的摆放关系——这是机器人学的坚实基础。与 LFM2.5-VL-3B 相比,它的参数更少(1.9B 对 3.1B),却把 62 个视觉基准的平均分从 57.6 提升到 71.4,与 Gemma 4 12B 相当,而后者规模是它的六倍多。更多细节见 LFM3-VL-2B 模型卡。
运行 LFM3-VL-2B 需安装 transformers>=5.21.0 及其视觉依赖:
pip install "transformers>=5.21.0" torch torchvision pillow
然后加载并运行模型:
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "LiquidAI/LFM3-VL-2B"
model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto", trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://placecats.com/300/200"},
{"type": "text", "text": "Describe this image."},
],
}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.inference_mode():
output_ids = model.generate(
**inputs,
do_sample=True,
temperature=0.1,
top_k=50,
repetition_penalty=1.1,
max_new_tokens=16384, # generate() 需要显式上限;推理可能很长
)
generated_ids = output_ids[:, inputs["input_ids"].shape[1]:]
print(processor.batch_decode(generated_ids, skip_special_tokens=True)[0])
工具调用、工具检索以及用 llama.cpp 做设备端推理,见 LFM3-VL-2B 模型卡。
LFM3-Audio-2B#
当你需要在笔记本或边缘设备上做语音聊天、语音识别、语音合成,或跨 18 种语言的翻译时,选 LFM3-Audio-2B。它接受文本或音频输入,以文本、语音或两者回应,并且能把口头请求转成工具调用。与 LFM2.5-Audio-1.5B 相比,它使用新的自研音频编码器和语音编解码器,语音质量更高(UTMOSv2 3.83 对 3.22),并新增音频理解、通用音频推理和工具调用。更多细节见 LFM3-Audio-2B 模型卡。
运行 LFM3-Audio-2B 需安装 transformers>=5.20.2 及其音频依赖:
pip install "transformers>=5.20.2" torch accelerate librosa soundfile
直接从 Hugging Face Hub 加载模型和处理器:
import torch
import 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()
然后大声提问,得到文本与语音两种回复:
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)
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)
实时语音识别、语音合成、音频理解和工具调用,见 LFM3-Audio-2B 模型卡。
LFM3-Omni-2B#
当你需要一个能看、能听、还能回话的设备端模型,来取代分离的 ASR 模型、视觉语言模型、LLM 和 TTS 模型时,选 LFM3-Omni-2B。它可以回答关于图像的口头提问,可以同时观看并聆听一段视频,并把所见所闻转成工具调用。这是我们的首个全模态模型,接受文本、视觉和音频输入,输出文本与语音,并保留了独立 LFM3 模型的核心能力,包括视觉问答、语音识别、语音合成和指令遵循。与 LFM3-Audio-2B 一样,它通过 LiquidCodec 发声,把生成的 token 以快于实时的速度转成语音,因此语音回复随模型生成而流式输出。在音视频视频理解上,它在 Daily-Omni、WorldSense 和 AV-SpeakerBench 上击败了最高 10.7B 参数的模型,例如 Qwen2.5-Omni-7B。更多细节见 LFM3-Omni-2B 模型卡。
运行 LFM3-Omni-2B 需安装 transformers>=5.20.2 及其视觉与音频依赖:
pip install "transformers>=5.20.2" torch torchvision torchcodec accelerate pillow librosa soundfile
import torch
import soundfile as sf
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "LiquidAI/LFM3-Omni-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()
然后用语音就一张照片提问:
conversation = [
{
"role": "system",
"content": "Answer questions about the provided image. Base every answer only on what can be seen. Respond with text.",
},
{
"role": "user",
"content": [
{"type": "image", "image": "photo.jpg"},
{"type": "audio", "audio": "question.wav"},
],
},
]
inputs = processor.apply_chat_template(
conversation,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=1024, generation_mode="text")
print(processor.decode(
outputs.sequences[0, inputs["input_ids"].shape[1]:outputs.sequence_lengths[0]],
skip_special_tokens=True,
))
语音输出、带音轨的视频以及工具调用,见 LFM3-Omni-2B 模型卡。
d1-2B 与 d1-omni-2B#
当你需要快速、结构化的决策而非生成文本时,选 d1 模型。给它一个情境(一张支持工单、一张发票、一个应用界面、一张照片、一条语音留言)和一组问题,它在一次前向中全部作答,每个答案都带校准概率。除了是/否、选项和评分之外,它们现在还能指向物体、从文档中读取数值、给出带范围的数字估计,以及选出所有适用选项。更多细节见 d1-2B 和 d1-omni-2B 的模型卡。
在两个 d1 模型之间:
- d1-2B:文本、图片和视频选它。它用少三分之一的参数取代 d1-3B,并在我们全部四个决策套件上得分更高,例如在 ImajevBench 上为 75.5 对 64.0。
- d1-omni-2B:当输入包含音频时选它。如果你用语音而不是文字提问,它几乎保留了全部准确率。
运行 d1-2B 需安装 transformers>=5.19 及其视觉依赖:
pip install "transformers>=5.19" torch torchvision pillow
然后加载 d1-2B,就一张支持工单一次提出多个问题:
import torch
from transformers import AutoModel
device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
dtype = torch.float32 if device == "cpu" else torch.bfloat16
model = AutoModel.from_pretrained("LiquidAI/d1-2B", trust_remote_code=True, dtype=dtype).to(device)
# 对一个状态提出多个具名问题,一次前向全部作答
questions = {
"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}, # 是/否:P(yes)
"team": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "Charges, refunds, invoices", "shipping": "Delivery and parcels",
"technical": "App or site faults"}},
"topics": {"type": "choice", "multiple": True, "instructions": "Which topics does the message raise?",
"criteria": {"billing": "Payments and charges", "delivery": "Shipping and parcels",
"login": "Signing in to the account"}},
"urgency": {"type": "score", "instructions": "How urgent is this ticket?", "criteria": ["low", "medium", "high"]},
}
out = model.system_one("I was charged twice and my parcel never arrived. Please refund one charge.", questions)
a = out["answers"]
urgency = a["urgency"]["legend"][str(int(a["urgency"]["score"]))]
print(round(a["refund"]["noul"], 2), a["team"]["choice"], a["topics"]["choices"], urgency)
# 1.0 billing ['billing', 'delivery'] medium
为简洁起见,我们只给出 d1-2B 的示例。音频片段与口头提问见 d1-omni-2B 模型卡。
为你的任务微调 LFM3#
LFM3 是为专用化而建的。前沿模型是强大的通才,但未必是你用例上的专家。LFM3 把额外容量装进一个又小又快的模型,因此一次短时间微调就能把它变成你任务上的可靠专家——用你的数据、术语和工具。因为它小,你可以把微调后的模型部署到应用运行的地方,从设备到私有基础设施再到云端。
每个模型都能在单块 GPU 上微调,下面这些 notebook 带你走完文本、视觉、音频和全模态模型的一个完整任务,从数据准备到评估。
| 模型 | 方法 | 任务 | Notebook |
|---|---|---|---|
| LFM3-1.7B | SFT | 从杂乱文档中抽取结构化 JSON | 在 Colab 中打开 |
| LFM3-1.7B | DPO | 基于检索到的文档作答,或拒答 | 在 Colab 中打开 |
| LFM3-1.7B | GRPO | 在一个有 108 个工具的手机应用中调用正确工具 | 在 Colab 中打开 |
| LFM3-1.7B | CPT | 从原始文本学习一门新语言(土耳其语) | 在 Colab 中打开 |
| LFM3-VL-2B | SFT | 把收据照片读成 JSON | 在 Colab 中打开 |
| LFM3-VL-2B | GRPO | 把公式图片转写成 LaTeX | 在 Colab 中打开 |
| LFM3-Audio-2B | SFT | 把口头的智能家居指令映射为函数调用 | 在 Colab 中打开 |
| LFM3-Audio-2B | SFT | 教模型一种新音色 | 在 Colab 中打开 |
| LFM3-Omni-2B | SFT | 把口头的智能家居指令映射为函数调用 | 在 Colab 中打开 |
| LFM3-Omni-2B | SFT | 回答关于医学图像的口头提问 | 在 Colab 中打开 |
示例:教 LFM3 行动#
我们把 LFM3-VL-2B 适配成三个互补的机器人模型,分别负责编排、导航和操作。编排器(orchestrator)通过工具调用操作机械臂:它用指向来定位物体,用深度工具测量,调用运动规划器,并在后续相机图像中检查结果。导航器(navigator)依据最近的 RGB 观测跟随路线描述,只用五个 token 预测空间目标与路径点轨迹。操作视觉—语言—动作模型(VLA)在一次前向中把图像、语言和机器人状态映射为八步的连续动作块。该 VLA 在 15 种形态上联合训练,在四个 LIBERO 套件上平均成功率达 96.2%,在 RoboCasa-GR1 桌面任务上达 45.7%,并在 Jetson AGX Orin 上用 TensorRT FP16 于 50 ms 内生成动作块。这些结果凸显 LFM3-VL-2B 可作为机器人学的紧凑基础,覆盖从高层规划到底层控制,并在嵌入式硬件上实时生成动作。
观看这段演示视频,看 LFM3-VL-2B 处理感知、导航与操作。
开始使用 LFM3#
所有 LFM3 模型都是开放权重,今天即可在 Hugging Face 上获取:
- 下载:Hugging Face 上的 LFM3 集合,包括供你自己做后训练的 LFM3-1.7B-Base。
- 微调:用我们的微调 notebook 让 LFM3 适配你的任务。
- 在框架中使用:参阅我们关于如何运行本地智能体(如 OpenClaw、Hermes Agent 和 Pi)的指南。
我们很期待看到你构建的东西。
引用#
如果你使用本工作,请引用此发布博客:
@article{liquidAI2026LFM3,
author = {Liquid AI},
title = {Introducing LFM3: Every Modality for Specialized Intelligence},
journal = {Liquid AI Blog},
year = {2026},
note = {www.liquid.ai/blog/lfm3},
}