
Jeff 的 3 种问题类型一次看懂choice、noul、score 零基础详解【免费下载链接】jeffMillisecond decisions, any domain: a 0.8B open System 1 model that picks between your options with calibrated probabilities. One base, swappable LoRA adapters, on your own hardware.项目地址: https://gitcode.com/gh_mirrors/jeff6/jeffJeff 是一个 0.8B 的开源System 1决策模型你用文字描述一个场景并列出选项它一次前向计算就为每个选项返回一个校准过的概率——不生成任何文字无需解析。Jeff 的请求格式只支持 3 种问题类型choice多选一、noul是/否、score按刻度打分。这篇文章用零基础的方式把这 3 种类型讲透看完你就能写出自己的第一个 Jeff 请求。 先认识 Jeff一个毫秒级的选择题模型把 Jeff 理解成一台高速选择题机器只出题不作文你给选项它给概率一次前向计算GPU 上约 22 毫秒完成没有逐字生成。概率是诚实的说 91% 就大约有 91% 把握可以直接拿来当阈值用。一个底座 可插拔适配器同一个 0.8B 底座可以挂多个 LoRA 适配器官方已发布 15 个每个适配器负责一项任务例如垃圾短信识别、工单分派、工具选择。下图是 Jeff 各版本在 5 个公开基准测试上的选择题准确率对比可以看到 0.8B 的 Jeff 已经接近 2B 模型的水平 三种问题类型一览表类型回答什么问题选项数量答案形式choice从一堆选项里挑1 个2254 个选中项的 key 每个选项的概率 置信度noul是 / 否固定 2 个是的概率0~1 之间的小数score处在刻度尺的哪个位置210 个等级期望分数 每个等级的概率 置信度三者的共同点都需要你先给一个状态state——也就是要判断什么然后附上问题。数据结构定义在 src/jeff/types.py 中。 类型一choice多选一最常见的类型。你给一组key → 描述的选项Jeff 从中挑最匹配的一个并返回每个选项的概率。Python 客户端提供现成函数choice_question定义在 src/jeff/client.pyfrom jeff import Client from jeff.client import choice_question jeff Client(http://localhost:8765, modeltriage) # model 指定用哪个适配器 answer jeff.choose(包裹到了但是压坏了我要退款。, {refunds: 退款和支付, parcels: 包裹损坏或丢失, login: 账号和登录问题}, 这个工单该交给哪个团队) answer.key, answer.probability # parcels, 0.91返回值Choice里可用的字段字段含义key被选中选项的 keyprobability被选中选项的概率probabilities每个选项的概率按你发送的顺序confidence置信度0 和瞎猜没区别1 完全确定ranked()按概率从高到低排序的 (key, 概率) 列表两个实用技巧懒得取 key 时选项可以直接给一个列表Jeff 会自动编号为o1、o2、…场景可以很灵活选项既可以是客服团队、工具名也可以是国际象棋局面里的 24 个合法走法。官方微调的国际象棋适配器就是纯 choice 应用——每一步都在合法走法中挑选⚠️唯一硬性限制单个 choice 问题最多254 个选项Qwen 系列底座超了会返回TooManyOptions错误先筛短名单或拆成两个问题。❓ 类型二noul是/否noul是 yes or no 的镜像写法。它和 choice 的最大区别答案只有一个小数——是的概率。判断阈值由你自己定比 0.5 严格还是宽松完全看业务。from jeff.client import yes_no_question p jeff.yes_no(包裹到了但是压坏了我要退款。, 客户生气了吗) print(p) # 0.64 → 有 64% 的概率客户是生气的yes_no_question还支持可选的yes/no参数用来说明是和否各自代表什么帮助模型理解题意例如yes这句话是讽刺的, no这句话是认真的。在 src/jeff/families.py 里可以看到大量真实用法检测讽刺、判断摘要是否与原文一致、验证推理是否回到起点……都是 noul 问题。 类型三score按刻度打分有些问题不是选哪个而是到哪一步。score让你定义一条有序的刻度尺210 个等级从低到高排列Jeff 返回一个 0 到 N-1 之间的分数。from jeff.client import score_question s jeff.score(所有客户都访问不了网站。, [low, medium, high], 这个工单有多紧急) s.level, s.score # 2, 2.31 → 最可能是 high期望分数 2.31返回值Score的字段字段含义score期望分数加权平均0 第一个等级N-1 最后一个level概率最高的那个等级整数probabilities每个等级的概率按你给的顺序confidence置信度注意两条容易踩的坑刻度必须从低到高且训练时从不打乱顺序——等级顺序就是语义期望分数是小数比如 5 个等级时可能得到1.7表示介于第 2 档和第 3 档之间。tests/test_score_training.py 里有一套完整的 score 示例Not urgent / Low / Medium / High / Critical 五级紧急度想细看可以打开对照。 一次请求问多个问题Jeff 真正的效率优势在于ask()允许你用一个请求同时问多个独立问题共享同一份场景只算一次前向answers jeff.ask(包裹到了但是压坏了我要退款。, { team: choice_question({refunds: 退款和支付, parcels: 包裹损坏或丢失, login: 账号和登录问题}, 该交给哪个团队), angry: yes_no_question(客户生气了吗), urgency: score_question([low, medium, high]), }) answers.choice(team).key # parcels answers.yes_no(angry) # 0.64 answers.score(urgency).level # 2TypeScript 开发者不用换思路jeff/client 提供了同名的choiceQuestion/yesNoQuestion/scoreQuestion三个构造函数用法和 Python 一一对应且零运行时依赖Node 22、Deno、Bun、浏览器都能跑。⚖️ 两条必须记住的规则选项 key 永远不要用纯数字如1、2。JavaScript 会自动把数字型 key 排到最前面导致选项顺序被悄悄打乱客户端会直接报错拦下这种写法。不变的内容放前面变化的内容放最后官方称 live-last 布局。例如语音导航场景屏幕信息固定、语音转写总在变——把转写放在 state 的最后一个字段服务器就能缓存前面固定部分的计算结果响应更快。完整规则见 docs/v1.3-request-format.md。 继续深入的入口资料路径Python 客户端与三个问题构造函数src/jeff/client.py请求/答案的数据结构定义src/jeff/types.pyTypeScript 客户端clients/typescript/src/index.tsv1.3 请求格式规范含 prompt 布局细节docs/v1.3-request-format.md适配器的训练数据怎么写含 choice 行示例examples/adapter-kit/README.md训练数据来源与许可证docs/data-sources.md一句话总结choice负责选哪个noul负责是不是score负责到哪一步——三种类型共用同一个请求通道配合一次问多个的ask()就是 Jeff 毫秒级决策的全部表达方式。【免费下载链接】jeffMillisecond decisions, any domain: a 0.8B open System 1 model that picks between your options with calibrated probabilities. One base, swappable LoRA adapters, on your own hardware.项目地址: https://gitcode.com/gh_mirrors/jeff6/jeff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考