大数跨境

Bespoke Nimble:开源复刻 Jev,9B 小模型实现高性能结构化决

Bespoke Nimble:开源复刻 Jev,9B 小模型实现高性能结构化决 苏哲管理咨询
2026-09-22
6
导读:Bespoke Nimble 是Bespoke Labs 开源的System One 结构化决策模型,基座为 Qwen3.5-9B,定位复刻 Jev 的 Choice 原语范式,并非 Jev 蒸馏产物
编者摘要:Bespoke Nimble 是 Bespoke Labs 开源的System One 结构化决策模型,基座为 Qwen3.5-9B,定位复刻 Jev 的 Choice 原语范式,并非 Jev 蒸馏产物,提供完整数据、训练、部署全链路方案。它摒弃文本生成,直接读取候选答案单 token 的 logits 做 softmax 概率计算,输出结构化判定结果,规避 JSON 解析错误,推理速度快。 输入为文本 + 扁平 Schema,仅支持布尔或枚举字段,枚举最多 26 个选项,字段独立打分,不支持嵌套结构、自由文本生成与图像输入。项目核心创新是对比式成对数据构造:成对样本仅改动一处关键事实翻转标签,合成训练数据共 2676 条,覆盖 10 个业务领域,采用 LoRA(rank16)微调。 评测显示,Nimble-9B 在 324 条 holdout 样本上准确率 90.12%,超越原生 Qwen3.8-27B,略低于 Jev。推理提供两套引擎:MLX ParallelScorer 可复用 KV Cache 并行多字段打分(Apple Silicon);CUDA Scorer 适合 NVIDIA BF16 显卡。适合工单路由、合规判定等低延迟结构化决策;短板为训练域窄、泛化有限,概率仅为候选内归一化值,不等同真实准确率。

10 个关键问题 Q&A

  1. Nimble 是什么?
    Bespoke Labs 开源的结构化快速决策模型,实现 TypeSafe Jev 的 Choice 原语,直接基于 token logits 做判定,不生成长文本。
  2. Nimble 是 Jev 蒸馏出来的吗?
    不是。官方明确说明没有从 Jev 蒸馏,是独立训练,仅借鉴 Jev 的设计范式。
  3. Nimble 的 Schema 有什么硬性约束?
    Schema 必须扁平,仅支持布尔或枚举;枚举选项上限 26 个,不支持嵌套 JSON。
  4. 对比式数据构造是什么核心思想?
    构造成对样本,仅修改一处关键事实,让标签反转,迫使模型学习证据与决策之间的因果关系。
  5. ParallelScorer 相比 CUDA Scorer 优势在哪?
    MLX ParallelScorer 对同一段上下文只做一次 KV Prefill,多个 schema 字段并行打分,减少重复计算,速度更快。
  6. Nimble 输出的概率可以直接当作真实准确率吗?
    不可以。概率仅在你给定候选集合内归一化;0.9 不代表 90% 正确率,业务必须单独做阈值验证。
  7. Nimble 能生成自然语言解释、输出嵌套 JSON 吗?
    不能。它只能从预设候选集合返回选定答案,无法生成解释、不支持嵌套结构。
  8. 训练使用什么微调方案与超参?
    LoRA 微调,rank=16,学习率 5e-5,有效 batch=8,训练 1epoch,BF16 精度。
  9. Nimble 适合哪些业务场景?
    工单路由、政策合规校验、客服优先级判定、内容风险分类、有序等级评分等结构化判定任务。
  10. Nimble 的主要短板是什么?
    训练数据集规模小、覆盖领域有限,跨陌生领域泛化能力弱;仅支持文本输入,字段之间打分独立,需要业务层校验结果一致性。
附录 Bespoke Nimble 完整解读(Bespoke Labs・Nimble 9B)

一句话定位:Nimble 是面向结构化分类决策的轻量微调模型,不走生成式推理,直接读取候选 token 的 logits 做判定,主打高速、带概率输出的 Schema 驱动决策;不是通用大模型,是「System One 快速决策专用模型」,由 Bespoke Labs 开源,基座 Qwen3.5-9B,配套完整数据构造、LoRA 训练、本地推理代码。

一、设计思想(System One / Typesafe AI Choice Primitive)

