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

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

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

Как работает кэширование промптов

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

Механизм кэширования работает на уровне компонентов запроса, позволяя вам выборочно кэшировать части, которые остаются неизменными.

Настройка кэширования для схем инструментов (Tool Schemas)

Схемы инструментов (tool schemas) часто бывают сложными и объемными, но при этом стабильными в рамках одной сессии или функции приложения. Кэширование этих схем может значительно сократить количество обрабатываемых token'ов. Чтобы кэшировать ваши схемы инструментов, вам необходимо добавить поле cache_control к последнему инструменту в вашем списке. Важно сделать это таким образом, чтобы не модифицировать исходные определения инструментов, особенно если они используются в других частях вашего кода.

Вот рекомендуемый способ реализации:

if tools:
    tools_clone = tools.copy()
    last_tool = tools_clone[-1].copy()
    last_tool["cache_control"] = {"type": "ephemeral"}
    tools_clone[-1] = last_tool
    params["tools"] = tools_clone

Этот подход создает копии как самого списка инструментов (tools_clone), так и последнего инструмента в этом списке (last_tool) перед добавлением поля cache_control. Хотя технически вы могли бы напрямую изменить tools[-1]["cache_control"], копирование предотвращает потенциальные проблемы, если вы позже измените порядок инструментов или используете исходный список в другом контексте. Таким образом, вы обеспечиваете чистоту и предсказуемость вашего кода.

Кэширование системных промптов (System Prompts)

Системные промпты (system prompts) часто содержат инструкции, контекст или персону, которые остаются неизменными на протяжении множества взаимодействий. Кэширование системного промпта работает аналогично кэшированию схем инструментов. Вместо того чтобы передавать системный промпт как простую строку, его необходимо структурировать как текстовый блок с полем cache_control.

Пример того, как это сделать:

if system:
    params["system"] = [
        {
            "type": "text",
            "text": system,
            "cache_control": {"type": "ephemeral"}
        }
    ]

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

Понимание поведения кэша и метрик

Когда вы выполняете запросы с включенным кэшированием, вы увидите различные паттерны использования token'ов в ответе API, которые помогут вам понять, как работает кэш. Эти метрики предоставляют прозрачность и позволяют убедиться, что кэширование работает так, как ожидалось:

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

Порядок кэширования и точки останова

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

  1. Инструменты (tools), если они предоставлены.
  2. Системный промпт (system prompt), если он предоставлен.

Эта гранулярность кэширования означает, что вы платите только за обработку тех частей запроса, которые фактически изменились. Например, если вы меняете свой системный промпт, но сохраняете те же самые инструменты, вы увидите частичное чтение из кэша для инструментов (cache_read_input_tokens) и новую запись в кэш для системного промпта (cache_creation_input_tokens). Это позволяет максимально эффективно использовать ресурсы и оптимизировать затраты.

Практические рекомендации по использованию кэширования

Чтобы максимально эффективно использовать кэширование промптов, учитывайте следующие практические соображения:

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