Firebase AI SDK 中 BooleanSchema 完全指南:用 Schema.boolean() 约束 Gemini 结构化输出
开发工具后端【免费下载链接】firebase-js-sdkFirebase Javascript SDK项目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk点击查看免费下载BooleanSchema是 Firebase AI Web SDKfirebase/ai中用于描述布尔类型字段的 Schema 类它在使用 Gemini 模型做结构化输出、函数调用参数声明等场景中负责约束模型只能生成true/false这样的布尔值。本文以官方 API 参考文档 docs-devsite/ai.booleanschema.md 为主体结合仓库内 schema-builder.ts 源码与测试用例带你掌握BooleanSchema的类结构、构造参数、序列化原理以及它在responseSchema与函数声明中的实战用法。一、BooleanSchema 在 SDK 中的定位在 Firebase AI SDK 的 Schema 体系中BooleanSchema是面向boolean类型的专用 Schema 类。它的官方定义只有一句话Schema class for boolean types.它属于 SDK 提供的七种具体 Schema 类型之一TypedSchema联合类型IntegerSchema、NumberSchema、StringSchema、BooleanSchema、ObjectSchema、ArraySchema、AnyOfSchema完整定义见 schema-builder.tsexport type TypedSchema | IntegerSchema | NumberSchema | StringSchema | BooleanSchema | ObjectSchema | ArraySchema | AnyOfSchema;所有 Schema 类型最终都可以通过JSON.stringify()转换成 Agent Platform Gemini API 与 Gemini Developer API REST 端点认可的 JSON 字符串且这一转换在调用 SDK 方法时会自动完成。二、类签名与继承关系根据参考文档BooleanSchema的完整类型签名为export declare class BooleanSchema extends Schema即它继承自抽象基类 Schema而Schema实现了SchemaInterfaceSchemaInterface extends SchemaSharedSchemaInterface。继承链中每一层贡献的能力如下SchemaShared提供anyOf、format、description、title、items、minItems、maxItems、properties、propertyOrdering、enum、example、nullable、minimum、maximum等共享属性见 types/schema.tsSchemaInterface追加可选的type字段SchemaType见 types/schema.tsSchema抽象基类实现属性存储、默认值填充与toJSON()序列化逻辑并提供一组静态工厂方法Schema.boolean()、Schema.string()、Schema.object()等。SchemaType.BOOLEAN的常量值为字符串boolean见 types/schema.ts它与 OpenAPI 规范中的布尔数据类型一一对应。三、构造函数与 SchemaParams 参数详解BooleanSchema唯一的公开入口是构造函数签名如下constructor(schemaParams?: SchemaParams);schemaParams类型为 SchemaParams它继承自SchemaSharedSchemaInterface因此创建布尔 Schema 时可以传入以下常用参数均来自SchemaShared定义见 types/schema.ts参数类型说明nullableboolean该字段是否可空。默认值为false未显式传入时由基类构造函数强制填充descriptionstring字段描述帮助模型理解该字段的语义titlestring字段标题用于说明字段意图可在一定程度上引导模型exampleunknown字段示例值例如trueformatstring字段格式注意使用 Gemini Developer APIGoogleAIBackend时format只能取enum或date-time否则请求会失败anyOfSchemaInterface[]允许该字段匹配多个子 Schema 之一与布尔类型并存时用于表达多态字段enumstring[]枚举值对布尔类型通常不使用任意自定义键unknownSDK 允许传入尚未正式收录的其他 Schema 属性基类Schema的构造函数schema-builder.ts在初始化时做了两件关键事情类型校验如果既没有type也没有anyOf会抛出AIError错误码AIErrorCode.INVALID_SCHEMA消息为A schema must have either a type or an anyOf array of sub-schemas.默认值填充nullable未显式指定时被强制置为false保证序列化输出中始终包含该字段。由于BooleanSchema的构造函数内部会合并type: SchemaType.BOOLEANexport class BooleanSchema extends Schema { constructor(schemaParams?: SchemaParams) { super({ type: SchemaType.BOOLEAN, ...schemaParams }); } }所以调用方不需要也不能手动指定type只需传入描述性参数即可。四、创建方式一直接 new BooleanSchema()虽然BooleanSchema是公开导出的类可以直接实例化但更推荐使用Schema的静态工厂方法见下文。直接实例化时等价写法为import { BooleanSchema } from firebase/ai; const schema new BooleanSchema({ nullable: false, description: Whether the user is active., title: Is Active });五、创建方式二Schema.boolean() 静态方法推荐参考文档中 Schema.boolean() 的签名是static boolean(booleanParams?: SchemaParams): BooleanSchema;其源码实现schema-builder.ts仅仅是对new BooleanSchema()的一层封装static boolean(booleanParams?: SchemaParams): BooleanSchema { return new BooleanSchema(booleanParams); }仓库测试用例 schema-builder.test.ts 验证了最简单的用法及其序列化结果it(builds boolean schema, () { const schema Schema.boolean({ title: Is Active }); expect(schema.toJSON()).to.eql({ type: boolean, nullable: false, title: Is Active }); });可以看到即使只传了title序列化结果也会自动带上type: boolean和默认的nullable: false。六、序列化原理toJSON() 与 SchemaRequestBooleanSchema本身没有覆写toJSON()直接复用基类 Schema.toJSON() 的逻辑。其序列化规则为始终输出type字段遍历实例自身的可枚举属性凡是值不为undefined的属性都会写入结果唯一的例外是required字段只有在type object时才输出避免非对象 Schema 携带无意义的required。最终产物符合SchemaRequest接口types/schema.ts即后端请求所要求的最终 Schema 格式。因此你可以在调试时直接调用schema.toJSON()查看即将发送给后端的完整 JSON{ type: boolean, nullable: false, title: Is Active }七、实战在结构化输出与函数声明中使用布尔 Schema7.1 作为 responseSchema 约束模型输出BooleanSchema最常见的用途是配合GenerationConfig.responseSchema使用类型定义见 types/requests.ts。responseSchema接受TypedSchema | SchemaRequest并且只有当responseMimeType为application/json或text/x.enum时才生效。例如让模型直接返回一个布尔判定结果const ai getAI(app, { backend: new GoogleAIBackend() }); const model getGenerativeModel(ai, { model: gemini-2.0-flash, generationConfig: { responseMimeType: application/json, responseSchema: Schema.boolean({ description: Whether the product review is positive. }) } }); const result await model.generateContent(The product is amazing!); // result 的文本内容将被约束为 true 或 false需要注意的是若同时设置responseSchema与responseJsonSchemaSDK 的配置校验会直接抛错对应测试用例见 generative-model.test.ts二者只能取其一。7.2 作为对象/数组 Schema 的字段布尔 Schema 更常见的是嵌套在Schema.object()或Schema.array()中描述复合结构的字段。仓库测试用例 schema-builder.test.ts 展示了在对象中混合使用布尔字段const schema Schema.object({ properties: { someInput: Schema.string(), someBool: Schema.boolean(), anotherInput: Schema.integer() }, optionalProperties: [someBool], title: Ordered Object });在更复杂的嵌套示例中布尔 Schema 还可以携带description与nullableschema-builder.test.tsisCapital: Schema.boolean({ nullable: false, description: This doesnt make a lot of sense but its a demo, title: Is it a capital? })序列化后布尔字段会以type: boolean出现在对应properties中如果该字段不在optionalProperties列表里还会被写入对象的required数组。7.3 在函数调用Function Calling参数中声明布尔入参BooleanSchema同样可用于FunctionDeclaration.parameters让模型在调用函数时严格传入布尔参数。例如在chat-session.test.ts中出现过的函数声明模式chat-session.test.tsconst model getGenerativeModel(ai, { model: gemini-2.0-flash, tools: [{ functionDeclarations: [{ name: set_feature_flag, description: Enable or disable a feature flag., parameters: Schema.object({ properties: { enabled: Schema.boolean({ description: Whether to turn the flag on. }) } }) }] }] });八、相关文档与源码导航若想继续深入可以参考以下仓库内的对应资料类参考文档ai.booleanschema.md、基类 ai.schema.md、参数接口 ai.schemaparams.md、共享属性 ai.schemashared.md、最终请求格式 ai.schemarequest.md核心实现packages/ai/src/requests/schema-builder.tsBooleanSchema定义位于第 200-211 行Schema.boolean()工厂方法位于第 150-152 行类型定义packages/ai/src/types/schema.tsSchemaType、SchemaParams、SchemaRequest、SchemaInterface测试用例packages/ai/src/requests/schema-builder.test.ts覆盖布尔 Schema 的独立构造、数组元素、对象字段与复杂嵌套场景。小结BooleanSchema虽小却是 Firebase AI SDK Schema 体系中不可或缺的一环它通过继承Schema获得了类型校验、默认值填充与 JSON 序列化能力通过Schema.boolean()工厂方法可以零成本创建并能在responseSchema、对象属性与函数声明三个层面约束模型输出。掌握它的构造参数与序列化行为是准确控制 Gemini 结构化输出的第一步。赞分享开发工具后端【免费下载链接】firebase-js-sdkFirebase Javascript SDK项目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk点击查看免费下载相关推荐用 Guidance 约束大模型输出LlamaIndex GuidancePydanticProgram 结构化输出实战指南用 Guidance 约束大模型输出LlamaIndex GuidancePydanticProgram 结构化输出实战指南 GuidancePydantic人工智能RAG大模型Firebase AI SDK ArraySchema 详解用 Schema.array 声明数组结构化输出Firebase AI SDK ArraySchema 详解用 Schema.array 声明数组结构化输出 本篇指南聚焦 Firebase AI Web S开发工具后端Guardrails Formatters 完全指南通过 BaseFormatter 与 JsonFormatter 实现结构化输出的约束解码Guardrails Formatters 完全指南通过 BaseFormatter 与 JsonFormatter 实现结构化输出的约束解码 导读 FormAI 安全治理模型安全AI 应用上一篇3步搞定演唱会抢票难题DamaiHelper从入门到精通实战指南下一篇KK-HF Patch完整指南Koikatu/Koikatsu Party增强补丁深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深入解析 Wing 的 for..in 循环:从语言语义到 tf-aws 编译产物与 hangar 快照验证

