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, создание эффективного "клиента" является ключевым шагом. Если на предыдущих этапах мы сосредоточились на создании MCP server, который предоставляет определенные инструменты и функциональность, то теперь пришло время построить клиентскую часть. Клиент — это именно то, что позволяет нашему приложению общаться с MCP server и получать доступ ко всем его возможностям, а также эффективно взаимодействовать с Claude.

Представьте себе MCP server как библиотеку, полную полезных книг (инструментов). Без библиотекаря (клиента) вы не сможете найти нужную книгу или узнать, что вообще есть в этой библиотеке. Клиент выступает в роли такого библиотекаря, упрощая взаимодействие и делая функциональность сервера доступной для вашего основного приложения.

Архитектура клиента: Упрощение сложного взаимодействия

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

Клиент MCP состоит из двух основных компонентов, работающих в тандеме:

Почему нам нужен пользовательский класс? Сессия клиента требует очистки ресурсов после завершения работы, чтобы избежать утечек памяти или открытых соединений. Наш пользовательский класс берет на себя эту ответственность, автоматически управляя соединением и его корректным завершением. Это значительно упрощает код основного приложения, позволяя разработчикам сосредоточиться на бизнес-логике, а не на деталях управления соединениями.

Роль клиента в работе с Claude и потоке приложения

Вспомните общий поток нашего приложения. Наш код командной строки (CLI code) должен взаимодействовать с Claude двумя ключевыми способами:

  1. Предоставление Claude списка доступных инструментов: Чтобы Claude мог использовать внешние функции, ему сначала нужно знать, какие инструменты доступны, что они делают и какие параметры принимают.
  2. Выполнение выбранных Claude инструментов: Когда Claude решает, что для ответа на запрос пользователя ему нужно использовать определенный инструмент (например, прочитать содержимое документа), клиент должен уметь вызвать этот инструмент на сервере и передать результат обратно Claude.

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

Реализация основных функций клиента

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

Функция получения списка инструментов (list_tools)

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

Концептуально, эта функция выглядит так:

async def list_tools(self) -> list[types.Tool]:
    result = await self.session().list_tools()
    return result.tools

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

Функция вызова инструмента (call_tool)

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

Концептуально, эта функция выглядит так:

async def call_tool(
    self, tool_name: str, tool_input: dict
) -> types.CallToolResult | None:
    return await self.session().call_tool(tool_name, tool_input)

Здесь мы передаем имя инструмента (tool_name) и входные параметры (tool_input), которые были предоставлены Claude, на сервер. Сервер выполняет запрошенную операцию, и клиент возвращает результат обратно. Например, если Claude решает использовать инструмент read_doc_contents для чтения файла report.pdf, клиент получит tool_name='read_doc_contents' и tool_input={'filename': 'report.pdf'}, передаст их серверу, а затем вернет содержимое файла, полученное от сервера, обратно Claude.

Тестирование клиента: Проверка работоспособности

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

Изолированное тестирование клиента

Файл клиента обычно включает в себя тестовый механизм, который подключается к MCP server и выполняет команды. Запуск такого тестового скрипта (например, uv run mcp_client.py) должен вернуть список доступных инструментов с их описаниями и схемами входных данных. Вы должны увидеть инструменты, подобные read_doc_contents, которые мы определили на нашем сервере. Это подтверждает, что клиент успешно устанавливает соединение и может запрашивать информацию о доступных инструментах.

Сквозное тестирование (End-to-End Testing)

Теперь, когда и клиент, и сервер работают, мы можем протестировать полный поток взаимодействия. Запуск нашего основного приложения и запрос к Claude, например, "Каково содержимое документа report.pdf?", должен привести к следующей последовательности событий:

  1. Клиент отправляет список доступных инструментов Claude.
  2. Claude анализирует запрос пользователя и список инструментов, затем решает использовать инструмент read_doc_contents, предоставляя необходимые параметры (например, имя файла).
  3. Наш клиент получает это решение от Claude и вызывает инструмент read_doc_contents на MCP server, передавая ему имя файла.
  4. MCP server выполняет операцию (читает содержимое report.pdf) и возвращает результат клиенту.
  5. Клиент передает содержимое документа обратно Claude.
  6. Claude обрабатывает полученную информацию и формирует связный ответ для пользователя, используя данные из документа.

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

Заключение

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