用 Gemini 3.1 Pro 做结构化输出加工具调用,先看清这个兼容性问题

用 Gemini 3.1 Pro 做结构化输出加工具调用,先看清这个兼容性问题

如果你在用 Vercel AI SDK 接 Gemini,并且想同时用结构化输出(structured output)和工具调用(function calling / code execution),有一个坑值得提前说清楚——不是所有 Gemini 模型都支持这两者同时用。

背景:Gemini 3 系列的新能力

Google 在 Gemini 3 系列(包括 gemini-3-pro-previewgemini-3-flash-preview、以及现在的 gemini-3.1-pro-preview)上新增了一个特性:结构化输出可以和内置工具(Code Execution、Grounding with Google Search、URL Context)同时使用。

之前的 Gemini 2.x 系列是不支持的。你如果用 gemini-2.5-pro 或者 gemini-2.0-flash 同时开结构化输出和代码执行,会直接报错:

APICallError: Function calling with a response mime type: 'application/json' is unsupported

这是预期行为,不是 bug。Gemini 2.x 的限制。

Vercel AI SDK 里踩到的具体问题

2025年12月底到2026年1月,Vercel AI SDK 的 GitHub Issues 里出现了一批相关的 bug 报告(#11466、#11947)。问题的触发条件是这样的:

import { generateText, Output } from 'ai';
import { google } from '@ai-sdk/google';
import { z } from 'zod';

const result = await generateText({
  model: google('gemini-3-flash-preview'),
  tools: {
    code_execution: google.tools.codeExecution(),
  },
  output: Output.object({
    schema: z.object({
      answer: z.number(),
      explanation: z.string(),
    }),
  }),
  prompt: '计算前50个质数的和,展示计算过程。',
});

// 抛出 AI_NoOutputGeneratedError: No output generated.
console.log(result.output);

Google 官方文档明确写了 Gemini 3 系列支持这个组合,但 Vercel AI SDK 的实现有问题,导致 codeExecution() 工具被错误地当成客户端工具处理,最终没有拿到结构化输出,抛出 AI_NoOutputGeneratedError

另一个相关问题(#11947):用 gemini-2.5-flash 加上 Output.object() 加自定义工具(weather 之类的),会报 Function calling with response mime type application/json is unsupported。这个不是 SDK 的 bug,是模型本身的限制,但 Vercel 的文档当时没有写清楚。

当前状态

#11466 在 2026 年 1 月 7 日被关闭,对应的修复合并到了 @ai-sdk/google 里。修复内容是让 codeExecution() 不再被当作客户端工具,而是正确地作为内置工具处理。如果你用的是较新版本的 AI SDK(ai@6.x + @ai-sdk/google@3.x 及之后的版本),这个问题应该已经修掉了。

@ai-sdk/google-vertex(Vertex AI 版本)在 2 月中旬还有用户反映 streamText 结构化输出有类似的 AI_NoOutputGeneratedError,截至 2 月 19 日该 issue 还处于开放状态。

兼容性速查

这个最重要,直接列出来:

模型 结构化输出 + 代码执行/内置工具 + 自定义工具
gemini-3.1-pro-preview
gemini-3-pro-preview
gemini-3-flash-preview
gemini-2.5-pro / flash ✗(不支持) ✗(不支持)
gemini-2.0-flash ✓(需要 propertyOrdering)

如果你用的是自定义工具(不是内置工具)

自定义工具加结构化输出,只有 Gemini 3 系列支持。在 generateText + Output.object() 的模式下,Gemini 2.x 一律报错。这个限制 Vercel 的文档更新不太及时,不少人踩了这个坑才发现。

一个临时绕过方案:如果非得用 Gemini 2.5,把 generateText + Output.object() 改成 generateObject,后者在 Gemini 2.5 上是正常工作的,只是没法同时用工具了。

最后,这个兼容性矩阵可能会随着 SDK 版本更新而变化。实际使用前,最好去查一下当前版本的 @ai-sdk/google 的 changelog。


参考资料

← 返回博客列表