结构化输出遇到递归字段时怎样约束模式
结构化输出遇到递归字段时,关键不是把对象定义成“无限嵌套”,而是让每一层都长成同一个、可收敛的节点。最稳妥的做法是:固定 type、label、children 三个字段,在 children.items 中用 $ref: "#" 回指根 schema,叶子节点用空数组结束递归,再用输出预算限制实际深度。
官方地址:https://developers.openai.com/api/docs/guides/structured-outputs
- 递归结构的核心是“固定节点 + 根引用”,不是为每一层复制一套属性。
strict: true约束输出形状,但不会替你判断业务值、拒答或截断。- 空
children、节点总数和最大深度要成为明确的工程边界。
先把递归对象改成可收敛的树节点
菜单、组件树、目录和流程节点都可以抽象成树。节点字段最好保持稳定:type 表示节点种类,label 保存展示文本,children 永远是数组。没有子节点时返回 [],不要省略字段,也不要一会儿返回数组、一会儿返回对象。

| 字段 | 建议约束 | 工程意义 |
|---|---|---|
| type | 字符串枚举 | 避免下游按自由文本分支 |
| label | 必填字符串 | 保证每个节点可定位 |
| children | 必填数组 | 空数组就是递归终点 |
用根引用表达 children 的自嵌套关系
JSON Schema 不需要预先写出“第一层、第二层、第三层”。把 children.items 指向根 schema,就能让同一个节点继续包含节点。下面的例子使用 Responses API 的 text.format 形式;如果使用工具调用,则把同一思路放进工具参数 schema。
from openai import OpenAI
client = OpenAI()
schema = {
"type": "object",
"properties": {
"type": {"type": "string", "enum": ["root", "section", "item"]},
"label": {"type": "string"},
# 子节点复用根定义,表达任意层级的树结构
"children": {"type": "array", "items": {"$ref": "#"}}
},
# 空 children 表示叶子节点,所有字段都保持稳定
"required": ["type", "label", "children"],
"additionalProperties": False
}
response = client.responses.create(
model="gpt-6-astra",
input="把产品导航整理成树状节点",
text={"format": {
"type": "json_schema",
"name": "navigation_tree",
"strict": True,
"schema": schema
}},
# 给递归结果设上限,防止合法嵌套耗尽输出预算
max_output_tokens=1200
)
print(response.output_text)
这里的 $ref 只负责描述形状;它不会自动阻止模型生成很深的树。递归模式应当和业务提示一起使用,例如要求“最多五层、每个节点最多八个 children”,然后在服务端再次统计深度和节点数。
strict 只是形状约束,深度仍要靠预算管理
Structured Outputs 比 JSON mode 多了一层 schema 遵循能力,但它不能保证字段里的事实一定正确。递归响应至少要区分三种结果:正常 JSON、拒答、生成被长度或其他停止条件截断。只有第一种且完成原因正常时,才适合交给后续渲染。

落地时可把边界写成检查清单:最大深度限制渲染成本,最大节点数限制内存和数据库写入,max_output_tokens 防止结果无限增长;遇到拒答或截断则记录原因并走重试、降级或人工处理,不能把半棵树当成完整导航。
相关问题
递归 schema 一定要把 children 设成必填吗?
建议必填。叶子节点返回空数组,比缺少字段更容易让序列化、类型生成和前端渲染保持单一分支。
JSON mode 能不能代替递归 Structured Outputs?
不能完全代替。JSON mode 主要保证结果是合法 JSON,不能保证每个递归节点都符合预定义 schema。
为什么 schema 正确,页面仍可能渲染失败?
schema 只管结构,不管标签内容、节点权限和引用是否存在。渲染前仍需做业务值校验、深度限制和节点数量限制。
maps.Clone 后修改嵌套值为何影响原 map
- 上一篇
- maps.Clone 后修改嵌套值为何影响原 map
- 下一篇
- maps.Keys 与 slices.Sorted 怎样输出稳定键顺序
-
- 科技周边 · 人工智能 | 3小时前 | 人工智能 · 工具调用 ·
- 智能体工具调用失败后怎样设计可控重试
- 236浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- 多模态模型输入图片过大时如何控制视觉令牌
- 196浏览 收藏
-
- 科技周边 · 人工智能 | 7小时前 |
- 推理服务连续批处理怎样减少 GPU 空转
- 404浏览 收藏
-
- 科技周边 · 人工智能 | 11小时前 | 人工智能 · LoRa PEFT merge_and_unload 量化推理 模型合并
- LoRA 合并权重后输出变化过大应检查什么
- 404浏览 收藏
-
- 科技周边 · 人工智能 | 15小时前 |
- RAG 分块重叠过大为什么会降低检索多样性
- 409浏览 收藏
-
- 科技周边 · 人工智能 | 17小时前 | 人工智能 ·
- 合成数据能否替代真实样本:覆盖率与偏差检查方法
- 128浏览 收藏
-
- 科技周边 · 人工智能 | 19小时前 |
- 提示词版本怎么管理:样例、变量与回归集一起提交
- 111浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 向量检索 ·
- 向量检索与关键词检索怎样做混合召回
- 293浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 人工智能 ·
- 智能体评测不只看成功率:步骤、成本与恢复能力怎么量
- 290浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 388次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 469次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 476次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 420次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 244次使用
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览
-
- Canva手机闪退解决方法及适配指南
- 2026-05-25 501浏览