传统 LLM 做判断:生成文本 / JSON,再解析,慢、容易格式出错、容易编造理由。 Nimble 思路:

  1. 预先定义扁平 Schema:字段只能是 boolean或 enum(1~26 个选项),不支持嵌套结构
  2. 每个候选答案映射成单个 token;模型不输出长文本、不写推理过程
  3. 只读取这几个候选 token 的 logits,softmax 算出每个选项概率,直接返回结果
  4. 多个字段可以并行打分(MLX ParallelScorer,共享 KV Cache,一次 prefill,多字段并行计算,大幅提速)

核心理念来自 typesafe.ai 的 Choice primitive,和 Jev 同源,但Nimble 不是 Jev 蒸馏出来的,它是独立训练的开源复现方案,给社区一套完整 “数据配方 + 训练 + 部署”。

✅ 能干什么

输入一段文本 + 自定义扁平 Schema,得到:

  • 路由分发(请求分到哪个渠道)
  • 条件布尔判断(是否满足策略)
  • 策略判定(按规则选出允许结果)
  • 分级打分(有序评级,输出期望分值)

返回:选中答案 + 每个候选的概率 + logits 原始值,不需要解析 JSON,从根源规避生成解析失败。

❌ 当前版本限制(非常关键)

  1. 仅支持文本输入,基座虽然带视觉,但 Nimble 不支持图片
  2. 不能自由生成文本、不能输出解释理由
    ,只能从你给定候选集合里挑选
  3. Schema 必须扁平,无嵌套 JSON;enum 最多 26 个选项,boolean 只有 2 个
  4. 单 prompt 上限 2048 token(包含 schema + 字段描述)
  5. 字段之间独立打分:A 字段看不到 B 字段结果,业务层自行校验一致性
  6. 概率≠真实校准精度:概率只是候选集合内归一化结果,0.9 不代表 90% 准确率;如果存在不在候选里的情况,要增加no match选项
  7. 训练数据只有 2676 条合成样本,覆盖 10 个领域,泛化能力有限,适合领域内决策,跨领域会明显掉点

二、数据集:Contrastive Data Curation(对比式数据构造,本项目最大创新)

训练集全部合成数据,由模型校验,无人工标注。核心思路:成对构造样本,仅改动 1 个关键事实,答案翻转,其余文字完全不变。

四步构造流程

  1. 定义决策规则,提取影响结论的核心事实
  2. 构造成对样本:几乎完全相同,最多修改 8 个词,仅修改 1 个焦点事实,标签反转
  3. 自动校验:删掉任意一条证据,焦点事实必须无法判定;确保没有文字线索直接泄露答案
  4. 代码按规则生成标签,校验通过的样本对才入库

目的:强迫模型学到哪一条证据改变决策,而不是靠关键词记忆,提升判别能力。

数据集规模

  • train.jsonl:2826 条,实际训练使用 2676 条
  • eval.jsonl:324 条 holdout(162 对成对样本,仅 6 个领域) 任务分为三类:
  • Choice 多选:856 条
  • Noul(Boolean 布尔判断):888 条
  • Score 有序评级:932 条

领域:Commerce、Education、Home、Media、Public services、Science、Software、Supply chain、Travel、Workplace。

三、模型训练细节(LoRA 微调 Qwen3.5-9B)

  • 基座:Qwen3.5-9B
  • 训练方式:LoRA 微调
    • LoRA rank =16
    • LR=5e-5,有效 batch=8,1 个 epoch
    • BF16,2048 token 上下文窗口
    • 训练硬件:L40S;最终评估 H100
  • 训练目标:候选 token 上的交叉熵,硬标签训练,不是 Jev 软蒸馏(代码预留支持未来软蒸馏)

Holdout 324 样本评测结果(同测试集对比)

表格

Model
匹配数 /324
准确率
Gemma3 270M IT
93
28.70%
Qwen3.5-0.8B
147
45.37%
Qwen3.5-4B
199
61.42%
Qwen3.5-9B(基座未微调)
215
66.36%
Qwen3.8-27B
275
84.88%
Bespoke-Nimble-9B 292 90.12%
Jev 1.13.0
302
93.21%

亮点:9B 微调后,超过原生 Qwen3.8-27B 大模型,仅比 Jev 低 3 个点。 ⚠️ 注意:这个测试集范围很窄,全部来自 6 个 source family,不能代表通用能力;项目文档也提供了公共 benchmark 脚本 (PUBLIC_BENCHMARKS.md),用于 VitaminC 等外部人工数据集测试。

