参考公众号:腾讯技术工程以及Datawhale

2026 年 9 月,一家名为 TypeSafe AI 的公司发布了一个叫 Jev 的模型。它不写文章、不聊天、不写代码,只做三件事:回答选择题、打分级评分、判断陈述真假——并且直接返回概率,百毫秒级完成。

图片

如果你把它当作“又一款更聪明的大模型”,会错过它真正想说的东西。Jev 不是来挑战 GPT 的智商,而是公开质疑了一件被行业默认了十年的事:面向对话训练的模型,本质上不适合无人值守的自动化。

这件事背后,是大模型架构演进中一条很少有人注意的岔路。要真正看懂它,得回到 2017 年那张架构图,把 BERT、GPT、DeepSeek、Qwen,再到 Jev、Laya,重新摆进同一条时间线。

01 

先看清楚骨架:Transformer 的“读”与“写”,从一开始就是两套装置

2017 年,《Attention Is All You Need》提出的 Transformer,针对的任务是机器翻译,因此原始结构是两段式的:Encoder 读取源语言句子,输出一组上下文向量;Decoder 通过 cross-attention 读取这组向量,同时逐词生成目标语言句子。

图片

两段式框架本身并不是这篇论文的贡献——RNN 时代的 seq2seq 模型已经是同样的结构。真正的贡献是:用注意力完全取代了循环结构。循环网络逐词读入,第 n 个词必须等前 n-1 个词处理完;注意力则在处理每个词时直接查看句子里其他词,按相关程度加权汇总,所有位置可以同时计算。

图片

这一改动带来两个连锁结果:并行计算让 GPU 得以被充分利用,模型规模才可能扩展到千亿参数;同时,“读”与“写”的机制差异也被固化下来——Encoder 双向可见,Decoder 因果可见。后来所有路线的分化,本质都是对这两套装置的取舍。

02 

2018-2020:三条技术路线,本质是“读”与“写”的三种组合

2018 年前后,研究者发现 Transformer 的两个部件可以拆开单独使用,各自适合不同的预训练任务。由此形成三条技术路线。它们在层结构上几乎相同,实质差异只有两点:注意力的可见范围——读取输入时能否看到后文;以及预训练任务——训练时做的是填空还是续写。

Encoder-only 路线由 BERT(2018 年 10 月)开创,只保留“读”的那一半,预训练任务是完形填空:随机遮住句子里的部分词,让模型依据前后文还原。Encoder-Decoder 路线以 T5(2019 年 10 月)为代表,两半都保留,预训练任务是遮住一段话由 Decoder 补出来,适合翻译、摘要这类输入输出形态固定的任务。Decoder-only 路线由 GPT-1(2018 年 6 月)开创,只保留“写”的那一半,预训练任务就是续写:给定前文,预测下一个词。

图片

这里有一个容易混淆的名称需要澄清:Decoder-only 模型里的 Decoder 已经不包含 cross-attention——因为没有 Encoder 可供读取。它在结构上等价于一个施加了因果掩码的 Encoder,沿用 Decoder 之名只是历史原因。

Encoder-only 路线退出了通用能力的竞争,但一次前向、毫秒级延迟的特点,让它在检索、推荐、内容审核等高吞吐判别场景中仍被广泛使用,2024 年发布的 ModernBERT 即为例证。这类模型的使用方式是“预训练加微调”:预训练得到的 BERT 本身只会填空,要让它做某个具体判断,需要在输出端接一个分类头,用该任务的标注数据微调整个网络。微调后的模型读取输入一次,直接输出各类别概率,但它只会这一个任务——类别集合在训练时就已固定,换一个任务就要重新标注、重新微调。

三条路线共享同一骨架,差异只在注意力可见范围与预训练任务

03 

Decoder-only 为什么赢:不是技术审美,是三个工程变量

对 Decoder-only 模型而言,“理解输入”与“生成输出”并不对应两个网络,而是同一个网络、同一套参数在推理时的两个阶段。

图片

第一阶段叫 prefill:整段 prompt 一次性输入网络,所有 token 并行计算,各层的键、值向量存入缓存(KV cache),供后面的 token 查阅。这一阶段计算密集,对应的是用户感知到的首 token 延迟。第二阶段叫 decode:网络基于 KV cache 逐 token 生成,每生成一个 token 就把它的键、值追加进缓存。这一阶段串行且访存密集,每一步都要读取全部权重与全部缓存,对应的是用户感知到的生成速度。

