瓶頸透鏡 是做什麼的?
找出瓶頸。證明改善。
保持收集資料在本地端;預設不上傳原始碼、追蹤記錄或報告。可攜式指令與捆綁腳本不依賴特定代理廠商。解析捆綁路徑時請相對於此 SKILL.md。CLI 需要 Python 3.10+;目標轉接器支援 Python 3.10+ 與 Node.js 22+。Node 支援基準/CPU 模式;Python 也支援配置分析。
發現並同意工作負載
請閱讀專案說明、清單檔案、鎖定檔案、進入點,以及現有的效能/正確性測試,無需匯入專案模組或執行設定鉤子。識別語言、框架、直譯器、相依套件,以及實際執行緩慢的操作。接著選取 Python 或 Node 轉接器及現有專案的執行環境。若為其他語言,請說明收集器的邊界,並建議合適的分析器,而非假裝捆綁的轉接器可支援它。
選取具有代表性的、有界限的工作負載,並包含穩定的資料集、種子、並行度、快取策略及預期輸出。優先使用可靠的既有基準測試,或一個經審查的小型驅動程式,該驅動程式會斷言結果。測試收集與應用程式匯入也會執行程式碼。如果沒有可執行的工作負載,請提供假設與收集計畫;切勿憑空捏造測量數據。
在對不熟悉的儲存庫執行前,請顯示確切的直譯器、工作目錄、指令與引數、呼叫次數、逾時時間、輸出路徑,以及可能的資料庫/網路/檔案影響。若對話尚未涵蓋,請針對該具體工作負載取得授權。允許檢查或分析並不代表允許修改應用程式碼。請先詢問再變更,除非使用者已授權最佳化。對於已授權且未變更的範圍,請勿重複詢問。安裝相依套件、附加至程序,以及存取正式環境,都需要各自的適當授權。
收集器會以使用者的權限執行程式碼:子程序隔離與逾時並非安全沙箱。必要時請使用測試資料庫。切勿在工作負載 ID 或指令列引數中傳遞憑證;引數與路徑會記錄在本地端。報告可能揭露內部路徑。請勿僅為探索用途而執行未知指令。
收集證據
請閱讀 references/measurement.md 了解指令、度量定義、統計決策及結束代碼。共用版本 2 格式定義於 references/measurement.schema.json。僅針對已授權的工作負載執行捆綁的收集器。請重新收集舊的或臨時建立的工件,而非臆測其缺失的度量邊界。
- 首先收集未經儀器化的基準測試。儲存所有樣本、環境後設資料、工作負載身分及程式碼版本。每個樣本均使用一個新的程序。一個被丟棄的暖身程序也是一個新程序;它不會為後續程序預熱應用程式狀態。
- 在不同的叫用中收集 CPU 分析資料,以及(針對 Python)配置分析資料。它們的時間資料僅供診斷之用,不得取代基準測試的時間資料。Node CPU 模式會保留 V8 分析資料與事件迴圈診斷資料;樣本命中次數並非呼叫次數,且 V8 分析資料包含收集器啟動時間。預設的基準測試與配置收集各會執行工作負載八次(一次暖身、七次記錄執行);CPU 分析會額外增加一次不含暖身的叫用。請在已核准的計畫中包含這些次數。
- 在編輯前保留基準線。使用全新的輸出名稱:腳本會拒絕覆寫工件。選擇一個耐用的結果目錄,並將每個 JSON 檔案與其相鄰的工件目錄放在一起。記錄資料集身分、
--input檔案的雜湊值、種子、版本、相關的--source檔案,以及快取策略。記錄的種子不會為應用程式程式碼播種;自動後設資料無法建立實際的快取狀態或未指定的輸入。 - 在可行情況下,使用
--expected-stdout搭配一個獨立審查過的已知答案。每次叫用(包括暖身)都會被檢查。若無此預測答案,自動化比較將無法評估正確性;請分別執行並報告專案測試。窄化的輸出相等性並未涵蓋所有的應用程式不變量。 - 對於 Python API 或工作者,較佳做法是使用一個有限度的驅動程式。捆綁的工具並非 HTTP 負載產生器、即時程序取樣器、執行緒層級的 CPU 分析器,或程序樹監控器。它無法直接測量 I/O 位元組、查詢次數、請求百分位數或吞吐量。必要時,請與使用者一起選擇額外的儀器,並記錄其範圍與額外負擔。
診斷並提議
針對每個發現,請引用工件、函式/檔案/行號、呼叫次數或配置大小,以及相關的自身/累積時間。請區分觀察到的事實、假設以及建議的變更。累積時間在呼叫樹狀結構中會重疊;切勿將它們相加成總時間的百分比。高累積時間表示一條耗時的路徑,但不一定是需要重寫的函式。
低於牆壁時間的 CPU 時間可能暗示等待,但無法證明磁碟、資料庫或網路的因果關係。重複的函式呼叫並非 N+1 查詢的證明:請取得查詢次數/跨度並檢查迴圈。配置快照描述的是快照當時的存活配置,而非所有的短暫配置或記憶體洩漏。請透過重複工作負載與保留證據來確認可疑的記憶體洩漏。明確陳述未知狀態。
根據測量貢獻、預期效益、實作成本、正確性風險及資源權衡來排定變更的優先順序。在相關之處描述快取失效、排序、交易、並行及記憶體效應。在未經測量前,請勿承諾特定百分比的改善。
在授權範圍內最佳化與驗證
進行最小的授權變更,並保留無關的工作。執行相關的正確性測試,並在同一測試裝置上比較輸出/不變量。僅成功結束程序並非正確性驗證。
使用相同的環境、工作負載、種子、快取策略、執行次數及逾時時間,重複相同的基準測試與受影響的分析。rerun 會使用記錄的要求來執行目前的程式碼,並檢查輸入雜湊值;它不會還原歷史版本。比較未經儀器化的時間資料與未經儀器化的時間資料,以及同類的記憶體度量。共用的 JSON 並不會讓不同的程序/執行緒範圍或執行階段的計時間隔變得可互換。如果相依套件/直譯器/工作負載發生變更,請將其報告為一個獨立的實驗,而非繞過相容性檢查。
使用捆綁的比較指令來區分描述性的中位數/平均數變化、已設定的實際門檻,以及關於平均數差異的獨立樣本排列檢定結果(跨比較度量進行 Holm 校正)。在查看結果前選定門檻;預設的 5% 並非普遍有意義。範圍重疊並非顯著性檢定。此檢定假設樣本獨立且可交換;請檢查變異性,並在漂移可能使該假設無效時,重複或交錯執行 A/B 測量。不明確的結果並不能證明等效。
自動化的 verified_improvement 狀態僅限於所測量的工作負載與通過的輸出預測答案,需要支援的實際主要度量改善,且若其他比較度量出現支援的實際迴歸則會被阻擋。輸出檢查失敗會以結束代碼 3 退出,並阻止驗證,即使執行速度更快也是如此。--fail-on-regression 會讓支援的實際迴歸以結束代碼 1 退出;對於不明確比較的零結束代碼並不代表認證改善。請勿在說明中推廣未經評估或失敗的結果。如果存在且已授權的相鄰工作負載,請執行它們。僅對測試過的場景聲明迴歸覆蓋範圍。當已同意的問題獲得解答、執行失敗、達到授權邊界,或無法取得可比較的測量結果時,請停止擴展實驗。
傳遞結果
使用使用者的語言。每次收集/比較都會輸出 Markdown 報告與 JSON;請在使用者的語言中加入代理的解讀,同時保留原始證據。首先說明發現了什麼、其證據為何,以及下一個實驗,然後包含:
- 範圍、指令、環境/版本、輸入、重複次數及測量邊界。
- 帶有證據與信心的發現;將未經測量的建議分開說明。
- 已進行或建議的變更、權衡、正確性檢查及其指令/結果。
- 對於每個可比較的度量,提供改善前/後的中位數與平均數、最小值/最大值、樣本數及變化百分比。測試與實際決策使用平均數;中位數變化僅供描述。請包含單位與程序/執行緒/啟動邊界。正變化表示數值增加;負變化表示減少。零基準線請標記為未定義。
- 狀態:測量的基準線、不明確、觀察到改善 / 迴歸,或已驗證改善。僅保留已驗證改善給可比較的重複測量加上通過的正確性檢查。速度提升但記憶體增加是一種權衡,而非無條件的勝利。
- 未經測試的路徑、不可用的度量、雜訊、下一步行動,以及具體記錄的重播指令。清楚標示捆綁的
scripts/demo.py已知答案示範,且切勿將其數字重複用作應用程式結果。
Markdown/JSON 檔案是可攜帶的基準線;代理可使用其可用的呈現工具新增圖表。請勿依賴代管的儀表板、外部 AI 端點、專有連接器或選用的圖表工具來完成此工作流程。