Структурированные выходные данные ограничивают ответы Claude так, чтобы они следовали определённой схеме, обеспечивая валидный, пригодный для разбора вывод для последующей обработки. Структурированные выходные данные предоставляют две взаимодополняющие возможности:
output_config.format): получение ответа Claude в определённом формате JSONstrict: true): гарантированная валидация схемы для имён инструментов и входных данныхВы можете использовать эти возможности независимо или вместе в одном запросе.
Структурированные выходные данные общедоступны в Claude API для Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5. В Amazon Bedrock структурированные выходные данные общедоступны для Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5; Claude Sonnet 5, Claude Opus 4.7 и Claude Mythos Preview доступны через Claude в Amazon Bedrock (конечная точка Bedrock с Messages API). Структурированные выходные данные доступны в Claude Platform на AWS. В Google Cloud структурированные выходные данные общедоступны для Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5. Структурированные выходные данные общедоступны в Microsoft Foundry и требуют развёртывания с размещением у Anthropic.
Эта функция соответствует требованиям Zero Data Retention (ZDR) с ограниченным техническим хранением. Подробности о том, что сохраняется и почему, см. в разделе Хранение данных.
Переходите с бета-версии? Параметр 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-8",
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, включая преобразование схем, автоматическую валидацию и интеграцию с популярными библиотеками схем.
Метод client.messages.parse() в Python SDK по-прежнему принимает 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]Create<T>(), которая выводит схему автоматическиoutput_configoutput_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-8",
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.
SDK для Python, TypeScript, Ruby и PHP автоматически преобразуют схемы с неподдерживаемыми возможностями. SDK для C# и Go применяют те же преобразования, когда схема выводится из нативного типа (Create<T>() в C#; отражение структур или BetaJSONSchemaOutputFormat() в бета-версии Go API). Шаги преобразования:
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-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# Вывод в формате JSON: структурированный формат ответа
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,
},
}
},
# Строгое использование инструментов: гарантированные параметры инструментов
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 и строгое использование инструментов разделяют эти ограничения.
SDK для Python, TypeScript, Ruby и PHP могут автоматически преобразовывать схемы с неподдерживаемыми возможностями, удаляя их и добавляя ограничения в описания полей. SDK для C# и Go делают то же самое, когда схема выводится из нативного типа. Подробности см. в разделе Методы, специфичные для 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, а не к вызовам использования инструментов, результатам инструментов или тегам мышления (при использовании расширенного мышления). Состояние грамматики сбрасывается между разделами, позволяя Claude свободно мыслить, при этом создавая структурированный вывод в итоговом ответе.
Позвольте Claude ссылаться на источники при ответах на вопросы о предоставленных документах.
Обеспечьте соответствие входных данных инструментов Claude JSON Schema с помощью грамматически ограниченной выборки.
Подключите Claude к внешним инструментам и API. Узнайте, где выполняются инструменты и как работает агентный цикл.
Узнайте о структуре цен Anthropic для моделей и функций.
Was this page helpful?