Community程式設計與開發github.com

瓶頸透鏡

對 Python 與 Node.js 工作負載進行效能分析,找出 CPU、記憶體與延遲瓶頸,並以執行階段證據進行相容的改善前/後比較、檢查輸出正確性及評估迴歸。適用於調查應用程式執行緩慢、資源使用過度,或驗證最佳化結果;僅靠原始碼審查無法取得實測證據。

瓶頸透鏡 是什麼?

「瓶頸透鏡」是一套針對 AI 代理(如 Claude Code、Cursor、Codex)設計的專業技能,專注於 Python 與 Node.js 應用程式的效能剖析與迴歸驗證。它能執行基準測試、採集 CPU 與記憶體配置分析,並透過統計方法比較改善前後的數據,同時驗證輸出正確性,確保最佳化不僅提升速度,也不會破壞功能。此技能支援 Python 3.10+ 與 Node.js 22+,並提供統一的 JSON 格式報告與 Markdown 摘要,可跨不同代理平台使用。其工作流程包含:協商並定義工作負載、收集未經修飾的基準證據、診斷並提出改善建議、在授權範圍內進行最佳化與驗證,最後提供完整的結果報告。值得注意的是,它要求代理僅使用本地收集的工具,不預設上傳原始碼或追蹤資料,且必須在使用者明確授權後才能執行程式碼或修改應用程式,強調安全性與正確性。此技能特別適用於需要可重複、可比較、以實測為基礎的效能調校場景。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Pheem49/agent-skills/tree/HEAD/bottleneck-lens

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

瓶頸透鏡 是做什麼的?

找出瓶頸。證明改善。

保持收集資料在本地端;預設不上傳原始碼、追蹤記錄或報告。可攜式指令與捆綁腳本不依賴特定代理廠商。解析捆綁路徑時請相對於此 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 端點、專有連接器或選用的圖表工具來完成此工作流程。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能