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

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

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

Извлечение параметров и выполнение функции инструмента

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

Ваша задача начинается с извлечения этой информации. Типичный ответ Claude, требующий использования инструмента, будет содержать структуру, из которой вы можете получить доступ к tool_use_block. Например, если это первый блок в ответе, вы можете получить к нему доступ следующим образом:

tool_use_block = response.content[1]

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

input_params = tool_use_block.input

После того как вы получили input_params, которые обычно представляют собой словарь, вы можете вызвать свою функцию. Если ваша функция ожидает именованные аргументы, вы можете использовать оператор двойной звездочки (**) для распаковки словаря в эти аргументы. Например, если у вас есть функция get_current_datetime, которая не принимает аргументов или принимает их опционально:

result = get_current_datetime(**input_params)

Важно помнить, что функция get_current_datetime (или любая другая функция, которую вызывает Claude) должна быть реализована вами в вашей системе. Claude лишь запрашивает ее выполнение, но не выполняет ее сам.

Отправка результатов обратно Claude с помощью tool_result_block

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

Правильное формирование tool_result_block гарантирует, что Claude получит всю необходимую информацию для продолжения диалога и формирования окончательного ответа.

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

Claude — это мощный LLM, способный обрабатывать сложные запросы. В некоторых случаях, особенно когда пользователь задает вопрос, требующий нескольких независимых действий, Claude может запросить выполнение нескольких инструментов в одном ответе. Например, если пользователь спросит: "Сколько будет 10 + 10 и сколько будет 30 + 30?", Claude может ответить двумя отдельными tool_use_block, каждый из которых будет вызывать функцию калькулятора.

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

Формирование последующего запроса к Claude

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

Пример того, как tool_result_block добавляется в историю сообщений:

messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id, // ID из оригинального tool_use_block
        "content": result, // Результат вашей функции
        "is_error": False // Указываем, была ли ошибка
    }]
})

Обратите внимание, что role для tool_result устанавливается как "user". Это потому, что вы, как система, сообщаете Claude о результате действия, которое он запросил. Вы выступаете в роли "пользователя", который предоставляет информацию Claude.

Также очень важно включить схему инструмента (tool schema) в ваш последующий запрос, даже если Claude, вероятно, не будет снова вызывать инструменты в этом конкретном шаге. Claude нуждается в схеме инструмента для того, чтобы правильно понимать ссылки на инструменты в истории разговора и поддерживать контекст.

Полный рабочий процесс использования инструментов

Давайте подытожим весь процесс взаимодействия с инструментами Claude:

  1. Пользователь задает вопрос, который требует использования внешнего инструмента (например, "Какая сейчас дата и время?").
  2. Claude анализирует запрос и определяет, что ему нужен инструмент. Он отвечает tool_use_block, указывая, какой инструмент вызвать и с какими параметрами.
  3. Ваша система извлекает параметры из tool_use_block и выполняет запрошенную функцию инструмента (например, вызывает вашу функцию get_current_datetime()).
  4. Вы формируете tool_result_block с результатом выполнения функции (или информацией об ошибке) и отправляете последующий запрос к Claude. Этот запрос включает полную историю сообщений, tool_result_block и схему инструмента.
  5. Claude получает результат, обрабатывает его и предоставляет окончательный текстовый ответ пользователю, используя информацию, полученную от инструмента.

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