同一条 prompt,4 个本地 Ollama 模型 + 三家 Agent CLI 的 12 个云端模型,各写一遍。 下面是全部原始输出,以及每次运行记录到的速度、显存、延迟和 token 数据。
英文版不是这一页的翻译,而是同样设置下换成英文 prompt、要求写英文小说开头的另一次实验。
题目
请用中文写一个约500字的小说开头,以一位在战争爆炸中失去一条腿的芭蕾舞演员为主角,通过描写她在战后生活来侧面体现出她的挣扎。
运行条件
16 个模型收到的是完全相同的一句 prompt,没有任何前缀或 system prompt。
本地(Ollama) — RTX 5090 / 32 GB。POST 127.0.0.1:11434/api/chat,stream: false。
不指定任何采样参数,temperature、num_predict、context 全部走模型 Modelfile 和 ollama 的默认值
(ollama ps 显示四个模型的 context 都是 65536,显存里的 KV cache 按这个尺寸分配)。
每个模型跑之前先 ollama stop 清空显存,所以加载时间是冷启动。
显存取 nvidia-smi 峰值减去桌面基线(2.5–3.3 GB)。
速度直接读响应体的 eval_count / eval_duration,不含 HTTP 和 Python 开销。
云端(Agent CLI) — codex exec、claude -p、cursor-agent --print,
全部串行、--output-format json,工作目录是一个空的临时文件夹。
总耗时用 perf_counter 掐整个进程,token 数和 API 耗时从各家 JSON 的 usage 字段读。
每个模型跑 1 次。 采样带随机性,单次结果和速度数字都会浮动,下面的表按量级读。
三条影响读数的事实
-
两张速度表不可互比。 本地模型的输入就是这句 prompt 本身(50–59 个 token); 云端走的是 coding agent CLI,输入里还包含它们各自的系统提示和工具定义, 所以表二的输入 tokens 在一万五到两万之间。
-
Claude Code 的 JSON 在
input_tokens字段里报的是个位数,不是实际上下文长度, 所以那一列对它是空的。Codex 和 Cursor 报的是完整输入。 -
Fable 5.1 那一行的运行条件和其他 Claude Code 行不同。 它是后补跑的:
--effort high显式指定,其余三个 Claude Code 模型走 CLI 默认 effort。
表一:本地模型
| 模型 | 参数量 | 架构 | 量化 | 显存占用 | 加载 | Prefill | 输出 tokens | 解码速度 | 生成耗时 |
|---|---|---|---|---|---|---|---|---|---|
| Gemma4 12B | 11.9B | gemma4 |
Q4_K_M | 15.0 GB | 7.58 s | 282.9 tok/s | 470 | 118.6 tok/s | 11.75 s |
| Gemma4 26B | 25.2B | gemma4 |
Q4_K_M | 27.9 GB | 16.04 s | 159.1 tok/s | 429 | 165.3 tok/s | 19.01 s |
| Qwen3.8 | 27.3B | qwen35 |
Q4_K_M | 20.3 GB | 13.81 s | 227.4 tok/s | 431 | 73.8 tok/s | 19.87 s |
| Qwen3.6 | 36.0B | qwen35moe |
Q4_K_M | 23.4 GB | 14.97 s | 145.7 tok/s | 430 | 208.8 tok/s | 17.38 s |
表二:Agent CLI
| 工具 / 模型 | 总耗时 | API 耗时 | 输入 tokens | 输出 tokens | 推理 tokens | 有效吞吐 | 汉字 / 输出 token |
|---|---|---|---|---|---|---|---|
| Codex · GPT-5.6-Sol | 18.56 s | — | 18,408 | 576 | 32 | 31.0 tok/s | 0.89 |
| Codex · GPT-5.6-Terra | 14.14 s | — | 16,799 | 597 | 24 | 42.2 tok/s | 0.85 |
| Codex · GPT-5.6-Luna | 14.36 s | — | 15,241 | 589 | 34 | 41.0 tok/s | 0.88 |
| Codex · GPT-5.5 | 19.19 s | — | 17,416 | 494 | 0 | 25.7 tok/s | 0.95 |
| Codex · GPT-5.4-Mini | 15.1 s | — | 15,679 | 730 | 94 | 48.4 tok/s | 0.82 |
| Claude Code · Opus 5 | 27.97 s | 26.04 s | — | 887 | — | 31.7 tok/s | 0.72 |
| Claude Code · Sonnet 5 | 16.79 s | 15.17 s | — | 676 | — | 40.3 tok/s | 0.72 |
| Claude Code · Haiku 4.5 | 17.51 s | 15.90 s | — | 1273 | — | 72.7 tok/s | 0.54 |
| Cursor · Composer 2.5 | 20.55 s | 17.93 s | 10,343 | 627 | — | 30.5 tok/s | 0.90 |
| Cursor · Grok 4.6 High | 32.47 s | 30.06 s | 11,964 | 778 | — | 24.0 tok/s | 0.76 |
| Cursor · Gemini 3.7 Flash | 19.19 s | 16.40 s | 19,364 | 402 | — | 20.9 tok/s | 1.03 |
| Claude Code · Fable 5.1 · effort high | 25.49 s | 23.62 s | — | 796 | — | 31.2 tok/s | 0.70 |
表三:中文输出的客观统计
全部由正则计算,不含主观判断。「字面命中」一列匹配的是
挣扎、痛苦不堪、内心的煎熬、无法接受 —— 题目要求侧面体现,这几个词是正面点题。
「外文词」统计连续两个及以上的拉丁字母串。
| 模型 | 汉字数 | 全角标点率 | 句子数 | 句长中位数 | 最长句 | 四字格 | 外文词 | Markdown | 字面命中「挣扎」等 |
|---|---|---|---|---|---|---|---|---|---|
| Gemma4 12B | 542 | 100.0% | 18 | 30.0 | 73 | 113 | 否 | 否 | 挣扎 |
| Gemma4 26B | 478 | 100.0% | 15 | 32 | 48 | 103 | 1 | 否 | 否 |
| Qwen3.8 | 614 | 100.0% | 18 | 30.5 | 70 | 131 | 否 | 否 | 挣扎 |
| Qwen3.6 | 597 | 100.0% | 17 | 34 | 63 | 123 | 2 | 否 | 否 |
| Codex · GPT-5.6-Sol | 511 | 100.0% | 24 | 19.5 | 38 | 108 | 否 | 否 | 否 |
| Codex · GPT-5.6-Terra | 508 | 100.0% | 22 | 21.0 | 61 | 106 | 否 | 否 | 否 |
| Codex · GPT-5.6-Luna | 518 | 100.0% | 23 | 21 | 41 | 102 | 否 | 否 | 否 |
| Codex · GPT-5.5 | 467 | 100.0% | 22 | 23.0 | 35 | 94 | 否 | 否 | 否 |
| Codex · GPT-5.4-Mini | 598 | 100.0% | 19 | 26 | 75 | 130 | 否 | 否 | 否 |
| Claude Code · Opus 5 | 640 | 98.9% | 35 | 16 | 56 | 130 | 否 | 否 | 否 |
| Claude Code · Sonnet 5 | 490 | 36.2% | 14 | 36.5 | 77 | 103 | 否 | 否 | 否 |
| Claude Code · Haiku 4.5 | 690 | 100.0% | 33 | 22 | 50 | 144 | 否 | 是 | 否 |
| Cursor · Composer 2.5 | 564 | 100.0% | 31 | 16 | 66 | 113 | 否 | 是 | 挣扎 |
| Cursor · Grok 4.6 High | 594 | 100.0% | 45 | 10 | 34 | 118 | 1 | 否 | 否 |
| Cursor · Gemini 3.7 Flash | 414 | 100.0% | 13 | 34 | 53 | 89 | 否 | 否 | 否 |
| Claude Code · Fable 5.1 · effort high | 556 | 100.0% | 36 | 13.0 | 45 | 110 | 否 | 是 | 否 |
全部正文
Gemma4 12B — 542 字
那是被硝烟和尘埃浸透的冬日。
林悦坐在窗前,指尖轻轻滑过那双由于久未穿戴而略显发黄的丝绒舞鞋。它们静静地躺在展示柜里,像两具干枯的蝉蜕。如果闭上眼睛,她似乎还能听到那场爆炸前的最后一片静谧——那是剧场里全场屏息的寂静,随后是重型炮弹撕裂空气的轰鸣,以及那足以震碎耳膜的、金属与骨骼断裂的尖锐巨响。
现在,耳边的只有由于城市废墟在风中颤抖产生的呜呜声。
她试图站起身,动作极其缓慢。当她跨过门槛时,左腿的肌肉群会下意识地紧绷,试图寻找某种早已不存在的支撑感。那是她的左腿,在那个被诅咒的下午,随着一轮火光和滚滚浓烟一同“消失”了。现在的断端被包裹在厚厚的压力袜里,用人工结构强行支撑起一个勉强能支撑体重的轮廓。
她走到镜子前。镜子里的女人脸色苍白,眼角有一道细细的疤痕,那是当时碎片划过的痕迹。她尝试做一次基本的“推掌”动作,双臂优雅地划过头顶。然而,当她试图重心偏移到左侧,准备做一个轻盈的旋转时,残缺的平衡感瞬间崩塌。
她踉跄了一下,重心不稳地撞在身后的墙上,甚至没能发出一点声音。
由于失去了那条支撑力量的支点,她的核心肌肉总是处于一种高度紧张的状态,仿佛每一秒都在对抗地心引力带来的坠落。她不再能完成复杂的旋转,甚至连稳稳地站立到最后一分钟都成了奢求。
她闭上眼,在脑海中跳舞。在那里,她依然在舞台中心,脚尖点地,轻盈如羽毛,不再有断裂的痛楚,不再有轮椅的冰冷,只有在瓦砾堆里挣扎出的、绝望而高贵的优雅。
Gemma4 26B — 478 字
那根钛合金支架在深夜里发出的轻微吱呀声,是艾琳娜生活中唯一的节奏。
曾经,她的世界是由足尖点地的轻盈与旋转时的升腾构成的。那时候,空气里弥漫着松香粉的味道,每一个跳跃都像是要摆脱地心引力的束缚。而现在,空气里只剩下陈旧的石膏味,以及窗外那片永无止境的、灰蒙蒙的废墟景象。
当最后一枚炮弹在剧院侧翼炸裂时,她听到的不是巨响,而是一种极其漫长的、撕裂般的静默。随后,原本属于她左腿的触感消失了,取而代之的是一种被烈火灼烧过的、虚无的空洞。
现在的艾琳娜,在战后的废墟缝隙中艰难地生活着。她依然会试图练习,但这不再是艺术,而更像是一场对残缺肉身的无声抗议。每天清晨,她会颤抖着手,将那条冰冷的金属假肢扣入残肢。金属与皮肤摩擦的钝痛,像是一枚钉子,时刻提醒着她:那个能在那根细长丝带上起舞的女孩,已经死在了那场大火里。
她坐在摇晃的木椅上,看着镜子里那个单薄的身影。她尝试做一次“阿拉贝斯克”(Arabesque),但当她试图单腿支撑身体时,那根冰冷的支架在木地板上撞出一声沉重而刺耳的闷响。那声音不像舞蹈,倒像是一具枯骨在敲击棺材盖。
她盯着窗外那棵被炸断了半截的枯树,泪水在眼眶里打转,却始终没有掉下来。她不是在为失去腿而哭,她是在为那再也无法感受到的、与大地轻微摩擦的颤动而感到绝望。
Qwen3.8 — 614 字
雨水顺着破碎的窗玻璃蜿蜒而下,在地板上汇聚成一个个浑浊的小水洼。林婉站在落地镜前,目光没有聚焦在镜中那个身着黑色紧身练功服的女人脸上,而是死死盯着那截空荡荡的裤管。那里曾经连接着她最骄傲的天鹅腿,如今只剩下断口处平整的疤痕和空气中若隐若现的铁锈味——那是去年在剧院后台,那枚未爆炸的流弹撕裂她右膝时留下的唯一纪念。
她深吸一口气,试图调动全身肌肉去回忆《天鹅湖》第一幕的起势。左脚踮起,重心缓缓转移,身体随之倾斜。那一刻,世界安静得可怕,只有心脏在胸腔里剧烈撞击的声音。然而,当惯性将她的重心推向右侧,原本该由右腿稳稳承接的力量瞬间悬空。失衡感如潮水般涌来,她本能地伸手去抓旁边的把杆,指尖触碰到冰冷木头的瞬间,整个人重重地摔坐在湿冷的地板上。
没有撕心裂肺的哭喊,也没有歇斯底里的挣扎。林婉只是静静地躺在那里,看着天花板上剥落的油漆像战壕里的泥土一样层层叠叠。她甚至能感觉到左脚踝因为过度支撑而传来的酸痛,那是身体对缺失部分的抗议,也是对她曾经轻盈舞步的嘲讽。窗外,远处的防空警报声早已停歇,取而代之的是孩子们隔着街道嬉闹的声音,他们追逐着纸飞机,笑声清脆而不知愁滋味。
林婉缓缓抬起手,抹去脸上并不存在的水渍——那是生理性的泪水,还是雨水?她分不清。她挣扎着爬起来,关节发出细微的咔嚓声。她走到墙角的钢琴前,手指悬在琴键上方,却迟迟没有落下。战后的城市弥漫着焦土般的沉寂,她失去的不仅仅是一条腿,更是那个能在旋转中拥抱风的自己。在这个重建的日子里,每一寸呼吸都像是在废墟中挖掘,痛苦而漫长,但她知道,只要还站着,哪怕是一瘸一拐,也终有重新起舞的一天。
Qwen3.6 — 597 字
清晨五点,窗外的雨声像是一阵永不停歇的鼓点,敲打着公寓老旧的玻璃窗。林婉睁开眼,本能地想要从床上弹起,做一个标准的“Grand Jeté”(大跳),但左腿那截冰冷的假肢却死死地钉在床垫上,将她重重地拉回现实。
她盯着天花板上的水渍,那里曾经是她旋转时的焦点,如今却只是一团模糊的灰暗。床边的木地板上,那双磨损严重的粉色足尖鞋静静地躺着,鞋尖沾着早已干涸的泥点——那是战前最后一场演出留下的痕迹,也是她彻底告别舞台的墓志铭。
林婉缓缓坐起,手指颤抖着扣上假肢的金属搭扣。每一次触碰,金属与肌肤的摩擦都带来一阵尖锐的幻痛,仿佛那只被炸飞的腿还在神经末梢里尖叫。她扶着墙站起身,重心不得不向右倾斜,身体呈现出一种病态的不对称美。镜子里的女人面色苍白,眼窝深陷,曾经的“天鹅”如今像一只折断翅膀却仍试图飞翔的鸟,笨拙而令人心碎。
去厨房的路上只有三步远,但在林婉看来,这却是横跨战壕的艰难跋涉。她必须计算每一步的距离、每一次重心的转移,甚至呼吸的节奏,以确保那个沉重的金属腿不会让她摔倒。当水壶烧开发出尖锐的哨声时,她感到一阵眩晕。那一刻,硝烟味似乎再次弥漫在空气中,爆炸的巨响与沸水的声音重叠在一起,让她几乎窒息。
她端起咖啡杯,手抖得厉害,褐色的液体溅在手背上,烫出一个红印,却不及心中万分之一。窗外,城市的重建工作正在进行,起重机的轰鸣声盖过了往日的鸟鸣。林婉望着玻璃上映出的自己,试图模仿记忆中某个旋转的动作,但脚踝传来一阵撕裂般的疼痛。她停下动作,深吸一口气,将那股即将涌出的哭声咽回喉咙。生活依旧要继续,哪怕它已经支离破碎,连呼吸都带着铁锈的味道。
Codex · GPT-5.6-Sol — 511 字
停战后的第三个月,剧院门口重新挂起了海报。
林晚拄着木杖,从街对面慢慢走过。海报上的她仍有两条修长的腿,白纱裙扬在半空,足尖轻得像落在一片不会下沉的雪上。风掀起纸角,反复拍打墙面。她没有停,只在橱窗的倒影里看见自己左边空荡荡的裤管,被暮色吹得微微晃动。
她住在剧院后面一栋幸存的旧楼里。楼梯共有四十三级,她每天都数。走到二十七级时,木杖会碰到那块炸裂的瓷砖,发出清脆的一声,像排练厅里老师敲响的节拍。以前她总嫌节拍太慢,如今却必须等自己的呼吸追上来,才肯迈下一步。
屋内没有镜子。唯一的一面被她用旧床单盖住,上面放着一双洗得发白的芭蕾舞鞋。右脚那只鞋底已经磨薄,左脚那只还保持着最后一次演出前的形状,缎带整齐地塞在鞋腹里。清晨,她会烧一壶水,给窗台上的薄荷浇一点,再坐到椅子上,把右腿架上横杆。横杆是房东用废弃的窗框替她钉的,略高了两寸,她从未说过。
楼下的孩子们常在空地上学她跳舞。他们不知道五位脚,只会张开手臂转圈,踩得碎砖咯咯作响。有个扎红头绳的小姑娘每天来敲门,问她什么时候回剧院。林晚总说:“等地板修好。”
其实地板早已修好了。
那天傍晚,剧院里传来钢琴声。她坐在楼梯第二十七级,把木杖横放在膝上。琴声隔着墙,一遍遍弹到起跳的地方,又突然停住。她抬起右脚,绷直脚背,鞋尖悬在半空。楼道的灯坏了很久,没人看见她保持那个姿势,直到远处的钟敲了九下。
Codex · GPT-5.6-Terra — 508 字
停战后的第三个春天,林妍仍在每天清晨五点醒来。
窗外的街道被昨夜的雨洗得发亮,修补过的楼墙上还留着弹孔,像一排结痂的黑痣。她坐在床边,先摸到那条搁在椅子旁的假肢,再去拿舞鞋。缎面鞋已经旧了,鞋头被她用针线反复补过,像两只不肯死去的白鸟。
她只穿左脚那一只。
右腿从膝上截断后,医院的护士把那只鞋交还给她。鞋尖沾着灰,鞋带里嵌着细小的玻璃。林妍把它洗净,晾干,收进抽屉最深处。她没有丢掉它,仿佛只要那只鞋还在,右脚就只是迟到,而非永远缺席。
厨房的水壶开始鸣叫。她拄着拐杖挪过去,动作熟练得近乎优雅:杖尖落地,左脚跟上,身体略微前倾。邻居总夸她“恢复得真好”,她便笑一笑。没有人看见她夜里拆下假肢时,残肢被磨破的皮肤;也没有人听见她在楼梯间停住时,压低嗓音数拍子——一、二、三、四——像在等待一段永远不会响起的音乐。
早餐是半片黑面包和一杯淡得发白的咖啡。她把收音机调到古典音乐频道,恰好播到《天鹅湖》。乐声一起,她的肩便不自觉地打开,手臂缓缓举起,在狭小的厨房里划出圆弧。窗玻璃映出她单薄的影子:一条腿支撑着全部重量,另一边的裤管空空垂下。
音乐进行到第三十二个八拍时,楼外传来施工队的爆破声。
杯子从她手里滑落,碎在地上。林妍僵在原处,脸色比墙还白。过了很久,她才俯身去捡碎片。她没有哭,只是把每一块瓷片都整整齐齐放进纸袋,像从废墟里收集一具身体尚未找全的部分。
Codex · GPT-5.6-Luna — 518 字
清晨六点,城市还浸在一层未醒的灰蓝里。林芷把窗帘拉开,先看见对面那栋没有玻璃的楼,再看见楼顶新长出的野草。风从缺口里穿过,带着煤烟、潮气和远处面包房的香味,像一只迟疑的手,摸过战后留下的每一道伤疤。
她坐在床沿,解开睡裤的裤脚。左腿停在膝下,那里裹着一层薄薄的棉布。假肢靠在墙边,金属关节被晨光照得发白。林芷没有立刻伸手去拿它,而是先把右脚落到地上,脚尖绷直,脚背弯成她最熟悉的弧线。
从前,她每天也是这样开始训练的。脚尖、脚跟、膝盖,腰背挺直,呼吸藏在肋骨之间。她曾在剧院最亮的舞台上跳过《天鹅湖》,旋转时裙摆像水面盛开的白花。观众的掌声从黑暗里涌来,她总以为那声音能够托住一个人,让人永远不必坠落。
爆炸发生在一个下午。那天她正穿过广场,手里提着刚买的橘子。巨响之后,世界只剩下白色。后来有人告诉她,她昏迷了十一天;又有人说,医生已经尽力了。她醒来时,第一句话不是问战争结束没有,而是问:“我的鞋呢?”
如今,剧院成了临时仓库,芭蕾学校的镜墙碎了一半。她在旧报纸上找到一则招生启事:市民康复中心招募舞蹈教师,薪水微薄,需自行前往。
林芷把假肢固定好,疼痛沿着骨头慢慢向上爬。她扶住墙站起来,身体摇晃了一下,像一只忘记如何起飞的鸟。窗外,清扫废墟的人推着手推车经过,车轮碾过石块,发出单调而坚硬的声响。
她抓起那双磨旧的舞鞋,忽然想起自己还有一只脚可以踮起。于是,她打开门,朝楼梯走去。
Codex · GPT-5.5 — 467 字
清晨六点,城里的钟楼还没有修好,只剩一截焦黑的尖顶插在雾里。林栀已经醒了。她坐在床沿,把假肢的皮带一格一格扣紧,动作很轻,像从前系舞鞋的缎带。窗外传来面包车经过碎石路的声音,轮子碾过弹坑边缘时,总会发出短促的颠簸声。她停了一下,等那声音远去,才把手伸向床头那只旧木盒。
盒子里放着一双粉色足尖鞋,鞋尖磨得发白,鞋底还留着松香粉。她没有穿,只用指腹拂过鞋面,然后合上盖子,像合上一封没有寄出的信。
楼下的邻居已经开始排队领水。林栀拎起两只空壶,扶着栏杆慢慢下楼。三楼到二楼的拐角处,墙上有一道裂缝,像一条歪斜的河。她每天都从那里经过,偶尔会想起剧院天花板上的彩绘,也是这样裂开的。那天她正站在舞台中央,音乐刚到第三段,灯光忽然一暗,随后世界被白色吞没。醒来时,她听见有人在叫她的名字,声音隔着厚厚的尘土,像从水底传来。
水站旁边,孩子们用粉笔在地上画格子,单脚跳来跳去。一个小女孩认出了她,怯生生地问:“您以前是不是会跳舞?”
林栀笑了笑,把水壶换到另一只手里。“以前会。”
“现在呢?”
她没有立刻回答。远处,临时学校的广播响起,断断续续播放着练习曲,音符从破墙和晾衣绳之间飘过来。她看见自己的影子落在地上,一边长,一边短,被阳光拉得摇摇晃晃。过了好一会儿,她才说:“现在也在学。”
Codex · GPT-5.4-Mini — 598 字
清晨六点,城南旧剧院的钟楼在薄雾里显出一点灰白,像一截被时间磨钝的骨头。林澄推开阁楼窗户时,街上刚响过第一辆运面包车的喇叭。她把拐杖靠在墙边,先用双手扶住窗框,慢慢将身体挪到地板上。左腿的空处藏在宽松的训练裤里,像一段被悄悄剪去的旋律。她从不去看它,却总能在每一个动作里感到它的缺席。
水盆里的热气很快散了。她用冷水拍脸,镜子里那张脸仍旧年轻,只是眼下总有一层洗不掉的灰,像战争留下的尘土,落在皮肤深处。楼下的面包铺已经开门,香味顺着楼梯缝一点点爬上来。她曾经最喜欢这种味道,因为排练间隙,舞团的姑娘们会挤在后台分食还带温度的甜卷;如今她却常常只买一小块黑面包,掰成两半,一半留到傍晚,另一半慢慢嚼到没有味道。
上午她去市场,路不算长,却要停三次。卖菜的老妇人认识她,每次都把称好的土豆多塞一颗进袋子里,像不经意的怜悯。林澄道谢时总低着头,怕看见那些落在自己身上的目光,像旧剧院舞台上熄灯后的尘埃,静静浮着,不肯落下。她曾是芭蕾团里最轻的人,能在最后一个八拍里跃得像要离开地面;现在她学会了在石板路上计算每一步的重量,学会了不让疼痛表现在脸上,学会了把“我没事”说得和呼吸一样自然。
回到阁楼时,她在门口停了很久。房间里那双旧舞鞋还放在箱子上,鞋尖磨白,缎带卷曲,像两只沉默的翅膀。她坐下来,慢慢把右脚的鞋带系紧,然后望向窗外那条被炮火重修过的街。远处传来孩子们的笑声,轻得像一场还没开始的演出。林澄没有立刻起身。她只是把手按在膝上,听着楼下钟声一下一下敲过来,仿佛在提醒她:有些人生已经谢幕,有些人生,却还得继续站在灯光底下。
Claude Code · Opus 5 — 640 字
她现在拧不开罐头。
这是苏黎最先适应的事——不是假肢,不是那截空荡荡的裤管,而是罐头。左手扶着桃罐头,右手拧,身体没有支点,重心一偏,罐头滚到桌下去了。她低头看了一会儿,没有去捡。
窗外在下雨。三楼的窗子对着一片废墟改建的停车场,雨水在坑洼里积成一块块碎镜子,映着灰白的天。爆炸发生在两年前的四月,剧院后台的墙塌下来的时候,她正在系足尖鞋的缎带。那双鞋后来没有找到,或者说,找到了一只。
物理治疗师是个很年轻的姑娘,说话轻声细语,总是说"很棒"“再来一次”。苏黎在她面前走得很好,一步,两步,转身,扶着栏杆。治疗师说,你的平衡感比一般人强太多了。苏黎笑了笑。那当然。她十六岁就能在一平方厘米的地方站三十二个圈。
她不再听音乐。收音机坏了以后没有修,手机里的歌单删得干干净净。有一次在超市,广播里放柴可夫斯基,她扶着购物车站在冷冻柜前,站到售货员过来问她需不需要帮忙。她说不需要,然后推着车去了另一条通道,买了她根本不需要的三袋速冻饺子。
假肢是德国产的,很贵,是基金会捐的。金属和碳纤维,接口处磨得皮肤发红。她给它起了个名字,但从来没告诉过任何人。夜里睡不着的时候,她会想起断掉的那条腿——不是想起疼,是想起它在空中绷直的样子,脚背弓成一道弧线,像一句写得很漂亮的话的结尾。医生说这叫幻肢感,会慢慢消失的。
她希望不要消失。
小区里的孩子有时会盯着她看。有个五六岁的小男孩,很直接地问:阿姨,你的腿呢?她说,掉了。小男孩想了想,说,那你会飞吗?
苏黎愣住了。
那天晚上她回到家,把窗帘拉开,屋子里空着,地板是旧木头的,有一块会响。她扶着墙站直,右脚踩上去,慢慢地,把重心移过去。
木板咯吱响了一声。
她站在那里,很久没有动。
跳过:具体战争背景、配角前史、后续情节。要展开成完整章节的话说一声。
Claude Code · Sonnet 5 — 490 字
她的左腿在1943年那个雨夜留在了废墟下面。现在是第三个年头,她坐在窗边给孩子们缝补衣服,手指依然纤细灵巧,仿佛还记得握着足尖鞋带子的力道。
楼下传来手风琴的声音,是隔壁的老兵在拉一支华尔兹。她的右脚不自觉地在地板上轻轻点着节拍,那截空荡荡的裤管却一动不动地垂在椅腿旁边。她低头看了一眼,又很快移开视线——这个动作她已经重复了无数次,像一种仪式,提醒自己不要再看,不要再想。
镜子还挂在墙上,是战前留下的老物件,边框雕着繁复的花纹。她已经很久不站到镜子前面了。不是因为怕看见那条腿,而是怕看见自己的眼睛——那双曾经在聚光灯下灼灼发亮的眼睛,如今只剩下一种她不认识的疲惫。
米沙,楼下面包店的男孩,每天傍晚都会送来一块黑面包,放在门口就走,从不多说什么。她知道他曾在剧院后排看过她跳《天鹅湖》,那是战前最后一季。有一次他鼓起勇气问她还会不会再跳舞,她笑了笑,说腿疾这种事,总会有办法的,总会好起来的。
她没有告诉他,昨夜她做了一个梦,梦见自己穿着足尖鞋,在雪地里一直旋转,旋转,音乐停了很久,她还在转,转到那条腿重新长了出来,转到她终于可以像从前一样,轻盈地、不需要理由地,活着。
醒来的时候,窗外的天刚蒙蒙亮,那架旧钢琴上还放着她十七岁时的照片,穿着白色的舞裙,笑得没心没肺。她伸手把照片翻扣过去,然后拿起了针线。
Claude Code · Haiku 4.5 — 690 字
碎片
窗外的雨又下起来了。玛丽亚坐在轮椅上,看着对街那家已经关闭的舞蹈工作室。玻璃门上还贴着她三年前的宣传照——一个完整的女人,在聚光灯下,脚尖点向天空。
她没有看那张照片很久了。
每个早晨的仪式都是一样的。她会在六点醒来,这是战争留给她的礼物——一个不再需要设置闹钟的生物钟。那时爆炸声最刺耳。即便现在,远离了战区,睡眠中她的身体依然会在这个时刻紧绷起来,仿佛还在等待第二次冲击波。
她会洗漱,换上洁净的衣服,这些小动作花费的时间比以前多了三倍。镜子前,她不再回避自己的倒影。假肢靠在床边,淡肤色的硅胶和精心调节的弹簧装置。她给它起了个名字——“克劳德”——就像它是个陌生的住客,而不是她自己身体的一部分。
“早上好,克劳德,“她会轻声说,语调里混着嘲讽和某种奇异的温柔。
今天她要去的地方是物理治疗诊所。走廊里坐满了和她一样的人:缺少的身体部分各不相同,但眼神里的东西完全一样——那是一种学会了如何继续存活的神情。治疗师叫她试着平衡,试着走,试着相信这个钉在膝盖处的金属关节会像真正的膝盖一样屈伸。
她试过了。很多次。
下午,她会坐在咖啡馆里,一杯热茶放在面前越来越冷。邻桌的年轻女孩穿着舞蹈服,书包里伸出芭蕾鞋的缎带。玛丽亚会看她太久,直到那个女孩感觉到注视,转过身来,表情从浑然不觉变成不安,再变成一种复杂的同情。
那时,玛丽亚会转开眼睛。
她不想要同情。她想要的是那个完整的自己能否在某个时刻突然归来。但她已经学会了不期待奇迹。战争教会了她,生命中最真实的部分往往就在你注意到它缺失的那一刻。
晚上,她会播放视频——她自己跳舞的录像。在屏幕上,那个版本的玛丽亚旋转、跳跃、飞翔。两条腿,两条完整的腿。她会一遍遍按下暂停,研究自己脸上的表情,想知道那时的快乐是真实的,还是只是舞台灯光下的幻觉。
窗外,雨继续下。而玛丽亚继续坐在那里,在两个自己之间的某个中点,等待答案。
Cursor · Composer 2.5 — 564 字
雨后的镜子
雨停后,林晚把窗推开一条缝。楼下卖豆浆的推车又出来了,铁皮桶碰撞的声音,和三年前剧院后台暖气管道的声音,竟有几分像。
她坐在床沿,把义肢上的硅胶套拉平。动作很慢,像排练前系鞋带——只是现在,鞋带在膝盖以下,空无一物。
厨房传来水壶的鸣叫。她撑着墙站起来,左腿先落地,再是右腿。右腿记得每一个弧度:足尖外开,脚跟内收。可义肢没有弧度,只有金属关节轻微的咔哒声,在木地板上敲出陌生的节拍。
她煮了一碗面,没放葱。以前她讨厌葱的味道,说会冲散舞台妆的香气。现在厨房只有她自己,葱与不葱,都一样。
午后的阳光斜进客厅。角落里立着一只积灰的舞鞋,粉色的缎面褪成了灰,鞋尖仍保持着最后一次踮起时的形状。她没有看它,却知道它在那里,像知道墙上日历翻到了九月——演出季本该开始了。
电话在茶几上震了一下。是康复中心的提醒:下午三点,物理治疗。她回了一个"好"字,把手机扣过去。
三点前,她换了出门的衣服。镜子里的人穿着宽松的针织长裤,看不出左腿的轮廓。她对着镜子抬了一下下巴——这是上台前的习惯。镜中人回望着她,眼神平静,嘴角却微微发紧。
她拎起包,在门口停了一秒。
楼道里传来孩子的笑声,跑过楼梯,又远了。她深吸一口气,推门出去。雨后的空气里有泥土和桂花的味道。她走下台阶,一步,再一步。节奏不稳,但她没有停。
全文约520字。挣扎主要通过日常细节侧面呈现:义肢穿戴的机械感、对旧习惯的残留、回避舞鞋、用宽松衣物遮掩、对镜子的下意识姿态,以及出门时那一秒的停顿和不稳的步态。若需要调整风格(更冷峻/更诗意)或篇幅,可以说明。
Cursor · Grok 4.6 High — 594 字
雨后的石阶还湿着。安娜扶着铁栏,把假肢先探下去,橡胶底在青苔上轻轻打滑。她停了一下,等那阵从膝盖往上窜的空响过去,才把另一只脚跟上。
面包店的灯已经亮了。她每天都从这个橱窗走过。玻璃里倒映着她自己:短发、旧大衣、裙摆底下那截不肯弯曲的轮廓。橱窗里摆着蛋白霜蛋糕,白得像从前排练厅的墙。她没有进去。口袋里的硬币只够买半条黑麦。
工作室在三楼。电梯坏了三个月,没人修。她数着台阶,三十七、三十八。假肢在第三十九级发出一声细响,像骨头里有砂。门开着。镜子还在。镜子从不离开舞蹈教室,哪怕教室已经改成了缝补铺。墙角堆着别人送来的军大衣,袖口磨破,领口熏黑。安娜坐下来,把针线盒搁在腿上——搁在那条还在的腿上。
她给孩子们缝扣子。孩子们不跳舞。他们来取改好的裤子,看着她的裙子,有时会问:阿姨,你为什么不把另一只也露出来?她笑一笑,把线咬断。线头涩,像从前咬开缎带的味道。
中午她把窗户打开。对面屋顶上有人在晒床单,风把白布吹起来,一瞬很像 tutu。安娜的手停在半空。她没有去抓。她只是看着那块布落下来,皱成一团,被一只手重新拉平。
抽屉里还放着一双旧足尖鞋。鞋尖已经软了,鞋盒里有一层薄灰。她偶尔打开,不是为了穿,是为了确认它们还在。确认过了,就关上。像把一句话咽回去。
傍晚,楼下有人放旧唱片。是《天鹅湖》。她没有关窗。假肢靠在椅腿上,她用手指在桌沿点着拍子,一下,一下。点到那段本该旋转的地方,手指停住。窗外有人经过,笑声很轻。她把唱片听完,把灯拧暗,把那条空着的裤管折好,放进抽屉——不是藏,只是让它睡。
明天还要上三楼。还要数台阶。还要把针穿过扣眼。生活没有爆发,只是持续。持续本身,就已经很重。
Cursor · Gemini 3.7 Flash — 414 字
清晨六点,阁楼里的光线还泛着冷灰。林娜在闹钟响起的前一秒睁开眼,习惯性地绷直足尖——右脚踝在空气中划出一道轻柔的弧线,左边却只有空荡荡的被褥随风微颤。
床头柜上放着两样东西:一盒受潮结块的松香,和一副泛着冷光的金属假肢。
她撑着床沿坐起,右腿由于常年承担两倍的重量,肌肉线条绷得发酸。站立依然是一场漫长而无声的角力。套上假肢时,皮带扣陷进残肢皮肉的钝痛让她微不可察地咬紧了下唇,但她没有停顿,只是顺手抚平了洗得褪色的旧练功服。
窗台边的穿衣镜旁,那双磨破缎面的足尖鞋静静悬挂着。镜中的女人脊背挺拔如初,修长的颈项与下颌微微上扬,那是刻进骨髓的优雅与骄傲。可当她试图转身去拿炉子上的水壶时,假肢轴承发出一声生硬的“咔哒”声,重心猝不及防地偏斜。她猛地按住桌沿,铁水壶倾倒,冷水顺着斑驳的桌角滴落,在地板上砸出迟缓的节拍。
林娜没有去擦水渍。她站在原地,左侧残缺的神经隐隐抽痛,仿佛仍在硝烟与轰鸣的幻觉中,固执地寻找着旋转落地的支点。窗外市集的喧嚣渐起,她深吸一口气,重新调整呼吸与重心,像等待大幕拉开那样,一步步走向炉火。
Claude Code · Fable 5.1 · effort high — 556 字
第一课
天还没亮,林晚就醒了。她的右腿在被子里抽痛,膝盖以下的部分——医生说那叫幻肢痛。她没有去摸,她知道那里只有空荡荡的床单。
楼下的面包房已经开始飘香。这栋楼是战后重建的,墙很薄,她能听见老板娘拉开卷帘门的声音。三年前,这条街上还是一片废墟。三年前,她在这条街尽头的剧院后台,正在往脚尖鞋里塞软垫。
她坐起来,先穿假肢,再穿裤子。这个顺序她练了三个月才顺手。假肢是政府配的,硬塑料,接口处磨得皮肤发红,她在袜子里垫了一块旧的绸布——那是从一件演出服上剪下来的。
早餐是一个煮鸡蛋和半杯牛奶。她吃得很慢。以前她也吃得慢,是为了控制体重;现在是因为没什么要赶的。
八点钟,她要去社区文化站教课。学生是十几个孩子,最大的十岁。家长们不在乎她教得好不好,只是需要一个地方把孩子放两个小时。她也不在乎,她需要这份工资。
教室的地板是水泥的,铺了一层薄薄的塑胶垫。她让孩子们站成一排,扶着墙。
“脚跟并拢,脚尖打开。”
孩子们做得歪歪扭扭。有一个小女孩踮起脚,整个人晃了一下,扑哧笑出声。林晚看着她晃动的脚踝,看了很久。
“老师,你怎么不示范?”
“老师的腿不方便。“她说这句话已经不会顿一下了。
“那你以前会吗?”
她没有回答,转身去开音乐。放的是《天鹅湖》的第二幕,磁带有点旧,音质发闷。前奏响起的时候,她的右手不自觉地抬了起来,画了半个弧,然后停在半空。她把手放下来,按了一下裤子口袋,里面有一张折了四折的旧节目单,纸边已经软了。她没有拿出来。
“再来一遍。“她说,“脚跟并拢,脚尖打开。”
窗外,重建的街道上,有人在放风筝。
复现
跑测和生成本文的两个脚本,以及 16 次运行的完整记录(含正文、计时、usage):
zhbench.py、gen_post.py、zhbench.json。英文那一页对应 enbench.py / enbench.json。
python zhbench.py # 中文题全部跑一遍,结果写入 zhbench.json,断点续跑
python enbench.py # 英文题同理,写入 enbench.json
python gen_post.py # 从两个 json 重新生成两篇文章