{"id":479203,"date":"2026-05-10T09:43:38","date_gmt":"2026-05-10T09:43:38","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=479203"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=479203","title":{"rendered":"Structured Outputs \u0431\u0435\u0437 \u0438\u043b\u043b\u044e\u0437\u0438\u0439: \u043a\u0430\u043a OpenAI, Gemini \u0438 xAI \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044e\u0442 JSON\u00bb-\u0441\u0445\u0435\u043c\u044b"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>Structured Outputs, \u0438\u043b\u0438 structured decoding, \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c LLM \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435: \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 JSON Schema. \u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 constrained decoding: \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u0431\u044b \u043a \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0441\u0445\u0435\u043c\u044b. \u0425\u043e\u0440\u043e\u0448\u0435\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 vLLM: [<a href=\"https:\/\/vllm-project.github.io\/2025\/01\/14\/struct-decode-intro.html\" rel=\"noopener noreferrer nofollow\">Structured Decoding in vLLM: a gentle introduction<\/a>].<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0438\u0441\u0442\u0435\u043c \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430: API-\u0432\u044b\u0437\u043e\u0432\u0430, \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0443, \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e LLM-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442 \u0432 \u0441\u0442\u0438\u043b\u0435 \u00ab\u043e\u0442\u0432\u0435\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c JSON\u00bb \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u044e\u0447\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 JSON \u0438\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e enum. Structured Outputs \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443: \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0444\u043e\u0440\u043c\u0430\u0442\u0443.<\/p>\n<p>\u041a Structured Outputs \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0416\u0451\u0441\u0442\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0432\u0435\u0442\u0430: \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0445\u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u0434\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041d\u043e \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f: \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u0447\u0430\u0441\u0442\u043e \u0432\u0430\u0436\u0435\u043d \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0430\u043c \u0442\u0435\u043a\u0441\u0442 \u043e\u0442\u0432\u0435\u0442\u0430. \u0421 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0435\u0439 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u2014 \u0447\u0435\u0440\u0435\u0437 evals, \u043f\u043e\u0434\u0431\u043e\u0440 \u0441\u0445\u0435\u043c\u044b, \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0448\u0430\u0433\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<blockquote>\n<p>\u0412\u0430\u0436\u043d\u043e: Structured Outputs \u043d\u0435 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 OpenAI \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c JSON \u043f\u043e \u0432\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435: safety refusal, incomplete response \/ truncation \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 edge cases. \u0418\u0445 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f. \u0421\u043c. [<a href=\"https:\/\/platform.openai.com\/docs\/guides\/structured-outputs?api-mode=responses\" rel=\"noopener noreferrer nofollow\">Structured model outputs<\/a>].<\/p>\n<\/blockquote>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 JSON Schema. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f [<a href=\"https:\/\/abdullin.com\/schema-guided-reasoning\/\" rel=\"noopener noreferrer nofollow\">Schema-Guided Reasoning<\/a>], \u0433\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Pydantic-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0445\u043e\u0434\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u043c\u044b \u043f\u0440\u043e\u0448\u043b\u0438\u0441\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c (OpenAI, Gemini, xAI) \u0441 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u0430\u043c\u0438: \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0445\u0435\u043c\u044b.<\/p>\n<h2>\u041a\u0430\u043a\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438<\/h2>\n<p>\u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0445\u0435\u043c\u044b, \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0451 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e JSON Schema \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0445\u0435\u043c\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 5 \u0434\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432:<\/p>\n<pre><code class=\"json\">{  \"type\": \"object\",  \"properties\": {  \"word\": {    \"type\": \"string\",    \"minLength\": 5,    \"maxLength\": 8    }  },  \"required\": [\"word\"],  \"additionalProperties\": false}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p>&#171;Return word=&#8217;hi&#8217; \u2014 exactly 2 characters. Use that exact short word.&#187;<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c <code>\"hi\"<\/code> \u2014 <code>minLength<\/code> \u043d\u0435 enforced;<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u0438\u043d\u043e\u0439 5\u20138 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u2014 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u0434\u0430\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u0445\u0435\u043c\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>enum<\/code> \/ <code>Literal[...]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>severity<\/code> \u2208 <code>[\"low\", \"medium\", \"high\"]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>\"critical\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>minimum<\/code> \/ <code>maximum<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0 &lt;= value &lt;= 10<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>-5<\/code> \u0438\u043b\u0438 <code>15<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>exclusiveMinimum<\/code> \/ <code>exclusiveMaximum<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0 &lt; value &lt; 10<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>0<\/code>, <code>-5<\/code> \u0438\u043b\u0438 <code>10<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>minLength<\/code> \/ <code>maxLength<\/code> \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 5 \u0434\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>\"hi\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>multipleOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u043e <code>3<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>7<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pattern<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 <code>^[A-Z]{3}$<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>\"abc\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>minItems<\/code> \/ <code>maxItems<\/code> \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 2\u20133 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 5 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u043b\u0435 <code>reasoning<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 <code>required<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>reasoning<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>additionalProperties: false<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044f \u0438\u0437 <code>properties<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 <code>extra<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>address<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441 <code>city<\/code> \u0438 <code>zip_code<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>address<\/code> \u0441\u0442\u0440\u043e\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>$defs<\/code> \/ <code>$ref<\/code> <\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>findings[*]<\/code> \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <code>#\/$defs\/Finding<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043c\u043e\u0434\u0435\u043b\u044c <code>Finding<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>anyOf<\/code> \u0434\u043b\u044f nullable<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>nickname<\/code>: \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 <code>null<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0447\u0438\u0441\u043b\u043e <code>42<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043d\u0438 <code>null<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>anyOf<\/code> \u0434\u043b\u044f Union<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>value<\/code>: \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 integer<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>3.14<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c float \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 integer<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>oneOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>pet<\/code>: \u043b\u0438\u0431\u043e <code>Cat<\/code>, \u043b\u0438\u0431\u043e <code>Dog<\/code> \u043f\u043e \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0435\u0437 <code>pet_type<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>allOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Child<\/code> \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044f <code>Base<\/code> \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044f <code>Child<\/code>, \u0431\u0435\u0437 \u043f\u043e\u043b\u0435\u0439 <code>Base<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0435\u0439\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f 3\u20135 \u0440\u0430\u0437. \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u044b\u0439 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 API. \u041c\u043e\u0434\u0435\u043b\u0438: <code>gpt-4o-mini<\/code>, <code>gemini-2.0-flash<\/code>, <code>grok-3-mini<\/code>.<\/p>\n<hr\/>\n<h3>OpenAI<\/h3>\n<p>\u0414\u043b\u044f OpenAI \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f <code>strict: true<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0441 <code>enum<\/code>, <code>maxItems<\/code>, <code>pattern<\/code> \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043d\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c <code>strict: true<\/code>, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u043c\u043f\u0442\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0440\u0443\u0448\u0430\u043b\u0438 \u0441\u0445\u0435\u043c\u0443.<\/p>\n<p>\u0421 <code>strict: true<\/code> \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c: \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b, \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, <code>multipleOf<\/code>, <code>pattern<\/code>, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0437\u0430\u043f\u0440\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 <code>$defs<\/code> \/ <code>$ref<\/code>.<\/p>\n<p>\u0414\u043b\u044f composition keywords \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. <code>oneOf<\/code> \u0438 <code>allOf<\/code> \u0441 <code>strict: true<\/code> \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a 400 Bad Request: API \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441\u0445\u0435\u043c\u044b.<\/p>\n<pre><code class=\"python\"># \u042d\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 400 \u043f\u0440\u0438 strict=True{\"oneOf\": [{\"$ref\": \"#\/$defs\/Cat\"}, {\"$ref\": \"#\/$defs\/Dog\"}]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 constrained decoding \u0441\u0445\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. <code>oneOf<\/code> \u0438 <code>allOf<\/code> \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432 strict-\u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434 OpenAI \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0442\u043a\u0443, \u0430 \u043d\u0435 <code>oneOf<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<h3>Gemini<\/h3>\n<p>Gemini \u0447\u0435\u0440\u0435\u0437 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 endpoint (<code>\/v1beta\/openai\/<\/code>) \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>strict: true<\/code>. \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 <code>enum<\/code>, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, <code>additionalProperties<\/code>, <code>maxItems<\/code>, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, <code>anyOf<\/code> \u0438 <code>oneOf<\/code>.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0438\u0441\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Gemini \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0445\u0435\u043c\u0435, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <code>minLength<\/code> \/ <code>maxLength<\/code>, <code>exclusiveMinimum<\/code> \/ <code>exclusiveMaximum<\/code>, <code>multipleOf<\/code> \u0438 <code>pattern<\/code>. <code>allOf<\/code> \u0432 \u0442\u0435\u0441\u0442\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0430 <code>const<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>$defs<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0445\u0435\u043c\u044b \u0441 <code>minLength: 5, maxLength: 8<\/code> \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c \u00ab\u0432\u0435\u0440\u043d\u0438 \u0441\u043b\u043e\u0432\u043e <code>hi<\/code>\u00bb Gemini \u0432\u0435\u0440\u043d\u0443\u043b <code>{\"word\": \"hi\"}<\/code> \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f <code>exclusiveMinimum: 0<\/code> \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u00ab\u0432\u0435\u0440\u043d\u0438 <code>-5.0<\/code>\u00bb: \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430 <code>-5.0<\/code>, \u0445\u043e\u0442\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <code>max_tokens<\/code>. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u0435 <code>reasoning: str<\/code> \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f, \u043f\u0440\u0438 \u043d\u0438\u0437\u043a\u043e\u043c \u043b\u0438\u043c\u0438\u0442\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043e\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 JSON. \u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445 \u043f\u0440\u0438 <code>max_tokens=200<\/code> \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0447\u0430\u0441\u0442\u043e, \u0430 \u043f\u0440\u0438 <code>max_tokens=800<\/code> \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0441\u0447\u0435\u0437\u0430\u043b\u0430. \u0414\u043b\u044f \u0441\u0445\u0435\u043c \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u043f\u043e \u0442\u043e\u043a\u0435\u043d\u0430\u043c.<\/p>\n<h3>xAI (Grok)<\/h3>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0430\u0445 xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>strict: true<\/code>.<\/p>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 <code>allOf<\/code>: \u043a\u0430\u043a \u0438 \u0443 Gemini, \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>{}<\/code>.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Gemini, xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b <code>pattern<\/code>, <code>multipleOf<\/code>, \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 OpenAI strict-\u0440\u0435\u0436\u0438\u043c\u0430, <code>oneOf<\/code> \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a 400 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<h3>\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI \u0431\u0435\u0437 strict<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI strict <\/p>\n<\/td>\n<td>\n<p align=\"left\">Gemini<\/p>\n<\/td>\n<td>\n<p align=\"left\">xAI<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>enum<\/code> \/ <code>Literal[...]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>minimum<\/code> \/ <code>maximum<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>exclusiveMinimum<\/code> \/ <code>exclusiveMaximum<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>minLength<\/code> \/ <code>maxLength<\/code> \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>multipleOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>pattern<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>minItems<\/code> \/ <code>maxItems<\/code> \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>additionalProperties: false<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>$defs<\/code> \/ <code>$ref<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>anyOf<\/code> \u0434\u043b\u044f nullable<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>anyOf<\/code> \u0434\u043b\u044f Union<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>oneOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><code>allOf<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>{}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>{}<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b<\/h3>\n<p>\u0421 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0439<\/strong> \u2014 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"python\">from pydantic import BaseModel, Field, ValidationErrorclass Response(BaseModel):    word: str = Field(min_length=5, max_length=8)raw = call_llm(schema=Response.model_json_schema())try:    result = Response.model_validate_json(raw)except ValidationError as e:# \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 Structured Outputs.<\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0439<\/strong> \u2014 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 JSON Schema keywords. \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 Schema-Guided Reasoning: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u2014 <code>Literal[\"low\", \"medium\", \"high\"]<\/code>; \u0432\u043c\u0435\u0441\u0442\u043e <code>oneOf<\/code> \u0441 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"python\"># \u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a allOf \u0432 JSON Schemaclass Finding(AnimalBase):    type: Literal[\"finding\"]    severity: str  # \u043d\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u0443\u0447\u0448\u0435:<\/p>\n<pre><code class=\"python\"># \u041f\u043b\u043e\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0435\u0437 allOfclass Finding(BaseModel):    model_config = ConfigDict(extra=\"forbid\")    reasoning: str    type: Literal[\"finding\"]    severity: Literal[\"low\", \"medium\", \"high\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u0432\u0430\u0436\u0435\u043d. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 <code>reasoning<\/code> \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0434 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0439.<\/p>\n<h3>\u041f\u0440\u043e allOf \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p><code>allOf<\/code> \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432. OpenAI \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 400, Gemini \u0438 xAI \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>{}<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 Pydantic-\u043c\u043e\u0434\u0435\u043b\u0435\u0439:<\/p>\n<pre><code class=\"python\">class Base(BaseModel):  id: intclass Child(Base):    label: str<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f <code>Child<\/code> \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <code>allOf: [Base, {properties: {label: ...}}]<\/code>. \u0414\u043b\u044f Structured Outputs \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<hr\/>\n<h2>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432<\/h2>\n<p><strong>\u0414\u043b\u044f OpenAI \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c <\/strong><code>strict: true<\/code><strong>.<\/strong> \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>oneOf<\/code> \u0438 <code>allOf<\/code> \u0441 <code>strict=True<\/code> \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a 400 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p><strong>Gemini \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 bounds, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438.<\/strong> <code>minLength<\/code>, <code>maxLength<\/code>, <code>exclusiveMinimum<\/code>, <code>multipleOf<\/code>, <code>pattern<\/code> \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p><strong>xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439<\/strong>, \u043d\u043e <code>allOf<\/code> \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b.<\/p>\n<p><code><strong>allOf<\/strong><\/code><strong> \/ \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f Structured Outputs.<\/strong> \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0431\u0435\u0437 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438, \u043e\u0434\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/strong> \u0420\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 JSON Schema keywords. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0435\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 provider-specific \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u0445\u0435\u043c, \u0430 \u0437\u0430\u0442\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u0445.<\/p>\n<p><strong>\u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435.<\/strong> \u0414\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b, \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f\u043c. Refusal, incomplete response \u0438 truncation \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h2>Skill \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Structured Outputs \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u043a\u043e\u0434\u043e\u0432\u044b\u0435 \u0430\u0433\u0435\u043d\u0442\u044b \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442, \u043a\u0430\u043a \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 API. \u041d\u0430 \u043f\u0440\u043e\u0441\u044c\u0431\u0443 \u00ab\u043d\u0430\u043f\u0438\u0448\u0438 \u043a\u043e\u0434 \u0432\u044b\u0437\u043e\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430 JSON \u043f\u043e \u0441\u0445\u0435\u043c\u0435\u00bb \u0430\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c JSON Schema \u0432 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>response_format<\/code> \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u0414\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0430\u0433\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 API, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430: \u0433\u0434\u0435-\u0442\u043e \u0437\u0430\u0431\u0443\u0434\u0435\u0442 <code>strict: true<\/code>, \u0433\u0434\u0435-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>allOf<\/code>, \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 <code>pattern<\/code> \u0432 Gemini.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0432\u044b\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, provider-specific caveats \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 skill: [<a href=\"https:\/\/github.com\/feodal01\/schema-guided-reasoning-pydantic\" rel=\"noopener noreferrer nofollow\">schema-guided-reasoning-pydantic<\/a>].<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 skill&#8217;\u0430 Codex, Claude Code \u0438 Cursor \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u043a\u0430\u043a\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0434\u043b\u044f OpenAI, Gemini \u0438 xAI, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f provider-specific \u0441\u0445\u0435\u043c\u0430, \u0438 \u043a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0412\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u0430\u043a\u0436\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<h3>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u0441\u0432\u0435\u0436\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u042d\u0442\u043e \u0441\u0440\u0435\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0430 \u043c\u0430\u0439 2026 \u0433\u043e\u0434\u0430, \u043c\u043e\u0434\u0435\u043b\u0438 <code>gpt-4o-mini<\/code>, <code>gemini-2.0-flash<\/code>, <code>grok-3-mini<\/code>. \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Structured Outputs \u0431\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0451 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 adversarial-\u0442\u0435\u0441\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: \u0441\u0445\u0435\u043c\u0430 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c + \u043f\u0440\u043e\u043c\u043f\u0442 \u0441 \u044f\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u044c\u0431\u043e\u0439 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0435\u0433\u043e + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0438\u043b \u0441\u0445\u0435\u043c\u0443, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1033478\/\">https:\/\/habr.com\/ru\/articles\/1033478\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Structured Outputs, \u0438\u043b\u0438 structured decoding, \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c LLM \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435: \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 JSON Schema. \u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 constrained decoding: \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u0431\u044b \u043a \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0441\u0445\u0435\u043c\u044b. \u0425\u043e\u0440\u043e\u0448\u0435\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 vLLM: [Structured Decoding in vLLM: a gentle introduction].\u0414\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0438\u0441\u0442\u0435\u043c \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430: API-\u0432\u044b\u0437\u043e\u0432\u0430, \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0443, \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e LLM-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.\u041f\u0440\u043e\u043c\u043f\u0442 \u0432 \u0441\u0442\u0438\u043b\u0435 \u00ab\u043e\u0442\u0432\u0435\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c JSON\u00bb \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u044e\u0447\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 JSON \u0438\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e enum. Structured Outputs \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443: \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0444\u043e\u0440\u043c\u0430\u0442\u0443.\u041a Structured Outputs \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0416\u0451\u0441\u0442\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0432\u0435\u0442\u0430: \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0445\u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u0434\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041d\u043e \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f: \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u0447\u0430\u0441\u0442\u043e \u0432\u0430\u0436\u0435\u043d \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0430\u043c \u0442\u0435\u043a\u0441\u0442 \u043e\u0442\u0432\u0435\u0442\u0430. \u0421 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0435\u0439 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u2014 \u0447\u0435\u0440\u0435\u0437 evals, \u043f\u043e\u0434\u0431\u043e\u0440 \u0441\u0445\u0435\u043c\u044b, \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0448\u0430\u0433\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.\u0412\u0430\u0436\u043d\u043e: Structured Outputs \u043d\u0435 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 OpenAI \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c JSON \u043f\u043e \u0432\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435: safety refusal, incomplete response \/ truncation \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 edge cases. \u0418\u0445 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f. \u0421\u043c. [Structured model outputs].\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 JSON Schema. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f [Schema-Guided Reasoning], \u0433\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Pydantic-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0445\u043e\u0434\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u043c\u044b \u043f\u0440\u043e\u0448\u043b\u0438\u0441\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c (OpenAI, Gemini, xAI) \u0441 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u0430\u043c\u0438: \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0445\u0435\u043c\u044b.\u041a\u0430\u043a\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0445\u0435\u043c\u044b, \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0451 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c.\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e JSON Schema \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0445\u0435\u043c\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 5 \u0434\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432:{  &#171;type&#187;: &#171;object&#187;,  &#171;properties&#187;: {  &#171;word&#187;: {    &#171;type&#187;: &#171;string&#187;,    &#171;minLength&#187;: 5,    &#171;maxLength&#187;: 8    }  },  &#171;required&#187;: [&#171;word&#187;],  &#171;additionalProperties&#187;: false}\u0410 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435:&#187;Return word=&#8217;hi&#8217; \u2014 exactly 2 characters. Use that exact short word.&#187;\u0414\u0430\u043b\u044c\u0448\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:\u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c &#171;hi&#187; \u2014 minLength \u043d\u0435 enforced;\u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u0438\u043d\u043e\u0439 5\u20138 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u2014 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u0434\u0430\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443.\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439:\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u041f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u0445\u0435\u043c\u0435\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435enum \/ Literal[&#8230;]severity \u2208 [&#171;low&#187;, &#171;medium&#187;, &#171;high&#187;]\u0432\u0435\u0440\u043d\u0443\u0442\u044c &#171;critical&#187;minimum \/ maximum0 &lt;= value &lt;= 10\u0432\u0435\u0440\u043d\u0443\u0442\u044c -5 \u0438\u043b\u0438 15exclusiveMinimum \/ exclusiveMaximum0 &lt; value &lt; 10\u0432\u0435\u0440\u043d\u0443\u0442\u044c 0, -5 \u0438\u043b\u0438 10minLength \/ maxLength \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 5 \u0434\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u0432\u0435\u0440\u043d\u0443\u0442\u044c &#171;hi&#187;multipleOf\u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u043e 3\u0432\u0435\u0440\u043d\u0443\u0442\u044c 7pattern\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 ^[A-Z]{3}$\u0432\u0435\u0440\u043d\u0443\u0442\u044c &#171;abc&#187;minItems \/ maxItems \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 2\u20133 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 5 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f\u043f\u043e\u043b\u0435 reasoning \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 required\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c reasoningadditionalProperties: false\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044f \u0438\u0437 properties\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 extra\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044baddress \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441 city \u0438 zip_code\u0432\u0435\u0440\u043d\u0443\u0442\u044c address \u0441\u0442\u0440\u043e\u043a\u043e\u0439$defs \/ $ref findings[*] \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 #\/$defs\/Finding\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043c\u043e\u0434\u0435\u043b\u044c FindinganyOf \u0434\u043b\u044f nullablenickname: \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 null\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0447\u0438\u0441\u043b\u043e 42, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043d\u0438 nullanyOf \u0434\u043b\u044f Unionvalue: \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 integer\u0432\u0435\u0440\u043d\u0443\u0442\u044c 3.14, \u0442\u043e \u0435\u0441\u0442\u044c float \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 integeroneOfpet: \u043b\u0438\u0431\u043e Cat, \u043b\u0438\u0431\u043e Dog \u043f\u043e \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0443\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0435\u0437 pet_typeallOfChild \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044f Base \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044f Child, \u0431\u0435\u0437 \u043f\u043e\u043b\u0435\u0439 Base\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0435\u0439\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f 3\u20135 \u0440\u0430\u0437. \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u044b\u0439 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 API. \u041c\u043e\u0434\u0435\u043b\u0438: gpt-4o-mini, gemini-2.0-flash, grok-3-mini.OpenAI\u0414\u043b\u044f OpenAI \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f strict: true.\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0441 enum, maxItems, pattern \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043d\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c strict: true, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u043c\u043f\u0442\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0440\u0443\u0448\u0430\u043b\u0438 \u0441\u0445\u0435\u043c\u0443.\u0421 strict: true \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c: \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b, \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, multipleOf, pattern, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0437\u0430\u043f\u0440\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 $defs \/ $ref.\u0414\u043b\u044f composition keywords \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. oneOf \u0438 allOf \u0441 strict: true \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a 400 Bad Request: API \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441\u0445\u0435\u043c\u044b.# \u042d\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 400 \u043f\u0440\u0438 strict=True{&#171;oneOf&#187;: [{&#171;$ref&#187;: &#171;#\/$defs\/Cat&#187;}, {&#171;$ref&#187;: &#171;#\/$defs\/Dog&#187;}]}\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 constrained decoding \u0441\u0445\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. oneOf \u0438 allOf \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432 strict-\u0440\u0435\u0436\u0438\u043c\u0435.\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434 OpenAI \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0442\u043a\u0443, \u0430 \u043d\u0435 oneOf \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f.GeminiGemini \u0447\u0435\u0440\u0435\u0437 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 endpoint (\/v1beta\/openai\/) \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 strict: true. \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 enum, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, additionalProperties, maxItems, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, anyOf \u0438 oneOf.\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0438\u0441\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Gemini \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0445\u0435\u043c\u0435, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a minLength \/ maxLength, exclusiveMinimum \/ exclusiveMaximum, multipleOf \u0438 pattern. allOf \u0432 \u0442\u0435\u0441\u0442\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0430 const \u0432\u043d\u0443\u0442\u0440\u0438 $defs \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0445\u0435\u043c\u044b \u0441 minLength: 5, maxLength: 8 \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c \u00ab\u0432\u0435\u0440\u043d\u0438 \u0441\u043b\u043e\u0432\u043e hi\u00bb Gemini \u0432\u0435\u0440\u043d\u0443\u043b {&#171;word&#187;: &#171;hi&#187;} \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445.\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f exclusiveMinimum: 0 \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u00ab\u0432\u0435\u0440\u043d\u0438 -5.0\u00bb: \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430 -5.0, \u0445\u043e\u0442\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c max_tokens. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u0435 reasoning: str \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f, \u043f\u0440\u0438 \u043d\u0438\u0437\u043a\u043e\u043c \u043b\u0438\u043c\u0438\u0442\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043e\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 JSON. \u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445 \u043f\u0440\u0438 max_tokens=200 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0447\u0430\u0441\u0442\u043e, \u0430 \u043f\u0440\u0438 max_tokens=800 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0441\u0447\u0435\u0437\u0430\u043b\u0430. \u0414\u043b\u044f \u0441\u0445\u0435\u043c \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u043f\u043e \u0442\u043e\u043a\u0435\u043d\u0430\u043c.xAI (Grok)\u0412 \u0442\u0435\u0441\u0442\u0430\u0445 xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 strict: true.\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 allOf: \u043a\u0430\u043a \u0438 \u0443 Gemini, \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 {}.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Gemini, xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b pattern, multipleOf, \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 OpenAI strict-\u0440\u0435\u0436\u0438\u043c\u0430, oneOf \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a 400 \u043e\u0448\u0438\u0431\u043a\u0435.\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435OpenAI \u0431\u0435\u0437 strictOpenAI strict GeminixAIenum \/ Literal[&#8230;]\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430minimum \/ maximum\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430exclusiveMinimum \/ exclusiveMaximum\u043d\u0435\u0442\u0434\u0430\u043d\u0435\u0442\u0434\u0430minLength \/ maxLength \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438\u043d\u0435\u0442\u0434\u0430\u043d\u0435\u0442\u0434\u0430multipleOf\u043d\u0435\u0442\u0434\u0430\u043d\u0435\u0442\u0434\u0430pattern\u043d\u0435\u0442\u0434\u0430\u043d\u0435\u0442\u0434\u0430minItems \/ maxItems \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430\u043d\u0435\u0442\u0434\u0430\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0434\u0430\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430additionalProperties: false\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430$defs \/ $ref\u043d\u0435\u0442\u0434\u0430\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0434\u0430anyOf \u0434\u043b\u044f nullable\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430anyOf \u0434\u043b\u044f Union\u043d\u0435\u0442\u0434\u0430\u0434\u0430\u0434\u0430oneOf\u043d\u0435\u0442400\u0434\u0430\u0434\u0430allOf\u043d\u0435\u0442400 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 {} \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 {}\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0421 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.\u041f\u0435\u0440\u0432\u044b\u0439 \u2014 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430:from pydantic import BaseModel, Field, ValidationErrorclass Response(BaseModel):    word: str = Field(min_length=5, max_length=8)raw = call_llm(schema=Response.model_json_schema())try:    result = Response.model_validate_json(raw)except ValidationError as e:# \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441&#8230;\u0422\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 Structured Outputs.\u0412\u0442\u043e\u0440\u043e\u0439 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 JSON Schema keywords. \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 Schema-Guided Reasoning: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u2014 Literal[&#171;low&#187;, &#171;medium&#187;, &#171;high&#187;]; \u0432\u043c\u0435\u0441\u0442\u043e oneOf \u0441 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e:# \u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a allOf \u0432 JSON Schemaclass Finding(AnimalBase):    type: Literal[&#171;finding&#187;]    severity: str  # \u043d\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u041b\u0443\u0447\u0448\u0435:# \u041f\u043b\u043e\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0435\u0437 allOfclass Finding(BaseModel):    model_config = ConfigDict(extra=&#187;forbid&#187;)    reasoning: str    type: Literal[&#171;finding&#187;]    severity: Literal[&#171;low&#187;, &#171;medium&#187;, &#171;high&#187;]\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u0432\u0430\u0436\u0435\u043d. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 reasoning \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0434 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0439.\u041f\u0440\u043e allOf \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435allOf \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432. OpenAI \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 400, Gemini \u0438 xAI \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 {}.\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 Pydantic-\u043c\u043e\u0434\u0435\u043b\u0435\u0439:class Base(BaseModel):  id: intclass Child(Base):    label: str\u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f Child \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c allOf: [Base, {properties: {label: &#8230;}}]. \u0414\u043b\u044f Structured Outputs \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432\u0414\u043b\u044f OpenAI \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c strict: true. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c oneOf \u0438 allOf \u0441 strict=True \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a 400 \u043e\u0448\u0438\u0431\u043a\u0435.Gemini \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 bounds, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. minLength, maxLength, exclusiveMinimum, multipleOf, pattern \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435.xAI \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043d\u043e allOf \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b.allOf \/ \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f Structured Outputs. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u0443\u044e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-479203","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=479203"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479203\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=479203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=479203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}