多重評估者設計改進循環
多輪獨立審查直到產品準備好供真人使用:每位審查員對每個旅程的評分皆達 9 分或以上,無未解決的高嚴重性問題,審查員之間的分數差距在 1 分以內,且此狀態已連續維持兩輪。一致的滿分是提醒要再次確認任務簡報的標誌,而非目標。AI 分數是強烈的信號,但並非證據:當循環顯示準備就緒時,應由真實的首次使用者進行測試,若他們與 AI 意見不同,則以真人意見為準。
所有操作皆透過一個命令列工具 scripts/eval_loop.py(位於此檔案旁)執行,因此無論是真人、此代理程式或任何其他代理程式,都能得到相同的結果。每個指令都接受 --dir <review folder>,而 status --json 會隨時告知循環的狀態及下一步動作。需要 Python 3.9 或更新版本、Node.js 18 或更新版本以及 Google Chrome 或 Chromium。無需安裝其他套件。
以下,LOOP 代表 python3 <此技能的資料夾>/scripts/eval_loop.py。
開始之前(每個 mStack 技能皆適用)
- 如果
~/.mstack/config.json中"disabled"項目下包含multi-evaluator,或使用者表示此任務不要使用此技能,則以一般方式工作。 - 如果
~/.mstack/learned/multi-evaluator.md存在,請閱讀它:它記錄了使用者已接受的改進,且其權重高於此檔案。 - 當循環結束(或停止)時,請私下記錄執行情況:
python3 <mstack skill folder>/scripts/mstack.py log multi-evaluator --outcome reached|partial|not-reached --needed-user "..." --stalled "..."(mstack 技能資料夾位於此資料夾旁)。
1. 首先定義旅程與標準
在任何審查開始之前,與使用者共同確認一個真實使用者必須能夠完成的端到端任務。
LOOP init --dir design-review --name "<產品名稱>" --start "<啟動產品的指令,需包含 {port}>" --cwd <其資料夾>(或對於已正在運行的項目,如 staging 站台,使用--url <位址>)。- 與使用者一起填寫
design-review/mstack-eval.json。請參閱references/config.md了解所有欄位:about和persona:產品為何以及由誰評斷。將設計方向與限制條件保留在rules中,不要放在about裡:它們會以「不計分」的方式顯示給審查員,確保任務簡報不會洩露你期望聽到的答案。journeys:3 到 6 個真實任務,每個都是端到端(例如「新增一本書,並在列表中看到它」)。views:每輪會擷取的固定畫面(桌面、手機、深色主題)。淺色主題優先。criteria:基本標準是清晰、快速、可信、熟悉、冷靜、隨處可用。stages可隨著產品成熟添加更多標準(實現價值的時間、錯誤恢復、文案、代理體驗、可衡量的無障礙性、速度、五秒測試、情感基調、一致性、資料安全、愉悅感)。當分數顯示基本標準已達成時,可以透過"active": true或"from_round": <n>來啟動某個階段。reviewers:至少兩位,來自不同的 AI 製造商。預設是由你(代理程式)執行的 Claude 和透過codex exec由工具執行的 Codex。control:雜訊檢查(建議)。首次擷取會將該輪的畫面凍結在control/資料夾;每位審查員在每一輪都會為control旅程評分,報告會顯示該分數的變動。小於此變動的變化被視為雜訊,而非進展。
- 向使用者展示旅程與標準,並在第 1 輪開始前獲得同意。
2. 每一輪
LOOP start-round --dir design-review # 開啟 rounds/r<N>/ 資料夾,快照此輪的標準
# 在 rounds/r<N>/changes.md 中寫入:變更了什麼,每項一個要點
LOOP capture --dir design-review # 相同的畫面,以相同方式擷取,每輪都一樣
LOOP brief --dir design-review # 在 rounds/r<N>/briefs/ 中產生盲評任務簡報,從第 2 輪起還有 -compare 簡報
LOOP review --dir design-review # 並行執行命令列審查員(Codex);請在背景執行
同時,請你親自以全新的環境來執行每個 kind 為 agent 的審查員:
- Claude Code:啟動一個子代理(使用 Agent 工具,通用用途),其提示為
rounds/r<N>/briefs/claude.md的完整內容。不要加入你自己的意見、預期的答案或先前的分數。 - 任何其他代理程式:開啟一個新的工作階段或對話串,僅將任務簡報作為唯一的指示。
- 一個
kind: "chat"的審查員(可選,需選擇加入:使用使用者已登入的瀏覽器中的 Grok、ChatGPT 或 Gemini,無需 API 金鑰):僅在使用者同意可分享的內容後,開啟一個新的私人聊天,貼上rounds/r<N>/briefs/<id>.md,如果產品不公開,則上傳此輪的固定畫面,儲存回覆,關閉該分頁,然後執行verdict。它看到的是螢幕截圖,而非實際產品,因此作為平局裁判:它永遠不計入「準備好供真人使用」的條件,且永遠不能是唯一的審查員。
當審查員回覆時,儲存其 JSON(工具會檢查其格式,不符合格式的回覆將被拒絕):
LOOP verdict --dir design-review --reviewer claude reply.json # 或使用 - 將回覆透過管道輸入
先盲評,再比較。 評分任務簡報僅顯示當前輪次:無先前的螢幕截圖、無先前的分數、無設計方向,因此第 1 輪和第 9 輪的分數具有相同意義。從第 2 輪開始,也會有 rounds/r<N>/briefs/<審查員>-compare.md。在其評分結果已儲存後,將其提供給同一位審查員(同一個工作階段即可;因為它已不再是盲評),並將回覆與分數分開儲存:
LOOP verdict --dir design-review --reviewer claude --compare compare-reply.json
LOOP report --dir design-review # 寫入 design-review/report.html
比較永遠不會改變分數;報告會在「變更內容」區塊下顯示比較結果。
然後向使用者展示報告和淺色主題的螢幕截圖(rounds/r<N>/shots/)。如果你的代理程式可以發送通知(在 Claude Code 中是 PushNotification),請在輪次報告準備好或循環需要決策時發送通知給使用者;設定檔中的 notify 指令也可用於發送通知(請參閱 references/config.md)。
3. 修正,然後重複
- 從報告的下一步待辦事項清單開始(優先處理所有審查員都標記的旅程修正,然後是高嚴重性問題,最後是「修正後」分數差距最大的項目)。如果旅程表格顯示審查員之間的分數差距為 2 分或以上,請先自行審視該旅程,再根據任何一個分數採取行動。
- 在產品中進行修正,執行其自身的測試,並撰寫下一輪的
changes.md。 LOOP start-round,然後重複直到LOOP status顯示準備好供真人使用(上述停止規則,並維持兩輪)。如果某一輪通過,不要進行重大變更,再執行一輪以確保其得以維持。如果在達到max_rounds(預設值為 6)後仍未達成,status會要求停止並與使用者討論:可能是旅程或標準要求了產品不應達成的目標。- 然後找真人測試:五位首次使用者在無輔助的情況下嘗試這些旅程。在
rounds/r<N>/people.md中記錄他們的時間、卡住的地方和使用的詞語(每項一個要點;報告中會顯示)。如果他們與 AI 審查員意見不同,則以真人意見為準:將他們發現的問題轉化為下一輪的旅程或標準。
規則
- 審查員在評分時,永遠看不到彼此的分數、先前的輪次、先前的分數或報告;任務簡報中會告知他們這一點。與上一輪的比較是獨立於評分之後的步驟。
- 相同的畫面,以相同方式擷取,每輪都一樣,以便前後對比。
- 永遠不要讓審查員提交真實的付款、訊息或個人資料。請使用測試資料和全新的副本。
- 沙盒化的審查員(Codex)無法啟動 Chrome:
review會啟動一個共享的無頭 Chrome,任務簡報會告訴他們在驅動指令前面加上MSTACK_CDP_PORT=<port>。 - 如果審查員的回覆不符合格式,請閱讀
rounds/r<N>/work/<reviewer>/raw-reply.txt,然後重新執行。工具會拒絕仍提出修正建議的滿分 10 分,以及低於分數的「修正後」評分。 - 將審查資料夾保留在產品的儲存庫中(或旁邊),以便保存每一輪的記錄。
檔案
scripts/eval_loop.py:命令列工具(init, status, start-round, capture, brief, serve, review, verdict, validate, report, notify)。scripts/drive.mjs:旅程驅動器,一個真實的無頭 Chrome;審查員直接使用它。scripts/report.py:報告產生器。scripts/readiness.py:停止規則與雜訊檢查。templates/mstack-eval.json:初始設定檔。references/config.md:所有設定欄位。references/verdict-format.md:回覆格式。references/method.md:為何循環以這種方式運作以及標準如何增長。