Claude в Google Vertex AI

Подключение Claude через Google Cloud — авторизация, регионы, биллинг.

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

Уроки курса

  1. Welcome to the course
  2. Overview of Claude models
  3. Accessing the API
  4. Vertex AI Setup
  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. Controlling model output
  14. Structured data
  15. Structured data exercise
  16. Quiz on accessing Claude with the API
  17. Prompt evaluation
  18. A typical eval workflow
  19. Generating test datasets
  20. Running the eval
  21. Model based grading
  22. Code based grading
  23. Exercise on prompt evals
  24. Quiz on prompt evaluation
  25. Prompt engineering
  26. Being clear and direct
  27. Being specific
  28. Structure with XML tags
  29. Providing examples
  30. Exercise on prompting
  31. Quiz on prompt engineering techniques
  32. Introducing tool use
  33. Project overview
  34. Tool functions
  35. Tool schemas
  36. Handling message blocks
  37. Sending tool results
  38. Multi-turn conversations with tools
  39. Implementing multiple turns
  40. Using multiple tools
  41. The batch tool
  42. Tools for structured data
  43. The text edit tool
  44. The web search tool
  45. Quiz on tool use with Claude
  46. Introducing Retrieval Augmented Generation
  47. Text chunking strategies
  48. Text embeddings
  49. The full RAG flow
  50. Implementing the RAG flow
  51. BM25 lexical search
  52. A Multi-index RAG pipeline
  53. Reranking results
  54. Contextual retrieval
  55. Quiz on Retrieval Augmented Generation
  56. Extended thinking
  57. Image support
  58. PDF support
  59. Citations
  60. Prompt caching
  61. Rules of prompt caching
  62. Prompt caching in action
  63. Quiz on features of Claude
  64. Introducing MCP
  65. MCP clients
  66. Project setup
  67. Defining tools with MCP
  68. The server inspector
  69. Implementing a client
  70. Defining resources
  71. Accessing resources
  72. Defining prompts
  73. Prompts in the client
  74. MCP review
  75. Quiz on Model Context Protocol
  76. Anthropic apps
  77. Claude Code setup
  78. Claude Code in action
  79. Enhancements with MCP servers
  80. Parallelizing Claude Code
  81. Automated debugging
  82. Computer use
  83. How computer use works
  84. Agents and workflows
  85. Parallelization workflows
  86. Chaining workflows
  87. Routing workflows
  88. Agents and tools
  89. Environment inspection
  90. Workflows vs agents
  91. Quiz on agents and workflows
  92. Final assessment quiz
  93. Course Wrap Up
  94. Course Description
  95. Course Description
  96. Course Description
  97. Course Description
  98. Course Description
  99. Course Description
  100. Course Description

Управление структурированным выводом Claude: Получение точных данных без лишних слов

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

Представьте, что вы разрабатываете веб-приложение, которое генерирует правила для AWS EventBridge. Пользователь вводит описание желаемого правила, нажимает кнопку "сгенерировать" и ожидает получить чистый JSON, который можно немедленно скопировать и использовать. Если Claude возвращает JSON, обернутый в блоки разметки markdown (например, ```json ... ```) с дополнительными заголовками вроде "Вот ваше правило EventBridge:" и подписями, пользователь не сможет просто нажать "копировать все". Ему придется вручную выделять только часть с JSON, что снижает удобство использования и эффективность.

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

Элегантное решение: Комбинация предварительного заполнения и последовательностей останова

Ключ к получению чистого структурированного вывода от Claude лежит в комбинации двух техник, которые, возможно, уже знакомы вам по работе с LLM: предварительное заполнение сообщения ассистента (Assistant Message Prefilling) и последовательности останова (Stop Sequences). Вместе они позволяют точно контролировать начало и конец генерации Claude, гарантируя, что вы получите только желаемые данные.

Техника 1: Предварительное заполнение сообщения ассистента (Assistant Message Prefilling)

Предварительное заполнение сообщения ассистента — это мощный способ "направить" Claude в нужное русло, прежде чем он начнет генерировать свой ответ. Вместо того чтобы позволить модели начать с нуля, вы предоставляете ей начальную часть ее собственного ответа. Claude "воспринимает" это как уже начатую работу и продолжает с того места, где вы остановились, следуя заданному формату.

