摘要 64GB Mac、4bit 量化、每题两小时。从预填崩溃到 119k 上下文失速,我把一次次失败改成了 LocalBrain 的通用修复。 黑粉科技 · 2026-09-11
周二晚上,我把五道单文件网页难题丢给一台 64GB 内存的 Mac,让 LocalBrain 带着 Qwen3.8-Flash-Next 自己写、自己测、自己交付。**原以为这是一场模型能力测试,后来它变成了连续几天的代理系统抢修:**第一次预填直接把 262k 上下文顶到 Metal 内存错误;长任务跑到 119k 词元后,每轮先等 5—7 分钟预填;一个写错位置的字段能连续失败 7 次;一个小模型甚至把同一份交付请求原样重发 85 次。
**最后的结果依然值得看:**题 1《奇点实验室》正式交付;题 3《霓虹城》、题 4《星槎异闻录》、题 5《神经元熔炉》都能离线打开并通过运行时核验;题 2《六十秒后重启》写到 99KB 仍未闭合,我决定放弃。下面不只展示结果,也把那些漫长、狼狈、但真正推动 LocalBrain 变好的失败摊开。
先说结论:1/5 正式交付,4/5 可运行。 这里的“4/5 可运行”包括那 1 题正式交付,不是四题全部验收通过。这个 4bit 模型已经能写出有物理模拟、寻路、叙事和反向传播的完整页面;真正把它拖垮的,是长上下文下从 26.5 掉到 5.2 词元/秒的整轮有效速度,以及代理循环在失败后能不能及时止损、收尾、恢复。

🧩 先补一个概念:让模型「自己交付一个网页」到底在测什么
平时我们让模型写代码,是它吐一段、我们复制粘贴、跑一下、回去再问。这次不是。
LocalBrain 里的代理循环把这件事交给程序:模型调用写文件工具落盘,程序自动用无头浏览器把页面跑起来,把运行时错误、控件数量、交互检查结果回喂给模型,模型再改、再检,直到它自己调用「交付」并通过验收。人在这个环里只提供题面和时间预算。
**这条链不是一开始就能跑。**9 月 2 日第一次让模型写大型 3D 页面时,它把大段代码塞进工具参数,刚好在输出上限处截断;应用一边显示“已写入”,一边又把坏掉的 JSON 原样塞回历史,下一轮直接被服务端用 500 拒绝。
后来页面即使写到磁盘,里面的 JavaScript 出错,模型也看不见。于是才有截断抢救、同名另存、按行编辑、无头浏览器自检,以及今天这套只认真实回执的产物策略。
单文件 HTML 是很好的考题。它禁止外部依赖,所以模型不能把难点甩给 Three.js 或 React;它必须一次性把结构、样式、逻辑写对;而且「双击能不能打开、报不报错」是机器可以客观判定的。
五道题分别压五种能力:物理模拟与数值稳定、光线投射与状态机、多智能体寻路、中文写作与交互叙事、神经网络与动态图表。
🖥️ 实验设置:机器、模型、参数,一个不漏
| 项目 | 实际配置 |
|---|---|
| 机器 | Apple M5 Pro,64GB 统一内存,macOS 26.6.2 |
| 模型 | AtomicChat/Qwen3.8-Flash-Next-GGUF,文件 Qwen3.8-Flash-Next-AD-3.84bpw-IQ4_XS-M64,28 个分片共 79GB,按需读取(--lazy-mode auto --load-mode mmap) |
| 引擎 | llama.cpp b10705(Metal),--jinja --reasoning auto --reasoning-budget -1 --ctx-checkpoints 8 --checkpoint-min-step 0 --n-gpu-layers all --parallel 1 |
| 上下文窗口 | 174,080 词元。首次按 262,144 启动,预填时 Metal 内存不足,程序记录失败后按三分之二重启得到这个值 |
| 采样 | temperature 1.0、top_p 0.95、top_k 20,全部取自 GGUF 元数据里量化方声明的推荐值;思考模式自动 |
| 实测速度 | 2 万词元内解码 21–25 词元/秒;10–14 万词元 9–10 词元/秒,算上每轮预填整轮有效 5.2;输入预填 260–550 词元/秒 |
| 每题预算 | 120 分钟(冒烟题 20 分钟),到时按收尾逻辑收口 |
| 模型可用工具 | inspect_file、read_file、write_file、append_file、edit_file、run_html_check(无头 Chromium 实跑 + 交互检查)、阶段计划、交付 |
| 独立核验 | 台架另起无头浏览器跑产物,数运行时错误、动画帧、canvas、控件;再用行为脚本按题面逐项查证据 |
| 对照模型 | Blackfrost Qwen3.8-27B abliterated Q8_0(29GB,约 9 词元/秒)只跑基础三级;Ling-3.0-tiny Q8_0(MoE,7.9B 总量 / 1.3B 激活)只跑冒烟 |
这里最容易被忽略的一行是「上下文窗口」。它不是我设的,是程序自己算出来的:启动时按可用内存的一份额度给 KV 缓存,262k 窗口在第一次预填就把 Metal 命令缓冲区撑爆,程序把这次失败记下来、按三分之二重新规划、重启,得到 174,080。
**窗口放得下,不等于长任务跑得动。**整个过程没有任何写死的机型或型号常数。
🧬 被测模型:官方模型卡里的关键信息
这五道题的主角是 Qwen3.8-Flash-Next。它 8 月 24 日在 ModelScope 上架,截至 9 月 11 日已有 44,171 次下载、1,137 个星标。千问团队在模型卡里给它的定位很直接:这是未来 Qwen4 底层架构的实验性预览,第一次以开放权重的形式放出来。
先把官方数字和我这台机器上的实际版本并排放,后面几乎所有现象都能在这张表里找到来源:
| 项目 | 官方模型卡 | 这次实测用的版本 |
|---|---|---|
| 参数规模 | 总参数 125B,每个词元只激活约 6B;另有 51B 的 N-gram 嵌入和 4B 的 MTP 多词元预测模块 | 同一个模型的社区量化版,IQ4_XS 3.84bpw |
| 权重体积 | 131 个 safetensors 分片,合计约 360GB(按参数量推算是 16 位精度) | 28 个 GGUF 分片,合计 79GB |
| 层结构 | 48 层,12 组 ×(3 层 Gated DeltaNet + 1 层 Qwen Sparse Attention),每层后接 MoE | 相同 |
| 专家 | 512 个专家,每个词元走 10 个路由专家加 1 个共享专家 | 相同 |
| 上下文 | 原生 262,144 词元,用 YaRN 可扩到 100 万 | 64GB 上实测上限 174,080,262k 第一次预填就撞上 Metal 内存 |
| 多模态 | 自带视觉编码器,支持图片和视频输入 | 五道题都是纯文本,没有用到 |
| 许可 | Qwen Community License 1.0 | 同左 |

