Разработка с 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

В процессе разработки приложений с использованием API Claude вы, вероятно, уже привыкли к тому, что ответы модели представляют собой простой текстовый блок. Однако, когда вы начинаете использовать расширенные возможности Claude, такие как интеграция с внешними инструментами (tools), структура ответов модели значительно меняется. Вместо одного текстового блока Claude теперь может возвращать многоблочные сообщения (multi-block messages), которые содержат как обычный текст, так и информацию о вызове инструментов.

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

Выполнение API-запросов с поддержкой инструментов

Чтобы Claude мог использовать внешние инструменты, вам необходимо явно указать их в вашем API-запросе. Это делается с помощью параметра tools, который принимает список JSON schemas. Каждая схема описывает одну функцию, которую Claude потенциально может вызвать, включая ее имя, описание и параметры. Это позволяет модели "понять", какие действия она может предпринять и как их выполнить.

Вот как может выглядеть структура такого запроса:

messages = []
messages.append({
    "role": "user",
    "content": "Какое сейчас точное время в формате ЧЧ:ММ:СС?"
})

response = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema], # Здесь передается схема инструмента
)

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

Понимание многоблочных сообщений

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

Такая структура позволяет Claude не только принимать решения о вызове инструментов, но и объяснять свои действия, что значительно улучшает пользовательский опыт и прозрачность работы системы.

Структура блока ToolUse

Блок, содержащий инструкции для вызова инструмента, называется блоком ToolUse. Он является частью списка content в ответе Claude и имеет следующую структуру:

Примерно так может выглядеть часть ответа Claude, содержащая блок ToolUse:

[
    {
        "type": "text",
        "text": "Я могу помочь вам узнать текущее время. Позвольте мне найти эту информацию для вас."
    },
    {
        "type": "tool_use",
        "id": "toolu_01A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4",
        "name": "get_current_datetime",
        "input": {}
    }
]

Ваша программа должна будет проанализировать этот список content, найти блок с "type": "tool_use", извлечь из него name и input, а затем выполнить соответствующую функцию в вашей серверной части или клиентском приложении.

Управление историей диалога с многоблочными сообщениями

Важно помнить, что Claude, как и большинство современных LLM (Large Language Models), не хранит историю диалога. Вы должны управлять ею вручную, передавая всю необходимую контекстную информацию с каждым новым API-запросом. При работе с ответами, содержащими вызовы инструментов, крайне важно сохранять всю структуру content, включая все блоки, как текстовые, так и ToolUse.

Вот как следует правильно добавлять многоблочное сообщение от assistant в вашу историю диалога:

messages.append({
    "role": "assistant",
    "content": response.content # Сохраняем весь список блоков
})

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

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

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

  1. Отправка сообщения пользователя с описанием инструмента: Вы отправляете запрос пользователя в Claude, включая параметр tools со JSON schemas доступных функций.
  2. Получение сообщения от ассистента с текстовым блоком и блоком ToolUse: Claude отвечает сообщением, которое содержит как объяснение своих действий, так и инструкции для вызова инструмента.
  3. Извлечение информации об инструменте и выполнение фактической функции: Ваша программа парсит ответ Claude, извлекает имя функции и ее параметры из блока ToolUse, а затем вызывает соответствующую функцию в вашей системе.
  4. Отправка результата выполнения инструмента обратно в Claude вместе с полной историей диалога: После выполнения функции вы формируете новое сообщение, содержащее результат работы инструмента, и отправляете его Claude, при этом обязательно включая всю предыдущую историю диалога.
  5. Получение окончательного ответа от Claude: Claude обрабатывает результат выполнения инструмента и предоставляет окончательный, осмысленный ответ пользователю.

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

Адаптация вспомогательных функций

Если вы использовали вспомогательные функции, такие как add_user_message() или add_assistant_message(), для упрощения работы с историей диалога, вам потребуется обновить их. Предыдущие версии этих функций, вероятно, были разработаны для обработки только одиночных текстовых блоков. Теперь же им необходимо уметь работать с более сложными структурами content, которые могут включать как текстовые блоки, так и блоки ToolUse.

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

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