用 Claude Code 的 Andrej Karpathy Skill:把 LLM 寫程式常見陷阱一次擋掉(附可複製指令)
這一年多我一直在研究怎麼讓 LLM 寫出的程式碼比較像「人」寫的,而不是那種看起來很整齊但邏輯漏洞百出的垃圾。最近在 GitHub 上看到一個很有意思的東西,是基於 Andr…
目錄
背景:這個能力是在解什麼問題
Claude Code 在沒有任何額外設定的情況下,常常會「自我感覺良好」地寫出看似合理但邏輯漏洞百出的程式碼。這不是模型變笨,而是它沒有被告知「人類寫程式時會踩的坑」。
Andrej Karpathy 在 2024 年底整理了一份〈LLM 寫程式常見陷阱〉,Forrest Chang 把它轉成可直接掛進 Claude Code 的 Skill。核心概念很單純:與其每次在對話框裡提醒「別忘了邊界檢查」「記得關檔案」,不如把這些規則做成一個獨立檔案,讓 Claude 每次寫程式前都先讀一遍。
這份 Skill 補上了「人類經驗」這一塊。模型知道 Python 語法,但不知道「list.pop() 在空 list 會炸」「浮點數比較要用 epsilon」。把這些經驗變成規則,就能在第一時間擋掉 80% 的低階錯誤。
為什麼一人公司會在意
我一個人接案做藝術塗料施工,同時維護電子書工廠和社群貼文排程。時間被切成碎片,沒空慢慢修 bug。試著把 Karpathy Skill 掛進 Claude Code 後,最明顯的差異是:
- 自動報價腳本:原本每改一次需求就要手動補上
if not os.path.exists(),現在 Claude 會主動加上。 - 電子書工廠:處理圖片批次轉檔時,不再忘記
Image.open()後要.close()。 - Threads 內容產生器:以前偶爾會因為字串編碼錯誤導致排程失敗,現在 Claude 會自動加上
.encode('utf-8')。
省下來的時間不是「幾小時」這種誇張數字,而是「今天改完需求直接下班」跟「晚上 10 點還在修 bug」的差別。
具體步驟(可直接跟做)
前置條件
- Claude Code 0.2.35 以上(
claude --version檢查) - 已登入 Anthropic API
- 專案資料夾裡已有
.claude/目錄(沒有的話跑一次claude init就會自動建立)
步驟 1:下載 Skill 檔
cd /path/to/your/project
mkdir -p .claude/skills
curl -L https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/karpathy-python.md \
-o .claude/skills/karpathy-python.md
預期輸出:終端機顯示 200 OK,檔案大小約 8 KB。
步驟 2:讓 Claude 認得這個 Skill
編輯 .claude/CLAUDE.md,在最後面加上:
## 啟用 Karpathy Python Skill
- 每次寫 Python 前先讀 `.claude/skills/karpathy-python.md`
- 遇到任何邊界條件、資源管理、浮點數比較,直接套用裡面的規則
存檔後,Claude Code 會在下次啟動時自動載入。
步驟 3:測試
在同一個專案裡隨便開一個 test.py,輸入:
# 故意留個洞
nums = []
last = nums.pop()
然後執行:
claude code review test.py
預期輸出:Claude 會立刻指出 IndexError: pop from empty list,並建議加上:
if nums:
last = nums.pop()
else:
last = None
步驟 4:進階用法(搭配 MCP)
如果你想讓 Skill 只在特定情境觸發,可以在 .claude/mcp.json 加一段:
{
"skills": {
"karpathy-python": {
"trigger": ["*.py", "requirements.txt"],
"priority": 10
}
}
}
這樣 Claude 只有在碰到 Python 相關檔案時才會載入,避免 context 被無關規則撐爆。
常見坑
-
路徑錯誤
有人把karpathy-python.md放在專案根目錄,結果 Claude 找不到。記得一定要放在.claude/skills/底下,檔名也要完全一致(大小寫有差)。 -
Skill 互相覆蓋
如果你已經有自己的 Python Skill,兩邊的規則可能衝突。解決方法:在CLAUDE.md裡用優先順序標記,例如:1. 先看 karpathy-python.md 2. 再看 my-python-style.md -
中文註解被吃掉
檔案是 UTF-8 沒錯,但 Windows 使用者如果存成 Big5,Claude 會直接當掉。用file -i karpathy-python.md檢查編碼,確保是utf-8。 -
版本太舊
Claude Code 0.2.34 以前不支援多檔 Skill。升級後要重跑一次claude init,否則不會讀到新目錄結構。
進階延伸
-
混搭其他 Skill
把karpathy-python.md和fastapi-best-practice.md並用,Claude 會自動交叉檢查:FastAPI 路由寫好了,但忘記response_model嗎?Karpathy 規則會提醒。 -
自動排程
用 GitHub Actions 每天凌晨跑一次claude code review --all,把報告寄到 Slack。你一早醒來就能看到昨晚寫的 code 有沒有踩坑。 -
轉成公司內規
把 Skill 裡的規則再細分「必須遵守」「建議遵守」「參考就好」三個等級,讓 junior 工程師也能快速對齊 senior 的習慣。
官方文件 / 書本章節
書中 Ch8 提到:「Skill 的三層漸進式架構解決了 CLAUDE.md 超過 200 行就失效的問題」。這份 Karpathy Skill 就是標準範例——把「人類經驗」拆出來,只在需要時載入,省下 82-98% context 空間。
大全 Ch26 的實測數據也顯示:「加了 Karpathy Skill 後,Claude 在 100 次 Python 任務中,邊界錯誤從 31 次降到 4 次」。雖然我沒有跑那麼多次,但日常用起來確實少掉一堆 IndexError 和 ResourceWarning。
下一步 / 延伸
- 把同一份概念套到其他語言:社群已經有人在整理
karpathy-js.md、karpathy-go.md。 - 讀者如果想貢獻,可以直接 fork Forrest 的 repo,補上自己踩過的坑。
- 把 Skill 變成 VS Code 擴充功能,存檔時自動跑
claude code review,即時標紅。
反正 AI 工具每天都在變,但「先把人類經驗寫成規則」這件事不會過時。先讓今天的工作流順一點,明天再來煩惱下一個新工具。