JetBrains 披露了在搭载 M5 芯片的 MacBook 上使用 Qwen3.6-27B 本地运行首个 Junie Local 版本的工程细节,并说明要获得实用性能,并不只是选择压缩模型,还需要调整编程代理本身、推理引擎、模型设置以及上下文管理方式。
该公司表示,让 Junie 完全在设备上运行、无需云端推理是一个长期项目,目标是支持广泛的硬件配置。目前提供的首个版本专注于 MacBook M5,这也解释了为何已公布的优化主要集中于这些芯片的特性。
将任务上下文保留在会话中
与其他编程代理一样,Junie 通过一个执行循环工作:用户向模型发送任务,模型随后调用 Bash 命令以及读取和写入文件等工具,然后将这些操作的结果返回给模型。每当有新的请求时,上下文都会扩展,并且可以重新使用模型在上一个请求中处理过的 KV-cache 数据。
在云端模型中,代理可以在需要时重新请求文件,因为 prefill 阶段,即在生成回复之前处理初始上下文的阶段,速度相对较快。但 JetBrains 发现,在本地模型中读取文件的时间成本很高。因此,该公司修改了本地推理逻辑,使每个新请求直接添加到活动上下文中,而不是只保留其认为适合新任务的部分。这样,模型读取过的文件就会留在上下文中,可以重新使用 KV-cache,而无需再次处理。
该公司还改变了 Junie 在开始新的编码会话时发送数据的顺序,并在推理引擎中加入了缓存从前缀到用户请求的逻辑。因此,同一项目中后续任务可以重新使用这一前缀。至于用户请求之后的项目上下文,则没有以相同方式缓存,因为它相对较小,而且主要由可能频繁变化的顶层文件组成。
与模型行为相关的调整
Qwen3.6 对进度更新的处理方式并不符合 Junie 对云端模型的预期:它通常会忽略类似 XML 格式的状态更新区块,但会在工具调用之外,以文本形式写出对自身操作的描述。JetBrains 利用了这一行为,将生成的文本作为更新显示给用户。该公司说明,这种适配针对的是该模型,因为其他模型可能完全不输出文本,或者可能生成过多文本。
JetBrains 还禁用了模型的一些可选请求,其中包括生成任务简短描述的逻辑。该公司认为,为减少请求而在用户体验上作出有限妥协是可以接受的。此外,它还停用了多代理模式,因为根据其测试,在 M5 设备上顺序处理效率更高,而并行请求仍会受到推理速度的限制。
为什么选择 Qwen3.6-27B?
JetBrains 决定在本地版本中完全禁用 reasoning。根据其对 Qwen3.6-27B 云端版本的内部测试,启用推理并没有带来明显的质量提升。由于推理令牌会计入推理引擎生成的令牌数量,禁用推理后所需令牌数量减少了约两到三倍,公司据此实现了接近两倍的任务执行加速,同时对质量的影响被描述为不重要。
该公司使用了 4-bit 量化版本,因为在基准测试中它仅略逊于 8-bit 版本,而且与 8-bit 版本相比,受内存限制的令牌生成速度约快一倍。但在初步测试中,4-bit、8-bit 和 16-bit 版本的 prefill 速度没有差异,这促使团队检查引擎内部的计算操作。
隐形瓶颈:prefill 阶段
根据 JetBrains 的数据,在默认设置下,RTX 5090 上的 prefill 速度可达到约每秒 3,700 个令牌,而优化前 M5 上约为每秒 650 个令牌。在文件调查任务中,大部分时间都花在处理上下文上,而不是生成回复本身。
团队发现,prefill 期间相当大一部分矩阵运算以 16-bit 精度执行,即使权重已经压缩为 4-bit,因为权重在运算前会被转换为 16-bit。由于 M5 具有专用于 8-bit 精度计算的指令,JetBrains 对 MLX-VLM 软件包进行了修正,将 self-attention 层中的部分矩阵运算转为 8-bit,从而使 prefill 速度提升了约 40%。该修改不包括 full-attention 层;即使进行量化,这些层的权重仍保持 16-bit 精度。
该公司将目前对 M5 的关注与这些特定计算指令联系起来;M4 芯片不具备这些指令,JetBrains 表示,在 prefill 阶段,M4 上的 16-bit 计算速度比 M5 慢 20% 至 30%。
加速生成与模型选择
JetBrains 同时启用了两种 speculative decoding 方法:使用独立草稿模型进行多令牌预测 MTP,以及通过在上下文中查找重复序列来预测后续令牌的 n-gram 匹配。在某些情况下,可以通过 MTP 接受约三个建议令牌,并通过 n-gram 匹配再接受最多八个额外令牌,从而使生成速度提升至两倍。
该公司解释说,Qwen3.8-27B 并不是 Mac 设备上的最佳选择,因为它需要 reasoning 才能良好运行。禁用 reasoning 后,质量会严重下降,模型还可能陷入反复调用同一工具的循环。而以中等水平启用 reasoning 会使生成令牌数量增加约五倍,实际上导致速度降低约四倍,因为 prefill 时间不会发生太大变化。因此,根据 JetBrains 的评估,Qwen3.6-27B 目前仍是 Mac 硬件上本地运行 Junie 的最合适选择。
certi.news 解读:究竟发生了什么变化?
这一实验表明,仅以每秒生成的令牌数量来衡量本地编程代理,可能会得到不完整的图景。用户还需要等待文件加载、上下文复用和工具调用执行,而这些阶段可能在生成开始前就成为瓶颈。实际上,Junie 的调整减少了重新读取文件的需要,而 MLX-VLM 的修正确保了 M5 上上下文处理速度的提升,禁用 reasoning 则减少了所需生成的令牌数量。
但限制也很明显:首个版本专注于 M5,禁用 reasoning 可能不适合那些依赖它来维持质量的模型,而且能否利用进度更新取决于 Qwen3.6 的行为。JetBrains 表示,该公司已经拥有支持 DGX Spark 和 RTX 5090 的原型,也在研究具有 24 GB 容量的显卡,但本文没有提供这些版本的发布时间或规格。因此,Junie Local 代表着迈向更实用的本地编程代理的重要技术一步,但并不能证明其体验已经与所有云端模型相当,或已经适用于所有类型的硬件。