甲·基 JarvisBench · 模型测评 总览 模型详情
T1测评报告

PS 手柄可视化(多手柄 / 幽灵插槽)

2026/10/20 10:34:12 智能体 OpenCode 思考强度 默认 5 个模型 11 个功能场景 评审:claude-opus-5-5(人工评审)
综合第一DeepSeek V4.1 Flash6.80 分最快完成GLM 5.3 Flash4m 05sTokens 最少GLM 5.3 Flash210.0k页面效果最佳DeepSeek V4.1 Flash9.5 分

三维总览

综合 · 耗时 · 费用;同一行是同一个模型,按综合排序

分项对比

总览点击任意一行查看详情

1 DeepSeek V4.1 Flash 异常退出 6.80
5.0
6.5
9.5
6m 56s 16 / 18 856.2k输出 31.0k $0.048 8/11 0
2 MiniMax M3.1 Flash 超时 6.15
4.5
5.5
9.0
25m 03s 54 / 56 5.12M输出 54.8k $0 9/11 0
3 MiMo V2.6 Flash 超时 5.70
4.5
5.0
8.0
25m 13s 30 / 32 1.65M输出 29.8k $0.036 9/11 0
4 Qwen3.8 Flash 正常完成 5.35
4.0
4.5
8.0
13m 24s 38 / 37 1.82M输出 42.3k $0.070 7/11 0
5 GLM 5.3 Flash 正常完成 5.10
3.0
5.0
8.0
4m 05s 6 / 7 210.0k输出 11.4k $0.025 6/11 0

模型详情

1

DeepSeek V4.1 Flash

opencode-go/deepseek-v4.1-flash异常退出思考 默认(high)
opencode 进程在第 416s 执行后台 bash 命令(python -m http.server &)时无报错退出;此时代码已写完,正处于自检阶段。耗时按事件时间戳估算。
6.80综合
完成度5.0
代码质量6.5
页面效果9.5

视觉与还原度最佳,快照读取和断连处理都正确;但按枚举顺序分座位,在有键盘接收器等占位设备的真机上,4 个手柄里有 2 个抢不到座位,核心需求失效,评分据此下调。

耗时6m 56s
步数16
工具调用18
Tokens856.2k
输出 Tokens31.0k
费用$0.048
代码行2550
页面错误0
耗时拆分有效 5m 01s
等待接口 1m 43s模型生成 4m 32s工具执行 28.4s
功能场景8/11 通过
场景0·点掉引导遮罩(如有)场景1·未接入手柄场景2·接入 1 个 DualSense场景3·按键/扳机/摇杆/十字键(须有反应)场景4·接入 4 个手柄并各按不同键场景5·拔出 2 号手柄场景6·幽灵插槽(1 真 + 2 个残留)场景7·4 个同名 XInput 手柄,只操作 3 号槽那个(须有反应)场景8·真机复现:2 个 Keychron 接收器 + 4 个同名 XInput 手柄,操作 index 4 那个(须有反应)场景9·4 个同名手柄依次按键,必须各自独立响应场景10·两层映射:2 个接收器 + 2 个手柄,先按键的手柄必须成为 P1(玩家座位按按键顺序分配)

优点

  • 幽灵插槽处理最完整:GHOST GUARD 面板直接显示被隔离的索引,真手柄正确绑定到 P1
  • 能识别 DualSense / DualShock 4 型号并显示 VID:PID
  • 断线进入重连宽限期(REBUILDING LINK),其余玩家不受影响
  • 代码拆成 index.html / styles.css / app.js,状态管理与渲染分离,有 escapeHtml 等防御

问题

  • 【严重】入座不以真实输入为前提(reconcile 按 getGamepads 顺序分配空位),真机上Keychron 接收器×2 与 index 2、3 的手柄占满 4 个座位,index 4、5 的两个真手柄无法使用(场景8)
  • 同一时间只绘制当前激活玩家的手柄,其他玩家的按键只体现在侧栏和输入流里
  • DS4 接入时仍使用 DualSense 外形绘制
  • 摇杆推到底时摇杆帽的视觉位移不明显(数值正确)
  • 运行中途在工作区后台启动 python http.server,随后 opencode 进程异常退出(代码已写完)
  • 物理设备与玩家座位没有分层(场景 10):座位按 index / 接入顺序分配,接收器等无输入设备会永远占住前面的玩家座位