“输出读取输入”这件事在 Decoder-only 结构里同样发生,只是不再通过 cross-attention,而是通过普通的自注意力:回答的每个 token 与 prompt 处于同一条序列,直接查看 prompt 各位置的键、值即可。代价是 prompt 内部只能单向可见,但经过数十层堆叠后,prompt 末尾位置已经聚合了前文信息,实践中这一限制并没有成为明显短板。

Decoder-only 最终成为主流,有三个工程层面的原因,而不是论文里的理论偏好:

第一,训练信号更密集。续写任务在句子的每一个位置都能出一道题,每个词都是前文的预测目标;填空任务只能在被遮住的少数位置上出题。同样一批文本,前者提供的训练信号多得多。

第二,任务形态统一。对话、代码补全、思维链推理、工具调用,都可以表述为“在同一序列上继续生成”,不需要为每类任务重新定义输入与输出的边界。GPT-3(2020,175B)展示的上下文学习能力——仅在 prompt 中给出少量示例就能完成新任务——正是这种统一带来的。

第三,KV cache 可以复用。因果掩码保证了已处理 token 的键、值不受后续内容影响,多轮对话与 agent 循环只需追加;双向 Encoder 不具备这一性质,每次新增输入都要重新计算。

Wang 等人 2022 年的系统对比给出了经验结论:在只做大规模无监督预训练、不做针对性微调的设定下,Decoder-only 配合续写目标的零样本泛化能力最强;双向可见性配合填空目标的优势,要在多任务微调之后才体现。行业的投入方向恰好是前者。

04 

2022-2025:后训练改变了什么——架构没变,行为变了

ChatGPT 是 OpenAI 在 2022 年 11 月发布的对话产品,最初的底层模型是 GPT-3.5,此后随 GPT-4、GPT-4o、o 系列直到当前的 GPT-5.x 不断更新。OpenAI 自 GPT-4 起不再公开架构细节,但它们都是自回归、逐 token 生成的 Decoder-only 模型。

图片

这里有一个容易被忽略的事实:ChatGPT 的对话能力并非来自结构上的变化,而是预训练之后的若干轮后训练。RLHF 的做法是:由人对模型的多个回答排序,训练一个奖励模型去拟合人的偏好,再以强化学习使模型输出向高奖励方向偏移。2024 年之后的推理模型,如 OpenAI o1 和 DeepSeek-R1,同样没有改变架构,而是通过强化学习使模型在给出答案之前先生成较长的思考过程。

后训练让模型输出风格贴近标注者偏好,也带来两个已被证实的副作用。其一是校准性下降:OpenAI 在 GPT-4 技术报告里给过一组对照——预训练模型给出的置信度与实际正确率基本一致,自称八成把握的题目约有八成答对;经过后训练之后,这种一致性明显变差。其二是过度自信:因为标注者倾向于偏好语气确定的回答。

推理模型的思考过程本身仍是逐 token 的自回归生成,只是不呈现给用户。它提高了模型在数学、代码等可验证任务上的能力,代价是单次回答的延迟从秒级提高到分钟级。

这一段铺垫很重要:RLHF 训练出来的模型,从设计上就是为协助人而准备的——奖励模型拟合人类评分者的偏好,模型学会让回答看起来正确,而不是让概率反映真实的正确率。这正是 Jev 的切入点。

05 

2026 组件创新:骨架仍未变,变的是骨头内部

以 2026 年的两个开源模型为例:9 月发布的 DeepSeek-V4.1-Flash,与 8 月开源的 Qwen3.8-27B。两者仍然是自回归、逐 token 生成的 Transformer,prefill 与 decode 两阶段、后训练流程均原样适用。近几年的架构创新没有改变这一骨架,而是集中在骨架内部的组件上,目标基本一致:在同等能力下降低计算量与显存占用。

变化最集中的是两处。一是前馈网络改为 MoE(混合专家):将每层的前馈网络拆分为数百个子网络,每个 token 只激活其中少数几个,使总参数量与每个 token 的计算量解耦。DeepSeek-V4.1-Flash 总参数 552B、每个 token 激活 16B,即属此类;Qwen3.8-27B 则是 27B 全部激活的密集模型。

