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

Потоковая передача ответов (Response Streaming)

При разработке чат-приложений с использованием Claude, одной из ключевых задач является обеспечение плавного и отзывчивого взаимодействия с пользователем. Представьте: вы задаете вопрос ИИ, и на экране появляется лишь вращающийся индикатор загрузки на 10-30 секунд. Это может быть утомительно и создавать ощущение задержки. Решение этой проблемы — потоковая передача ответов, или response streaming, которая позволяет пользователям видеть, как текст появляется фрагмент за фрагментом по мере его генерации Claude, создавая гораздо более динамичное и отзывчивое взаимодействие.

Проблема со стандартными ответами

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

Как работает потоковая передача

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

Понимание событий потока

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

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

Базовая реализация потоковой передачи

Для активации потоковой передачи ответов в вашем вызове к API Claude, например, в методе messages.create, достаточно добавить параметр stream=True. Это указывает API, что вы ожидаете получить ответ в виде потока событий, а не единого полного объекта.

Вот как это может выглядеть в коде (пример на Python с использованием SDK Anthropic):

messages = []
# Добавляем сообщение пользователя
# add_user_message(messages, "Напиши описание вымышленной базы данных в одном предложении")

stream = client.messages.create(
    model="claude-3-opus-20240229", # Или другая модель Claude
    max_tokens=1000,
    messages=messages,
    stream=True # Активируем потоковую передачу
)

for event in stream:
    print(event)

В этом примере цикл for event in stream: будет итерироваться по каждому событию, отправленному Claude, позволяя вам обрабатывать их по мере поступления и обновлять пользовательский интерфейс.

Упрощенная потоковая передача текста

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

Пример использования упрощенного интерфейса:

with client.messages.stream(
    model="claude-3-opus-20240229",
    max_tokens=1000,
    messages=messages
) as stream:
    for text in stream.text_stream:
        print(text, end="")

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

Получение полного сообщения

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

Пример получения полного сообщения после потоковой передачи:

with client.messages.stream(
    model="claude-3-opus-20240229",
    max_tokens=1000,
    messages=messages
) as stream:
    for text in stream.text_stream:
        # Здесь вы отправляете каждый фрагмент текста вашему клиенту
        pass 

    # После завершения потоковой передачи получаем полное сообщение
    final_message = stream.get_final_message()
    # Теперь final_message содержит полный объект сообщения, который можно сохранить или обработать

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

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