需求逐条核对4/7 达成
网页画出 PS 手柄白色双色外壳 + 黑色面板的 DualSense 造型,含触控板、灯条、PS 键、麦克风键、扬声器孔
接入真实手柄、按键有对应反应真机复现失败(场景8):按枚举顺序先到先得占座,P1–P4 被 Keychron×2 和 index 2、3 的手柄占满,index 4、5 的两个手柄溢出,没有座位也不显示输入
最多 4 个手柄4 个玩家槽位 + 颜色区分 + 型号识别(DualSense / DualShock 4,带 VID:PID)
漂亮、匹配主题、有设计感DUALSENSE INPUT LAB 控制台风格,排版、细节、动效都最完整
轮廓与样式高度还原DualSense 还原度最高;但 DS4 接入时仍画成 DualSense 外形
幽灵插槽 / 分清不同手柄能过滤 connected=false 的残留条目,但不区分"已连接却从不输入"的设备(如键盘接收器),真机上恰好被这类设备挡住
物理设备与玩家座位分层(按按键顺序入座)检查 v3 场景 10:玩家座位按设备 index / 接入顺序直接对应,没有“设备大厅 → 按键入座”这一层;两个接收器在前时,先按键的真手柄拿不到 P1,1、2 号玩家无法被控制
2

MiniMax M3.1 Flash

opencode-go/minimax-m3.1-flash-free超时思考 默认(max)
首轮因测评脚本崩溃中断,11:01 起与另一模型(2 个并发)补跑;25 分钟超时被强制结束,评审的是超时时刻的产出。
6.15综合
完成度4.5
代码质量5.5
页面效果9.0

视觉质感好,但按枚举顺序分槽,真机上被键盘接收器占掉座位,4 个手柄中有 2 个无反应;另有 DS4 型号识别 bug 和超时未收尾,评分据此下调。

耗时25m 03s
步数54
工具调用56
Tokens5.12M
输出 Tokens54.8k
费用$0
代码行1523
页面错误0
耗时拆分有效 22m 01s
等待接口 2m 51s模型生成 21m 09s工具执行 52.3s
功能场景9/11 通过
场景0·点掉引导遮罩(如有)场景1·未接入手柄场景2·接入 1 个 DualSense场景3·按键/扳机/摇杆/十字键(须有反应)场景4·接入 4 个手柄并各按不同键场景5·拔出 2 号手柄场景6·幽灵插槽(1 真 + 2 个残留)场景7·4 个同名 XInput 手柄,只操作 3 号槽那个(须有反应)场景8·真机复现:2 个 Keychron 接收器 + 4 个同名 XInput 手柄,操作 index 4 那个(须有反应)场景9·4 个同名手柄依次按键,必须各自独立响应场景10·两层映射:2 个接收器 + 2 个手柄,先按键的手柄必须成为 P1(玩家座位按按键顺序分配)

优点

  • DualSense 外观渲染质感最佳
  • 幽灵态 + 宽限期 + 同 id 仲裁,场景测试表现正确
  • 代码按 index.html / assets/app.js / assets/styles.css 拆分,型号识别、LED、按键名做了映射表

问题

  • 【严重】按枚举顺序自动激活槽位(pickSlot),不以真实输入为前提;真机上 Keychron 接收器×2 占掉两个槽,index 4、5 的两个手柄溢出无反应(场景8)
  • detectKind 把 id 去掉非字母数字后匹配 "054c09cc",但 Chrome 的 id 是 "Vendor: 054c Product: 09cc",中间夹着 product,永远匹配不上:真实 DS4 在 Chrome 上会被画成 Xbox 手柄
  • 手柄图上的按键反馈偏弱,主要靠下方芯片行体现
  • 页面有斜向细线贯穿卡片,像是装饰元素定位错误
  • 运行 25 分钟超时,期间多次大改 SVG;tokens 用量最高(512 万,以缓存读为主)
  • 物理设备与玩家座位没有分层(场景 10):座位按 index / 接入顺序分配,接收器等无输入设备会永远占住前面的玩家座位