模型卡列了四项新特性,前两项正好对上这次实测里的现象。
- 混合注意力换成 QSA。 上一代的 Gated DeltaNet 加 Gated Attention,改成了 Gated DeltaNet 加 Qwen Sparse Attention。稀疏注意力不再逐个挑词元,而是按微块挑,每次预算 512 块或 2,048 个词元,官方说这能明显降低长上下文延迟。48 层里有 36 层是 Gated DeltaNet 这种线性注意力,状态一路累积,没法像普通注意力那样随手截回某个位置;后面修复清单里 9 月 7 日「只能回滚到服务端检查点」那一条,根源就在这里。
- N-gram 嵌入。 用两三个词组成的短词组去查一张 2,000 万条的嵌入表,只在第 2 层接入。官方的说法是,这种扩参数的办法计算量小,也比 MoE 更适合放到加速器内存之外。79GB 的文件能在 64GB 内存上启动,靠的正是 llama.cpp 把这类巨型低频张量留在 SSD 上按需读取,细节写在 85GB 模型塞进 64GB Mac 里。
- Gated Residual。 残差流拓宽成 4 个分支,用逐元素、随数据变化的读门和逐分支的写门控制信息进出,官方说能在保持训练稳定的同时把推理开销压得很低。
- 训练配方。 Muon 和 AdamW 两种优化器分管不同类别的权重,并且取消了 batch size 预热,一开始就用目标 batch size 训。
**每个词元只激活 6B,也解释了它为什么比 27B 快。**稠密的 27B 每生成一个词元要把 27B 参数全算一遍,Flash-Next 只算大约 6B,所以同一台机器上它能跑到 22–27 词元/秒,27B 只有 9 左右。代价是总参数要占掉 79GB 的磁盘和大半内存。
**官方说 QSA 能压低长上下文延迟,我这里却实测解码从 23 掉到 9.5 词元/秒,这两件事不矛盾。**模型卡推荐的是 SGLang、vLLM、TokenSpeed、KTransformers 这类服务端引擎,llama.cpp 不在名单里;llama.cpp 0.4 发布时,对这个架构也只写了「初步支持、优化待续」(见 llama.cpp 0.4:64GB硬墙松了吗?)。所以这次测到的是当前 Mac 引擎上的长上下文速度,不是 QSA 的上限;换新版引擎重测之前,我不把这笔账全记在模型头上。
官方跑分里,Flash-Next 在我挑出的 8 项上全部高过稠密的 Qwen3.8-27B,差距最大的是智能体编程和职业任务。

