DishwasherBench – 前沿模型能否堆疊洗碗機?
DishwasherBench – Can Frontier Models Stack a Dishwasher?
DishwasherBench 是一款基於真實 Bosch SMV4HAX40G 洗碗機的物理模擬遊戲,旨在為語言模型提供可重現的洗碗基準。
- - 模擬環境:使用 Jolt 物理引擎進行剛體負載,並在 GPU 上模擬噴射、滴水、沉澱與化學反應。
- 官方級別耗時約 5 分鐘,快速級別約 1 分鐘。
提供一套可重現的洗碗機模擬基準,方便模型評估與實驗設計,並可作為多機器學習測試的參考資料,支援開源社群貢獻。
譯文尚未完整,完整內容請切換至原文。
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)以及執行指令碼玩家與模型並寫入已驗證情節記錄的 harness(packages/bench)。 - 檢查。 來自文獻的 48 種裝載現象,作為可執行的洗滌對(docs/research/standards.md 第 9 節),以及一個校準工具,將模擬結果與真實洗滌記錄進行比對,擬合引數並對候選測試洗滌進行排名(已儲存的排名屬於較早的引數集,未再次執行)。
兩個模型已透過 OpenAI 相容的端點進行遊戲:官方等級的三個層級共六集(Results so far)。尚未有人以基準進行遊戲,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)。
- Node 20.19 或更新版本 在第 20 行 (
.nvmrc指定 20.19.0)。較舊的 Node 會在安裝時被拒絕。尚未嘗試 Node 22。 - pnpm 9 (
package.json版本 9.4.0;corepack enable會自動使用)。 - Dawn 可支援的 GPU。洗滌過程會透過 Node 的 WebGPU 在 GPU 上追蹤水流(
webgpu套件,版本 0.6.2,包含預編譯的 Dawn 二進位檔)。在參考機器上使用 Metal。同樣硬體在 macOS 14.7 上此版本未能載入。 - Google Chrome 或 Chromium,用於傳送圖片代理與驅動頁面的指令碼。測試工具會在常見安裝位置尋找;若想使用其他程式,請設定
SPOTLESS_CHROME為程式路徑。手動操作僅需桌面瀏覽器,指令碼化玩家則不需要(--no-render)。 - 克隆佔約 680 MB(下載約 290 MB;檔案本身約 385 MB,主要為照片、截圖與劇集紀錄),而
node_modules佔約 420 MB。 - 官方洗滌一個關卡大約需要 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>)。頁面會播放音樂:如不想聽,可將分頁靜音或使用音效按鈕。
如果連線埠被佔用,伺服器會以 serve: port 8787 is in use; give --port <n> 停止。伺服器只回應它自身所提供的頁面:攜帶另一個網站 Origin 的請求會得到 403,除非伺服器以 --allow-origin <scheme://host[:port]> 啟動(可重複),且帶有不同於伺服器監聽位址(127.0.0.1、localhost、[::1] 預設)的 Host 標頭的請求也會得到 403(--allow-host <name> 會加上名稱)。未包含 Origin 標頭的請求(測試環境、MCP 伺服器、curl)不受影響,Vite 開發伺服器下的客戶端也不需要旗標。
啟動洗滌時,您會得到兩種選項:
- 快速預覽:快速層級。大約一分鐘;較粗略,部分判斷可能與完整洗滌不同。它不是計分結果。
- 完整洗滌:官方層級。數分鐘;這是計分結果。預覽後,報告會在同一負載上提供完整洗滌。
遊戲以 Eco 50 為基準,使用一顆洗衣粉膠囊(Finish Powerball Ultimate,12.9 g)。等級列為 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 或聊天完成 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 報告的推理努力(兩者皆為中等;測試平臺未傳送任何);未記錄模型版本或快照日期。
三個指令碼化欄位是目前洗滌程式碼下儲存的參考負載(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說明瞭如何設定、在提交拉取請求前需執行哪些檢查,以及一條讓人驚訝的規則:模擬源程式已被指紋化,任何更改都會產生影響。請閱讀 行為守則。
問題請至 issue forms 中的問答表單。任何私密事項請寄至 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(Bosch)、Reckitt(Finish)或任何其他在文中提及的製造商均無關聯、贊助或背書。所有產品名稱與商標均屬於其各自所有者,僅用於識別已測量之專案。模擬為一臺私人擁有機器的簡化模型,根據其所有者的照片、測量與測試洗滌以及公開檔案構建,許多引數為估計值。遊戲、基準結果或檔案中任何內容均不構成對任何實際產品之效能、品質或安全性的陳述,遊戲中顯示的負載建議為本專案對製造商手冊的彙整,而非製造商指示。
引用方式
CITATION.cff has the details in a form GitHub and reference managers read. In BibTeX:
@software{dishwasherbench, author = {{Composo}}, title = {DishwasherBench}, version = {0.1.0}, year = {2026}, url = {https://github.com/composo-ai/DishwasherBench} }
來源:Hacker News (official RSS) · github.com