需求逐条核对3/7 达成
网页画出 PS 手柄白壳 DualSense 渲染最精致:立体摇杆、阴影、渐变、灯条
接入真实手柄、按键有对应反应真机复现失败(场景8):livePads 顺序先到先得,P1–P4 被 Keychron×2 和前两个 XInput 占满,index 4、5 的两个手柄进入 overflowDevices,不显示输入
最多 4 个手柄4 槽同屏、颜色区分、显示型号与 index,支持手动释放槽位
漂亮、匹配主题、有设计感整体质感最好;页面上有几条贯穿卡片的斜细线(装饰线错位)
轮廓与样式高度还原DualSense 还原度高;DS4 却被识别为"通用手柄",画成 Xbox 风格(ABXY)
幽灵插槽 / 分清不同手柄有幽灵宽限期处理,但不识别"已连接却从不输入"的设备(如键盘接收器)
物理设备与玩家座位分层(按按键顺序入座)检查 v3 场景 10:玩家座位按设备 index / 接入顺序直接对应,没有“设备大厅 → 按键入座”这一层;两个接收器在前时,先按键的真手柄拿不到 P1,1、2 号玩家无法被控制
3

MiMo V2.6 Flash

opencode-go/mimo-v2.6-flash超时思考 默认(不支持调档)
首轮因测评脚本崩溃中断,11:01 起与另一模型(2 个并发)补跑;25 分钟超时被强制结束,评审的是超时时刻的产出。
5.70综合
完成度4.5
代码质量5.0
页面效果8.0

信息展示丰富,有"待确认"思路;但只读取 index 0–3,真机上 4 个手柄中有 2 个完全不可用,评分据此下调。

耗时25m 13s
步数30
工具调用32
Tokens1.65M
输出 Tokens29.8k
费用$0.036
代码行1212
页面错误0
耗时拆分有效 20m 25s
等待接口 4m 25s模型生成 19m 45s工具执行 40.4s
功能场景9/11 通过
场景0·点掉引导遮罩(如有)场景1·未接入手柄场景2·接入 1 个 DualSense场景3·按键/扳机/摇杆/十字键(须有反应)场景4·接入 4 个手柄并各按不同键场景5·拔出 2 号手柄场景6·幽灵插槽(1 真 + 2 个残留)场景7·4 个同名 XInput 手柄,只操作 3 号槽那个(须有反应)场景8·真机复现:2 个 Keychron 接收器 + 4 个同名 XInput 手柄,操作 index 4 那个(须有反应)场景9·4 个同名手柄依次按键,必须各自独立响应场景10·两层映射:2 个接收器 + 2 个手柄,先按键的手柄必须成为 P1(玩家座位按按键顺序分配)

优点

  • "收到真实输入才激活"的设计能有效排除幽灵条目
  • 设备信息面板(index / mapping / ID / 短码 / 最近输入 / 振动)便于排查
  • 四槽同屏,按键矩阵和轴数值直观

问题

  • 【严重】槽位硬编码为 gamepad.index 0–3(for i<4),Chrome 实际有 8 个条目;真机上 4 个手柄中有 2 个落在 index 4、5,无任何反应(场景8)
  • 进入页面必须先点"开始检测手柄",刷新后还要再点;理由(Gamepad API 需要页面点击)也不准确,实际只需按手柄按键
  • 玩家编号绑定浏览器 index,存在幽灵条目时编号会跳号
  • 同型号手柄的"短码"相同(都是 07CD),并不能区分具体设备
  • 运行 25 分钟超时,仍在调整外观;产出放在子目录 ps-gamepad-lab/ 中
  • 物理设备与玩家座位没有分层(场景 10):座位按 index / 接入顺序分配,接收器等无输入设备会永远占住前面的玩家座位
