Блог • AWS / Bedrock

Структурированный вывод Claude в Amazon Bedrock гарантирует форму JSON—зачем журналам batch и скопированному чату всё равно нужна локальная трёхшаговая проверка?

19 октября 2026 AWS объявила structured outputs для Claude в Bedrock: constrained decoding с JSON Schema, schema через output_config, strict tools, additionalProperties:false. Batch и streaming включены.

Полное сравнение structured output — в руководстве по structured output 2026. Валидный schema не заменяет проверку прав — см. статью schema недостаточно. Как JSON Schema связывает tools и ответы: зачем ИИ нужен JSON Schema. Эта статья — только о трёх локальных шагах после Bedrock.

Решение: Bedrock отвечает за форму ответа API; логи, batch и скопированный чат всё равно требуют локального validate schema, repair ограждений и проверки строк JSONL.

Что Bedrock добавил для Claude 19 октября?

AWS пишет в официальном What's New: structured outputs для Claude в Bedrock с constrained decoding, strict tools, batch и streaming.

Технические детали — в блоге AWS Machine Learning. Гарантия API — не конец журнального pipeline.

Как прикрепить JSON Schema в output_config?

В Bedrock output_config.format.type = json_schema, определение объекта в schema. additionalProperties:false на корне. Пример: ticket_id, priority (enum), summary.

Фрагмент Invoke Bedrock: JSON Schema в output_config.
{
  "anthropic_version": "bedrock-2023-05-31",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Return one support ticket as JSON."
    }
  ],
  "output_config": {
    "format": {
      "type": "json_schema",
      "schema": {
        "type": "object",
        "additionalProperties": false,
        "required": ["ticket_id", "priority", "summary"],
        "properties": {
          "ticket_id": { "type": "string" },
          "priority": { "enum": ["low", "medium", "high"] },
          "summary": { "type": "string", "maxLength": 200 }
        }
      }
    }
  }
}

Batch часто — JSONL, строка на запись. Стриминг, склеенный на клиенте, Bedrock повторно не проверяет.

Зачем validate локально, если API гарантирует форму?

Тело Invoke на стороне Bedrock соответствует schema, но артефакты искажаются: префиксы логов, экранирование CloudWatch, ограждения ```json, пустые или обрезанные строки batch.

Образец ответа Bedrock (SAMPLE_OK).
{
  "ticket_id": "TCK-1042",
  "priority": "high",
  "summary": "Bedrock batch row passed constrained decoding"
}

Если priority = urgent или появляется owner, SLA срабатывает неверно. SAMPLE_BAD — enum вне диапазона; ловите тем же TICKET_SCHEMA.

Сбой с неверным enum (SAMPLE_BAD).
{
  "ticket_id": "TCK-1042",
  "priority": "urgent",
  "summary": "enum value not in schema"
}

Какой TICKET_SCHEMA локально?

Используйте JSON Schema , чтобы зафиксировать поля и enum. priority только low/medium/high; additionalProperties:false отклоняет лишние ключи. Прохождение — только форма.

TICKET_SCHEMA в согласии с output_config Bedrock.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": ["ticket_id", "priority", "summary"],
  "properties": {
    "ticket_id": {
      "type": "string",
      "description": "Support ticket ID, e.g. TCK-1042"
    },
    "priority": {
      "enum": ["low", "medium", "high"]
    },
    "summary": {
      "type": "string",
      "maxLength": 200
    }
  }
}
Что видноСхемаЛокально
priority = urgentНе проходит: enum без urgent.Отклонить ingest или на ручную проверку.
ticket_id — числоНе проходит: нужен string.Repair или удалить строку batch.
лишнее поле ownerНе проходит: additionalProperties:false.Убрать поле или отклонить запись.

Что исправляет каждый локальный шаг?

Bedrock — онлайн-декодер, JSONNote — офлайн QA. Порядок: JSON по schema, repair ограждений, строки JSONL.

ШагЧто обрабатывает
JSON Schema validateОбразцы API, фрагменты из логов, строки после repair.
JSON repair (markdown-ограждения)Блоки ```json``` из Playground или чата.
проверка строк JSONLBatch Bedrock: каждая строка parse + schema отдельно.

Как выполнить три шага в JSONNote?

  1. 1
    Шаг 1: validate schema

    Откройте JSON Schema. TICKET_SCHEMA в первое поле, SAMPLE_OK или JSON из лога во второе.

  2. 2
    Шаг 2: repair ограждений

    Откройте JSON Repair. Вставьте чат с ```json, снимите ограждения, снова validate.

  3. 3
    Шаг 3: строки JSONL

    Откройте инструмент JSONL. Загрузите batch Bedrock, проверьте parse каждой строки; TICKET_SCHEMA для enum или обрезки.

Вопросы

Можно ли пропустить локальный validate с Bedrock?

Нет. API гарантирует только текущее тело Invoke. Логи, batch, копии и кэши нужно снова проверять тем же schema в приложении.

Как связаны strict tools и schema output_config?

Оба используют JSON Schema при декодировании, но на разных слоях: аргументы tools и output_config. Храните schemas отдельно для локальных проверок.

Нужно ли перезапускать весь batch при сбое одной строки JSONL?

Не обязательно. JSONL-инструмент для номера строки, TICKET_SCHEMA для enum, обрезки или синтаксиса. Повтор только failed строк — дешевле полного batch.

Нужно ли additionalProperties:false в локальной schema?

Да. Выравнивайте schema запроса Bedrock и локальный TICKET_SCHEMA — иначе API и ingest расходятся.

Нужны ли streaming-ответам проверки JSONL?

Streaming: склеить один ответ, затем Schema + Repair. JSONL только для многострочных batch-файлов.

Итог

Bedrock фиксирует ответы Claude API в JSON Schema; batch, склеенный streaming, логи и вставка всё ещё ломают форму.

Решение: онлайн — output_config Bedrock; офлайн — тот же TICKET_SCHEMA, Repair ограждений, JSONL для batch.

Дальше: validate образцов Bedrock, Repair скопированных ограждений, JSONL для batch.

Назад в блог