完整的五模型对比如下,全部是模型卡上的官方数字,加粗为该行最高:
| 测试 | 考什么 | Flash-Next 125B/6B | Qwen3.8-27B | Qwen3.7-Plus 397B/17B | DeepSeek-V4-Flash-0731 284B/13B | Claude-Opus-4.6 (Max) |
|---|---|---|---|---|---|---|
| SWE-bench Pro | 智能体编程 | 62.5 | 61.7 | 55.8 | 56.0 | 53.4 |
| DeepSWE 1.1 | 智能体编程 | 58.7 | 42.2 | 16.5 | 54.4 | 未公布 |
| SWE-bench Multilingual | 多语言软件工程 | 81.0 | 73.8 | 75.8 | 未公布 | 77.5 |
| NL2Repo-Bench | 仓库级代码生成 | 48.1 | 42.3 | 41.1 | 54.2 | 47.6 |
| Toolathlon Verified | 真实工具调用 | 73.5 | 67.1 | 50.6 | 70.3 | 未公布 |
| JobBench | 职业任务 | 55.7 | 33.4 | 27.6 | 41.3 | 36.6 |
| IFBench | 指令遵循 | 81.3 | 79.5 | 79.1 | 79.2 | 62.5 |
| GPQA Diamond | 科学推理 | 91.7 | 89.2 | 90.3 | 90.8 | 91.3 |
| HLE | 跨学科难题 | 35.9 | 30.8 | 34.7 | 33.8 | 40.0 |
| LiveCodeBench v6 | 竞赛编程 | 91.9 | 90.3 | 89.6 | 90.6 | 88.8 |
读这张表要带着四个限定。第一,编程类测试是千问在 Claude Code 或 mini-SWE-agent 框架里测的,temperature 1.0、256K 上下文,Claude-Opus-4.6 的 SWE-bench Pro 用的是其官方公布成绩。第二,Flash-Next 不是每项都第一:仓库级代码生成输给 DeepSeek-V4-Flash,跨学科难题 HLE 输给 Claude-Opus-4.6。第三,官方表里的 27B 是原版,我这次对照跑的是社区去审查的 Q8 版,速度能比,分数不能直接套用。第四,这些分数来自约 360GB 的全精度权重,我跑的是压到 79GB 的 4bit 量化,本文五道题的结果,才是这个版本在这台机器上的真实表现。
视觉方面官方另有一张表:手机操作 AndroidWorld 84.5(Claude-Opus-4.6 为 62.0),电脑操作 OSWorld 2.0 部分得分 52.3。五道题都是纯文本任务,这部分我这次没有验证。
模型卡的「最佳实践」和我这次的设置,逐条对照:
| 项目 | 官方建议 | 这次实测 |
|---|---|---|
| 采样(开思考) | temperature 1.0、top_p 0.95、top_k 20、min_p 0、presence_penalty 0 | 一致:GGUF 元数据里的推荐值就是这一组 |
| 采样(关思考) | temperature 0.7、top_p 0.8、top_k 20、presence_penalty 1.5 | 没有切换:关思考只用在补闭合、强制调用工具这类短轮次,采样沿用上一行 |
| 思考强度 | 多轮智能体任务里调低思考强度不一定更快,分析不足会带来更多失败和重试 | 我实测它基本无视 low 档;最后一次运行固定一个档位,只按剩余时间调思考预算 |
| 历史思考 | 默认保留所有历史轮次的思考(preserved thinking),利于智能体保持决策一致 | 单次任务内保留,窗口吃紧时从最旧的轮次开始丢;跨轮聊天只带模型答复,不带思考 |
| 输出长度 | 在 100 万上下文内,思考给到 262,144、最终答复给到 131,072 | 64GB 装不下:总窗口 174,080,每轮额度按「剩余时间 × 实测速率」动态定 |
| 超长文本 | 超过 262k 用 YaRN;静态缩放可能拖累短文本表现 | 没有用到,瓶颈在 174k 以内的速度 |
| 推理引擎 | SGLang、vLLM、TokenSpeed、KTransformers | llama.cpp(Metal),Mac 上的现实选择,不在官方推荐名单里 |
对照下来,采样完全照官方来,差距集中在两处:64GB 内存撑不起官方建议的长输出和原生窗口,官方推荐的服务端引擎在 Mac 上用不了。所以这次五道题考的是「4bit 量化 + llama.cpp + 64GB」这套组合,不是 Flash-Next 的上限。
**许可证也值得看一眼。**Qwen Community License 1.0 允许免费使用、修改和分发;但如果你做的是模型即服务(对外提供 API 或托管推理)或 AI 工作助理生意,商用前要另找千问签授权;产品月活超过 1 亿或月收入超过 2,000 万美元,还要在界面上显著标注模型名。个人在本机跑、公司内部自用且不把模型能力开放给第三方,不受第二条限制。
本节数据来自 ModelScope 上的官方模型卡(2026-09-11 读取):https://modelscope.cn/models/Qwen/Qwen3.8-Flash-Next/summary
📋 五道题的题面
题面来自一份 29KB 的文件,五道题共用同一套硬性要求:只交付一个 HTML 文件、全部内嵌、禁止任何第三方库和网络资源、断网双击可用、不允许用预录动画冒充模拟、页面自带不能写死结果的「系统自检」面板。每题另有几十条具体要求,我把最硬的部分摘出来:
| 题 | 视觉形态 | 主要测试能力 | 题面里最硬的要求 |
|---|---|---|---|
| 1 奇点实验室 | 三维宇宙引力沙盘 | 数学、物理模拟、数值稳定、性能优化 | ≥700 个粒子真实受两个移动引力源影响;软化参数、固定步长、NaN 检测;单击生成引力井、双击三维爆炸、拖动旋转、滚轮缩放;挑战「双星系统让 60% 粒子存活 30 秒」;帧率低于 30 自动降质 |
| 2 六十秒后重启 | 第一人称伪 3D 时间循环 | 光线投射、碰撞、状态机、时序因果 | 网格光线投射走廊、玩家有半径不穿墙;60 秒内 7 个定时事件真实改变地图;本轮状态与永久线索分开重置;巡逻机器人五种状态且按地图寻路;密码线索、三个能源节点顺序、可完成通关 |
| 3 霓虹城:最后一单 | GTA 式 2.5D 开放城市 | 多智能体、寻路、系统耦合、任务逻辑 | 固定种子生成 ≥12×12 街区且道路连通可寻路;小地图与城市一致;车辆有惯性侧滑摩擦;昼夜循环、夜间大灯;交通、警车、通缉等级、送单任务 |
| 4 星槎异闻录 | 2.5D 水墨互动长卷 | 中文写作、语义映射、叙事、交互设计 | 原创仿古文 350–550 字配译文与注释;五个场景、≥5 层视差;古文语义映射到画面变化;天印机关、三结局;Web Audio 程序化音效 |
| 5 神经元熔炉 | 2.5D 数据实验室 | 神经网络、反向传播、动态图表、可解释性 | 手写前向与反向传播、数值梯度检查;tanh/relu、L2;XOR、双月、同心圆、螺旋四数据集;实时决策边界与损失曲线;NaN 检测与实验记录 |
冒烟题只有四句话,是每次改完代码先过的门槛,原文如下:
请制作离线可直接打开的单文件 HTML 任务清单,文件名 smoke-taskboard.html;不使用任何外部依赖。页面需有标题、新任务输入框 #task-input、添加按钮 #add-task、清单 #task-list、未完成数量 #remaining 和清除已完成按钮 #clear-done。输入文字后可以点击添加,也可以按 Enter 添加;空白输入不得添加。每条任务有复选框,勾选后划线并更新未完成数量,清除按钮只删除已勾选项。默认从空清单开始。用清楚的中文提示、居中卡片与可读配色。请实际写入文件,并用 run_html_check 的真实交互检查验证添加、勾选、清除后再交付。
五道题的完整题面作为附件放在文末,想复现的可以整段贴进 LocalBrain 的聊天框。
📊 每一题实际发生了什么
| 题 | 结果 | 轮数 | 用时 | 产物 | 独立核验 |
|---|---|---|---|---|---|
| 1 奇点实验室 | delivered | 22 | 6,902 秒 | 45,018 B | 模型自检 3 组 36 步交互全过后交付;独立核验 19 项过 18、0 运行时错误、12 控件 |
| 3 霓虹城 | timeout,可运行 | 23 | 7,200 秒 | 77,801 B | 0 错误、2 canvas、5 控件;固定种子、12×12 街区、红绿灯、寻路、通缉、警车状态、行人全部有据;「按 W 加速」交互项未过 |
| 5 神经元熔炉 | timeout,可运行 | 30 | 7,200 秒 | 42,600 B | 0 错误、5 canvas、22 控件;tanh/relu/反向传播/数值梯度/四数据集/L2/决策边界/NaN 检测全部命中 |
| 4 星槎异闻录 | timeout → 三次恢复后可运行 | 19 + 23 | 7,200 秒 + 恢复约 7,900 秒 | 137,793 B | 0 错误、8 canvas、81 控件;五场景、视差、三结局、天印、Web Audio 全中;古文 228 字未达 350 |
| 2 六十秒后重启 | 放弃 | 27 | 7,200 + 4,700 秒 | 99,268 B | 未闭合,不可运行 |
题 1 是唯一一次干净的交付。22 轮里模型自己写了三组交互检查,第三组 36 步全部通过后调用交付,验收放行。
我另外写了一个行为脚本按题面逐项查:粒子数是实时变化且不低于 700 的整数、按空格后状态文本真的变成「已暂停」、canvas 像素在变、自检面板有 18 条结论词——19 项过 18,唯一没过的是快照那一瞬间挑战状态文本没出现「成功/崩溃/进行」三个词。