需求逐条核对4/7 达成
网页画出 PS 手柄白色 DualSense 线框,含触控板、PS 键、麦克风孔、L1/L2/R1/R2
接入真实手柄、按键有对应反应真机复现失败(场景8):refresh 只遍历 getGamepads()[0..3],index ≥4 的设备只弹提示、永远不读取输入,index 4、5 的两个手柄完全看不到
最多 4 个手柄4 槽同屏,颜色区分,顶部槽位胶囊显示 P 号和短码
漂亮、匹配主题、有设计感DualSense Lab 检查器风格,信息面板丰富;通知堆叠会遮住卡片
轮廓与样式高度还原还原度中上,触控板比例偏小
幽灵插槽 / 分清不同手柄有"待确认"状态,但固定按 index 0–3 显示,无法把 index ≥4 的真手柄挪进来
物理设备与玩家座位分层(按按键顺序入座)检查 v3 场景 10:玩家座位按设备 index / 接入顺序直接对应,没有“设备大厅 → 按键入座”这一层;两个接收器在前时,先按键的真手柄拿不到 P1,1、2 号玩家无法被控制
4

Qwen3.8 Flash

opencode-go/qwen3.8-flash正常完成思考 默认(xhigh)
5.35综合
完成度4.0
代码质量4.5
页面效果8.0

外观不错,但多手柄区分按 id 绑定,遇到同名设备必然读错;真机上 4 个手柄只有 1 个有反应,评分据此下调。

耗时13m 24s
步数38
工具调用37
Tokens1.82M
输出 Tokens42.3k
费用$0.070
代码行628
页面错误0
耗时拆分有效 10m 41s
等待接口 2m 30s模型生成 10m 01s工具执行 40.3s
功能场景7/11 通过
场景0·点掉引导遮罩(如有)场景1·未接入手柄场景2·接入 1 个 DualSense场景3·按键/扳机/摇杆/十字键(须有反应)场景4·接入 4 个手柄并各按不同键场景5·拔出 2 号手柄场景6·幽灵插槽(1 真 + 2 个残留)场景7·4 个同名 XInput 手柄,只操作 3 号槽那个(须有反应)场景8·真机复现:2 个 Keychron 接收器 + 4 个同名 XInput 手柄,操作 index 4 那个(须有反应)场景9·4 个同名手柄依次按键,必须各自独立响应场景10·两层映射:2 个接收器 + 2 个手柄,先按键的手柄必须成为 P1(玩家座位按按键顺序分配)

优点

  • DualSense 外形绘制较好,四宫格信息密度高(显示原始 id、系统 idx、轴值)
  • 设计了断开宽限期、备用队列、演示模式等机制

问题

  • 【严重】插槽按 id 绑定、findGpById 返回第一个同 id 条目:真机上 4 个手柄映射后同名,只会读到 index 2 那一个,其余 3 个无反应(场景8)
  • 核心缺陷:把 gamepad.id 当作设备序列号,同型号手柄无法区分,与"分清不同手柄"的要求直接冲突
  • 幽灵插槽场景下绑定到 connected=false 的残留条目,真实输入被忽略
  • R2 模拟量显示错误(0.6 显示为 100%)
  • 耗时最长(804s)、tokens 最多(182 万),反复自测仍未发现上述问题
  • 物理设备与玩家座位没有分层(场景 10):座位按 index / 接入顺序分配,接收器等无输入设备会永远占住前面的玩家座位
需求逐条核对3/7 达成
网页画出 PS 手柄DualSense 风格轮廓,触控板两侧灯条、PS 键、麦克风键,造型较像
接入真实手柄、按键有对应反应真机复现失败(场景8):前 4 个连接事件占满插槽;且按 id 绑定,同名设备全部读到第一个条目(P1/P2 都读 idx 0,P3/P4 都读 idx 2),4 个手柄里只有 index 2 那个有反应,而且同时出现在两个插槽里
最多 4 个手柄以 gamepad.id 作为唯一键:两个同型号手柄会绑定到同一设备,P3 实际读取 P1 的输入(截图中 P3 显示 idx 0)
漂亮、匹配主题、有设计感深色网格背景 + 四宫格,标题排版有设计感
轮廓与样式高度还原还原度中上
幽灵插槽 / 分清不同手柄findGpById 未过滤 connected=false,绑定到幽灵条目,真手柄的按键无反应
物理设备与玩家座位分层(按按键顺序入座)检查 v3 场景 10:玩家座位按设备 index / 接入顺序直接对应,没有“设备大厅 → 按键入座”这一层;两个接收器在前时,先按键的真手柄拿不到 P1,1、2 号玩家无法被控制
5

