How to use this curriculum — 主動 vs 被動學習¶
給每個動手練習 folder 的 meta-instruction。如果你跳過這一頁、會把這套教材當 reference book 讀完、學到大概 60%。讀完這一頁、用對方法、學到 100%。
真實問題¶
每個練習 folder(譬如 examples/stage-3/03-react-from-scratch/)裡都有一個 starter.py——它長得像 starter、其實是完整解答。
如果你:
git clone ... && cd examples/stage-3/03-react-from-scratch
cat starter.py # 看完整解答
python starter.py # 跑通
python test.py # 全 pass
你會以為「學會了」、其實沒寫過一行 code。
這是這份教材的最大設計缺陷。下面講怎麼繞過它。
兩種學習模式¶
🟢 主動模式(推薦、學到 100%)¶
步驟:
cd examples/stage-3/03-react-from-scratch/
# 1. 讀 README、了解這題在做什麼、預期 input / output
cat README.md
# 2. 把 starter.py 改名(藏起來、等下對照用)
mv starter.py starter_reference.py
# 3. 看 starter_reference.py 的「imports + function signatures」、不看 function body
head -50 starter_reference.py
# 4. 自己寫一個新的 starter.py、function body 自己想
$EDITOR starter.py
# 5. 跑 test.py、看自己寫的能不能 pass
python test.py
# 6. 卡住超過 20 分鐘?才打開 starter_reference.py 對照
diff starter.py starter_reference.py
# 7. 寫完一輪後、看 README 的 punchline + common pitfalls、跟你的 trial 對照
重點:
- 看 signature、不看 body。imports / TOOLS_SPEC / function names + arg types 可以看;裡面怎麼實作要自己想。
- 卡 20 分鐘是健康的。卡 1 小時也健康。卡 3 小時就回去看 reference、然後默寫一遍。
- test 通過 ≠ 學會。test 通過代表 logic 對;學會代表你講得出為什麼這 13 行 ReAct loop 必要、為什麼 tool_call_id 要配對、為什麼要 max_iter。
🟡 被動模式(reference book、學到 60%)¶
步驟:
cd examples/stage-3/03-react-from-scratch/
cat README.md
cat starter.py # 讀完整解答、理解每一行
python test.py # 確認跑得起來
何時用: - 你之前寫過 ReAct loop、現在只是想看本 curriculum 是怎麼寫的、做 cross-reference - 你在找 pitfall reference(譬如 production 出 bug、想看 curriculum 提過沒) - 你是講課老師、要快速看完整套教材然後挑題目給學生
被動模式適合已經會了的人複習、不適合沒寫過的人入門。
為什麼這份教材的 starter.py 是完整解答(不是 TODO skeleton)¶
短答:v1 階段、為了快速 ship 完整可跑版本。
長答:完整 starter.py 有 3 個好處(給維護者): 1. test 直接 pass——確認 framework 整合沒漏東西 2. 不會 outdated——隨 framework 升級可以馬上 fix(不必同步維護 template) 3. 新手 onboard 快——把 repo clone 下來就能跑、降低裝環境 friction
但對學習者來講有 1 個大缺點:容易被誤用成抄答案。所以這份 HOW_TO_USE 文件存在、提醒你自己改名、自己重寫。
v2 規劃(未開始):把 starter.py 分裂成 starter_template.py(TODO skeleton)+ starter_reference.py(完整解答)、test 預設打 template、學生 fill in、卡住才看 reference。這需要重做 ~20 個 folder、預計 v2 在 docs/TESTING_PLAN.md 之後排期。
每個 stage 怎麼用這份教材¶
| Stage | 主動模式時間預算 | 被動模式時間預算 |
|---|---|---|
| Stage 3(tool use + ReAct) | 5-8 hr(每練習 1-1.5 hr) | 1-2 hr(讀過去) |
| Stage 4(agent frameworks) | 8-12 hr(每練習 2 hr) | 2-3 hr |
| Stage 6(RAG + memory) | 8-12 hr | 2-3 hr |
| Stage 7(production) | 10-15 hr | 3-4 hr |
主動模式時間是被動的 4-5 倍——這就是「卡住 + 修通」的時間成本、也是真學會的成本。如果你只有 1 週時間、選 1-2 個你覺得最重要的練習走主動模式、其他被動模式過。
我自己(curriculum 作者)跑驗證踩到的 bug¶
跑 verification(2026-05-13)發現我寫的 starter / test 本身有 6 個 bug:
- operator precedence in test (
and比or緊) - ChromaDB collection name length (Chroma 1.0 break、'kb' 太短)
- EphemeralClient state leak 跨 test fixture
- i18n key mismatch(test 用中文 query、starter db 用英文 key)
- Smolagents
@tool要求 Google-style docstringArgs:區塊 - Python 3.14 + tiktoken/regex 無 wheel(CrewAI 在 3.14 裝不起來)
這對你的意義:當你做主動模式、卡住時,有可能不是你錯、是教材有 bug。提 issue 上來、我會修。Bug 修在 commit 50c3bf8。
練習 checkpoint(每練習做完問自己這 3 題)¶
不要光看 starter.py 過去、問自己:
- 「為什麼」:這份 code 為什麼這樣寫、不那樣寫?(譬如 ReAct loop 為什麼必須把 assistant response 接回 messages?沒接會怎樣?)
- 「拿掉 X 會怎樣」:拿掉
max_iter、拿掉tool_call_id、拿掉cache_control,runtime 會出什麼問題? - 「production 怎麼改」:這份 demo code 上 production 還缺什麼?(提示:observability / eval / retry / auth 通常都缺)
回答得出來 = 真學會了。回答不出來 = 只是讀過。
進入條件:每個 Stage 開始前自我檢查¶
不要直接從 Stage 4 開始——除非 Stage 3 的 6 個練習你每個都用主動模式寫過 1 次。
- Stage 4 前:必須能不查文件寫出 13 行 ReAct loop(Stage 3 練習 3)
- Stage 6 前:必須能講出為什麼 schema 要寫 enum + required(Stage 3 練習 6)
- Stage 7 前:必須會用 mock 寫 LLM unit test(Stage 3 練習 5 + 任何 Stage 4)
沒過 checkpoint 直接跳級、後面會卡住、回頭重做更慢。
如果你卡住¶
順序:
- 再讀一次 README 的 pitfall + punchline — 80% 的卡住來自漏看某個關鍵設計
- 打開
examples/stage-5/tool-calling-tutor/skill(裝進 Claude Code)— tool calling 相關的卡住、4-symptom triage 帶你診斷 - 看
starter_reference.py(你改名藏起來的那個)— 對照你寫的差別、找出哪裡邏輯漏 - 看 GitHub issue 有沒有人問過
- 開 issue — 帶上你的 code + 你看到的錯誤、我會回
絕對不要:抄 starter_reference.py 就走。沒寫過 = 沒學會。
給維護者:v2 path¶
v2 把 starter.py 拆成 template + reference 的計畫:
- 每個 folder 多 2 個檔案:
starter_template.py(TODO skeleton)+starter_reference.py(answer) test.py預設打starter_template.py、有 env var 切到 reference 對照- README 多 1 段 "Learning mode" 解釋
- 約 20 個 folder × 3 file changes = 60 個檔案
如果有人想接 v2、歡迎 PR。對應 issue / branch 等決定後開出來。