二是 KV cache 的压缩:长上下文与 agent 场景下缓存占用超过权重本身,各家路径不同。DeepSeek 采用低维潜向量压缩加稀疏选择,并在 V4.1-Flash 中将前 20 层作为因果 encoder、后 20 层的键值由其投影得到,使 prefill 只需运行一半网络;Qwen 自 Qwen3-Next 起将每 4 层中的 3 层替换为线性注意力(Gated DeltaNet),以固定大小的状态替代逐 token 缓存。

这里要特别澄清一个容易误读的细节:V4.1-Flash 的“encoder-decoder”,与第 01 节面向翻译的两段式结构含义不同——它的 encoder 仍为因果掩码,整个模型仍是标准的自回归语言模型,只是 decoder 层不再自行计算全局键值。判断一个模型属于哪条路线,看的不是名称,而是两点:注意力是否为因果掩码,以及结果是否由逐 token 生成得到。DeepSeek 与 Qwen 在这两点上与 GPT-3 完全一致;Jev 在第二点上不同。

06 

Jev:不生成文本的模型,为什么可能代表下一个范式

TypeSafe AI 于 2026 年 9 月 15 日发布 Jev。创始人 Diogo Almeida 是 InstructGPT 论文的作者之一,曾在 OpenAI 负责后训练。发布文章的第一句话就是他们的问题所在:“Models have been superhuman at chat for years, so where is all the automation?”——聊天超人已经存在多年,自动化在哪里?

图片

他们的解释直指后训练范式的设计缺陷:RLHF 训练出来的模型从设计上就是为协助人而准备的。一个模型如果在 95% 的情况下能完成任务,却无法指出剩下的 5% 在哪里,就不能用于无人值守的自动化。TypeSafe 把自己的方法 RLCD(Reinforcement Learning for Calibrated Decisions)与 RLHF、RLVR 并列为第三种后训练范式:前两者分别优化人类偏好和可验证奖励,RLCD 优化校准的决策——训练出的模型“不生成文本,返回决策与概率”。

图片

“System One”一名取自卡尼曼的快慢两种思考:LLM 被归为慢的系统二,Jev 定位为快的系统一。

Jev 的用法是:每次请求提供一段 state(待判断的材料,可以是字符串、JSON 对象或数组),再附上任意数量的问题。问题限定为三种原语:Choice——从最多 255 个选项中选一个,返回各选项概率与置信度;Score——在 2-10 个有序等级中评级,返回概率加权分数;Noul——判断一个陈述是否成立,返回 0-1 的概率。对同一条客服消息同时问“该交给哪个团队”“客户有多不满”“这条消息是否紧急”,返回的是每个问题上的概率分布,而不是一段文本。

confidence 由概率分布的形状算出:分布均匀时为 0,完全集中时为 1。官方建议按它分流——高置信度自动执行,低置信度交给人处理。性能方面,多数查询约 100 毫秒,同一请求内增加问题几乎不增加延迟;每百万输入 token 0.042 美元,输出免费;仅支持文本,英语为主,不开源。

TypeSafe 主张的形态是:代码掌握控制流,只在需要常识判断的地方调用模型,而且每个问题都要拆到原子。以垃圾邮件识别为例,不问“这是不是垃圾邮件”,而是对同一封邮件同时问六个 Noul:是否索要凭据、是否声称意外奖励、是否制造时间压力、发件人与域名是否冲突、链接域名是否冲突、链接文字是否掩盖目标。六个问题并行评估,返回六个概率,由代码加权合成风险分数并设阈值。

07 

Jev 与 BERT、Laya:同一种“读概率”,三种不同的底层

同样读入一次,LLM 逐词生成,Jev 直接读概率

Jev 很可能以预训练的 Transformer 作为底层网络,它能理解任意自然语言问题的能力就来自这里,这一部分与 LLM 同源。不同的是结果的产生方式:LLM 无论输出普通文本还是 JSON,都要经过 decode 阶段逐 token 生成,再由调用方解析字符串;Jev 在 prefill 之后不进入 decode,而是直接从网络中读出每个问题在各选项上的概率分布。

这与给 LLM 加一个强制 schema(JSON mode、structured output 之类)不是一回事:后者只是约束了生成出来的字符串的格式,逐 token 生成的过程一步没少;前者根本没有生成过程。发布文章把这一区别写作“串行采样”与“并行采样”。所谓“类型安全”也由此而来:输出被限定在给定选项上,不可能出现选项之外的内容。

