返回路線圖
繁體中文約 6 分鐘閱讀

練習 6:Function Schema 設計(bad vs good)

examples/stage-3/06-schema-design/README.md

繁體中文 | 简体中文 | English

練習 6:Function Schema 設計(bad vs good)

對應 Stage 3 — Tool Use & Agent 入門 練習 6。

🎓 學習模式:這份 starter.py完整解答、不是 TODO skeleton。建議用主動模式——mv starter.py starter_reference.py、看 signature 不看 body、自己重寫一份 starter.py、跑 python test.py 驗證;卡 20 分鐘再回去對照 reference。完整方法論看 docs/HOW_TO_USE.md

📚 想要 chapter-length 深入版? 本 folder 的 starter 是 70-150 行 illustrative 版、聚焦 核心 pattern + 兩條 SDK path,不是進階深度教材。深度教材推薦:

#為什麼這題重要

Schema 是 prompt 的一部分、而且是模型做工具選擇時最依賴的 prompt。這題用 starter_badstarter_good 對照同一題:「把攝氏 32 度換成華氏」。

  • Bad schema:description 太短、參數都 string、沒 required、沒 enum → LLM 容易把溫度轉換丟給 process_data
  • Good schema:用途明確、value: numberunit: enum["celsius", "fahrenheit"]、required 都列好 → 穩定選到 convert_temperature

寫 schema 不要只想「人看得懂」、要想「模型能不能用它排除錯誤工具」。

#怎麼跑 — 兩條路徑

#Path A(默認、本機免費、4 個 starter)

pip install -r requirements.txt
ollama pull qwen2.5:3b
ollama serve

python starter_bad.py # 觀察壞 schema 怎麼讓 qwen 挑錯
python starter_good.py # 觀察好 schema 怎麼讓 qwen 挑對

預算:$0

#Path B(Anthropic、想看 cloud 高品質)

pip install -r requirements.txt
export ANTHROPIC_API_KEY=sk-ant-...

python starter_bad_anthropic.py
python starter_good_anthropic.py

預算:每次 ≈ $0.0005(claude-haiku-4-5、單輪 call)。

#不花錢驗證程式邏輯(mock-based)

python test.py # 驗 Path A (Ollama) starter_bad + starter_good
python test_anthropic.py # 驗 Path B (Anthropic) starter_*_anthropic

兩條 test 都用 unittest.mock、不打真 API、$0/run。每組 test 都直接檢查 schema 結構(good 有 required + enum、bad 沒有),不只是看 LLM 怎麼選。

#Bad vs Good schema 對照

設計面向BadGood
Description"Process data.""Use only to summarize structured JSON table rows. Do not use for temperature conversion."
參數型別全部 stringnumber / array / 對應實際型別
Required["value", "unit"]
Enum 收斂["celsius", "fahrenheit"]
失敗回傳簡單字串結構化 dict + retry_hint

#兩個 path 的觀察重點(教學重點)

小 model 對 schema 質量的敏感度比大 model 高——這題在 Ollama 上反而更有教學意義

觀察項Anthropic Claude haikuOllama qwen2.5:3b
Bad schema 仍能猜對中-高機率低機率(幾乎必錯)
Good schema 選對穩定穩定
差距

換句話說:寫 schema 的功夫、在小 model 上能省下換大 model 的成本。Production 想用便宜 model(qwen / mistral)?schema 必須寫到能上線跑的程度。

#延伸閱讀

更多 schema 設計規則對照 resources/schema-design-cheatsheet.md:清楚用途、正確型別、必填欄位、enum 收斂、結構化錯誤回傳。

#延伸

  • 故意改壞 good schema:把一個 enum 拿掉、看 qwen 是否就開始挑錯
  • 加第三個工具:寫一個跟 convert_temperature 用途相近但邊界模糊的 tool、看 LLM 怎麼挑
  • ../05-error-handling/ 的 structured error pattern:結合 schema 設計 + 錯誤處理、production 級