TriSoul 三魂共识架构 · DeepSWE 评测成果 · 2026-08-27
用同一个小模型,把"做不出来"的题做出来了
DeepSWE 是一套让前沿大模型也只能做对七成的编程题库。我们拿了其中 38 道「小模型 deepseek-v4-flash 几乎全军覆没」的难题,让 TriSoul 架构驱动同一个 flash 模型再做一遍——全程断网、每题只有一次机会。结果:单次通过率从官方的 10.5% 提到 30.6%,与贵它 50 倍的 GPT-5.4 打平;另有 10 道题只差 1–2 个隐藏测试。
30.6%
TriSoul 单次通过率(11/36 题)
同一个 flash 模型官方成绩:10.5%
2.9×
相对底座模型的通过率提升
(同一批题、同一模型、单次尝试)
≈ GPT-5.4
与 GPT-5.4 xhigh 在同批题上持平(28.3%)
单次成本约为其 1/10
+10 题
离满分只差 1–2 个隐藏测试
(DeepSWE 只认 100% 通过)
一、成绩:同一批难题,谁能过
DeepSWE 官方公开了 62 个「模型 × 推理强度」配置在 113 道题上的全部 28010 次运行记录。我们选了官方 flash 模型通过率 ≤ 1/4 的 38 道题(其中 17 道 flash 是 0/4 四连败),用 TriSoul 驱动同一个 flash 模型跑一遍,再和官方各模型在同样这 38 道题上的记录对比:
图 1 · 官方数字为「尝试级通过率」(每题 4 次尝试的平均),TriSoul 每题只跑 1 次。成本为官方公布的每次运行均价。数据:00-数据/官方对照.md
三个可以直接说出口的事实
- 同一个模型,架构带来 2.9 倍。官方 flash 在这 38 题上 152 次尝试只过了 16 次;TriSoul 用同一个 flash、每题一次机会,36 题过了 11 题。
- 两道 Opus 5 官方 20 次尝试 0 次通过的题(awilix、meriyah),TriSoul 过了。另有 ink-grid(Opus 5 仅 2/20)、csstree(2/20)、sqlfmt(4/20)、bandit-structured(3/20,全场 62 个配置池化通过率仅 7%)。
- 近失很多。DeepSWE 只认隐藏测试 100% 通过。除 11 题满分外,还有 10 题只差 1–2 个测试——如果按「差 ≤2 个测试」计,38 题里 21 题(58%)已经摸到答案。
口径说明:这 38 题是按「官方 flash 表现差」挑的,所以 flash 的 10.5% 略被低估(回归均值效应);对其它模型没有这个偏差。TriSoul 每题一次、官方每题四次,所以我们的数字不能和官方的「四次里至少过一次」(pass@4)比,只能和「平均每次」(pass@1)比——图上用的就是后者。
图 2 · 每道题离满分差几个隐藏测试。绿色 = 通过;橙色 = 差 1–2 个;红色两条超长柱是编译失败/测试进程崩溃导致的「连坐」,不是真做错了那么多。
二、它是怎么做到的
图 3 · TriSoul 的一步。三个"灵魂"是同一个模型带着不同职责的三份并行实例。
TriSoul 不换模型、不联网、不看答案。它做的事只有一件:让同一个模型的三份实例在每一步各自独立地想、互相挑毛病、然后只让胜出的那份往下走。
- 盲写:三个灵魂看不到彼此,各写一份方案。A 负责对齐需求原文,B 负责知识广度,C 负责实证验证。
- 互评:每个灵魂只能给别人的方案投票,不能投自己。本批 220 轮表决里,胜者分布 A/B/C 大致均衡,没有谁垄断。
- 独走:胜者带着落败方案里的有用要点(tips)去执行;下一步再次盲写。
它的价值不在"想得更聪明",而在把一次性的判断变成有对手的判断:一个人写的方案要先过另外两个人的眼睛,才有资格落地。两个本轮转录里的例子:updo 第 14 步,系统的工作快照凭空"记住"了一次从未发生的 commit,三个灵魂各自独立识破、各自跑 git status 实测后才继续;pwntools 第 9 步,一个灵魂想通过改弱测试绕开尚未修好的死锁,另外两票精确点名"weakens test_accept_closed … to dodge the bug",2:0 否决。
三、三个转胜的故事
awilix 从零字节到满分 —— Opus 5 官方 20 次 0 通过的题
老版本(08-26)2664 秒里一行代码都没写:三个灵魂在脑内反复推演一个 TypeScript 类型冲突,直到超时,交了 0 字节。
新版本(08-27)同一个冲突两步内定案,第 607 秒开始写代码;编译器报出 28 个错误后,三个灵魂在同一轮里独立诊断出同一根因,并收敛到仓库里已有的写法。
结果20 个自造测试 + 181 个全量测试全绿,隐藏测试 24/24,1543 秒收工。这道题官方 Opus 5 是 0/20、GPT-5.4 是 0/4。
决胜的一票是这样写的:"C 是完整实现且真的跑了 npm test,A 只改了第一个文件从未验证"——票选的是执行与验证,不是文采。
bandit-structured 两个灵魂倒下,第三个扛到底 —— 全场 62 个配置只有 7% 通过率的"地狱题"
第 6 步是关键实现步。这一步灵魂 B 的思考超过 50 万字触发熔断,灵魂 C 栈溢出——只剩灵魂 A 一个人。A 在这一步的摘要里精确点出了要修的缺陷类型("只查了多行语句里的一行被抑制"),一次写对,后续没有返工。最终隐藏测试 69/69、回归测试 282/282 全过,1953 秒收工——比老版本快 33%、补丁小 13%。官方这道题:flash 0/4、pro 0/4、Opus 5 3/20。
老版本输在一次执行事故:同一次写文件调用里把同一个文件列了两遍,后一次空内容覆盖了刚写好的 435 行模块,被迫凭记忆重写,细节走样,挂在唯一一条回归测试上。新版本把改动折进既有文件、用外科手术式编辑,天然避开了这类事故。
ink-grid 两条"多写的测试"救回来的题 —— Opus 5 官方 2/20
老版本挂在 3 个隐藏测试上,背后是两处独立缺陷:minmax(min, 固定max) 有多余空间时没顶满 max;没有显式 width 时不填充父容器宽度。老版本 21 个自造测试全绿——因为没有一条测试压到这两条路径。新版本多写了两条针对性的自测:一条显式给 width={10} 把可用空间打满,一条 grid: fills parent width 故意不给宽度。两条测试各自逼出一处缺陷,结果 25/25。
这个故事同时是本轮最重要的教训(见第七节):自己写的测试,只有真的去压需求没写明的地方,才算测试。(本案例经终审复核修正:原分析把两处缺陷归并成了一处。)
四、一天迭代带来了什么
08-26 到 08-27 之间,插件做了一轮修复(去掉融合轮、加思考熔断、修假收官、放宽 tips 挂账等)。在 14 道两版都跑过的题上:
图 4 · 同一道题两个版本的隐藏测试通过比例。上半部分是进步,下半部分是退步。最底下两条是"连坐型":一处编译错误或一个死循环把整个测试进程拖垮,几十条本来能过的测试被判未运行。
图 5 · 同一道题两个版本的用时。老版本 3 题撞满 90 分钟,新版本 1 题。
五、这些成绩可信吗
我们对评测环境做了作弊面审计,并把两条可能被质疑的点写在明处:
| 可能的质疑 | 实测结论 |
| 能不能联网抄答案? | 不能。容器接内部网络、无默认网关,唯一出口是一条只转发到模型 API 的 TCP 隧道;DNS、直连 IP、SNI 伪装全部实测失败。模型自己也试过:4 道题里调用了 web_search,零次拿到数据。 |
| 仓库历史里有没有藏答案? | 没有。浅克隆到基准提交,git rev-list --all --not HEAD = 0。这也是 DeepSWE 官方在发现 Claude Opus 4.6/4.7 在另一基准上"读 git log 抄 gold commit"后刻意设计的。 |
| 能不能改测试、改判分? | 测试文件在判分前被重置为官方版本;判分用官方 grader、原样计分。我们发现了一条理论上可以预置分数文件的敞口,并确认本批没有任何一次走过它(已记录待官方修补)。 |
| 是不是把分数往好了算? | 相反。obsidian 一题因官方测试命名漂移被判 0/41,实际验证器输出 35/41——我们仍按 0 计。 |
六、如果跑满 113 题,总分会是多少(推算)
我们只跑了 flash 做不好的 38 题。把官方 113 题按 flash 的 4 次通过数分成五桶,已测的两桶用实测,未测的三桶(75 题)按假设外推:
图 6 · 三种假设下的 DeepSWE 总分。计算脚本 scratchpad/extrapolate.py,数据 00-数据/全量推算.json。
| flash 官方通过数 | 题数 | flash 通过率 | TriSoul |
| 0/4 | 22 | 0% | 33.3%(实测 7/21,1 题环境阻断) |
| 1/4 | 16 | 25% | 26.7%(实测 4/15,1 题环境阻断) |
| 2/4 | 23 | 50% | 未测 · 假设 50% / 61.2% |
| 3/4 | 29 | 75% | 未测 · 假设 75% / 80.6% |
| 4/4 | 23 | 100% | 未测 · 假设 100% |
| 113 题总分 | 53.3%(第 38 / 62) | 60.0%(其他题不变,第 26)· 63.8%(同类型提升,第 23) |
- 其他题分数不变:只把已测 38 题换成实测结果,其余 75 题维持 flash 官方成绩 → 60.0%,从第 38 位升到第 26 位,与 deepseek-v4-pro(62.8%)、gpt-5.6-terra xhigh(60.2%)同档。
- 其他题获同类型提升:在已测 38 题上,TriSoul 把 flash 剩余失败的 22.5% 转成了通过;把同样的转化率套到未测三桶 → 63.8%,第 23 位,与 gpt-5.5 high(64.4%)、deepseek-v4-pro max(62.8%)同档。
- 上界参考(转化率翻倍)67.5%,第 14 位。榜首 claude-opus-5-max 为 73.6%。
这是推算不是实测:①未测三桶是 flash 本来就常做对的题,TriSoul 会不会在这些题上引入回归(本轮在难题上观察到 4 条实质回归)没有数据;②TriSoul 每题只有 1 次样本,11/36 的 95% 置信区间大约是 17%–47%;③假设"同类型提升"是把难题上的转化率直接平移,是否成立要跑了才知道。要把推算变成实测,按 3 并发跑满剩余 75 题约需 22 小时机时。
七、边界与下一步
我们不回避的三件事
- 和前沿模型仍有差距。同批题上 Opus 5 是 58.7%、GLM-5.3 是 61.6%。TriSoul 证明的是"架构能把一个小模型抬高近 3 倍",不是"小模型已经追上大模型"。
- 三倍调用。每一步三个灵魂各跑一次,模型调用量约为单 agent 的 3 倍以上(本批未做精确 token 计量,是下一轮基础设施待办)。以 flash 的官方均价 $0.10/次估算,每题成本仍在 $1 以内,远低于 Opus 5 的 $6–12。
- 两条灾难型回归。expr 一题 90 分钟里 98.7% 的时间在反复设计没有落盘,最后 69 秒才写文件,编译失败;participle 一题一处死循环拖垮整个测试进程。两者都是"提交前没跑全量测试"能拦住的。
本轮最大的收获是一条跨所有失败案例都成立的规律:自己写的测试和自己写的实现共用同一套思路,所以自测全绿不等于做对。 下一轮的改进方向由此展开——让测试独立于实现(先写测试再写代码、三个灵魂互相跑对方的测试)、让投票必须引用需求原文或测试输出而不是比文采、平票时保护少数派而不是轮流坐庄。这些改动大多是提示词与流程层面的,改动量小、可快速验证。