Gemini Structured Outputs 与 Function Calling:什么时候该用哪一个
本文是 Google Gemini 官方文档的中文实践笔记,示例做了简化,具体模型支持范围请以原文为准。
Structured Outputs 和 Function Calling 都会用到 JSON Schema,因此很容易被混为一谈。最简单的判断标准是:
- 只想规定最终答案的形状:使用 Structured Outputs。
- 希望模型请求你的程序执行动作:使用 Function Calling。
Structured Outputs 的典型场景
例如从用户反馈中提取情感与摘要,前端或数据库需要稳定字段:
{
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "neutral", "negative"]
},
"summary": { "type": "string" }
},
"required": ["sentiment", "summary"]
}结构化输出能保证 JSON 语法和受支持 schema 的形状,但不保证语义一定正确。例如日期可能格式合法却不符合业务时间范围,所以应用层仍必须验证。
Function Calling 的典型场景
当用户说“查询订单 123”,模型返回函数名与参数;真正访问数据库、鉴权和执行操作的仍然是你的代码。标准循环是:
- 向模型提供工具声明。
- 模型决定是否调用,并返回结构化参数。
- 应用验证参数、权限和幂等性后执行。
- 将工具结果返回模型,由模型形成最终答复。
工程边界
- Schema 使用明确类型、枚举和清晰 description,避免深层嵌套。
- 不把 schema 合法等同于业务合法。
- 写操作必须二次鉴权;金额、收件人等高风险字段要独立确认。
- 工具失败应返回结构化错误,让模型决定重试、换工具或解释失败。
- 为工具调用设置次数上限,防止循环和不可控费用。
如果一个流程既要调用工具又要输出固定 JSON,可先完成工具循环,再对最终响应应用结构化输出;是否能在单次调用中组合,要检查所用模型与 API 的当前支持状态。
本文转载自 Google AI for Developers · 作者 Google,版权归原作者所有。
原文链接:https://ai.google.dev/gemini-api/docs/structured-output
抓取时间:2026年10月22日
本文采用 aggregate 索引策略。