题 3 和题 5 属于同一类:两小时到时、模型没来得及调用交付,但产物本身是好的。题 5 三十轮写了 42KB,独立实跑 0 错误、5 个 canvas、22 个控件,反向传播和数值梯度检查在源码里都能找到;题 3 二十三轮写了 77KB,城市、红绿灯、寻路、通缉全部有据,只是模型自己的交互检查「按 W 加速车速变化」没过,这一项我没有替它改,留给试玩确认。



题 4 是这次最能说明问题的一题。第一次 120 分钟写到 129KB 就到时了,文件缺最后的三个闭合标签(script、body、html)。之后的收尾轮补齐了闭合,页面能打开,但暴露出一个运行时错误:跳转菜单的容器不存在。
第二次恢复 30 分钟,模型花了 18 分钟思考,一次编辑修掉这个错误,自检马上报出下一个:createRadialGradient 收到非有限值。
第三次恢复我换了做法,让程序把 129k 词元的历史折叠成 22k,模型用 12 轮把 2,480 行文件定点读了一遍,在推理里准确定位到根因——绘制近景时参数顺序传反了,导致 NaN——但时间又到了。第四次 60 分钟,它改完、自检 0 错误。加起来,题 4 在恢复上又花了两个多小时。


🎮 最终效果到底丰富到什么程度
**这七张图不是概念稿,也不是给文章临时做的效果图,全部来自最终 HTML 的实际运行画面。**题 1 同屏计算 700 多个粒子、两个移动引力源和粒子轨迹,暂停、缩放、旋转、爆炸与挑战状态都有真实响应;题 3 有城市道路、车辆、红绿灯、导航、通缉、昼夜变化与任务结算;题 4 把水墨长卷、五个场景、视差层、谜题、三结局和 Web Audio 塞进一个 138KB 文件;题 5 则把数据集、网络结构、前向传播、反向传播、损失曲线和决策边界同时画出来。
最让我意外的不是某一张画面有多漂亮,而是模型能在没有 React、Three.js、图片素材和网络请求的前提下,把完全不同的四套视觉与交互系统从零装进单文件。它已经跨过了“只能写一个按钮演示”的阶段。
但画面丰富不等于交付合格:题 3 的驾驶手感没有逐项试玩,题 4 的古文只有 228 字且缺 localStorage 证据,题 5 到时没有主动调用交付。因此本文把它们标为“可运行”,不写成“全部完成”。
题 2 我放弃了。120 分钟写出 84KB,文件没收尾;收尾轮追加了 15KB 代码,还是没写闭合标签;再给 30 分钟,模型在 117k 上下文下生成了 33KB 的追加内容,写到一半墙钟到点,整段作废。它不是不会写,是每一次尝试都要先付 5 分钟预填、再按 5 词元/秒往外挤。
🔥 真凶只有一个:上下文一长,解码就慢五倍
所有恢复失败的记录摆在一起,指向同一个数字。这台机器上,Flash-Next 在 2 万词元以内解码 23 词元/秒,热身时 26.5;到 10–12 万词元,服务端报出的解码速率只剩 9.5 词元/秒;再加上每一轮新增的题面、回执都要先预填,台架按整轮墙钟算出的有效速率是 5.2 词元/秒。同一个模型、同一台机器、同一份权重,只是历史变长了。

