Julia 1的3种决策类型:choice、score与noul完整实战指南
【免费下载链接】Julia-1项目地址: https://ai.gitcode.com/hf_mirrors/SupersonicLabs/Julia-1
Julia 1 是 Supersonic Labs 推出的144.3M 参数决策模型:给它一段上下文状态(state)、一个问题,加上 2–20 个候选答案,它就能返回一个明确决定和完整概率。本文带你完整掌握它最核心的三种决策类型——choice(多选一)、score(有序评分)、noul(布尔判断),教你在客服分流、风险分级、审批决策等真实场景里选对接口、写对调用。
为什么一个模型就能搞定分类、评分和审批?
传统规则路由需要你穷举关键词、维护分支顺序;而 Julia 1 直接"读懂"上下文和候选答案的含义,一个模型、一个 API就能同时处理三类请求:
- 从多个候选里选一个→
choice - 在有序标度上打个分→
score - 对某个命题回答是或否→
noul
三个类型共享同一个predict(state=..., questions=...)接口,还能在一次调用里批量提出多个命名问题,各自独立打分。核心实现位于 julia/typed.py,参数校验规则在 julia/data.py。
| 决策类型 | criteria 写法 | 返回的核心字段 | 典型场景 |
|---|---|---|---|
choice | ID → 描述 的映射(2–20 项) | choice(胜出 ID)+ 各选项概率 | 客服团队分流、意图分类 |
score | 有序标度列表(2–20 项,顺序即分值) | score(期望索引,浮点数)+max_probability | 严重度分级、风险评级 |
noul | 可选;false/true两个键映射描述 | noul(true 的概率) | 是否转人工、是否批准 |
💡 每个回答都包含
type和probabilities(完整 softmax 概率,未做展示舍入),choice/score 还会附max_probability方便你判断模型"有多确定"。
一、choice:让模型从候选答案中选出最优解
choice适合"答案就在选项里"的场景。criteria是一个映射,键是自定义 ID,值是候选项描述;模型的输出会原样使用你给的 ID,方便直接接入下游逻辑。
实战示例:客服工单分流
result = engine.predict( state="I was charged twice for the same order.", questions={ "team": { "type": "choice", "instructions": "Which team should handle this request?", "criteria": { "billing": "Billing and payment disputes", "shipping": "Shipping and delivery", "access": "Account access and login", }, }, }, ) print(result["answers"]["team"]["choice"]) # 胜出团队 ID print(result["answers"]["team"]["probabilities"]) # 各团队概率三个小坑提前避:
- 候选数量 2–20,这是训练契约,超了会被直接拒绝(见 julia/data.py 中的
validate_row); - 开启严格编码时,每个选项 ≤48 token,描述请精炼;
- 选项之间语义要拉开差距,模糊相近的选项最容易让模型"摇摆"。
二、score:有序评分,返回一个"期望分值"
score适合"需要程度而非类别"的场景:低/中/高严重度、1–5 星质量评级……criteria是一个有序列表,顺序即分值,从 0 开始编号。模型返回的不是某一个档位,而是各档位概率的期望索引(浮点数)——例如 3 档标度返回1.0就表示模型认为"中等"。
questions = { "severity": { "type": "score", "instructions": "How severe is this incident?", "criteria": ["low", "medium", "high"], # 顺序即 0/1/2 分 }, }使用要点:
- 返回的
score是期望值,官方基准计算正确性时用的是"最高概率档",不要擅自四舍五入后再比对; max_probability告诉你分布的集中度,值低说明证据不足,建议转人工。
三、noul:布尔判断,返回"为真"的概率
noul(读作 "no/oul",即非/是)处理是/否问题,返回一个 0–1 之间的数——true 的概率,阈值由你自己定,模型不做二值化。
它有个容易忽略的细节:criteria是可选的。
- 不写 criteria:模型直接用字面
"false"/"true"作为两个选项; - 写了 criteria:必须恰好包含
false和true两个键,分别映射成人类可读的描述,描述顺序固定为 false 在前、true 在后。
值得重视:官方 CPU 消融实验显示,提供描述时 noul 正确 483/600,退化为字面 false/true 时只有 391/600(数据见 metrics/typed-cpu-20260926.json)。描述写得越贴合你的业务,判断越稳。
questions = { "review": { "type": "noul", "instructions": "Needs human review?", "criteria": { "false": "No human attention is warranted.", "true": "A human should inspect this run.", }, }, } # answers["review"]["noul"] 就是 true 的概率怎么选?一条决策规则
- 答案离散、候选可枚举→
choice - 需要程度/等级且等级有序 →
score - 只要通过/不通过的二元决定 →
noul - 同一份上下文要问多个问题?把它们放进同一个
questions字典,一次调用批量返回,互不干扰。
快速上手:三步跑通第一个决策
1️⃣获取模型(需要 Python 3.11+ 与标准 PyTorch,CPU 即可推理):
git clone https://gitcode.com/hf_mirrors/SupersonicLabs/Julia-1 python -m pip install -e ./Julia-12️⃣加载引擎(FP32 权重约 550.5 MiB,请保留完整的 checkpoint 文件而非 LFS 指针;模型加载后请在多次请求间复用,不要每次重新加载):
from julia import load_model engine = load_model("Julia-1", device="cpu", strict_encoding=True, max_length=8192, head_length=512)3️⃣发起预测:按上文任一类型组织questions调用predict即可。load_model定义在 julia/inference.py;旧版列表式 API(engine.predict([...]))也继续受支持。
想复现官方基准?运行 scripts/reproduce_typed.py:
python -m pip install -e '.[benchmark]' python scripts/reproduce_typed.py --output benchmark/typed-cpu --literal-noul-ablation效果如何:基准成绩一览
在 2026-09-24 的 H200 BF16 严格编码评测中(完整数据见 metrics/accuracy-20260924.json):
| 基准 | 成绩 |
|---|---|
| Typed decisions 总集(2000 题) | 73.15% |
| 其中 choice(600 题) | 71.33% |
| 其中 noul(600 题) | 80.67% |
| 其中 score(800 题) | 68.88% |
| AG News · 4 类分类试点 | 94/100 |
| DAIR Emotion · 6 类情绪试点 | 86/100 |
可以看到noul 是三种类型里最稳的,score 最难(要精确到序数分值)。但请注意:这些都是试点信号,在你自己的问题与选项上先做评估,再上线——尤其涉及 72 个候选的 Banking77 这类长标签场景,成绩会明显下滑。
避坑清单:开始前的 4 个提醒
- 2–20 选项硬限制:更大的 choice 列表请用分层 Router,它通过"分组缩小 + 幸存者重排"处理上千候选,但注意分组概率不可跨组比较,且可能提前淘汰正确答案;
- 它不是聊天模型:Julia 1 只比较你提供的选项,不负责补全缺失知识或多步推理,正确率高度依赖
state里的证据质量; - 严格编码会拒绝截断:
strict_encoding=True时,问题/选项超预算、或注入保留标记都会被直接报错,这是特性不是 bug; - 概率 ≠ 保证:返回的是完整 softmax 分布,请结合
max_probability和业务风险设置人工兜底。
相关资料速查
- 项目总览与安装:README.md
- 命名问题接口实现:julia/typed.py
- 行校验与序列编码:julia/data.py
- 概率展示规则(95%/4.5% 归一化):julia/probabilities.py
- 原生路由与大批量 choice:julia/router/README.md
- 接口行为测试:tests/test_typed_api.py
- CPU FP32 复现结果:metrics/typed-cpu-20260926.json
- 复现脚本:scripts/reproduce_typed.py
一句话总结:候选可枚举用choice,需要程度分级用score,是非判断用noul——把选项描述写清楚、把模型加载后复用、在真实数据上先测后上线,你就能用 Julia 1 一个接口撑起整条决策流水线。
【免费下载链接】Julia-1项目地址: https://ai.gitcode.com/hf_mirrors/SupersonicLabs/Julia-1
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考