Структурированные выходные данные ограничивают ответы Claude определённой схемой, обеспечивая корректный, анализируемый результат для последующей обработки. Доступны две дополняющие друг друга функции:
output_config.format): получайте ответ Claude в определённом формате JSONstrict: true): гарантируйте проверку схемы для имён инструментов и входных данныхПараметр output_format был перемещён в output_config.format. Старый параметр output_format всё ещё работает временно, но является устаревшим и будет удалён в будущей версии API. Обновите ваш код, чтобы использовать output_config: {format: {...}} вместо этого.
Эти функции можно использовать независимо или вместе в одном запросе.
Структурированные выходные данные доступны в Claude API и Amazon Bedrock для Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5 и Claude Haiku 4.5. Структурированные выходные данные остаются в публичной бета-версии на Microsoft Foundry.
Переход с бета-версии? Параметр output_format был перемещён в output_config.format, и бета-заголовки больше не требуются. Старый бета-заголовок (structured-outputs-2025-11-13) и параметр output_format будут продолжать работать в течение переходного периода. Примеры кода ниже показывают обновленную форму API.
Без структурированных выходных данных Claude может генерировать неправильно сформированные ответы JSON или недействительные входные данные инструментов, которые нарушают работу ваших приложений. Даже при тщательном формировании подсказок вы можете столкнуться с:
Структурированные выходные данные гарантируют ответы, соответствующие схеме, через ограниченное декодирование:
JSON.parse()Выходные данные JSON управляют форматом ответа Claude, обеспечивая возврат Claude корректного JSON, соответствующего вашей схеме. Используйте выходные данные JSON, когда вам нужно:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"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
}
}
}
}'Формат ответа: Корректный 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.
Python и TypeScript SDK предоставляют вспомогательные функции, которые облегчают работу с выходными данными JSON, включая преобразование схемы, автоматическую проверку и интеграцию с популярными библиотеками схем.
Методы вспомогательных функций SDK (такие как .parse() и интеграция Pydantic/Zod) по-прежнему принимают output_format как удобный параметр. SDK обрабатывает перевод в output_config.format внутри. Примеры ниже показывают синтаксис вспомогательных функций SDK.
Для разработчиков Python и TypeScript вы можете использовать знакомые инструменты определения схемы, такие как Pydantic и Zod, вместо написания необработанных JSON-схем.
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.messages.create(
model="claude-opus-4-6",
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": transform_schema(ContactInfo),
}
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
response = client.messages.parse(
model="claude-opus-4-6",
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)Python: client.messages.parse() (Рекомендуется)
Метод parse() автоматически преобразует вашу модель Pydantic, проверяет ответ и возвращает атрибут parsed_output.
Python: вспомогательная функция transform_schema()
Для случаев, когда вам нужно вручную преобразовать схемы перед отправкой, или когда вы хотите изменить схему, созданную Pydantic. В отличие от client.messages.parse(), которая автоматически преобразует предоставленные схемы, это даёт вам преобразованную схему, чтобы вы могли дополнительно её настроить.
Оба SDK Python и TypeScript автоматически преобразуют схемы с неподдерживаемыми функциями:
minimum, maximum, minLength, maxLength)additionalProperties: false ко всем объектамЭто означает, что Claude получает упрощённую схему, но ваш код по-прежнему применяет все ограничения через проверку.
Пример: Поле Pydantic с minimum: 100 становится простым целым числом в отправляемой схеме, но описание обновляется на "Должно быть не менее 100", и SDK проверяет ответ против исходного ограничения.
Строгое использование инструментов проверяет параметры инструментов, обеспечивая вызов Claude ваших функций с правильно типизированными аргументами. Используйте строгое использование инструментов, когда вам нужно:
Построение надёжных агентных систем требует гарантированного соответствия схеме. Без строгого режима Claude может вернуть несовместимые типы ("2" вместо 2) или отсутствующие обязательные поля, нарушая ваши функции и вызывая ошибки во время выполнения.
Строгое использование инструментов гарантирует типобезопасные параметры:
Например, предположим, что система бронирования нуждается в passengers: int. Без строгого режима Claude может предоставить passengers: "two" или passengers: "2". С strict: true ответ всегда будет содержать passengers: 2.
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "What is the weather in San Francisco?"}
],
"tools": [{
"name": "get_weather",
"description": "Get the current weather in a given location",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"],
"additionalProperties": false
}
}]
}'Формат ответа: Блоки использования инструментов с проверенными входными данными в response.content[x].input
{
"type": "tool_use",
"name": "get_weather",
"input": {
"location": "San Francisco, CA"
}
}Гарантии:
input строго следуют input_schemaname всегда корректно (из предоставленных инструментов или серверных инструментов)Определите вашу схему инструмента
Создайте JSON-схему для input_schema вашего инструмента. Схема использует стандартный формат JSON Schema с некоторыми ограничениями (см. ограничения JSON Schema).
Добавьте strict: true
Установите "strict": true как свойство верхнего уровня в определении вашего инструмента, рядом с name, description и input_schema.
Обрабатывайте вызовы инструментов
Когда Claude использует инструмент, поле input в блоке tool_use будет строго следовать вашему input_schema, и name всегда будет корректным.
Выходные данные JSON и строгое использование инструментов решают разные проблемы и могут использоваться вместе:
При объединении Claude может вызывать инструменты с гарантированно корректными параметрами И возвращать структурированные ответы JSON. Это полезно для рабочих процессов агентов, где вам нужны как надёжные вызовы инструментов, так и структурированные финальные выходные данные.
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Help me plan a trip to Paris for next month"}],
# 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
}
}]
)Структурированные выходные данные используют ограниченную выборку с скомпилированными артефактами грамматики. Это вводит некоторые характеристики производительности, о которых следует знать:
name или description не инвалидирует кэшПри использовании структурированных выходных данных Claude автоматически получает дополнительную системную подсказку, объясняющую ожидаемый формат выходных данных. Это означает:
output_config.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:
"Слишком много рекурсивных определений в схеме"
"Схема слишком сложна"
strict: trueДля постоянных проблем с корректными схемами свяжитесь с поддержкой с определением вашей схемы.
Работает с:
output_config.format) и строгое использование инструментов (strict: true) вместе в одном запросеНесовместимо с:
output_config.format.Область действия грамматики: Грамматики применяются только к прямому выходу Claude, а не к вызовам инструментов, результатам инструментов или тегам мышления (при использовании Extended Thinking). Состояние грамматики сбрасывается между разделами, позволяя Claude свободно думать, при этом всё ещё производя структурированный выход в финальном ответе.
Was this page helpful?