返回路线图
简体中文约 6 分钟阅读

练习 6:Function Schema 设计(bad vs good)

examples/stage-3/06-schema-design/README.zh-Hans.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.zh-Hans.md:清楚用途、正确类型、必填字段、enum 收敛、结构化错误回传。

#延伸

  • 故意改坏 good schema:把一个 enum 拿掉、看 qwen 是否就开始挑错
  • 加第三个工具:写一个跟 convert_temperature 用途相近但边界模糊的 tool、看 LLM 怎么挑
  • ../05-error-handling/ 的 structured error pattern:结合 schema 设计 + 错误处理、production 级