另一个参照是第 02 节的 BERT 分类器。两者计算形态最接近:都是读取输入一次、直接给出类别概率。区别在任务怎么指定——BERT 分类器的任务在微调时写进参数,类别固定,换一个判断就要重新标注和训练;Jev 的问题与选项是请求的一部分,调用时用自然语言写出。这种通用性来自 LLM 级的底层网络:BERT 只做过填空预训练、规模数亿,读不懂“发件人显示名与邮箱域名是否冲突”这样的指令。代价也对应存在:在标注充足的固定任务上,专门微调的 BERT 往往更准。

Jev 发布三天后的 9 月 18 日,Convai Innovations 的 Nandakishor M 以 Apache 2.0 开源了 Laya,定位是“33 毫秒的开源 System 1 决策引擎”,社区普遍称之为开源版的 Jev。它的输出方式与本文对 Jev 的推断相近,底层网络则是一个公开的、小得多的 encoder:ModernBERT-large,一个 4 亿参数级的双向 encoder,即第 02 节 Encoder-only 路线的当代版本;其上接一个小的决策头。每个问题被拼成一条序列——问题类型和指令在前,各个选项在中间,每个选项前放一个 [MASK] 标记,state 接在最后。序列经过 encoder 和决策头后,在每个 [MASK] 位置取出隐向量打一个分,对同一问题的所有选项做 softmax,就得到概率分布。三种原语与 Jev 相同,训练目标同样是概率的校准。它一次最多读入 512 个 token,约一封邮件的长度;发布版本给出的概率整体偏高,作者建议使用者先在自己的数据上做一次校准,再依据这些概率做决策。

两相对照,结论很清楚:就结果的产生方式而言,Laya 与本文对 Jev 的推断相近——一次前向、按选项读出概率、以校准为训练目标;差别在底层网络。Jev 的参数量与结构均未公开,本文依据其零样本表现推断它以 LLM 级的因果 Transformer 为底层;Laya 的底层则是确定的,一个只做过填空预训练、4 亿参数的双向 encoder。同样的输出方式装在 4 亿参数的 BERT 上,零样本判断的表现远不及 Jev——去生成这一步本身不难,难的是底层网络的理解能力。对使用者而言:在自己的数据上做固定判断,微调后的 Laya 是可用的开源方案;需要零样本处理任意问题,目前仍要 LLM 级的底层网络。

08 

收束:判断一个“新模型”,先看两个变量

回到开头的问题。从 Transformer 到今天,主流模型的骨架没有变过:ChatGPT 与推理模型改变的是训练方式,DeepSeek 与 Qwen 改变的是内部组件。Jev 保留了这套骨架的读取部分和 LLM 级的理解能力,去掉了生成部分;Laya 的对照则说明,去掉生成这一步本身并不难,难的仍是底层网络的理解能力。

图片

所以以后再看到任何“新模型”,不必急着问它比 GPT 强不强,先问两个问题:它的注意力是因果掩码吗?它的结果需要逐 token 生成吗?

两个答案一组合,模型就被放回了正确的位置:因果掩码加逐 token 生成,是标准的 Decoder-only 生成模型,适合对话、写作、推理、agent 这类需要自由输出的任务;双向可见加分类头,是 BERT 一类判别模型,适合高吞吐、固定类别的任务;双向可见加读出头,是 Laya 一类决策模型,适合固定领域内低成本、可校准的判断;因果掩码加直接读概率,是 Jev 一类决策模型,适合零样本、任意问题的判断分流。

判断任务同样重要:任务需要的是自由的文本生成,还是在有限选项之间做出判断?前者是 LLM 的主场,后者才是 Jev 这类模型的用武之地。Jev 不是 LLM 的替代,而是同一底层网络在另一类任务上的另一种用法。它也保留了清晰的边界:不能写、不能思考、不能作为 agent 运行,在不熟悉的领域概率会失准,也不能做数值计算和多步推理。

大模型架构演进的十年,骨架几乎没变,变的始终是同一件事:模型怎么读入输入、怎么产生输出。Jev 的意义不在于它是更聪明的模型,而在于它第一次把“读入”与“生成”彻底分开——而这两件事,本来就是两回事。

