Structured outputs (структурированные выводы) ограничивают ответы 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 и требуют развёртывания Hosted on 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.
Сырые JSON-схемы через тело heredoc
CLI передаёт сырые JSON-схемы как тело YAML heredoc. Используйте модификатор GJSON @fromstr с --transform, чтобы разобрать строку JSON, возвращаемую в content[0].text, и спроецировать конкретные поля.
ant messages create \
--transform 'content.0.text|@fromstr|{name,email}' \
--format yaml <<'YAML'
model: claude-opus-4-8
max_tokens: 1024
messages:
- role: user
content: >-
Extract contact info: John Smith, [email protected],
interested in the Pro plan
output_config:
format:
type: json_schema
schema:
type: object
properties:
name: {type: string}
email: {type: string}
plan_interest: {type: string}
required: [name, email, plan_interest]
additionalProperties: false
YAMLname: John Smith
email: [email protected]SDK для Python, TypeScript, Ruby и PHP автоматически преобразуют схемы с неподдерживаемыми функциями. SDK для C# и Go применяют те же преобразования, когда схема выводится из нативного типа (Create<T>() в C#; отражение структур или BetaJSONSchemaOutputFormat() в бета-API Go). Шаги преобразования:
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, чтобы получить полный структурированный выводРегистр значений перечислений
Структурированные выводы не гарантируют регистр строковых значений enum и const: Claude может вернуть значение, которое отличается от вашей схемы только регистром, обычно в первой букве слова после пробела. Например, для такой схемы:
{
"type": "string",
"enum": ["Conversation Topic 1", "Conversation Topic 2", "Conversation topic 3"]
}Вывод может содержать "Conversation Topic 3" (заглавная «T»), даже если этого точного значения нет в перечислении. Ответ завершается нормально, без ошибки и без специального stop_reason. Это относится и к JSON-выводам, и к строгому использованию инструментов. Сравнивайте значения перечислений без учёта регистра и избегайте значений перечислений, которые отличаются только регистром.
Структурированные выводы работают путём компиляции ваших 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 цитирует свои источники при ответах на вопросы о предоставленных документах.
Обеспечьте соответствие JSON Schema для входных данных инструментов Claude с помощью выборки, ограниченной грамматикой.
Подключите Claude к внешним инструментам и API. Узнайте, где выполняются инструменты и как работает агентный цикл.
Узнайте о структуре цен Anthropic для моделей и функций.
Was this page helpful?