Разработка с Claude API

Запросы, потоковые ответы, tool use, структурированный вывод и стоимость.

92 уроков, первые 3 бесплатно. Полный доступ: 1490 руб.

Уроки курса

  1. Welcome to the course
  2. Overview of Claude models
  3. Accessing the API
  4. Getting an API key
  5. Making a request
  6. Multi-Turn conversations
  7. Chat exercise
  8. System prompts
  9. System prompts exercise
  10. Temperature
  11. Course satisfaction survey
  12. Response streaming
  13. Structured data
  14. Structured data exercise
  15. Quiz on accessing Claude with the API
  16. Prompt evaluation
  17. A typical eval workflow
  18. Generating test datasets
  19. Running the eval
  20. Model based grading
  21. Code based grading
  22. Exercise on prompt evals
  23. Quiz on prompt evaluation
  24. Prompt engineering
  25. Being clear and direct
  26. Being specific
  27. Structure with XML tags
  28. Providing examples
  29. Exercise on prompting
  30. Quiz on prompt engineering techniques
  31. Introducing tool use
  32. Project overview
  33. Tool functions
  34. Tool schemas
  35. Handling message blocks
  36. Sending tool results
  37. Multi-turn conversations with tools
  38. Implementing multiple turns
  39. Using multiple tools
  40. Fine grained tool calling
  41. The text edit tool
  42. The web search tool
  43. Quiz on tool use with Claude
  44. Introducing Retrieval Augmented Generation
  45. Text chunking strategies
  46. Text embeddings
  47. The full RAG flow
  48. Implementing the RAG flow
  49. BM25 lexical search
  50. A Multi-Index RAG pipeline
  51. Extended thinking
  52. Image support
  53. PDF support
  54. Citations
  55. Prompt caching
  56. Rules of prompt caching
  57. Prompt caching in action
  58. Code execution and the Files API
  59. Quiz on features of Claude
  60. Introducing MCP
  61. MCP clients
  62. Project setup
  63. Defining tools with MCP
  64. The server inspector
  65. Implementing a client
  66. Defining resources
  67. Accessing resources
  68. Defining prompts
  69. Prompts in the client
  70. MCP review
  71. Quiz on Model Context Protocol
  72. Anthropic apps
  73. Claude Code setup
  74. Claude Code in action
  75. Enhancements with MCP servers
  76. Agents and workflows
  77. Parallelization workflows
  78. Chaining workflows
  79. Routing workflows
  80. Agents and tools
  81. Environment inspection
  82. Workflows vs agents
  83. Quiz on Agents and Workflows
  84. Final Assessment
  85. Course Wrap Up
  86. What You'll Learn
  87. What You'll Learn
  88. What You'll Learn
  89. What You'll Learn
  90. What You'll Learn
  91. What You'll Learn
  92. What You'll Learn

Получение структурированных данных от Claude: Точный контроль над форматом вывода

При работе с большими языковыми моделями (LLM), такими как Claude, часто возникает необходимость получить от них структурированные данные. Будь то код в формате JSON, фрагмент кода на Python или просто маркированный список, разработчики стремятся к чистому, готовому к использованию выводу. Однако по умолчанию Claude, стремясь быть максимально полезным, часто добавляет к сгенерированному контенту пояснительный текст или оборачивает его в форматирование, например, блоки кода Markdown. Хотя это обычно удобно для человека, для программных приложений, которым требуется только "сырые" данные, это создает значительные трудности.

Представьте, что вы создаете веб-приложение, которое генерирует правила для AWS EventBridge. Пользователи вводят описание, нажимают кнопку "сгенерировать" и ожидают получить чистый JSON, который можно немедленно скопировать и использовать. Если Claude возвращает JSON, обернутый в блоки кода Markdown с пояснительным текстом, пользователи не смогут просто скопировать весь ответ — им придется вручную выбирать только часть JSON. Это не только ухудшает пользовательский опыт, но и усложняет автоматическую обработку данных в приложении.

Проблема с ответами по умолчанию

По умолчанию, когда вы просите Claude сгенерировать JSON, вы можете получить что-то вроде следующего:

```json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}
```
Это правило фиксирует изменения состояния экземпляров EC2, когда экземпляры начинают работать.

Как видно из примера, сам JSON корректен, но он обернут в форматирование Markdown (тройные обратные кавычки) и включает дополнительный пояснительный текст. Для веб-приложения, где пользователям нужно скопировать чистый JSON, это создает ненужные препятствия и требует дополнительной обработки для извлечения нужных данных.

Решение: Предзаполнение сообщения ассистента и стоп-последовательности

Чтобы получить именно тот контент, который вам нужен, без лишних оберток и комментариев, можно эффективно комбинировать две мощные техники: предзаполнение сообщения ассистента (Assistant Message Prefilling) и стоп-последовательности (Stop Sequences). Этот подход позволяет точно контролировать формат вывода Claude, делая его идеальным для интеграции AI-генерируемого контента в приложения, где критически важны чистые, структурированные данные.

Как это работает?

Суть метода заключается в том, чтобы "подсказать" Claude, что он уже начал генерировать нужный формат, а затем "остановить" его, как только он попытается выйти за рамки этого формата. Рассмотрим пошагово, как это достигается:

  1. Сообщение пользователя (User Message): Вы начинаете диалог с Claude, четко формулируя запрос на генерацию структурированных данных. Например: "Сгенерируй очень короткое правило EventBridge в формате json".
  2. Предзаполнение сообщения ассистента (Assistant Message Prefilling): Вместо того чтобы ждать полного ответа от Claude, вы сразу же добавляете в историю диалога сообщение от ассистента, которое имитирует начало желаемого структурированного вывода. Для JSON это будет "```json". Это заставляет Claude "думать", что он уже начал блок кода Markdown и должен продолжить его содержимое.
  3. Генерация Claude: Claude, получив такой контекст, продолжает генерацию, фокусируясь исключительно на содержимом JSON, поскольку он "полагает", что находится внутри блока кода.
  4. Стоп-последовательность (Stop Sequence): Вы определяете специальную стоп-последовательность, которая сигнализирует Claude немедленно прекратить генерацию, как только он попытается ее произнести. В нашем случае, это будет "```" — последовательность, которой Claude обычно закрывает блоки кода Markdown. Как только Claude пытается сгенерировать закрывающую последовательность, генерация немедленно прекращается.

В результате вы получаете чистый JSON без лишнего форматирования и пояснительного текста. Вот как это может выглядеть на концептуальном уровне при использовании API:

messages = []
add_user_message(messages, "Сгенерируй очень короткое правило EventBridge в формате json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])

В этом примере функция add_user_message добавляет запрос пользователя, а add_assistant_message — предзаполненное начало ответа. Вызов chat затем инициирует генерацию, которая будет остановлена, как только Claude попытается сгенерировать "```".

Обработка ответа и универсальность метода

После получения ответа вы можете заметить несколько лишних символов новой строки в начале или конце. Их легко удалить с помощью стандартных методов обработки строк, таких как .strip() в Python, чтобы получить абсолютно чистый JSON.

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

Этот подход дает вам точный контроль над форматом вывода Claude, значительно упрощая интеграцию AI-генерируемого контента в приложения, где чистые, структурированные данные являются неотъемлемой частью функциональности. Освоив эту технику, вы сможете создавать более надежные и эффективные решения на базе Claude API.