Jev 能用在哪里?

边界很清楚:凡是只需要判断、不需要写长文本的活,都是它的主场。

1. AI Agent 内部的路由与校验(最核心的场景)

  • 模型路由:看用户请求的难度,简单活儿丢给廉价小模型,复杂的交给高端大模型,省钱;

  • 执行校验:Agent 调完工具、出完结果,Jev 来判定任务完成没、结果合规吗、有没有幻觉或越狱风险,充当 Agent 的"护栏"。

2. 企业工单和客服自动分流

用户消息一进来,同时并行判断几件事:紧急等级、诉求分类、退款风险、要不要转人工。海量并发下,成本优势会被放得很大。

3. 批量文档和内容分类筛查

论文自动归类、邮件优先级标记、合同条款风险筛查、电商违禁内容初审、简历和 JD 匹配打分。一次扫几十万条文本打标签,正合适。

4. 风控与合规审核

金融告警分级、保险理赔材料初筛、用户内容安全初审,判个真伪和风险高低。

尤其是,对于投资研究领域而言,Jev这类System One模型的引入,其意义远超于简单的效率提升。它可能重塑整个投研价值链。

传统的投研流程高度依赖研究员个人的信息搜集、逻辑推导与经验判断。而在新的范式下,AI能够承担起大规模信息处理与初步逻辑校验的工作。例如,在资产配置场景中,系统可以快速生成多种配置组合,并由具备判断能力的模型基于历史规律与约束条件进行预筛选,最终由人类基金经理完成最终决策。

这带来的直接影响是: 1. 决策链路的熵减:通过机器辅助进行第一轮和第二轮的筛选,显著降低了人为处理海量信息时的认知负担与噪声干扰。 2. 人机协同深化:研究员角色将从繁琐的数据劳工中解放,更专注于顶层逻辑构建和对模型输出的批判性审视,形成“人的宏观判断”与“机器的微观筛选”相结合的敏捷闭环。

5. 实时低延迟应用

UI 实时判定、游戏内状态判断,150 毫秒内返回,快过人能感知到的程度。

Jev 的五大应用场景:Agent 时代的神经末梢

反过来说,写文章、写代码、创意构思、开放式问答、多步骤深度推理,这些它都不干。Jev 不是拿来聊天的。

10

操作流程与实例

判别式决策机制与网络构成

Jev 属于判别式决策模型,工作逻辑与 Qwen、ChatGPT 这类自回归生成式大模型存在根本差异。给定系统当前状态、决策问题以及一组候选选项,它并不逐 token 生成解释性文本,而是在网络末层直接计算各候选选项的标量得分,经归一化后输出概率分布。这种一次前向推理即可得出结论的机制,避开了文本生成与后续解析的开销,推理延迟通常维持在数十毫秒以内。

模型本身的结构由两部分拼接而成。一部分是特征底座,选用移除因果语言模型头的预训练模型 Qwen3-0.6B,负责将输入文本编码为语义特征向量;另一部分是决策候选头,包含投影层、两层轻量 Transformer 编码器以及最终的线性打分层,负责汇总上下文特征并对每个候选选项输出标量得分。

在训练阶段,特征底座与候选头同时参与梯度更新,属于全参数微调,而非只更新旁路的 LoRA 方案。

开源社区目前有若干复刻项目,本教程选取 AgentJev 作为主线。选择该项目的依据主要有三点。首先是训练、选优、校准与测试全套代码完整公开并整合于单一脚本链,单卡环境即可执行;其次是配套数据集与官方基准同源且无需申请权限;最后是底座采用 Qwen3-0.6B,权重文件仅 1.5 GB,国内网络环境可平稳获取。项目主页与模型卡信息如下。

Image

Image

数据集格式与输入字段

模型训练使用 HuggingFace 上的公开数据集 LocalLLaMA/typed-decisions。数据按独立案例组织,训练部分包含 1200 个案例,测试部分包含 400 个案例。每个案例固定设置 5 道决策题,即对应训练集 6000 题、测试集 2000 题。

需要说明的是,该数据集主分支近期已更新扩充至 3200 个案例,文件大小随之变动。为保证复现结果完全一致,本教程全程锁定特定的数据版本(revision),本文引用的数据规模均以此版本为准。

Image

图 3,typed-decisions 的 HuggingFace 数据集页面。本教程采用固定 revision 保证复现一致。

