Gemini: 可选的 JSON Schema 类型被序列化为 FunctionDeclaration.parameters 并被拒绝

作者: saitewasreset创建于 2026年9月9日更新于 2026年9月9日

□ 总结

Gemini 提供商发送通用 JSON Schema 工具参数通过 `功能宣言.参数 ' 。

当一个计划包含一个无效的JSON Schema类型,例如:

贾森 { "类型": ["弦","null"] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


Gemini拒绝请求,因为`功能声明.参数 ' 使用
Gemini的基于 OpenAPI 的 “ schema ” ,其中“类型”是一个 scalar enum 而不是一个
阵列。

请求在HTTP 400模型推断前失败 :

页:1
收到无效的JSON有效载荷 。 未知名称“ 类型 ” 。
工具 [0]. 函数 声明 [0]. 参数. 属性 [1]. 值. items. 属性 [3]. 值:
Proto 字段没有重复, 不能开始列表 。

以 LiteLLM v1.8.10 可复制, 当前的寄存器将执行 1d09e38ef9b756ab710c296350e551f6e178406d'.

□ 函数声明的来源

原始功能为: [`GitHub.com/voocel/ainovel-cli'](https://GitHub.com/voocel/ainovel-cli)。

函数声明在此定义:

https://GitHub.com/voocel/ainovel-cli/blob/fc1785818660da2d729616842fb475cbbccc0136e/内部/tools/audit foundation.go#L22-L48

特别是,`问题'被宣布为无效:

开始 计划 财产( E) "建议", {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}什么? 可忽略( N) 计划 字符串( “ Q; 无效 ) , , (中文(简体) ). 。 必需( )


将签订合同。 Nullable's 转换为 JSON Schema 联盟 :

https://GitHub.com/voocel/ainovel-cli/blob/fc1785818660da2d729616842fb475cbcc0136e/internal/llmcontract/contract.go#L158-L164

等效输出 :

贾森
{
"建议":{
"描述":"推荐修改方向;无需建议时为"无"".
"类型": ["弦","null"]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

AINovel v0.7.9目前取决于`GitHub.com/voocel/litellm v1.8.10'。

□ 最小复制

开始 主软件包

导入( E) 内容 "日志" "欧"

"GitHub.com/voocel/litellm" (中文(简体) ). “GitHub.com/vocel/litellm/提供商/Gemini” (中文(简体) ).

func 主 () { apiKey := os.Getenv ("GEMINI API KEY") (中文(简体) ). 如果apiKey == ""{ 记录。 Fatal ("GEMINI API KEY是需要的"). {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

型号 := os.Getenv ("GEMINI MODEL") 如果型号为"" { 型号 = “Gemini-3.8-flash” {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

工具,错误:=litellm.NewToole () "审计 成立", "审计坚持了语义一致性的基础数据", 地图 [字符串] 任何{ "类型":"对象", "财产":地图[字符串] 任何{ "指印":地图[字符串]任何{ "类型":"弦", {\fn华文楷体\fs16\1cHE0E0E0} "准备": 地图[字符串] any{ "类型":"boole", {\fn华文楷体\fs16\1cHE0E0E0} "摘要":地图[字符串] Any{ "类型":"弦", {\fn华文楷体\fs16\1cHE0E0E0} “ 问题” : 地图[ 字符串] any{ "类型":"阵", “项目”:地图[字符串] "类型":"对象", "财产":地图[字符串] 任何{ “ 艺术” : 地图 [字符串] 任何{ "类型":"弦", {\fn华文楷体\fs16\1cHE0E0E0} "说明":地图[字符串] any{ "类型":"弦", {\fn华文楷体\fs16\1cHE0E0E0} "证据": 地图[字符串] Any{ "类型":"弦", {\fn华文楷体\fs16\1cHE0E0E0} "建议":地图[字符串] "类型": []string{"string","null"}, {\fn华文楷体\fs16\1cHE0E0E0} {\fn华文楷体\fs16\1cHE0E0E0} "需要": [] 字符串{ "艺术", "描述", "证据" . . . . . . .