Структурированные выходные данные ограничивают ответы Claude следовать определённой схеме, обеспечивая корректный, анализируемый результат для последующей обработки. Структурированные выходные данные предоставляют две дополнительные функции:
output_config.format): Получайте ответ Claude в определённом формате JSONstrict: true): Гарантируйте проверку схемы для имён инструментов и входных данныхВы можете использовать эти функции независимо или вместе в одном запросе.
Структурированные выходные данные обычно доступны в Claude API для Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5. На Amazon Bedrock структурированные выходные данные обычно доступны для Claude Mythos Preview, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5; Claude Opus 4.7 доступен через исследовательский предпросмотр Amazon Bedrock. Структурированные выходные данные находятся в бета-версии на Microsoft Foundry. Структурированные выходные данные не поддерживаются на Google Cloud's Vertex AI для Claude Mythos Preview.
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
Переход с бета-версии? Параметр output_format переместился на output_config.format, и бета-заголовки больше не требуются. Старый бета-заголовок (structured-outputs-2025-11-13) и параметр output_format будут продолжать работать в течение переходного периода. Смотрите примеры кода ниже для обновленной формы API.
Без структурированных выходных данных Claude может генерировать неправильно сформированные ответы JSON или недействительные входные данные инструментов, которые нарушают работу ваших приложений. Даже при тщательном написании подсказок вы можете столкнуться с:
Структурированные выходные данные гарантируют ответы, соответствующие схеме, через ограниченное декодирование:
JSON.parse()Выходные данные JSON управляют форматом ответа Claude, обеспечивая возврат Claude корректного JSON, соответствующего вашей схеме. Используйте выходные данные JSON, когда вам нужно:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
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_config={
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"plan_interest": {"type": "string"},
"demo_requested": {"type": "boolean"},
},
"required": ["name", "email", "plan_interest", "demo_requested"],
"additionalProperties": False,
},
}
},
)
print(response.content[0].text)Формат ответа: Корректный JSON, соответствующий вашей схеме в response.content[0].text
{
"name": "John Smith",
"email": "[email protected]",
"plan_interest": "Enterprise",
"demo_requested": true
}Определите вашу JSON-схему
Создайте JSON-схему, которая описывает структуру, которой должен следовать Claude. Схема использует стандартный формат JSON Schema с некоторыми ограничениями (см. ограничения JSON Schema).
Добавьте параметр output_config.format
Включите параметр output_config.format в ваш запрос API с type: "json_schema" и определением вашей схемы.
Разберите ответ
Ответ Claude — это корректный JSON, соответствующий вашей схеме, возвращаемый в response.content[0].text.
SDK предоставляют вспомогательные функции, которые упрощают работу с JSON выводом, включая преобразование схемы, автоматическую валидацию и интеграцию с популярными библиотеками схем.
Python SDK client.messages.parse() по-прежнему принимает output_format как удобный параметр и преобразует его в output_config.format внутри. Другие SDK требуют output_config напрямую. Примеры ниже показывают синтаксис вспомогательных функций SDK.
Вместо написания сырых JSON схем вы можете использовать знакомые инструменты определения схем на вашем языке:
client.messages.parse()zodOutputFormat() или типизированные литералы JSON Schema с jsonSchemaOutputFormat()outputConfig(Class<T>)Anthropic::BaseModel с output_config: {format: Model}StructuredOutputModel с outputConfig: ['format' => MyClass::class]output_configfrom pydantic import BaseModel
from anthropic import Anthropic
class ContactInfo(BaseModel):
name: str
email: str
plan_interest: str
demo_requested: bool
client = Anthropic()
response = client.messages.parse(
model="claude-opus-4-7",
max_tokens=1024,
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)Каждый SDK предоставляет вспомогательные функции, которые упрощают работу со структурированными выводами. Полные детали см. на отдельных страницах SDK.
Python, TypeScript, Ruby и PHP SDK автоматически преобразуют схемы с неподдерживаемыми функциями:
minimum, maximum, minLength, maxLength)additionalProperties: false ко всем объектамЭто означает, что Claude получает упрощенную схему, но ваш код по-прежнему применяет все ограничения через валидацию.
Пример: поле Pydantic с minimum: 100 становится простым целым числом в отправленной схеме, но SDK обновляет описание на "Должно быть не менее 100" и валидирует ответ против исходного ограничения.
Для обеспечения соответствия JSON Schema при использовании инструментов с грамматикой с ограничениями выборки см. Строгое использование инструментов.
JSON-выходы и строгое использование инструментов решают разные проблемы и работают вместе:
При совместном использовании Claude может вызывать инструменты с гарантированно корректными параметрами И возвращать структурированные JSON-ответы. Это полезно для агентских рабочих процессов, где вам нужны как надежные вызовы инструментов, так и структурированные финальные выходы.
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# JSON outputs: structured response format
output_config={
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"next_steps": {"type": "array", "items": {"type": "string"}},
},
"required": ["summary", "next_steps"],
"additionalProperties": False,
},
}
},
# Strict tool use: guaranteed tool parameters
tools=[
{
"name": "search_flights",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"destination": {"type": "string"},
"date": {"type": "string", "format": "date"},
},
"required": ["destination", "date"],
"additionalProperties": False,
},
}
],
)
print(response)Структурированные выходы используют ограниченную выборку с скомпилированными артефактами грамматики. Это вводит некоторые характеристики производительности, о которых следует знать:
name или description не инвалидирует кешПри использовании структурированных выходов Claude автоматически получает дополнительную системную подсказку, объясняющую ожидаемый формат выходных данных. Это означает:
output_config.format инвалидирует любой кеш подсказок для этого потока разговораСтруктурированные выходы поддерживают стандартный JSON Schema с некоторыми ограничениями. Как JSON-выходы, так и строгое использование инструментов имеют эти ограничения.
Python, TypeScript, Ruby и PHP SDK могут автоматически преобразовывать схемы с неподдерживаемыми функциями, удаляя их и добавляя ограничения к описаниям полей. Подробности см. в разделе Методы, специфичные для SDK.
При использовании структурированных выходов свойства в объектах сохраняют определенный порядок из вашей схемы с одной важной оговоркой: обязательные свойства появляются первыми, за ними следуют необязательные свойства.
Например, учитывая эту схему:
{
"type": "object",
"properties": {
"notes": { "type": "string" },
"name": { "type": "string" },
"email": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "email"],
"additionalProperties": false
}Выходные данные будут упорядочивать свойства как:
name (обязательное, в порядке схемы)email (обязательное, в порядке схемы)notes (необязательное, в порядке схемы)age (необязательное, в порядке схемы)Это означает, что выходные данные могут выглядеть так:
{
"name": "John Smith",
"email": "[email protected]",
"notes": "Interested in enterprise plan",
"age": 35
}Если порядок свойств в выходных данных важен для вашего приложения, отметьте все свойства как обязательные или учтите это переупорядочение в логике анализа.
Хотя структурированные выходы гарантируют соответствие схеме в большинстве случаев, есть сценарии, когда выходные данные могут не соответствовать вашей схеме:
Отказы (stop_reason: "refusal")
Claude сохраняет свои свойства безопасности и полезности даже при использовании структурированных выходов. Если Claude отказывает в запросе по соображениям безопасности:
stop_reason: "refusal"Достигнут лимит токенов (stop_reason: "max_tokens")
Если ответ обрезан из-за достижения лимита max_tokens:
stop_reason: "max_tokens"max_tokens, чтобы получить полный структурированный выходСтруктурированные выходы работают путем компиляции ваших JSON-схем в грамматику, которая ограничивает выходные данные Claude. Более сложные схемы создают большие грамматики, которые требуют больше времени на компиляцию. Чтобы защитить от чрезмерного времени компиляции, API применяет несколько ограничений сложности.
Следующие ограничения применяются ко всем запросам с output_config.format или strict: true:
| Ограничение | Значение | Описание |
|---|---|---|
| Строгие инструменты на запрос | 20 | Максимальное количество инструментов с strict: true. Нестрогие инструменты не учитываются в этом ограничении. |
| Необязательные параметры | 24 | Всего необязательных параметров во всех строгих схемах инструментов и схемах JSON-выходов. Каждый параметр, не указанный в required, учитывается в этом ограничении. |
| Параметры с типами объединения | 16 | Всего параметров, которые используют anyOf или массивы типов (например, "type": ["string", "null"]) во всех строгих схемах. Они особенно дорогостоящи, потому что создают экспоненциальную стоимость компиляции. |
Эти ограничения применяются к объединенному итогу всех строгих схем в одном запросе. Например, если у вас есть 4 строгих инструмента с 6 необязательными параметрами каждый, вы достигнете лимита 24 параметров, даже если ни один инструмент не кажется сложным.
Помимо явных ограничений выше, существуют дополнительные внутренние ограничения на размер скомпилированной грамматики. Эти ограничения существуют, потому что сложность схемы не сводится к одному измерению: функции, такие как необязательные параметры, типы объединения, вложенные объекты и количество инструментов, взаимодействуют друг с другом таким образом, что могут сделать скомпилированную грамматику непропорционально большой.
Когда эти ограничения превышены, вы получите ошибку 400 с сообщением "Schema is too complex for compilation." Эти ошибки означают, что объединенная сложность ваших схем превышает то, что может быть эффективно скомпилировано, даже если каждое отдельное ограничение выше удовлетворено. В качестве последней защиты API также применяет тайм-аут компиляции 180 секунд. Схемы, которые проходят все явные проверки, но создают очень большие скомпилированные грамматики, могут превысить этот тайм-аут.
Если вы достигли ограничений сложности, попробуйте эти стратегии по порядку:
Отметьте только критические инструменты как строгие. Если у вас много инструментов, зарезервируйте это для инструментов, где нарушения схемы вызывают реальные проблемы, и полагайтесь на естественное соответствие Claude для более простых инструментов.
Уменьшите необязательные параметры. Сделайте параметры required где возможно. Каждый необязательный параметр примерно удваивает часть пространства состояний грамматики. Если параметр всегда имеет разумное значение по умолчанию, рассмотрите возможность сделать его обязательным и попросить Claude явно предоставить это значение по умолчанию.
Упростите вложенные структуры. Глубоко вложенные объекты с необязательными полями усложняют сложность. Где возможно, сплющивайте структуры.
Разделите на несколько запросов. Если у вас много строгих инструментов, рассмотрите возможность разделения их на отдельные запросы или подагентов.
Для постоянных проблем с действительными схемами свяжитесь с поддержкой с определением вашей схемы.
Подсказки и ответы обрабатываются с ZDR при использовании структурированных выходов. Однако сама JSON-схема временно кешируется в течение до 24 часов с момента последнего использования в целях оптимизации. Никакие данные подсказок или ответов не сохраняются после ответа API.
Структурированные выходы имеют право на HIPAA, но PHI не должна включаться в определения JSON-схемы. API компилирует JSON-схемы в грамматики, которые кешируются отдельно от содержимого сообщений, и эти кешированные схемы не получают такую же защиту PHI, как подсказки и ответы. Не включайте PHI в имена свойств схемы, значения enum, значения const или регулярные выражения pattern. PHI должна появляться только в содержимом сообщений (подсказках и ответах), где она защищена гарантиями безопасности HIPAA.
Для соответствия ZDR и HIPAA во всех функциях см. API и хранение данных.
Работает с:
output_config.format) и строгое использование инструментов (strict: true) вместе в одном запросеНесовместимо с:
output_config.format.Область грамматики: Грамматики применяются только к прямому выходу Claude, а не к вызовам инструментов, результатам инструментов или тегам мышления (при использовании Extended Thinking). Состояние грамматики сбрасывается между разделами, позволяя Claude свободно думать, при этом все еще создавая структурированный выход в финальном ответе.
Was this page helpful?