Недавно Openai классно прокачали свой Structured Output, теперь вы можете передавать не только json схему, но и кастомную "граматику ответа"
это может быть как регексп выражение:
timestamp_grammar = r"^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(?:[01]\d|2[0-3]):[0-5]\d$"
response = client.responses.create(
model="gpt-5",
input="Call the timestamp_grammar to save a timestamp for August 7th 2025 at 10AM.",
tools=[{
"type": "custom",
"name": "timestamp_grammar",
"description": "Saves a timestamp in date + time in 24-hr format.",
"format": {
"type": "grammar",
"syntax": "regex",
"definition": timestamp_grammar
}
}]
)
Так и что т более сложное. Например вот определение lark-схемы которая заставляет модель генерировать сумму или разность двух чисел
start: number operator number
operator: "+" | "-"
number: /[0-9]+/
Все это работает на уровне семплирования токенов, гарантируется что ответ будет соответсвовать схеме.
Подробнее как это работает я писал тут, когда год назад openai представила json Structured output
А на скриншоте пример схемы для генерации валидной mssql запроса
это может быть как регексп выражение:
timestamp_grammar = r"^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(?:[01]\d|2[0-3]):[0-5]\d$"
response = client.responses.create(
model="gpt-5",
input="Call the timestamp_grammar to save a timestamp for August 7th 2025 at 10AM.",
tools=[{
"type": "custom",
"name": "timestamp_grammar",
"description": "Saves a timestamp in date + time in 24-hr format.",
"format": {
"type": "grammar",
"syntax": "regex",
"definition": timestamp_grammar
}
}]
)
Так и что т более сложное. Например вот определение lark-схемы которая заставляет модель генерировать сумму или разность двух чисел
start: number operator number
operator: "+" | "-"
number: /[0-9]+/
Все это работает на уровне семплирования токенов, гарантируется что ответ будет соответсвовать схеме.
Подробнее как это работает я писал тут, когда год назад openai представила json Structured output
А на скриншоте пример схемы для генерации валидной mssql запроса