深入解析 Wing 的 for..in 循环:从语言语义到 tf-aws 编译产物与 hangar 快照验证

编程语言编译器云原生语言运行时 【免费下载链接】wing A programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡ 项目地址: https://gitcode.com/gh_mirrors/wi/wing 点击查看 免…

2026/10/15 3:13:37 阅读更多 →
从安装到上线:langchain-openai 实战指南,一篇打通 OpenAI 接入 LangChain 的全部场景

从安装到上线:langchain-openai 实战指南,一篇打通 OpenAI 接入 LangChain 的全部场景

从安装到上线:langchain-openai 实战指南,一篇打通 OpenAI 接入 LangChain 的全部场景 【免费下载链接】langchain The agent engineering platform. 项目地址: https://gitcode.com/GitHub_Trending/la/langchain langchain-openai 是 LangChain…

2026/10/15 3:13:37 阅读更多 →
UE4反射系统深度解析:SSR、平面反射与反射捕获的协同机制

UE4反射系统深度解析:SSR、平面反射与反射捕获的协同机制

1. 项目概述:这不是教科书里的“反射”,而是UE4引擎里真正跑得起来的光路逻辑“【UE4】反射系统分析(二)”这个标题,乍看像一篇技术续章,但如果你正在调试一个水面泛着奇怪紫边的游艇场景,或者发…