Как это работает? Когда вы формируете диалог для Claude, вы обычно добавляете сообщения пользователя (user message) и, возможно, предыдущие ответы ассистента (assistant message). При предварительном заполнении вы добавляете в историю диалога сообщение ассистента, которое является не полным ответом, а лишь его началом, указывающим на желаемый формат. Например, если вы хотите получить JSON, вы можете добавить в историю сообщение ассистента, которое выглядит так: "```json". Claude, видя это, "понимает", что он уже начал писать блок JSON в формате markdown, и его следующая задача — заполнить этот блок фактическим содержимым JSON.

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

Техника 2: Последовательности останова (Stop Sequences)

Последовательности останова — это специальные строки текста, которые, будучи сгенерированными моделью, немедленно прекращают процесс генерации. Это позволяет вам точно определить, где должен закончиться вывод Claude. Если модель генерирует одну из указанных последовательностей останова, она останавливается, и все, что было сгенерировано до этого момента (исключая саму последовательность останова), возвращается вам.

В контексте структурированных данных последовательности останова идеально подходят для того, чтобы "обрезать" вывод Claude сразу после того, как он закончит генерировать нужный контент. Например, если вы предварительно заполнили сообщение ассистента строкой "```json", чтобы начать блок JSON, логично использовать "```" в качестве последовательности останова. Таким образом, как только Claude сгенерирует закрывающий тег для блока markdown, генерация немедленно прекратится, и вы получите только содержимое внутри этого блока.

Применение на практике: Получение чистого JSON

Давайте рассмотрим, как эти две техники работают вместе для получения чистого JSON, используя пример с правилом AWS EventBridge:

Представьте, что вы формируете список сообщений для Claude. Сначала вы добавляете сообщение от пользователя, которое четко указывает на желаемый формат:

add_user_message(messages, "Сгенерируй очень короткое правило EventBridge в формате json")

Затем, чтобы "подсказать" Claude, что он уже начал писать JSON, вы добавляете предварительно заполненное сообщение ассистента:

add_assistant_message(messages, "```json")

Наконец, когда вы вызываете Claude для генерации ответа, вы указываете последовательность останова, которая соответствует закрывающему тегу markdown для блока кода:

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

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

Как это работает "за кулисами"

Чтобы лучше понять эффективность этого подхода, давайте рассмотрим "мыслительный процесс" Claude, когда он обрабатывает ваш запрос:

  1. Claude читает ваше сообщение пользователя: Он "думает": "Мне нужно написать полное правило и, вероятно, описать его".
  2. Он видит предварительно заполненное сообщение ассистента: Claude "замечает", что он уже начал писать блок JSON в формате markdown ("```json").
  3. Claude корректирует свой план: Он "думает": "О, я уже начал часть JSON, поэтому мне просто нужно написать фактическое содержимое JSON".
  4. Он генерирует содержимое JSON: Claude создает необходимое правило EventBridge в формате JSON.
  5. Claude пытается закрыть блок markdown: Когда Claude завершает JSON и пытается добавить закрывающий тег "```", он немедленно натыкается на указанную вами последовательность останова.
  6. Генерация немедленно останавливается: Claude прекращает вывод, и вы получаете все, что было сгенерировано между предварительно заполненным началом и последовательностью останова — именно тот контент, который вы хотели.

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

Универсальность подхода

Эта техника работает для любого формата структурированных данных, а не только для JSON. Независимо от того, генерируете ли вы код на Python, списки с маркировкой, XML, YAML или любой другой специфический формат контента, вы можете использовать предварительное заполнение сообщения ассистента, чтобы начать ответ в нужном формате, и последовательности останова, чтобы завершить его именно там, где вам нужно.

Например, для генерации кода Python вы можете использовать "```python\n" в качестве предварительного заполнения и "```" в качестве последовательности останова. Для маркированного списка можно начать с "- " и использовать пустую строку ("\n\n") или другую подходящую последовательность для останова, если список должен быть ограничен определенным количеством пунктов.

Заключение

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