【免费下载链接】Intern-Decision-0.8B
快速上手:一次推理得到什么?
Intern-Decision-0.8B 是一个多模态结构化决策模型:你传入一段共享状态(state)、一组带选项的问题(questions)以及可选图片,它在一次前向推理中为每个问题返回完整的答案分布。调用入口只有两步:
from inference import DecisionEngine engine = DecisionEngine(device="cuda") # 只加载一次,重复使用 response = engine.predict(request) # 输入一个请求字典,返回一个响应字典predict返回的响应遵循 Jev 信封结构,共 5 个顶层键:model、answers、usage,以及三个扩展字段backend、timing、calibration。新手最常出错的地方就在于:把所有字段的"最终答案"都当成同一个字段去读。实际上,每个问题的answers条目里,probabilities、confidence、score三者含义完全不同,读错字段会导致业务逻辑偏差。
下面逐个拆解,帮你建立正确的读取姿势。
probabilities:每个选项的校准后概率分布
probabilities是该字段下所有候选选项的概率分布,键为选项原始值,值为校准后的概率,总和恒为 1。它不是"最终答案",而是模型对每个选项的完整态度,是所有其他字段(confidence、decision、score)的计算源头。
以客服工单场景为例,请求里定义了三个问题,响应节选如下:
{ "team": { "type": "choice", "probabilities": { "billing": 0.92, "delivery": 0.08 }, "confidence": 0.92, "decision": "billing", "choice": "billing", "source": "local" }, "urgency": { "type": "score", "probabilities": { "0": 0.05, "1": 0.62, "2": 0.33 }, "confidence": 0.62, "score": 1.33, "legend": { "0": "Low", "1": "Medium", "2": "High" }, "source": "local" } }三个要点:
- 键是选项原始值,不是符号。内部推理时选项会被映射为单 token 符号
A~Z、a~z、0~9(见 inference.py),但响应已经映射回你传入的原始值,直接按业务值读取即可。 - 概率总和恒为 1,且只分布在该问题自己的候选项上,不会跨字段。
- 分布是经过校准的:默认温度
2.747760550703是在 1,728 个校准案例上通过最小化 NLL 拟合出来的(详见 README.md 的 Calibration 一节),因此概率可以直接用于阈值判断与风险评估,而不只是相对排序。
confidence:最高候选概率,注意它的"归属"
confidence的定义很简单:该字段所有候选项中最大的那个概率,代码实现就是取 argmax 后的概率值(inference.py):
answer = {'type': kind, 'probabilities': probs, 'confidence': probs[best]}但新手最容易踩的坑在score 类型上:confidence属于"最可能的那个类别",而报告的期望score数值可能落在类别之间。比如上面urgency的score是 1.33,但confidence是 0.62(属于Medium这一类),并不是"1.33 有多大把握"。
| 使用场景 | 推荐字段 |
|---|---|
| 判断模型"拿不拿得准"、是否转人工 | confidence |
| 获取最终选中的选项 | decision(或 choice 类型的choice) |
| 需要连续数值做排序/打分 | score |
| 二分类是/否的概率 | noul(yes的概率) |
| 完整分布、自定义聚合 | probabilities |
一个实用技巧:把confidence < 0.5的请求标记为"低置信,需人工复核",这是该模型输出的天然置信度信号。
score:概率加权的期望值,不是"最可能的类别"
score字段只出现在score类型的问题上,它是概率加权的期望数值:
score = Σ(选项数值 × 该选项概率)继续上面的例子:0×0.05 + 1×0.62 + 2×0.33 ≈ 1.33。这正体现了它与confidence的区别——confidence回答"最信哪个类别",score回答"期望落在什么数值"。
配套字段legend给出了分数值到描述的映射(如上例的{"0": "Low", "1": "Medium", "2": "High"}),方便你在展示层把1.33翻译成"偏 High 的 Medium"。
另外提醒:当criteria用列表传入时,选项值自动成为"0","1", …(inference.py);用对象传入时,键必须是有限数值。score是浮点数,可直接参与比较运算。
decision、choice 与 noul:三个"最终答案"字段
除了三个核心字段,响应里还有三个"答案类"字段,按类型各取所需:
decision:所有字段都有。概率最高的选项值;并列时按字典序打破平局(lexicographic tie-breaking),见 inference.py 的argmax实现。choice:仅choice类型。选中的选项值,实际上就是decision的别名。noul:仅noul类型(二元判断)。yes的概率值,介于 0~1 之间,可直接当"肯定倾向强度"使用。
calibration 温度:为什么概率"变陡"了?
响应里的calibration扩展字段记录了校准方式与温度值。Intern-Decision-0.8B 的校准数值序列是(README.md Calibration 一节):
p = softmax(candidate_logits) calibrated_p = softmax(log(p) / T)这里要特别澄清一个误区:它不是采样温度,而是候选概率校准。它会使分布更"平"一些,更新confidence、noul概率与期望score,但不改变 argmax 决策(inference.py 中甚至有断言防止浮点误差改变 argmax)。如果你需要未校准的原始候选概率,可以用DecisionEngine(temperature=1)加载。
最小运行示例与响应全貌
完整可运行示例(README.md Quick start 一节,依赖见 requirements.txt,需 Python 3.12+):
from inference import DecisionEngine engine = DecisionEngine(device="cuda") request = { "state": "The customer was charged twice and asks for the extra payment back.", "questions": { "team": { "type": "choice", "instructions": "Which team should handle this request?", "criteria": { "billing": "Payments and refunds", "delivery": "Shipping and delivery", }, }, "urgency": { "type": "score", "instructions": "Rate the priority.", "criteria": ["Low", "Medium", "High"], }, "refund_requested": { "type": "noul", "instructions": "Is the customer asking for a refund?", }, }, } response = engine.predict(request) print(response["answers"])响应顶层结构一览:
| 顶层键 | 含义 |
|---|---|
model | 实际加载的权重标识(Intern-Decision-0.8B) |
answers | 每个问题字段一个条目,含本文详解的各字段 |
usage | input_tokens、output_tokens、decision_count |
backend | 推理后端,当前固定hf |
timing | 端到端inference_ms |
calibration | 校准方法与温度值 |
注意一个容易误读的点:usage.output_tokens和usage.decision_count统计的是被打分的问题字段数,而不是生成的文本 token 数——因为该模型不做自由文本生成,只执行一次结构化前向打分。
常见误区清单 🧭
- 把
score当成"最可能的类别"——它是概率加权的期望值,类别归属请看probabilities或decision。 - 把
confidence当成对score数值的置信度——它属于最可能的那个类别(score 类型尤其要注意)。 - 用
choice去读 score/noul 问题——choice只出现在choice类型;通用答案请读decision。 - 把概率当采样结果——
probabilities是校准后的完整分布,模型并不调用generate()或采样自由文本。 - 用
output_tokens估算生成量——它计的是打分字段数。
延伸阅读
- 推理核心与校准逻辑:inference.py,其中
DecisionEngine类在 inference.py - 响应字段官方说明表:README.md Response format 一节
- 对话模板(
<decision>占位符渲染):chat_template.jinja - 模型配置(Qwen3.5 架构、多模态 tokenizer):config.json、added_tokens.json
掌握probabilities(分布)、confidence(最大概率)、score(期望值)三者的分工后,你就能按业务需要灵活地取用 Intern-Decision-0.8B 的输出,既拿最终决策,也拿可信度信号。
【免费下载链接】Intern-Decision-0.8B
相关推荐
基于 Next.js Edge Middleware 的图片响应示例:从边缘网络直接返回图片
基于 Next.js Edge Middleware 的图片响应示例:从边缘网络直接返回图片 本指南围绕仓库中的 image response 示例 https
Intern-Decision-0.8B模型架构解读:混合线性注意力、248K词表与<decision>特殊token
Intern Decision 0.8B模型架构解读:混合线性注意力、248K词表与<decision 特殊token Intern Decision 0.8B
掌握 Typed Decisions:Qwen3.5-0.8B-decision 的 noul / choice / score 三种题型完全指南
掌握 Typed Decisions:Qwen3.5 0.8B decision 的 noul / choice / score 三种题型完全指南 Qwen3.
人工智能大模型微调
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考