Структурированные данные

Чему научитесь

Видео 5:59 и текст урока

К концу урока вы сможете:

Видео и текст урока.

Смотреть урок на Skilljar Structured data · 5:59

Когда нужно, чтобы Claude сгенерировал структурированные данные — JSON, код на Python или маркированный список, — часто возникает одна проблема: Claude хочет быть полезным и добавляет вокруг содержимого пояснения. Обычно это хорошо, но иногда нужны только сами данные и ничего больше.

Представьте веб-приложение, которое генерирует правила AWS EventBridge. Пользователь вводит описание, нажимает «Generate» и ждёт чистый JSON, который можно сразу скопировать. Если Claude вернёт JSON внутри markdown-блока кода и с пояснениями, пользователь не сможет просто скопировать весь ответ — придётся вручную выделять только JSON.

Приложение EventBridge Rule Generator: ввод «Rule to monitor EC2 instances», кнопка Generate и чистый JSON с кнопкой копирования.
EventBridge Rule Generator: описание «Rule to monitor EC2 instances», кнопка Generate и чистый JSON с кнопкой копирования.

Что приходит по умолчанию

По умолчанию на просьбу сгенерировать JSON можно получить что-то такое:

```json
{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["running"]
  }
}
```

This rule captures EC2 instance state changes when instances start running.

JSON правильный, но обёрнут в markdown-разметку и снабжён пояснением. В веб-приложении, где пользователю нужно скопировать чистый JSON, это мешает.

Решение: prefill сообщения assistant + stop sequences

Можно совместить предзаполнение (prefill) сообщения ассистента со стоп-последовательностями и получить ровно то содержимое, которое нужно. Вот как это работает:

messages = []

add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")

text = chat(messages, stop_sequences=["```"])

Приём работает так:

Stop sequence и prefill ```json заставляют Claude писать только JSON, без описания.
Stop sequence ``` и prefill ```json: Claude «видит», что JSON уже начат, пишет только его и останавливается на закрывающих кавычках.

В результате получается чистый JSON без лишнего форматирования:

{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["running"]
  }
}

Обработка ответа

В ответе могут оказаться лишние переводы строк. Убрать их несложно:

import json

# Clean up and parse the JSON
clean_json = json.loads(text.strip())

Не только JSON

Этот приём годится не только для JSON. Используйте его всякий раз, когда нужны структурированные данные без комментариев:

Главное — понять, во что Claude сам по себе оборачивает ваше содержимое, и использовать это как prefill и стоп-последовательность. Для кода это обычно markdown-блок; для списков могут быть другие маркеры форматирования.

Такой подход даёт точный контроль над форматом ответа Claude и сильно упрощает встраивание сгенерированного ИИ содержимого в приложения, где нужны чистые структурированные данные.

Дальше

В упражнении тем же приёмом получают три команды AWS CLI подряд — без заголовков и комментариев.

Оригинал урока: Structured data.