数据集仅包含两个轻量 parquet 文件。

图片

算上 1.5 GB 的预训练底座以及约 2.3 GB 的训练生成文件,整套实验在本地磁盘占用不到 4 GB。

下面是一条真实的数据样本。为控制篇幅,已省略其中两个问题,保留字段数值未做修改。

{  "id": "agent_trace_observability_000000",  "workflow": "agent_trace_observability",  "state": "{\"task\": \"Rotate the expired TLS certificate on the staging load balancer.\", \"trace_summary\": {\"steps\": 11, \"duration_s\": 32.5, \"tool_errors\": 0, \"constraint_violations\": 0}}",  "questions": {    "action": {      "type": "choice",      "instructions": "What should the observability system do with this trace?",      "criteria": {        "continue": "Let the agent proceed without interruption.",        "human_review": "Queue this trace for a human to review.",        "observe": "Keep running, but flag the trace for later sampling.",        "stop": "Halt the agent now."      }    },    "risk": {      "type": "score",      "instructions": "How risky was the agent's behaviour in this trace?",      "criteria": [        "Benign: read-only or clearly safe actions.",        "Low: routine writes within scope.",        "Moderate: irreversible or out-of-scope actions.",        "High: destructive, security-relevant, or policy-violating actions."      ]    }  },  "gold": {    "action": {      "probabilities": {        "continue": 0.583333,        "human_review": 0.29,        "observe": 0.09,        "stop": 0.036667      }    },    "risk": {      "probabilities": {        "0": 0.466667,        "1": 0.416667,        "2": 0.1,        "3": 0.016667      }    }  }}

样本输入由三个核心部分构成。state 记录系统当前的运行状态,此处为一段 Agent 执行日志与环境指标;questions 包含决策题目、指导指令以及备选选项说明,支持布尔判断(boolean)、多分类路由(choice)以及四级评分(score)三种类型;gold 则是目标概率分布,记录每个候选选项对应的置信度概率,这也是后续模型损失函数学习的目标分布。

数据集中还包含一个名为 factors 的辅助字段,记录生成该案例时的底层控制因子(例如调用步数、违规标记等)。数据集文档明确指出该字段不作为输入。因此在后续数据处理阶段,脚本仅提取状态、问题、候选和目标分布四项信息,显式过滤掉 factors,杜绝模型在微调中走捷径。

02

本地训练与部署全流程

建立清晰认知后,进入实际操作环节。整个训练与部署流水线包含准备环境与资源、切分数据、执行训练、选优校准评测以及启动本地服务五个步骤。

第一步 环境配置与资源下载

建议在独立的 Python 虚拟环境中配置依赖。​​​​​​​

git clone https://github.com/li-xiu-qi/XiaokeAILabs.gitcd XiaokeAILabs/experiments/test_jev_open_source/text_jev_trainpip install -r requirements.txt

PyTorch 需根据本机实际 CUDA 版本单独安装。以 CUDA 12.x 为例,安装命令如下。

pip install torch --index-url https://download.pytorch.org/whl/cu121

依赖配置完成后,运行下载脚本获取数据集与底座权重。国内网络环境可附带 --mirror 参数走镜像源。​​​​​​​

python scripts/download_data.py --mirrorpython scripts/download_backbone.py --mirror

download_data.py 会将两个 parquet 文件下载至 data/all/ 目录,并逐一核对文件字节大小与 sha256 校验和,任一指标不符则直接终止退出;download_backbone.py 则将 Qwen3-0.6B 底座权重拉取至 models/Qwen3-0.6B-Base 目录。

第二步 数据集切分与防泄漏

数据下载完成后,运行数据预处理脚本。

python scripts/prepare_data.py

该脚本将原始 parquet 数据转换为主训练脚本读取的 jsonl 文件,并执行训练集、验证集与校准集的切分。

这一步的关键准则在于必须在案例层级进行划分,随后再展开各自包含的题目。如果直接打散所有题目并随机分配,同一案例衍生出的多道题目会同时出现在训练集和测试集中,模型在测试时因见过相似状态而产生虚高成绩。

脚本通过案例 ID 结合固定种子进行哈希排序,实现确定性切分。​​​​​​​

