grok4 中文文档 下载 App

Grok4 结构化输出 — Structured Outputs JSON 格式返回

什么是结构化输出

结构化输出(Structured Outputs)让 Grok 模型直接返回符合指定 JSON Schema 格式的数据,而不是自由文本。这样你的程序可以直接解析 JSON 使用,不需要处理模型输出的文本格式混乱、Markdown 包裹、多余解释等问题。

对于开发者来说,这是非常实用的能力——把 AI 集成到程序中时,结构化输出让数据对接变得轻松可靠。

为什么需要它

没有结构化输出时,让 Grok 返回 JSON 可能得到:

这是你要的 JSON:

{"name": "Grok", "version": "4.7"}

希望对你有帮助!

你需要:

  1. 从文本中提取代码块
  2. 去掉 Markdown 标记
  3. 解析 JSON
  4. 处理可能的格式错误

有了结构化输出,直接得到:

{"name": "Grok", "version": "4.7"}

使用方式

在 API 请求中指定 response_format

response = client.chat.completions.create(
    model="grok-4.7",
    messages=[
        {"role": "user", "content": "列出三种 AI 大模型的名称、开发商和发布年份"}
    ],
    response_format={
        "type": "json_object"
    },
)

使用 JSON Schema 约束

可以指定更精确的 schema:

response_format={
    "type": "json_schema",
    "json_schema": {
        "name": "ai_models",
        "schema": {
            "type": "object",
            "properties": {
                "models": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {"type": "string", "description": "模型名称"},
                            "developer": {"type": "string"},
                            "release_year": {"type": "integer"}
                        },
                        "required": ["name", "developer", "release_year"]
                    }
                }
            },
            "required": ["models"]
        }
    }
}

Grok 会严格遵守 schema

Grok 会返回完全符合你指定的 JSON Schema 的数据:

与函数调用的关系

结构化输出和函数调用是两种不同但相关的能力:

维度结构化输出函数调用
目的让模型返回特定格式的数据让模型触发外部工具/API
返回内容符合 schema 的 JSONtool_calls 请求(包含函数名和参数)
下一步你的程序直接用你的程序执行函数后把结果返回模型
适用场景需要模型整理数据需要模型执行操作

两者可以配合使用:函数调用的参数也是 JSON Schema 定义的,本质上也是结构化输出。

实际应用场景

场景 1:数据提取

从非结构化文本中提取结构化数据:

用户:从这段新闻中提取:标题、发布日期、涉及的公司、核心事件

Grok 返回:

{
  "title": "xAI 发布 Grok 4.7",
  "publish_date": "2026-09-22",
  "companies": ["xAI", "SpaceX"],
  "core_event": "发布新一代大模型,强化 Agent 能力"
}

场景 2:内容分类

对内容打标签:

用户:给这条产品描述打标签:[可填写的标签列表]

场景 3:表单填写辅助

从自然语言输入中提取表单字段:

用户:我叫张三,明天下午 3 点到 5 点有空,想去北京朝阳区找你

Grok 返回:

{
  "name": "张三",
  "available_time": "2025-10-15 15:00-17:00",
  "location": "北京朝阳区"
}

场景 4:多步骤工作流

作为自动化管道的数据中转:

步骤 1:用户输入自由文本
步骤 2:Grok 结构化输出 → JSON
步骤 3:下游系统解析 JSON 执行对应操作

最佳实践

schema 要精确但不要过于复杂

太复杂的 schema 可能导致 Grok 难以正确填充。建议:

处理 Grok 可能的不足

虽然结构化输出比普通输出可靠,但仍可能:

建议在应用层做:

  1. JSON 解析校验
  2. 字段完整性检查
  3. 类型转换和默认值处理

结合 function calling

在一个请求中同时使用 tools 和 response_format 可能有冲突。建议:

让 prompt 与 schema 配合

虽然 schema 约束了输出,但 prompt 中仍应清晰描述你想要的内容。schema 约束格式,prompt 决定内容。

常见问题

结构化输出的额外成本

没有额外费用。按普通输出 token 价格计费。

Grok 会不会返回不符合 schema 的内容

理论上不会。但实际使用中,极端复杂的 schema 或信息不足时可能出现偏差。建议应用层做防御性处理。

可以嵌套 JSON 吗

可以。JSON Schema 支持任意深度的嵌套。但为了可靠性,建议控制在 3-4 层以内。

支持哪些类型

支持所有标准 JSON Schema 类型:

更复杂的约束(如正则 pattern)可能效果不稳定,建议尽量用简单约束。