2026/10/15 3:13:37 阅读更多 →

最新新闻

一种可快速恢复的Zabbix高可用架构设计

一种可快速恢复的Zabbix高可用架构设计

做运维的朋友们可能都有过这样的深夜惊魂:好容器完成了监控的Server、Proxy的部署、告警的收敛,监控的覆盖率也达标了,结果承载Zabbix Server和PostgreSQL的机器突然宕机。那一刻,不是“少看几张图”的问题,而是整个团…

2026/10/15 4:01:45 阅读更多 →
2026网站创建用什么ai建站系统?科技赋能才能事半功倍!

2026网站创建用什么ai建站系统?科技赋能才能事半功倍!

2026网站创建用什么AI建站系统?科技赋能才能事半功倍!中国信通院2026年初发布的《中小企业数字化发展白皮书》显示,国内超六成中小企业将“低成本快速搭建线上阵地”列为数字化转型首要需求,AI建站系统凭借低门槛、高效率、全链路…

2026/10/15 4:01:45 阅读更多 →
做了这么久技术博主,我从后台私信里看透了这几种人

做了这么久技术博主,我从后台私信里看透了这几种人

做技术专栏这么久,后台私信几千条,我现在是分情况处理的——但一开始不是。 刚开号那会儿我每条都回。有人问问题,我认认真真写解答;有人要加微信,我不好意思拒绝;有人半夜甩过来一整段代码让帮忙看&#x…

2026/10/15 4:01:45 阅读更多 →
从零开始用Canvas开发五子棋网页游戏:技术选型、AI博弈与实战解析

从零开始用Canvas开发五子棋网页游戏:技术选型、AI博弈与实战解析

1. 项目设计与技术选型思路1.1 这个项目到底在做什么五子棋网页版小游戏,是前端练手项目里出现频率极高的一种。它看起来简单,但如果把完整需求列出来,会发现麻雀虽小五脏俱全:棋盘渲染、落子交互、胜负判定、悔棋、重置、人机对战…

2026/10/15 4:01:45 阅读更多 →
Superpowers:基于浏览器的开源协作游戏开发平台

Superpowers:基于浏览器的开源协作游戏开发平台

最近好几个做独立游戏的朋友都在问同一个词:superpowers。我一开始以为他们说的是某款超能力题材的新游戏,直到有位朋友发来一张浏览器截图,我才反应过来——他们问的是开源协作游戏开发工具 Superpowers,一个真正能让你不装全家桶…

2026/10/15 4:01:45 阅读更多 →
2026大厂AI薪资大起底:普通研发卷到40万,Agent开发狂撒80万年薪?

2026大厂AI薪资大起底:普通研发卷到40万,Agent开发狂撒80万年薪?

2026年大厂AI薪资揭秘:普通研发岗薪资锚定40万左右,但竞争激烈;AI Agent开发岗(50-80K15薪)对标SSP,高薪且门槛低,企业抢“应用落地”人才;顶级AI科学家包揽80-220万年薪。求职建议分…

2026/10/15 4:00:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →