Структурированные выходные данные ограничивают ответы Claude определённой схемой, обеспечивая корректный, анализируемый результат для последующей обработки. Используйте выходные данные JSON (output_format) для структурированных ответов данных или строгое использование инструментов (strict: true) для гарантированной проверки схемы имён инструментов и входных данных.
Структурированные выходные данные в настоящее время доступны как функция общедоступной бета-версии в Claude API для Claude Sonnet 4.5 и Claude Opus 4.1.
Чтобы использовать эту функцию, установите заголовок бета-версии structured-outputs-2025-11-13.
Поделитесь отзывом, используя эту форму.
Без структурированных выходных данных Claude может генерировать неправильно сформированные ответы JSON или недействительные входные данные инструментов, которые нарушают работу ваших приложений. Даже при тщательном написании подсказок вы можете столкнуться с:
Структурированные выходные данные гарантируют ответы, соответствующие схеме, благодаря ограниченному декодированию:
JSON.parse()Выберите правильный режим для вашего случая использования:
| Используйте выходные данные JSON, когда | Используйте строгое использование инструментов, когда |
|---|---|
| Вам нужен ответ Claude в определённом формате | Вам нужны проверенные параметры и имена инструментов для вызовов инструментов |
| Извлечение данных из изображений или текста | Построение рабочих процессов агентов |
| Создание структурированных отчётов | Обеспечение типобезопасных вызовов функций |
| Форматирование ответов API | Сложные инструменты со множеством и/или вложенными свойствами |
Построение надёжных систем агентов требует гарантированного соответствия схеме. Недействительные параметры инструментов нарушают работу ваших функций и рабочих процессов. Claude может вернуть несовместимые типы ("2" вместо 2) или отсутствующие поля, вызывая ошибки времени выполнения.
Строгое использование инструментов гарантирует типобезопасные параметры:
Например, предположим, что система бронирования требует passengers: int. Без строгого режима Claude может предоставить passengers: "two" или passengers: "2". С strict: true вы гарантированно получите passengers: 2.
Python и TypeScript SDK предоставляют помощники, которые облегчают работу с выходными данными JSON, включая преобразование схемы, автоматическую проверку и интеграцию с популярными библиотеками схем.
Для разработчиков Python и TypeScript вы можете использовать знакомые инструменты определения схемы, такие как Pydantic и Zod, вместо написания необработанных JSON-схем.
Только выходные данные JSON
Помощники SDK (Pydantic, Zod, parse()) работают только с выходными данными JSON (output_format).
Эти помощники преобразуют и проверяют результат Claude для вас. Строгое использование инструментов проверяет входные данные Claude для ваших инструментов, которые используют существующее поле input_schema в определениях инструментов.
Для строгого использования инструментов определите ваш input_schema непосредственно в определении инструмента с strict: true.
from pydantic import BaseModel
from anthropic import Anthropic, transform_schema
class ContactInfo(BaseModel):
name: str
email: str
plan_interest: str
demo_requested: bool
client = Anthropic()
# With .create() - requires transform_schema()
response = client.beta.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
messages=[
{
"role": "user",
"content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
}
],
output_format={
"type": "json_schema",
"schema": transform_schema(ContactInfo),
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
response = client.beta.messages.parse(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
messages=[
{
"role": "user",
"content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
}
],
output_format=ContactInfo,
)
print(response.parsed_output)Python: client.beta.messages.parse() (Рекомендуется)
Метод parse() автоматически преобразует вашу модель Pydantic, проверяет ответ и возвращает атрибут parsed_output.
Метод parse() доступен на client.beta.messages, а не на client.messages.
Python: помощник transform_schema()
Для случаев, когда вам нужно вручную преобразовать схемы перед отправкой, или когда вы хотите изменить схему, созданную Pydantic. В отличие от client.beta.messages.parse(), который автоматически преобразует предоставленные схемы, это даёт вам преобразованную схему, чтобы вы могли её дополнительно настроить.
Python и TypeScript SDK автоматически преобразуют схемы с неподдерживаемыми функциями:
minimum, maximum, minLength, maxLength)additionalProperties: false ко всем объектамЭто означает, что Claude получает упрощённую схему, но ваш код по-прежнему применяет все ограничения через проверку.
Пример: Поле Pydantic с minimum: 100 становится простым целым числом в отправленной схеме, но описание обновляется на "Должно быть не менее 100", и SDK проверяет ответ против исходного ограничения.
Структурированные выходные данные используют ограниченную выборку с скомпилированными артефактами грамматики. Это вводит некоторые характеристики производительности, о которых следует знать:
name или description не инвалидирует кэшПри использовании структурированных выходных данных Claude автоматически получает дополнительную системную подсказку, объясняющую ожидаемый формат выходных данных. Это означает:
output_format инвалидирует любой кэш подсказок для этого потока разговораСтруктурированные выходные данные поддерживают стандартный JSON Schema с некоторыми ограничениями. Как выходные данные JSON, так и строгое использование инструментов имеют эти ограничения.
Python и TypeScript SDK могут автоматически преобразовывать схемы с неподдерживаемыми функциями, удаляя их и добавляя ограничения к описаниям полей. Подробности см. в методах, специфичных для SDK.
Хотя структурированные выходные данные гарантируют соответствие схеме в большинстве случаев, есть сценарии, когда результат может не соответствовать вашей схеме:
Отказы (stop_reason: "refusal")
Claude сохраняет свои свойства безопасности и полезности даже при использовании структурированных выходных данных. Если Claude отказывает в запросе по соображениям безопасности:
stop_reason: "refusal"Достигнут лимит токенов (stop_reason: "max_tokens")
Если ответ обрезан из-за достижения лимита max_tokens:
stop_reason: "max_tokens"max_tokens, чтобы получить полный структурированный результатЕсли ваша схема использует неподдерживаемые функции или слишком сложна, вы получите ошибку 400:
"Too many recursive definitions in schema"
"Schema is too complex"
strict: trueДля постоянных проблем с действительными схемами свяжитесь с поддержкой с определением вашей схемы.
Работает с:
output_format) и строгое использование инструментов (strict: true) вместе в одном запросеНесовместимо с:
output_format.Область действия грамматики: Грамматики применяются только к прямому результату Claude, а не к вызовам инструментов, результатам инструментов или тегам мышления (при использовании Extended Thinking). Состояние грамматики сбрасывается между разделами, позволяя Claude свободно думать, при этом по-прежнему создавая структурированный результат в окончательном ответе.