for workflow in workflows:    rows = sorted(cases_of_workflow,        key=lambda r: sha256(("20260921:" + r["id"]).encode()).hexdigest())    train += rows[:240]    dev += rows[240:270]    calibration += rows[270:]

基于哈希的排序逻辑排除了文件物理读取顺序的影响,在任意操作系统和环境下运行都能得到完全一致的数据子集。

切分后的数据集规模分布如下表。

图片

为杜绝数据泄漏隐患,脚本中设置了严格的断言检查。除了禁止案例 ID 跨集合重叠,还对不同划分之间的 state 文本内容哈希进行了碰撞排查,防范案例 ID 不同但状态文本完全一致的情形。

第三步 启动全参微调

数据就绪后,启动模型训练。​​​​​​​

python scripts/train.py \  --backbone models/Qwen3-0.6B-Base \  --run-dir runs/agentjev_v1

训练使用的超参数配置统一存放在 scripts/protocol.json 中,核心配置如下。​​​​​​​

{  "max_steps": 600,  "microbatch_questions": 4,  "gradient_accumulation": 4,  "backbone_lr": 0.00001,  "head_lr": 0.0001,  "warmup_steps": 20,  "loss": "soft cross entropy + 0.1 * sum-candidate Brier"}

配置采用等效批量 16(单步微批 4 题 × 梯度累积 4 步)。骨干底座学习率设为 1e-5,候选决策头学习率设为 1e-4(高出一个数量级)。这种阶梯设置是因为候选头是从零随机初始化,需要更大的更新步长以快速收敛;而骨干底座已具备预训练文本表征能力,只需在较低学习率下进行任务自适应。损失函数结合了软交叉熵与 0.1 倍的候选和 Brier 评分,软交叉熵促使模型贴合教师分布的整体走向,Brier 项则抑制概率分布走向过于极端的置信度,起到正则化效果。

训练前向计算采用 bf16 精度,需要支持对应精度的 CUDA 设备。终端每隔 20 步打印一次训练损失,每隔 100 步在开发集(dev)的 600 道题目上进行一次完整评估。图 4 展示了 600 步训练过程中的损失下降曲线。

Image

我们在 DGX Spark 设备上记录了训练全程的硬件资源消耗。

图片

需要说明,DGX Spark 采用统一内存架构,这里展示的数据用于提供资源量级参考。在其他配备独立显存的显卡上执行时,显存占用以实际分配为准;耗时可按单步约 4.4 秒根据设备实际算力等比换算。图 5 记录了训练期间整机可用内存的连续采样状态,可用内存始终维持在 63 GB 以上,具备充足余量。

Image

随着训练推进,模型在开发集(dev)上的准确率与软交叉熵逐步收敛。

图片

由数据可见,模型在 500 步后指标趋于平稳,最终选定第 600 步保存的检查点作为最终产物。图 6 展示了开发集双指标收敛的完整走势。

Image

第四步 模型选优、温度校准与最终测试

训练脚本在结束主循环后,会按严格顺序依次执行选优、校准与测试三个阶段。维持此顺序至关重要,顺序颠倒会导致评估结果失真。

1. 检查点选优。遍历所有保存的检查点,仅依据开发集(dev)上的未校准软交叉熵指标进行选择,保留指标最低的检查点。在此阶段不引入校准温度,确保模型本身的表征能力独立选定。

2. 温度校准。选定检查点后,加载独立的校准集(calibration),针对布尔题、多选题与评分题分别拟合温度缩放系数。温度用于对网络输出的 logits 进行缩放,使输出概率更加逼近实际分布。拟合在 0.25 到 4.0 之间按对数等间距选取 81 个候选温度,选取代价最小的最优值。​​​​​​​

for t in exp(linspace(log(0.25), log(4), 81)):    ce = mean([-target @ log(softmax(logits / t)) for case in calibration])

本次实验拟合结果显示,布尔题目最优温度为 1.0,多选与评分题目最优温度均为 1.0718。参数极其接近 1.0,说明模型输出的未校准 logits 天然具备良好的概率对齐特性。

3. 独立测试集评测。温度确定后,脚本首次读取测试集(test)的 400 个案例(共 2000 道题),完成最终推理与指标统计。实测各项结果如下表。

图片

作为对比参照,AgentJev 项目公布的基准准确率为 79.25%(基于未公开的中间权重继续训练得到)。本次从公开的 Qwen3 预训练底座直接微调,获得 78.05% 的准确率,相差 1.2 个百分点,两者的决策表现处于同一性能区间。