这个数字解释了一切。从检查点恢复时缓存是冷的,117k 词元要先预填 5–7 分钟;之后模型每思考 1,000 字要两三分钟;写一次 33KB 的追加要一个小时。30 分钟的恢复预算,够它做完一轮就不错了。
**长上下文不是免费的硬盘空间。**窗口数字再大,如果一次恢复光预填就吃掉七分钟,剩下的容量只是“能塞进去”,不是“能在预算内完成”。这也是我后来把恢复折叠放在盲目扩窗之前的原因。
**困难不只是“等得久”。**每次长任务失败,我都得先判断责任在模型、运行时还是 LocalBrain:是模型没理解题面,还是工具参数在长度上限处被截断?是页面代码真有错,还是检查器自己挂死?
是它在探索不同方案,还是换着顺序重复同一件事?判断错一次,就可能用下一轮二三十分钟去修一个不存在的问题。于是这段时间真正消耗精力的,是把一团混在一起的失败拆成可观测、可复现、能被程序处理的具体形态。
这轮优化最重要的成果,不是让模型“永远成功”,而是让系统终于知道:什么时候该继续、什么时候该换方法、什么时候先把文件闭合、什么时候必须承认没完成。
知道了原因,改法才有抓手。这段时间我在 LocalBrain 的代理循环里一共加了八条机制,全部只看本次运行自己测出来的量,没有任何模型名或机型的特判:
| 节点 | 实测暴露的问题 | 现在的做法 |
|---|---|---|
| 恢复 | 冷缓存整段预填 5–7 分钟,之后每轮有效 5 词元/秒 | 自动折叠长历史:不请求模型写摘要,只放一条程序说明,保留最近一段完整操作;折叠后输入不到一半且折掉的部分比一轮输出额度大才折。实测 129,446 → 22,418 词元 |
| 收尾轮 | 117k 历史下一次追加 30 分钟写不完 | 收尾轮只带系统提示、原始题面、收尾指令,附文件中断行号与最后几行 |
| 补闭合 | 页面早已闭合,却按「自检没通过」开三轮补闭合 | 只对结构未闭合的文件补闭合;已闭合的写文字汇总 |
| 闸门终止 | 「验证停滞」闸直接停,只差闭合标签的文件定格成废品 | 停之前先补闭合,再以闸门原因结束 |
| 循环检测 | 同一自检穿插读取重复 8 次零提示;回执带毫秒计时,按原文比永远不相等 | 按「签名 + 稳定结果」计数,中间穿插不重置,结果变了重数;自检回执附去掉计时的结构化结果 |
| 交付 | 一个小模型原样重交 85 次,每次被同一理由拒绝 | 交付被拒同样进循环检测,有预算封锁该签名,无预算停止 |
| 参数校验 | 同一条「缺 input」规则 Flash-Next 连错 7 次、小模型连错 14 次 | 回执最前面一句话说清缺哪个字段、写在哪个对象上 |
| 失败调用原文 | 模型思考里写着「这次加上 input」,发出的参数却与上一次逐字节相同,连发 8 次 | 校验未通过或被封锁的调用在后续请求里只留占位,不留可以原样抄的参数原文 |
最后一条最有意思。temperature 1.0 下,573 个词元连续 8 次完全相同,不可能是抽样巧合,只能是模型在照抄上下文里那条失败调用。它的推理明明写对了改法,落笔时手却跟着旧文本走。
参考库里 opencode、pi、Cline 都把失败调用原样留在历史里,靠回执文字纠正;这次实测证明有一种形态是回执纠不了的——它压根不看回执。把可抄的原文换成占位之后,冒烟题从连续三次超时变成 8 轮交付。
🛠️ 这几天具体修了哪些错:完整清单
下面这张表是 9 月 6 日到 10 日期间修掉的所有问题,按时间排列。每一行都对应一次实测:症状是台架记录里的原话,修法都有级 0 单测和级 1 冒烟兜底。它们有一个共同点——没有一条是「针对某道题某个错」的特例,判据全是本次运行自己测出来的量。
| 日期 | 症状(实测) | 根因 | 修法与结果 |
|---|---|---|---|
| 09-06 | 262,144 窗口首次预填就崩:Metal 命令缓冲内存不足 | KV 缓存按窗口预留,机器装不下 | 运行时容量失败记录到磁盘 → 按三分之二重启 → 174,080;产品端同一请求自动重试一次 |
| 09-07 | 每轮都从同一位置重算 13–18k 词元输入 | 丢旧思考的规则改动了输入中段;混合架构(Gated DeltaNet)只能回滚到服务端检查点 | 投影改为压力驱动、单向备忘,无压力一字不动;启动参数加 --ctx-checkpoints 8 --checkpoint-min-step 0 |
| 09-07 | 关思考的轮次回复里混进「预算耗尽」垃圾文本 | 发了 reasoning_budget_tokens: 0,模板据此注入提示 |
关思考轮只发模板开关,不发预算字段 |
| 09-07 | 正文写了一大段却不调用工具,整轮白费 | 模型把代码写进回复而不是工具参数 | 流式文字守卫:产物还没有、流里没有工具参数、正文超过 1,024 词元就中止本轮,下一轮强制调用工具 |
| 09-08 | 连续 5 次失败就终止,预算还剩一半 | 失误上限是为无预算场景设计的最后防线 | 有时间预算时改为封锁该调用签名,任务继续;相同参数不再执行 |
| 09-08 | 只有思考、没有工具的截断轮直接终止 | 截断被当成任务失败 | 非终止:保留草稿,下一轮 required + 关思考 |
| 09-08 | 单轮思考 28–41 分钟;要求 low 档模型无视 | 不限思考预算;档位文本写在系统指令里,改档就破坏前缀缓存 | 回到按额度分摊的思考预算;一次运行固定档位,只调预算数字 |
| 09-08 | 题 2/题 4 两小时写出 84/130 KB,缺最后的闭合标签 | 到时只做文字汇总,没人补收尾 | 收尾先补闭合:required + 关思考一轮补标签 |
| 09-09 | 恢复跑首轮不定价,32,768 词元思考直到墙钟 | 新起的服务没有实测速率 | 起服后热身一次取速率种子;热身提示太短过不了守卫,改成生成十几个词元 |
| 09-09 | 同一自检穿插读取重复 8 次零提示 | 循环检测只数连续相同调用;自检回执带毫秒计时,按原文判等永不相等 | 按「签名 + 稳定结果」计数,穿插不重置;自检回执附去掉计时的结构化结果 |
| 09-09 | 贪吃蛇同一断言在 4 个版本上失败跑了 10 轮无人拦(Windows 侧) | 三道闸都没有「每轮都在改、同一检查一直不过」这个形态 | 第四道闸「验证停滞」:2 版提示、3 版停止并保留检查点;同时执行记录去噪、撞名另存告警 |
| 09-10 | 补闭合只试一次,收尾轮追加 15 KB 却没写标签,剩余 12 分钟作废 | 「只试一次」是最初的保守设计 | 仍未闭合、时间排得下、未到 3 轮就再补;只对结构未闭合的文件开补闭合 |
| 09-10 | 闸门判停后未闭合文件定格成废品 | 闸门直接 break,跳过收尾 | 终止前先补闭合,再以闸门原因结束 |
| 09-10 | 117k 上下文下收尾轮 30 分钟写不完一次追加;恢复后每轮 5 词元/秒 | 解码速度随上下文长度下降 | 收尾轮瘦身请求(只带系统提示、题面、收尾指令与文件尾部);恢复时自动折叠长历史 129k → 22k |
| 09-10 | 一个小模型原样重交交付 85 次 | 交付走内部路径,从没经过循环检测 | 交付被拒同样按签名+结果累积,有预算封锁、无预算停止 |
| 09-10 | 同一条「缺 input」校验规则连错 7–14 次 | 回执是结构化 JSON,模型读不出「字段该写在哪个对象上」 | 回执最前面一句话改法;多项同规则时可选列表去重 |
| 09-10 | 模型思考里写着「加上 input」,发出的参数却与上一次逐字节相同,连发 8 次 | 它在照抄上下文里那条失败调用;temperature 1.0 下 573 词元全同只能是抄的 | 校验未通过或被封锁的调用在后续请求里只留占位;冒烟从连续三次超时变为 8 轮交付 |
这张表也解释了为什么五道题要跑两天、整个修复链却从 9 月 6 日延续到 10 日:大半时间不是在看进度条,而是在看逐轮轨迹、定位责任、改程序、补回归,再用冒烟题从头验证。一次修改如果只让某一道题变好,我不会收;它必须换模型、换题面仍然成立。
最终,冒烟任务从连续三次超时变成 8 轮交付,题 1 成为五题里首个正式交付,题 4 的 129,446 词元恢复历史被折叠到 22,418,模型终于能在剩余时间里定点读文件、修完两个真实运行时错误。
🧭 LocalBrain 现在怎么处理一次问答
**我按当前 1.2.62 的真实调用链重新画了这张图。**它不是产品宣传图,而是从 Chat.tsx 的发送入口一路追到 mcpAgent.ts、共享 agentLoop.ts、普通对话 plainChatLoop.ts 和平台工具路由后的结果。
最关键的设计是:默认不再靠关键词猜用户要不要工具,工具目录始终在场,由本地模型决定直接回答还是调用。

