AB
AiBoss
project

d1-omni - 单次前向即出答案的 587M 边缘决策模型

d1-omni-600M 是 LiquidAI 发布的一个 587M 参数决策模型,构建在 LFM2.5-Encoder-350M 之上。它接收一段状态(文本、JSON,可带图片或语音片段)和一组具名问题,直接返回带类型的答案,不生成任何输出 token。据项目说明,它面向路由与分诊、内容审核、意图与主题分类、语音指令路由、抽取校验、重排序、智能体护栏和视觉检查等场景,而不是聊天模型。

d1-omni-600M 是 LiquidAI 发布的一个 587M 参数决策模型,构建在 LFM2.5-Encoder-350M 之上。按项目自述,它的用法与常见生成式模型不同:你给它一个状态(文本或 JSON,可附带图片或一段语音)和一组具名问题,它返回带类型的答案,且输出 token 数为零——每个答案都直接从模型在选项上的分布读出,没有生成过程,也不需要解析输出文本。它适合被放进需要「是/否」「从具名选项中挑一个」或「打分」的流水线里,例如路由与分诊、内容审核、意图与主题分类、语音指令路由、抽取校验、重排序、智能体护栏以及视觉检查。项目明确说明它不是聊天模型,不写文本。

维护者与状态

该项目由 LiquidAI 维护,仓库托管在 Hugging Face 上,任务类型为 image-text-to-text,使用 transformers 框架。仓库创建于 2026-10-05,最后更新于 2026-10-07。截至 2026-10-11,近 30 天下载量为 10030,点赞数为 100。事实表中未记录正式 release 信息,因此这里不对版本发布情况作额外推断。

主要能力

以下能力均来自项目自述(模型卡),并非第三方评测结论:

  • 视觉-语言:文本与图片在同一次前向中处理;大尺寸画面会被切块,一个状态里可以放多张图片。
  • 音频-语言:文本与最长 30 秒的语音在同一次前向中处理。
  • 边缘尺寸:共 587M 参数,由 381M 的共享主干与决策头、94M 视觉编码器和 112M 音频编码器组成;据项目说明,各模态跑的是同一套主干权重。
  • 结构化提问:问题遵循 Decision Index 模式,包含 type、instructions 和 criteria 三类字段。支持 noul(是/否)、choice(从具名选项中选一个)和 score(2 到 10 个有序等级)三种题型。
  • 批量调用:system_one_batch 可在一次调用中处理多条请求。
  • 原始分布:probabilities 接口按选项顺序返回原始分布。

模型细节方面,项目自述给出的规格包括:视觉编码器为来自 LFM2.5-VL-450M 的 SigLIP2 视觉塔,音频编码器为 17 层 FastConformer,上下文长度为 16,384 token(文本、图像与音频位置合计),词表大小 65,536。带图片时,状态与问题文本会被截到 896 token,与训练时一致。

关于精度,项目说明模型以 float32 训练;在 GPU 上 float16 更快且能保持 float32 的答案,据其自述的检查结果,在全部文本(243 行)、图像(214 行)和音频(416 行)样本上给出的首选答案一致;项目建议避免 bfloat16,因为它在 0.8% 的文本行和 1.7% 的音频行上改变了首选答案。项目还表示,由于这是早期研究版本且仍在积极开发中,因此不公布 d1-omni-600M 的推理速度数字。

使用入口

仓库地址:LiquidAI/d1-omni-600M。

据项目说明,使用前需安装依赖,要求 transformers>=5.15:

pip install "transformers>=5.15" torch torchvision pillow soundfile

模型自带代码,因此需要以 trust_remote_code=True 加载。项目给出的最小示例如下:

import torch
from transformers import AutoModel

device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float32 if device == "cpu" else torch.float16
model = AutoModel.from_pretrained(
    "LiquidAI/d1-omni-600M",
    trust_remote_code=True,
    dtype=dtype,
).to(device)

questions = {
    "refund": {
        "type": "noul",
        "instructions": "Is the customer asking for a refund?",
    },
    "team": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
            "billing": "Charges, refunds, invoices",
            "technical": "App or site faults",
            "fraud": "Suspected unauthorised use",
        },
    },
}

print(model.system_one("I was charged twice this month, please refund one of them.", questions))

项目列出的调用接口包括:system_one(state, questions, images=None, audio=None),对单个状态及其图片或音频片段回答具名问题,媒体只编码一次供所有问题共用;system_one_batch([(state, questions[, images[, audio]]), ...]),批量处理多条请求;以及 probabilities(state, questions, images=None, audio=None),返回按选项顺序排列的原始分布。

关于输入形式,项目说明:状态可以是字符串、任意 JSON 值,或在图片/音频本身就是整个状态时传 None;images 为一张 PIL 图片或其列表;audio 为一段 16 kHz 单声道片段,采样为 int16 或浮点。单条请求只能带图片或音频之一,同时传入会抛出 ValueError。每次调用返回 {"answers": {name: answer}, "usage": {"input_tokens": n, "output_tokens": 0}},其中 input_tokens 统计主干读取的每一个位置。项目还说明,文本答案使用存储在 config.json 中的按题型温度进行校准,图像与音频答案则是训练所得的 softmax 输出。

许可与限制

该仓库的许可证在事实表中记为 other,即自定义许可,具体条款以仓库中的 LICENSE 文件为准,本文不对其可否商用等问题作出判断。

项目自述中列出的已知限制与适用边界包括:

  • 音频能力是在英语使用者与助手之间的请求上训练的,训练任务涵盖话语类型、主题以及说话人想要什么;片段会被截断到 30 秒。
  • 带图片时,状态与问题文本会被截到 896 token,这是训练时的设定。
  • 单条请求不能同时携带图片和音频。
  • 它不是聊天模型,不生成文本,因此不适用于需要自由文本输出的场景。
  • 项目称其为早期研究版本,仍在积极开发中,因此未公布推理速度数据。

此外,项目自述提到其内部评测中未纳入 HelpSteer2,原因是它可能与 d1-omni-600M 的训练数据存在重叠。