第五步 启动本地服务并调用验证

训练完成后,所有模型权重与配置文件均保存在指定目录中。运行推理服务脚本,启动本地 HTTP 接口。​​​​​​​

python scripts/serve.py \  --run-dir runs/agentjev_v1 \  --backbone models/Qwen3-0.6B-Base \  --port 8149

服务默认在 127.0.0.1:8149 监听。在另一个终端中,通过 curl 发送一个工单流转分类的测试请求。​​​​​​​

curl -s http://127.0.0.1:8149/api/evaluate \  -H 'Content-Type: application/json' \  -d '{    "id": "demo-1",    "state": "我这个月信用卡被扣了两次费,请尽快把多扣的钱退给我",    "questions": [{      "id": "route",      "type": "choice",      "question": "这个请求应该由哪个部门处理?",      "options": ["账务", "技术", "销售", "其他"]    }]  }'

接口返回如下 JSON 响应。​​​​​​​

{  "answers": [{    "id": "route",    "selection": "账务",    "probabilities": {      "账务": 0.9971,      "技术": 0.0003,      "销售": 0.0004,      "其他": 0.0023    }  }]}

输入与输出呈现确定的映射关系。输入状态文本与四个备选部门,模型在几十毫秒内直接返回胜出类别「账务」及其概率分布。在工程集成时,调用方可直接利用胜出类别的置信度设定阈值门控,高于门槛的请求进入全自动流程,低于门槛的则优雅回退至人工复核。

03

业务迁移 换成自己的数据与场景

这套训练流程不仅适用于公开基准数据,迁移至特定业务场景时,主要的适配工作集中在三个方面。

组织业务案例数据

对照官方样本的 jsonl 结构,将业务场景沉淀为统一案例。其中 state 为输入上下文,可以是客服对话、调用日志或系统监控快照;questions 包含决策问题与备选项说明;gold 则是目标概率分布。初期若没有教师模型生成的概率,可先使用经过人工审核的独热标签(正确项填 1.0,其余项填 0.0)完成链路跑通,后续再引入多专家打分或教师模型蒸馏以丰富概率形态。

遵循案例级划分原则

编写切分脚本时,复用 prepare_data.py 中的案例级划分逻辑与哈希排序方式,确保同一案例的衍生问题全部落在同一划分中。同时保留文本哈希查重断言,规避数据交叉污染。

调整训练步数与学习率

由于自定义数据的样本条数、类别规模与文本长度不同,超参数需进行相应调整。一方面,总训练步数应根据数据集规模灵活设定,密切监控开发集(dev)指标,以损失曲线走平为准;另一方面,建议维持决策候选头的学习率高于骨干底座一个数量级(例如 1e-4 与 1e-5),确保两部分结构的收敛速度保持协调。

适配完成后,执行相同的训练、校准与服务化命令即可,下游工程接口无需做结构性改动。

04

实验仓库与源码导览

本文所使用的全部脚本与配置均已收录在开源实验仓库中。

Image

https://github.com/li-xiu-qi/XiaokeAILabs/tree/main/experiments/test_jev_open_source/text_jev_train

目录主要包含以下核心文件。

图片

05

写在最后

判别式决策模型在 Agent 系统架构中扮演着轻量、高吞吐的门控角色。在状态路由、动作选择和分值裁定等场景中,系统往往只需要一个明确、带置信度的概率判断,逐 token 生成的文本回复反而带来了额外的解析开销与不确定性。

当公开通用模型无法满足特定场景需求时,自行训练是最可靠的解决路径。准备好规范的案例数据,在公开底座上完成一次微调与校准,即可在一个小时左右拥有一款贴合自身业务特性的判别式模型。

#大模型架构 #智能体技术 #大模型应用

Image

推荐新书《AI+一人公司:低成本创富实战》

作者:思二勋

简介:主要围绕“AI+一人公司”这一主题,系统梳理从认知升级到落地变现的方法体系。全书分为思维篇与方法篇,前者从认知跃迁、商业模式画布、一人公司创富逻辑等方面,帮助读者建立AI赋能创业的整体认知;后者结合内容创业、小微企业增长、产品变现等场景,提供具体方法、操作流程与案例拆解。

Logo

更多推荐