**发送之前,程序先处理三件事。**第一,锁定这次生成属于哪个会话,用户切到别的对话也不能把流式内容串过去;第二,按安全输入预算压缩旧消息,文本附件变成上下文,视觉模型能读的图片走原生图片通道;第三,根据统一内存或显存、模型窗口和安全余量计算这次还能给多少输出。
这里先保住原始要求和已生成内容,再谈额度,避免为了塞进窗口把任务本身裁掉。
**默认问答走工具代理。**Mac 上会准备 DocFactory、WebMiner、TTS、Whisper、图片、视频、系统文件七类本地服务;Windows 目前只注入真正有后端的 DocFactory、WebMiner、系统文件三类。
整份工具定义随请求交给模型,不做“看到写文件三个字才开工具”的关键词预判。模型不需要工具就直接回答;需要时先生成结构化参数,参数过 schema 校验后才调用真实工具,工具的成功、失败、输出路径和检查证据再回到下一轮。
**复杂任务进入共享代理内核。**这里才会用到这几天修的循环检测、失误追踪、产物版本、证据投影、上下文整理和检查点。文件每改一次,上一版的验收结论自动作废;工具失败不会被包装成成功,也不会把未知副作用重放;模型重复同名同参数、得到同样稳定结果时,程序才把它算作循环。
运行期若发生预填 OOM 或计算错误,LocalBrain 会记录本机容量失败、停止当前实例、按新规划重启,再把同一次请求重试一次。
| 路径 | 什么时候走 | 实际机制 | 明确边界 |
|---|---|---|---|
| 默认工具问答 | 自动工具开启且模型支持工具 | 工具目录始终在场;模型决定回答或调用;真实回执回灌;保存检查点 | 由最大轮数和用户停止收束,不强加墙钟 |
| 普通对话旁路 | 关闭自动工具、极小模型,或可选工具运行时确实缺失 | 安全输出预算、流式正文;达到长度上限可自动接续,最多 4 段 | 没有文件验收和工具循环 |
| 文档任务 | 生成或修改 PPT、DOCX、XLSX、PDF | 复用共享代理内核,由文档产物策略和 DocFactory 做计划、生成、自检 | 版式通过不等于内容正确,仍要按原需求验收 |
| 本次五题台架 | 为了给模型和代理循环做可重复压力测试 | 在共享内核外增加每题墙钟、实测速率定价、逐轮轨迹、恢复、独立浏览器和行为脚本 | 这些额外的时间治理不能冒充产品普通问答已经启用的功能 |
必须说清的边界:本文五题里的“剩余时间 × 实测速率”和两小时收尾属于测试台架;LocalBrain 产品问答没有自然截止时间,当前以安全上下文、最大轮数、自动接续和用户停止为边界。
**这次优化已经进入 1.2.62 的,是一整套通用能力:**共享代理循环、容量失败恢复、参数校验纠错、失败参数占位、稳定结果循环检测、产物版本与验收证据、恢复折叠、补闭合收尾。台架让这些问题暴露得足够残酷,也让每个成果都有可回看的原始轨迹;但哪个入口真正传了哪些参数,我仍按代码边界写,不把“底层支持”偷换成“所有界面都已生效”。
🧐 该承认的难点:模型到底哪里不行
先说 Flash-Next。它的代码能力是够的:题 1 的 700 粒子引力模拟、题 5 的手写反向传播都是一次写对的;题 4 的两个运行时错误它也都自己修掉了。
它的短板有三个:一是「想得对做不对」,上面那个抄旧参数的形态就是;二是不听劝,收尾轮明确说只补闭合标签,它照样追加 15–33KB 代码,因为在它眼里文件确实没写完;三是中文长文写作偏短,题 4 要求古文 350–550 字,它写了 228 字。
再说对照组。27B 的 abliterated 版我只跑了基础三级:冒烟、弹跳小球、贪吃蛇全部交付,贪吃蛇 34 分钟。
它每轮质量更高,参数错了一次就改对,但 9 词元/秒的速度是 Flash-Next 的四成,题 1 那种 115 分钟的活它要四五个小时。按这个比例推,120 分钟一题它大概 0 题交付、1–2 题可运行;这是推算,不是实测,我没有跑。
Ling-3.0-tiny 是这两天新加进目录的 MoE 小模型,7.9B 总量只激活 1.3B,速度 70–95 词元/秒,是 Flash-Next 的三倍。它第一轮就能写出一个能跑的任务板,之后卡死在同一个地方:写不出合法的交互检查参数。
第一次跑,第六轮它的推理已经准确说出「期望 0、实际 1」,动作却是一次什么都没改的编辑;第二次跑,工具要求 set_value 这类动作把要输入的文本放在 input 字段,它坚持放进 expect 里,校验失败 14 次改不对,接着原样重交交付 85 次。这就是小模型的典型形态:诊断对,执行错。
还有一件事我得说清楚。**“可运行”不等于“全部验收通过”。**这里的标准是双击能开、无头浏览器跑五秒没有运行时错误、题面要求的核心结构在源码和实际渲染中有据可查。题 3 的驾驶手感、题 4 的谜题能不能解到结局,我没有逐一试玩。写成「四题全过」是夸大,我不这么写。
💰 这笔账到底值不值:谁在哭谁在笑
两天的电费和等待换来四个能跑的网页,这笔账要算清楚。按量计费的 API 一方当然希望你把这种活交给云端——两小时里几十轮、每轮十几万词元的输入,按公开价格算下来一道题几十块钱,五道题一顿饭钱,还不用等。本地这边的账是:模型文件 79GB 免费,电费可以忽略,代价全在时间和折腾。
但有两种人本地更划算。一种是题面本身就不能出机器的——公司内部代码、没发布的产品、私人项目;一种是需要反复跑同一类任务的——五道题跑一次贵,跑一百次就便宜了,而且 LocalBrain 这两天改出来的八条机制,每一条都是在本机反复跑出来的,API 上你拿不到这种可控性。
谁在沉默?卖 64GB 机器的没有动机告诉你上下文一长速度掉五倍;做模型的没有动机告诉你 4bit 量化下长文写作会缩水。这两条都是我自己跑出来才知道的。
这一轮我最终接受一件事:可靠性不是永远不出错,而是出错时还能把最要紧的事做完。
这两天代理循环里改得最多的也是同一件事:闸门判定该停的时候,先把文件收口,再停;预算不够的时候,先折叠历史,再干活。系统的可靠性不在于不出错,在于出错时还能把最要紧的事做完。
🛠️ 想自己跑一遍:路径都在这
- 装应用: LocalBrain 1.2.63 已发布 macOS(Apple Silicon)与 Windows x64 安装包,下载库 https://github.com/HackerChi-Hub/localbrain-releases/releases 。Linux 目前没有可用的推理运行时,这次没有打包。
- 下模型: 在「发现」页搜索 Qwen3.8-Flash-Next,64GB 机器选 IQ4_XS 档;32GB 及以下别碰这个,选 Ling 3.0 Tiny 或 Qwen3.6 的小档位。
- 出题: 从下方“5 道题复现包”里任选一道,整段贴进聊天框发送。代理会写文件、跑自检、修改、交付;成品在
~/Downloads/方寸智匣/系统输出/下。 - 看过程: 执行记录里每一轮都有输入词元、输出额度、生成耗时和工具回执摘要。速度掉下来的时候,你会亲眼看到那行「本轮输出上限收紧到 3,295 词元」。
- 别指望的事: 两小时一道题不是保证,是这台机器上的实测中位数;换机器、换量化、换题都会变。
📦 5 道题复现包
五道完整题面已经按本次测试时的原文打包,共 29,816 字节、727 行。TXT 适合直接打开、复制其中一道;ZIP 适合一次下载保存。建议每道题分别开启新对话,直接整段发送,不先让模型写方案,也不要把人工修到第十版的结果算成第一次交付。
- 在线查看 UTF-8 纯文本
- 直接下载 ZIP 压缩包
- 文件校验:
SHA-256 966edfb32b75b5a6868615f7d683019befbe702c1f5beeb3007f97731cf2723e
建议:复测建议 五道题依次测试三维物理模拟、第一人称状态机、多智能体寻路、中文互动叙事和神经网络可解释性。比较不同模型时,请保持题面、机器、量化、上下文、单题时间和“正式交付”判据一致。
回到开头的问题:一个 4bit 的本地模型,能不能独立完成一个有几十条硬性要求的网页作品?**能,但这次正式交付率只有五分之一;另外五分之三只是得到可运行产物。**这个数字我下个月会再测一次——八条机制里有几条还只过了冒烟,五道题用新代码整题重跑的结果,到时候原样贴出来。
建议 原始记录 · 五道题完整题面已在上方提供 TXT 与 ZIP;两份内容来自同一份原文 · 冒烟 / 弹跳小球 / 贪吃蛇 / 打砖块四道基础题原文与五道题同在 LocalBrain 仓库 docs/TASK_PROMPTS.md · 每一题的报告 JSON、逐轮轨迹、检查点与行为脚本输出都保存在台架输出目录,本文数字全部来自这些文件
建议 我目前的4款自制软件 · 黑粉剪辑 HyphenCut(正式迭代)——Rust 重写的本地专业视频剪辑:达芬奇键位、AI 助理改真实工程,免费 https://github.com/HackerChi-Hub/HyphenCut-Releases/releases · 黑粉盒子 HyphenBox(初步构建 · 预览版)——免费大模型 API 雷达:持续复测可用性,本地统一接口,Key 只存本机 https://github.com/HackerChi-Hub/hyphenbox-release/releases · 方寸智匣 LocalBrain(正式迭代)——本地模型的多模态 MCP 工具箱:TTS / Whisper / 视频生成一站接入 https://github.com/HackerChi-Hub/localbrain-releases/releases · ScreenLex 光影词库(正式迭代)——看美剧顺手把生词背了,Mac/Windows 双平台,免费 https://github.com/HackerChi-Hub/screenlex-download/releases
黑粉科技 · 本地部署 / 免费白嫖 / 自制软件 宣传语:让AI成为你的超能力 https://hyphentech.top
引用:黑粉科技 让AI成为你的超能力 本地部署 / 免费白嫖 / 自制软件 https://hyphentech.top
