TL;DR:直接让 LLM"输出 JSON"不可靠(markdown 代码围栏、废话、漏字段、类型漂移)。可靠做法是把"交卷"伪装成 tool call——model.with_structured_