四、推理引擎:两套 Scorer 实现

1. MLX ParallelScorer(Apple Silicon Mac,推荐)

  • 一次 prefill 填充上下文 KV Cache,同一份文本下多个 schema 字段并行打分
  • 极大节省 token 重复计算开销,适合一个文本一次性做多维度判定
  • 限制:不能直接加载 LoRA,需要提前合并权重;不支持量化
  • 硬件:M 系列 Apple Silicon,推荐 64GB 内存(合并权重阶段吃内存)

2. CudaCandidateScorer(NVIDIA GPU BF16)

  • 每个字段独立完整 prompt、独立打分,没有并行 KV 复用
  • 优势:可以直接加载 LoRA 适配器,不用提前 merge 权重
  • 硬件:支持 BF16 的 NVIDIA GPU(H100/L40S 等)

性能延迟(H100,单字段,单位 ms)

Model
Median
Mean
p95
Bespoke-Nimble-9B
106.0
110.1
119.8
Jev1.13.0 API
246.7
267.0
347.4

在 H100 上单字段推理中位数仅 106ms,显著快于 Jev API;M5 Pro 64GB 本地会慢很多(中位数 444ms)。

五、目录结构

nimble/
├── scoring/          # MLX / CUDA 打分器核心代码
├── datasets/         # 对比式数据生成、标注流水线
├── evaluation/       # 评估、延迟benchmark
├── training/         # LoRA训练脚本
examples/             # Schema样例,输出样例
data/                 # train/eval jsonl数据集
evaluations/          # 本地运行生成,不提交git
assets/               # 图表、对比视频
docs/                 # 完整文档:训练、数据、并行打分、Modal部署
requirements/         # MLX / PyTorch / curator 三套依赖
tests/                # 单元测试

六、快速上手极简 Demo

import json
from pathlib import Path
from nimble.scoring.parallel_scorer import ParallelScorer

config = json.loads(Path(".cache/nimble-model.json").read_text())
scorer = ParallelScorer(**config)

schema = {
    "priority": {
        "type": "enum",
        "choices": ["HIGH", "LOW"],
        "description": "Urgency based on current business impact.",
        "choice_descriptions": {
            "HIGH": "A critical business operation is currently blocked.",
            "LOW": "An optional enhancement with no current business impact.",
        },
    },
    "requires_review": {
        "type": "boolean",
        "description": "Whether customers are unable to complete a purchase.",
    },
}
res = scorer.score("The payment service is down for all customers.", schema)
print(res["output"])
print(res["fields"]["priority"]["scores"])

输出示例:

{"priority": "HIGH", "requires_review": true}

七、Nimble vs Jev 对比

  1. Jev:闭源 API,Typesafe 官方,效果略强;不可本地部署
  2. Nimble:开源、可本地私有化部署;独立训练不是蒸馏 Jev,复刻 Jev 核心的「Choice 原语 + logit 打分」范式,提供完整从数据到训练的配方;效果略低一点,但是完全可控。

项目定位:开放版 Jev Recipe,给大家一套可以自己复现、自己做领域微调的 System One 决策模型方案。

八、适用场景 & 不适合场景

✅ 适合

  • 工单路由、政策合规判定、客服优先级分级、内容二分类 / 多分类、风险判定
  • 需要带概率置信度的结构化决策
  • 低延迟、高吞吐的大量独立判定任务
  • 私有化本地 GPU/Apple Silicon 部署

❌ 不适合

  • 长文本生成、写摘要、解释推理理由
  • 多轮对话、嵌套复杂 JSON 输出
  • 跨大量陌生领域通用判断(训练数据域窄)
  • 图像 / 多模态输入

九、工程要点总结

  1. 创新是对比式成对数据构造方法,这比模型微调本身更有价值,可以迁移到其他基座做决策模型
  2. ParallelScorer 的 KV Cache 复用,是业务批量多字段打分的性能关键
  3. 概率只是候选集合内归一化,不能直接当成真实准确率,业务侧要做阈值校验
  4. 训练数据全部合成,存在隐式偏差;上线前必须在真实业务数据上评估
  5. 环境要隔离:MLX、PyTorch、数据标注 curator 三套独立 Python 虚拟环境

【声明】内容源于网络
0
0
苏哲管理咨询
为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
内容 2227
粉丝 0
苏哲管理咨询 为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
总阅读48.7k
粉丝0
内容2.2k