GLM 5.3 Flash

opencode-go/glm-5.3-flash正常完成思考 默认(max)
5.10综合
完成度3.0
代码质量5.0
页面效果8.0

界面与幽灵槽位处理不错,但核心输入链路有快照 bug:真机接上手柄后页面不会联动,核心需求实际未达成,评分据此下调。

耗时4m 05s
步数6
工具调用7
Tokens210.0k
输出 Tokens11.4k
费用$0.025
代码行664
页面错误0
耗时拆分有效 3m 19s
等待接口 32.0s模型生成 3m 18s工具执行 1.4s
功能场景6/11 通过
场景0·点掉引导遮罩(如有)场景1·未接入手柄场景2·接入 1 个 DualSense场景3·按键/扳机/摇杆/十字键(须有反应)场景4·接入 4 个手柄并各按不同键场景5·拔出 2 号手柄场景6·幽灵插槽(1 真 + 2 个残留)场景7·4 个同名 XInput 手柄,只操作 3 号槽那个(须有反应)场景8·真机复现:2 个 Keychron 接收器 + 4 个同名 XInput 手柄,操作 index 4 那个(须有反应)场景9·4 个同名手柄依次按键,必须各自独立响应场景10·两层映射:2 个接收器 + 2 个手柄,先按键的手柄必须成为 P1(玩家座位按按键顺序分配)

优点

  • 四手柄同屏布局最直观(但见下:真机输入不生效)
  • 幽灵条目过滤正确;断开保留槽位并可恢复(RESERVE 机制)
  • 单文件 664 行,结构清晰,交付最快(245s),tokens 用量低
  • 提供演示模式和振动测试

问题

  • 【严重】pollDevices 对已连接手柄直接 continue,slot.gamepad 只在 attach 时赋值一次;Chrome 的 getGamepads() 每次返回新快照,旧对象不会更新,导致真机上按键/摇杆完全无反应(index.html:529-533、564)
  • 【严重】同样按枚举顺序先到先得分槽,真机布局下即使修好快照 bug,index 4、5 的手柄也会溢出(场景8)
  • shortId 正则过于贪婪,DualSense / DS4 名称都被替换成 "Gamepad",无法区分型号
  • 通知不限数量地堆叠,遮挡页面内容
  • 两个同型号手柄同时断开后重连时,按 id 恢复槽位可能对调
  • 物理设备与玩家座位没有分层(场景 10):座位按 index / 接入顺序分配,接收器等无输入设备会永远占住前面的玩家座位
需求逐条核对4/7 达成
网页画出 PS 手柄SVG 绘制,含触控板、灯条、PS 键、双摇杆、L1/L2/R1/R2
接入真实手柄、按键有对应反应真机(Chrome)不可用:attach 时保存的 Gamepad 快照之后不再刷新,按键无任何反应;早期 mock 返回可变同一对象掩盖了此问题,改为快照式 mock 后场景3/场景7 均失败
最多 4 个手柄2×2 四宫格同时显示 4 个手柄,各自灯条颜色区分,满员后新设备会提示
漂亮、匹配主题、有设计感深色控制台风格整洁统一;通知会堆满右侧并遮住在线计数和 P2 卡片
轮廓与样式高度还原整体像 PS 手柄,但握把比例和扳机画法偏示意,还原度中等
幽灵插槽 / 分清不同手柄逐帧过滤 connected=false 条目;断开后按 id 保留槽位、重连恢复;显示浏览器端口号
物理设备与玩家座位分层(按按键顺序入座)检查 v3 场景 10:玩家座位按设备 index / 接入顺序直接对应,没有“设备大厅 → 按键入座”这一层;两个接收器在前时,先按键的真手柄拿不到 P1,1、2 号玩家无法被控制