DishwasherBench v0.1.0 开源:在真实洗碗机物理模拟中测试大模型装载能力
Composo 开源 DishwasherBench v0.1.0,基于一台 Bosch SMV4HAX40G 的物理模拟,让模型和人类在浏览器中通过 MCP 比拼洗碗机装载,按 Eco 50 洗后干净程度计分。
Hacker News:AI 热帖· mlukewizard·2026-10-13 16:24· 3 小时前AI 评分62
DishwasherBench – 前沿模型能把洗碗机装好吗?
AI 导读
Composo 开源 DishwasherBench v0.1.0,基于一台 Bosch SMV4HAX40G 的物理模拟,让模型和人类在浏览器中通过 MCP 比拼洗碗机装载,按 Eco 50 洗后干净程度计分。
正文
DishwasherBench 是一款洗碗机装载游戏,基于一台真实机器的物理模拟,旨在为语言模型提供基准测试,人们也可以在浏览器中游玩。其中的游戏名为 Spotless,各软件包命名为 @spotless/*。
玩家将物品以刚体物理方式装入一台 Bosch SMV4HAX40G 的 3D 模型。随后模拟其 Eco 50 程序的一次洗涤(水流、水滴、流挂、污垢与洗涤剂化学),每件洗干净的物品都会为玩家得分。从第二关开始,并非所有物品都能装下,因此玩家必须选择装什么以及怎么装。
这是早期版本,版本号 0.1.0。模拟基于对真实机器的一次测试洗涤进行校准。得分能反映玩家是否装得好,以及是否将杯子、玻璃杯和锅具口朝下放置。它尚不能反映盘子和餐具的堆叠方式是否能让它们洗净。 得分可信范围 一节对此有完整说明。
目前可靠的部分:装载是确定性的刚体物理,每一局都是一条记录,任何人都可以通过回放和重新洗涤其装载来验证,而且同一款游戏既可供人们在浏览器中游玩,也可供模型通过 MCP 游玩。尚不完善的部分是洗涤对盘子和餐具的评分方式。
由 Composo 构建和维护。docs/ 下的许多文档是工作记录,按撰写时的原样保留; docs/README.md 说明了如何阅读它们。
在浏览器中装载第一关。手中拿着一个餐盘,位于下层篮筐上方,“Suggest spots”已为可用位置编号,最优者在前。右侧面板显示程序将发送的精确位姿。
目录
目前可用的功能
- 机器。一台 Bosch SMV4HAX40G 的数据与几何模型,来自其所有者的照片和卷尺测量(
packages/machine):两个篮筐及其齿排、搁架和支架、喷淋臂以及 Eco 50 程序。 - 装载。物品与污垢目录、确定性刚体装载(Jolt),以及带有游戏动作和查询的会话层(
place、remove、set_rack、list_slots、check_load等)。 - 洗涤。分两个层级的模拟。官方层级给出计分结果;快速层级是较粗略的预览。在参考机器 MacBook Pro(Apple M3 Pro,18 GB)上,最大关卡的官方冷洗三次取最佳耗时 4.9 分钟,若旁边运行另一个任务则为 5 至 8.5 分钟,预算为 30。
- 七个关卡的课程,按难度顺序编号 (docs/benchmark/levels.md),每个关卡都保存了三个脚本玩家(谨慎、粗心、随机)的参考负载。六个在参考负载上通过了基准的门槛;教程没有通过(它的粗心负载损失太少)。
- 三种游玩方式。 网页(
apps/web)、面向智能体的 MCP 服务器(packages/mcp),以及一个运行脚本玩家和模型并写出经验证的对局记录的测试框架 (packages/bench)。 - 检查。 来自文献的 48 个装载现象,作为可执行的洗涤对 (docs/research/standards.md 第 9 节),以及一个校准工具,它根据一次真实洗涤的记录为模拟打分、拟合参数并对候选测试洗涤进行排名(存储的排名来自更早的参数集,尚未重新运行)。
有两个模型通过 OpenAI 兼容端点进行了游玩:在官方层级上于三个关卡进行了六局(目前的结果)。没有人游玩过以建立基线,Anthropic API 的路径也尚未针对实时 API 运行过。
分数可以信任用于什么
完整的说明,包含每一个数字及其来源,见 docs/validation/README.md。简而言之,模拟已经对照四样东西进行了检查:
- 在真机上进行的一次测试洗涤。 在 Eco 50 上放置四个蛋黄盘子。在结果出来之前写下的预测正确判断了盘子的顺序和残留物的形态,但对两个烘干盘子上的残留量乐观了十到三十倍。随后的校准改动了一个数字:长时间浸泡期间水泵运行的占比,从 0.5 改为 0.8(范围在 0.59 到 1 之间)。预测在先的记录保存在未公开的私有开发历史中,因此无法从这个仓库核实该顺序。
- 姊妹机型已公布的类别均值(Bosch SMV6ECX51E,eco 程序,参考洗涤剂):餐具与分数点的差距在 0.1 以内,餐盘低 0.2,玻璃器皿低 0.1 到 0.5。这是拟合,不是预测:污垢和化学默认值被设定为使这些数字出现。
- 48 个装载现象,文献中有证据:17 个通过,21 个在大小或符号上失败,1 个是有缺陷的场景,9 个需要尚未构建的机制。
- 它自身的记账。 水被精确守恒,同一输入在同一台机器上给出相同结果。快速层级在标准 13 套餐具负载的判定上与官方层级一致率为 89 %,在关卡上为 97 %。
今天的分数显示玩家是否装载得当,以及是否将杯子、玻璃杯和锅口朝下放置。它尚不能显示盘子和餐具是否堆叠得能洗净。
| 判定可以信任用于 | 判定不能信任用于 |
|---|---|
| 玻璃杯、马克杯或锅口朝上或侧放:结果不干净 | 盘子倒下或相互倚靠:结果干净,这极有可能是错的 |
| 洗涤剂盒被堵塞,针对蛋白质污垢(鸡蛋、酸奶、肉末、牛奶) | 喷淋臂被物品卡住:其上方的盘子保持其判定 |
| 真正躺在另一个里面的碗或勺子 | 餐具挤在一个格子里,且勺子按装载物理通常的嵌套方式放置:干净 |
| 蛋黄和其他蛋白质污垢,位于远离干净阈值的物品上 | 接近阈值的物品;茶、咖啡和葡萄酒;玻璃上干涸的牛奶;油脂,即使不用洗涤剂也能洗净 |
在仔细和粗心的参考装载之间约四分之三的差距是倒置放入的空心 部件。这些部件中的污垢(冰沙、番茄汤、番茄酱、 鳄梨酱)基于文献中的数值,尚未经过任何测试洗涤的检验。
完全未建模:干燥、玻璃上的斑点和薄膜、被水流移动的物品,以及污垢沉降 到干净部件上。只有 Eco 50 经过校准和评分。
要求
DishwasherBench 已在一台机器上运行:一台 MacBook Pro(Apple M3 Pro,18 GB),运行 macOS 27。本仓库中的每个数字都是在那台机器上测得的。Linux 和 Windows 尚未 测试。目前没有任何证据可以排除它们,欢迎提供相关报告 (docs/ROADMAP.md)。
- 20 系列中的 Node 20.19 或更新版本(
.nvmrc固定为 20.19.0)。更旧的 Node 会在 安装时被拒绝。Node 22 尚未尝试。 - pnpm 9(
package.json指定 9.4.0;corepack enable会采用它)。 - 一个 Dawn 可以打开的 GPU。洗涤过程通过 WebGPU 从 Node 在 GPU 上追踪水(使用
webgpu包,版本 0.6.2,其中包含预构建的 Dawn 二进制文件)。在参考 机器上那是 Metal。此版本在同一硬件的 macOS 14.7 上无法加载。 - Google Chrome 或 Chromium,用于发送给智能体的图片以及驱动页面的脚本。测试框架会在通常的安装位置查找它;将
SPOTLESS_CHROME设置为该程序的路径以选择其他浏览器。手动游玩只需要一个 桌面浏览器,而脚本化玩家则不需要任何浏览器(--no-render)。 - 克隆大约需要 680 MB(下载约 290 MB;文件本身约
385 MB,主要是照片、截图和剧集记录),以及约 420 MB 用于
node_modules。 - 一次官方关卡洗涤需要 1 到 2 GB 内存(在标准的 13 位 装载上观察到 2.4 GB),以及空闲端口 8787(游戏服务器)和 8788(MCP 服务器)。
结果在同一台机器上可以逐位重复。在不同机器、操作系统构建
和 webgpu 包版本之间,它们可能在最后几位上有所不同,这就是为什么每个
结果都会注明其计算所用的技术栈
(docs/research/spike-gpu-compute-macos27-recheck.md)。
快速开始
git clone https://github.com/composo-ai/DishwasherBench.git cd DishwasherBench corepack enable # once: makes pnpm 9.4.0 available pnpm install --frozen-lockfile # about 15 seconds the first time
这些包没有构建步骤:它们作为 TypeScript 源代码被使用,并通过
tsx 运行。只有页面需要构建,通过下面的 play 命令。
展示结果的最短方式是从命令行洗涤一个已保存的装载:
pnpm --filter @spotless/wash-runner wash-load tutorial-careful --tier fast # under a minute pnpm --filter @spotless/wash-runner wash-load tutorial-careful --tier official # about 5 minutes the first time
它会打印分数,以及每个物品的判定、得分和残留物。
已保存的装载位于 packages/loader/loads/(<level>-<player>.json)。一个装载的首次洗涤
会计算出水的流向并将其保存在 .spotless/exposure-cache 中,因此同一装载的第二次洗涤
只需几秒钟(传入 --no-cache 可关闭此功能)。
要检查一切是否在你的机器上运行:
pnpm typecheck # the root and every package; a few seconds pnpm test # every package; 8 to 17 minutes on the reference machine
pnpm test 需要多长时间取决于机器还在做什么。有一个测试按
设计被跳过。这些测试在 GPU 上运行真实的洗涤。
当参数集过期时,洗涤会拒绝运行。游戏洗涤所用的
参数集(anchored-v7.owner-capsule,位于 packages/calibration/anchors/)记录了
模拟源代码的状态以及它所针对的机器数据的状态。在任一发生更改后,洗涤
会停止并列出差异之处。CONTRIBUTING.md 解释了该规则以及如何
使参数集重新变为最新。
在浏览器中游玩
pnpm --filter @spotless/web play
这会构建页面并启动游戏服务器。打开 http://127.0.0.1:8787(添加 --port <n> 可使用其他端口)。页面会播放音乐:如果不想要,可以静音该标签页,或使用 Sound 按钮。
如果端口被占用,服务器会以 serve: port 8787 is in use; give --port <n> 停止。服务器只响应它自己提供的页面:携带其他站点 Origin 的请求会得到 403,除非服务器启动时带有 --allow-origin <scheme://host[:port]>(可重复),并且 Host 头指定的主机名不是服务器监听的地址(默认是 127.0.0.1、localhost 和 [::1])的请求也会得到 403(--allow-host <name> 可添加一个名称)。没有 Origin 头的请求(测试框架、MCP 服务器、curl)不受影响,Vite 开发服务器下的客户端也不需要标志。
当你开始洗涤时,会提供两种选择:
- 快速预览:快速层级。大约一分钟;更粗略,一些判定可能与完整洗涤不同。这不是计分结果。
- 完整洗涤:官方层级。几分钟;这是计分结果。预览之后,报告会在同一负载上提供完整洗涤。
游戏在 Eco 50 上评分,使用一颗洗涤剂胶囊(Finish Powerball Ultimate,12.9 克)。层级从 1 到 7 列出,并附有难度数值,该数值根据台面上的物品计算得出,并非实测分数。
指向放置适用于空行中的盘子、碗和餐具。有两件事目前无法通过指向完成:指向已放置盘子旁边空隙的盘子常常会搁在邻居上,杯子和玻璃杯无法斜靠在上层篮筐的侧支架上。对于这两种情况,请拿起物品并按下“Suggest spots”(消耗一次查询),然后点击一个编号标记。
在对第一层粗心负载进行快速预览后:一个开口朝上的碗盛有 432 毫升水且不干净,报告称一把叉子卡住了下喷淋臂。横幅说明了预览是什么:不是计分结果。所有这些都是模拟对故意糟糕负载的输出,并非对真实机器或洗涤剂的测试。
洗涤后仔细观察一件物品:残留物被绘制在它留下的位置,并附有其面积和物品盛住的水量。
运行脚本化玩家
脚本化玩家不需要模型,也不花钱。这会以官方层级用谨慎的参考玩家玩第一层,然后通过重放其动作并第二次洗涤负载来验证记录(每次约五分钟):
pnpm --filter @spotless/bench bench run --levels tutorial --policies careful \ --no-render --out "$PWD/.spotless/bench/scripted" pnpm --filter @spotless/bench bench verify \ "$PWD"/.spotless/bench/scripted/tutorial__careful__*/record.json --rewash
- 将
--out作为绝对路径给出;相对路径会在packages/bench内解析。 - 脚本化玩家有
empty、random、careless和careful。添加--tier fast可在约一分钟内进行预览;快速洗涤在记录和结果表中被标记为预览,且从不计分。 - 每次运行都会在
--out下写入:record.json、结果表(results.md、results.json)、它启动的游戏服务器的数据(server-data/),以及在没有--no-render的情况下,工具返回的图片。
脚本化谨慎玩家对最大层级的负载(台面上 62 件,装载 49 件),从上方以及从前侧和侧面拍摄。两个已玩过的模型都击败了它。
运行模型
关于测试框架、每种玩家看到什么以及记录了什么的所有内容都在 docs/benchmark/README.md 中。
模型运行需要花钱。将 .env.example 复制为 .env(git 会忽略它),并填写你的端点地址和密钥。该命令会打印它设置的变量名称,从不打印值,密钥和地址都不会写入记录。
OpenAI 兼容端点背后的模型(OpenAI、Azure,或任何带有 Responses 或 chat completions API 的服务器):
pnpm --filter @spotless/bench bench run --levels tutorial --policies openai:gpt-6.1-sol \
--max-input-tokens 2000000 --out "$PWD/.spotless/bench/sol-tutorial"- 策略中指定模型名称,在 Azure 上则指定部署名称:
openai:<model or deployment>。 - 未设置地址时,不会发出任何请求:该回合立即结束且无结果,其记录显示为
no address of the API (set SPOTLESS_OPENAI_BASE_URL, or give --base-url)。随后命令以状态码 1 退出,pnpm 报告脚本失败。 --max-input-tokens会在请求累计超过该值之前结束一个回合。以两个模型实测:第一关消耗 0.4 至 0.65 百万输入 token,37 件的关卡消耗 2.5 至 2.8 百万,最大的关卡(62 件)消耗 3.0 至 3.2 百万,其中 95% 或更多是从提供方的缓存中读取的。请使用 2,000,000、12,000,000 和 20,000,000 作为限制。- 测试框架会记录 token。只有在
.env中给出价格时,它才会记录成本。 - 没有
--tier fast时,清洗按官方层级进行,该层级即为得分。 - 每次运行都会在
--out下写入记录、转录文本、图片和结果表,并通过重放其操作日志来验证该回合。
通过 Anthropic API 使用的模型,密钥放在 ANTHROPIC_API_KEY 中(将模型的 id 放在 <model id> 的位置):
pnpm --filter @spotless/bench bench run --levels tutorial --policies anthropic:<model id> \ --max-input-tokens 2000000 --out "$PWD/.spotless/bench/anthropic-tutorial"
此路径尚未针对实时 API 运行过。 它只有针对本地替身的单元测试,背后别无其他。欢迎提供首次运行的报告。没有密钥时,该回合会立即失败(Could not resolve authentication method)。SDK 也接受已存储的登录配置文件(如果你有的话),因此 .env 中缺少密钥并不能保证不会产生任何费用。
连接 MCP 客户端
任何支持 MCP 的智能体都可以参与。一个 MCP 服务器绑定到一个回合,因此游戏服务器必须以基准模式运行,且该回合必须已存在。
# 1. The game server (the token: 8 characters or more, of your choosing) pnpm --filter @spotless/server exec tsx src/cli.ts serve --admin-token <token> --wash-tier fast \ --data "$PWD/.spotless" # 2. An episode; prints an address for the page, and the episode's id pnpm --filter @spotless/server exec tsx src/cli.ts link --admin-token <token> \ --level tutorial --player my-agent --agent # 3. For a client that speaks streamable HTTP: serves http://127.0.0.1:8788/mcp pnpm --filter @spotless/mcp exec tsx src/cli.ts --server http://127.0.0.1:8787 \ --session <episode id> --http --port 8788
--data 会将服务器的文件(其中包括回合记录 .spotless/episodes/)保留在页面所使用的目录中;没有它时,serve 会写入 packages/server/.spotless。link 打印的地址会在页面中显示该回合,且仅在页面构建完成后才有效(pnpm --filter @spotless/web build,play 也会执行此操作);MCP 调用在两种情况下均可工作。如果游戏服务器在另一个端口上(serve --port <n>),请用 link 为其提供地址,并加上 --server http://127.0.0.1:<n>。对于通过 stdio 自行启动 MCP 服务器的桌面客户端,配置位于 docs/benchmark/README.md 第 3 节。
通过 HTTP 访问时,MCP 服务器面向本机上的 MCP 客户端:对于任何携带 Origin 头的请求,以及 Host 头未指明其所监听地址(默认情况下为 127.0.0.1、localhost 或 [::1])的请求,它都会返回 403。对于以其他名称访问它的客户端(例如来自容器),请用 --allow-host <name> 启动它;游戏服务器接受相同的标志。
智能体获得十三个工具(place、remove、reset、set_rack、start_cycle、get_level、get_item、get_state、render、preview、list_slots、check_load、get_report)。要手动尝试一次调用:
pnpm --filter @spotless/mcp exec tsx scripts/call.ts --url http://127.0.0.1:8788/mcp get_state '{}'
两个服务器都监听 127.0.0.1,且仅供在您自己的机器上使用(SECURITY.md)。
目前的结果
两个模型已通过一个 OpenAI 兼容端点,在官方层级上完成了课程的三个关卡。每个单元格一个回合只是轶事,而非基准结果,此处没有任何内容对这两个模型进行排名。
得分,以及该关卡得分的占比。中间几列是脚本化的参考玩家。
| # | 关卡 | 可得分值 | 随机 | 粗心 | 细心 | gpt-6.1-sol |
gpt-6-astra |
|---|---|---|---|---|---|---|---|
| 1 | 教程(12 件) | 64 | 20 (31.3 %) | 58 (90.6 %) | 64 (100 %) | 64 (100 %) | 未运行 |
| 4 | 早餐(37) | 220 | 36 (16.4 %) | 112 (50.9 %) | 174 (79.1 %) | 190(86.4%);第二个回合 188(85.5%) | 175 (79.5 %) |
| 7 | 晚宴(62) | 367 | 88 (24.0 %) | 100 (27.2 %) | 250 (68.1 %) | 260 (70.8 %) | 274 (74.7 %) |
gpt-6.1-sol 和 gpt-6-astra 是所用 Azure 端点上两个部署的名称。记录中保存了该名称以及 API 报告的推理强度(两者均为 medium;测试框架未发送任何值);未记录模型版本或快照日期。
三个脚本化列是当前洗涤代码上的已保存参考装载量 (docs/benchmark/course-table.md)。与模型回合一起存储的参考记录是在较早的代码上洗涤的,对于随机和粗心,在早餐上分别读取为 43 和 117,对于随机,在晚宴上为 99。
六个回合的价值:
- 仔细的参考装载量不是上限。两个模型在两个完整关卡上都超过了它,通过放置脚本玩家从未尝试过的平底锅、一个大浅盘和木板。这里没有任何归一化。
- 两个模型都没有犯关卡所围绕的错误。在六个回合中,没有任何空心件被口朝上立起或侧放,模型装载的物品出来时 84% 到 100% 干净。因此洗涤在它们之间几乎没起决定作用:它们的分数差异在于它们装进去了什么。
- 未展示:人物、任何 Anthropic 模型、关卡 2、3、5 和 6、金钱,或模型自身游玩结果的分布(唯一一次重复在 190 之后以不同的装载量达到 188)。
六个回合的记录、转录和图片,以及更完整的说明,都在 docs/benchmark/first-runs/course/ 中。六个模型回合中的每一个都通过重放和第二次洗涤验证,得到相同的判定和分数。洗涤代码自它们被游玩以来已更改过一次,因此第二次洗涤报告不同的结果哈希并说明原因。
工作原理
装载。每个物品和机器的每个部分都是由参数化描述生成的精确形状的刚性复合体;图片、碰撞形状和洗涤所看到的表面都来自那同一个描述。物品以刚体物理(Jolt)在固定步长下放置,玩家的输入四舍五入到 1 毫米和 1 度,因此人和模型在同一个网格上行动,相同的装载量总是以相同方式稳定下来。每个动作都记录有其后场景的哈希,重放日志必须重现每个哈希。 参见 docs/design/platform.md。
洗涤。喷嘴在 GPU 上从机器上测量的喷嘴位置和臂的转动出发,追踪到装载物的精确形状上。飞溅和水滴以液滴形式移动;落下的水作为薄膜沿表面流下,在表面能留住它的地方积聚,在留不住的地方排走。然后每种污垢的污垢模型根据时间、温度和洗涤水的化学性质(洗涤剂、酶、漂白剂)在整个程序过程中去除污垢。水去往何处与污垢和化学性质分开缓存,因此使用其他污垢参数的洗涤可在几秒到约一分钟内重放。官方层级以 2 毫米的块工作,快速层级以 4 毫米工作。关于已构建和省略的内容,参见 docs/design/scope.md,关于所设计的物理,参见 docs/design/sim-core.md。
评分。洗涤后,检查员查看每个物品。当物品至多带有 4 个斑点和 4 平方毫米的可见污垢时,该物品即为干净,计入脏水在物品上停留处留下的污垢。每个物品价值关卡卡上标明的若干分数;干净的物品获得这些分数,不干净或留在台面上的物品不得分。一个回合是一次装载和一次洗涤。报告还给出每个物品的 0 到 5 分分级评分以及何处留下了什么,这些不改变分数。参见 docs/benchmark/README.md 和 docs/benchmark/levels.md。
校准。洗涤的每个物理常量都在参数注册表中,带有默认值、范围和来源。洗涤记录描述一次真实的测试洗涤:机器和程序、每件物品及其污渍和摆放位置,以及之后观察到的结果。校准工具对一条记录运行模拟,将其与观察结果对比评分,拟合所选参数,并说明数据能识别和不能识别哪些参数。目前存在这样一次洗涤。参见 docs/calibration/wash-record.md、docs/calibration/fitting.md,以及关于游戏洗涤所用参数集的 docs/calibration/anchoring-v7.md。
自己检查模拟
现象套件(48 个现象,82 次洗涤;在快速层级下,无缓存时约 15 分钟,全部缓存时两分半)。在 POSIX shell 中从仓库根目录运行这些命令:
INIT_CWD=. pnpm exec tsx packages/sim-verify/src/phenomena/cli.ts --list INIT_CWD=. pnpm exec tsx packages/sim-verify/src/phenomena/cli.ts P01 P36 --tier fast \ --out .spotless/phenomena INIT_CWD=. pnpm exec tsx packages/sim-verify/src/phenomena/cli.ts P36 --tier fast \ --params packages/calibration/anchors/anchored-v7.owner-capsule.json --dose-g 12.9 \ --out .spotless/phenomena
不带 id 时它会运行全部 48 个。不带 --params 时它使用注册表默认值和参考洗涤剂进行洗涤;第三种形式则像游戏那样洗涤,使用校准参数集和胶囊。默认情况下报告输出到 packages/sim-verify/phenomena/reports/,其中保存着项目已存储的报告;上面的命令将它们发送到被 git 忽略的 .spotless/phenomena,这样一次试验就不会覆盖已存储的报告。
校准工具,针对那一次测试洗涤:
pnpm --filter @spotless/calibration spotless-fit validate \ packages/calibration/records/owner/owner-wash-01-egg-yolk-eco50.measured.json pnpm --filter @spotless/calibration spotless-fit predict \ packages/calibration/records/owner/owner-wash-01-egg-yolk-eco50.measured.json \ --params packages/calibration/anchors/anchored-v7.owner-capsule.json
validate 检查一条洗涤记录;predict 说明模拟对其中每个观察结果给出的值(首次五到七分钟,一旦负载的水被缓存后会更短)。给出 --params:不带它时 predict 使用注册表默认值并会说明这一点;它们不是游戏的参数集,会把四个盘子都读作脏的。带上该参数集时,predict 会警告其旁边没有 calibration.json;这是预期之中的。
已保存的负载与当前的装载物理对比:
pnpm --filter @spotless/loader check-loads tutorial-careful
pnpm --filter @spotless/loader check-loads --jobs 3 # all 25 of them: about 50 minutes局限与路线图
这些开放问题,每个都写成贡献者可以接手的形式,被跟踪为 issues;docs/ROADMAP.md 是它们的地图。最大的几个:
- 堆叠对盘子和餐具没有影响。盘子倒下、餐具拥挤和臂杆卡住几乎没有或完全没有代价。
- 距离另一个物体一两毫米以内的面出来得太干净。针对这种间隙的机制已经构建,但不在本仓库中,因为它破坏了餐具对照,而且其决定性参数没有测量依据。
- 没有洗涤剂时油脂也能洗净,淀粉则总能洗净。
- 一台机器、一个程序、一次测试洗涤。各等级所依据的污渍从未在真实洗涤中测试过。
- 没有人类基线,没有重复实验,也没有通过 Anthropic 的 API 运行过。
- 一个平台。Linux 和 Windows 未经测试。
各部分的位置
| 路径 | 内容 |
|---|---|
| docs/README.md | 文档索引,带有阅读顺序和每个文档的标签:当前、构建记录或已取代 |
| docs/design/scope.md | 项目目标、最先构建的内容、省略的内容、状态 |
| docs/validation/README.md | 模拟对照了什么进行检查,以及一个结论可以信任到什么程度 |
| docs/benchmark/ | 运行基准测试、各等级的进程、使用模型的首次运行 |
| docs/calibration/ | 将校准模拟的测试洗涤、洗涤记录格式、拟合工具、目前唯一的一次测试洗涤 |
docs/research/ |
有来源的档案:机器、喷流、薄膜、污渍、化学、标准、基准测试的设计 |
| docs/reference/ | 机器的照片和测量数据、机器图纸、测试洗涤的照片 |
packages/machine、catalogue、geometry、physics |
机器、物品与污渍、形状、装载物理 |
packages/session、levels、loader |
游戏的动作与查询、关卡、脚本化玩家及其保存的装载 |
packages/sim-*、inspector |
洗涤:场景、水力学、喷嘴、喷雾、水膜、洗涤液、污渍、时间线、对结果的检查 |
packages/wash-runner |
游戏运行时的洗涤:默认参数、报告 |
packages/calibration |
洗涤记录、拟合工具、参数集(anchors/) |
packages/sim-verify |
现象套件与演示洗涤 |
packages/server、mcp、bench、render |
游戏服务器、智能体接口、基准测试框架、图片 |
apps/web |
页面 |
scripts/ |
守护发布内容的卫生检查及其测试 |
spikes/ |
两次早期试验的探索性代码(GPU 计算、刚体引擎);不属于游戏的一部分 |
贡献
欢迎提交错误报告、看起来物理上不正确的结果、真实机器的测试洗涤、新关卡、带有回合记录和报告的模型结果以及其他平台的报告。CONTRIBUTING.md 说明了如何设置、在提交拉取请求前应运行哪些检查,以及一条令人意外的规则:模拟的源代码带有指纹,对其的更改会产生后果。请阅读行为准则。
问题请提交到问题表单中的问题表单。任何私密内容请发送至 support@composo.ai;如需报告安全问题,或照片、记录中不应公开的内容,请参阅 SECURITY.md。本项目以较小规模维护,不提供支持承诺。每个版本包含的内容见 CHANGELOG.md。
许可证、声明与免责声明
DishwasherBench 依据 MIT 许可证发布,版权归 Composo Limited 所有。来自他人的材料以及项目所依赖的主要软件列于 THIRD_PARTY_NOTICES.md:游戏中的音乐属于公有领域(CC0),研究笔记引用的短段落仍归其作者所有。机器的照片经其所有者许可,依据同一 MIT 许可证发布,并按照 docs/reference/REDACTIONS.md 所述为发布做了处理。
DishwasherBench 是 Composo Limited 的独立项目,与 BSH Hausgeräte GmbH 或 Robert Bosch GmbH(博世)、Reckitt(Finish)或其中提及的任何其他制造商无关联,也未受其赞助或认可。所有产品名称和商标均归其各自所有者所有,仅用于标识所测量的对象。该模拟是对一台私人拥有的机器的简化模型,依据其所有者的照片、测量数据和测试洗涤以及公开文件构建,其中许多参数为估计值。游戏、基准测试结果或文档中的任何内容均不构成对任何真实产品性能、质量或安全性的陈述,游戏中显示的装载建议是本项目对制造商手册的自行总结,而非制造商的说明。
如何引用
CITATION.cff 以 GitHub 和参考文献管理器可读取的形式提供了详细信息。BibTeX 格式:
@software{dishwasherbench, author = {{Composo}}, title = {DishwasherBench}, version = {0.1.0}, year = {2026}, url = {https://github.com/composo-ai/DishwasherBench} }
来源:Hacker News:AI 热帖 · github.com
来源:RadarAI · aihot.news



