结构化输出与工具调用
问题:纯 Prompt 求 JSON,成功率 85-95%——日 10 万次调用意味着 5000-15000 次失败(Markdown 包裹、尾逗号、类型错、前缀废话)。别把程序正确性寄托在模型当天心情上。
能力四级(约束力递增)
层级 | 保证 | 代表实现 |
JSON Mode | 合法 JSON(不含 schema 语义) | OpenAI json_object、DeepSeek、GLM |
JSON Schema | 严格匹配字段/类型 | OpenAI Structured Outputs、Gemini response_schema |
Function Calling | 参数匹配函数签名 | 三大家 + Qwen/Kimi/GLM/DeepSeek |
约束解码 | 生成时就剪掉非法 token 路径 | OpenAI structured(100% 保证)、Outlines/Instructor |
厂商差异:OpenAI 三级能力最全(Structured Outputs 100% schema 一致性);Gemini response_schema 强约束;Claude 无独立 JSON Mode,用 tool_use 实现(实际成功率 >99%)。
Schema 设计(比换模型更重要,+10-20% 准确率)
受限字段用 enum 而非 string(幻觉大幅下降)
每个参数写 description("ISO 8601 格式(2026-03-22T10:00:00Z)"防格式错)
显式 required;函数名无歧义(search_products 优于 search+type)
单次调用 <20 个函数,大工具集分组或两步路由
工程范式:显式协议参数 + 合理 schema + Prompt 辅助 + 业务层本地校验兜底(Pydantic/Zod 二次校验)。把 LLM 输出当数据库行对待:定义 schema、生成时强制、违反就快速失败。
Function Calling 性能(Berkeley Leaderboard Q1 2026):Claude Opus 99.2% / GPT-4o 94.3% / Gemini 85-90% / DeepSeek 79.8%。生产选型:质量优先 Claude Sonnet(性价比),高吞吐简单调用 GPT-4o Mini/Gemini Flash。
