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

Полный цикл RAG: От запроса к точному ответу с Claude

В мире больших языковых моделей (LLM), таких как Claude, способность генерировать связные и креативные ответы поражает. Однако их знания ограничены данными, на которых они были обучены. Что делать, если нам нужно, чтобы Claude отвечал на вопросы, используя самую свежую, специфическую или конфиденциальную информацию, которой нет в его тренировочных данных? Здесь на помощь приходит Retrieval Augmented Generation (RAG) — мощный подход, который позволяет LLM "заглядывать" во внешние источники знаний в реальном времени, значительно повышая точность и релевантность ответов.

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

Шаг 1: Подготовка данных — Разделение текста на фрагменты (Chunking)

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

Представьте, что у нас есть два простых раздела из более крупного документа:

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

Шаг 2: Создание эмбеддингов (Embeddings)

После того как текст разбит на фрагменты, следующим шагом является преобразование каждого фрагмента в числовое представление, называемое эмбеддингом (embedding). Эмбеддинги — это многомерные векторы (списки чисел), которые улавливают семантическое значение текста. Тексты со схожим смыслом будут иметь эмбеддинги, расположенные близко друг к другу в многомерном пространстве.

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

Для нашего Раздела 1 (Медицинские исследования), мы могли бы получить вектор, который сильно ориентирован на медицину, но с некоторыми элементами программного обеспечения из-за слова "бактерии" (bug, которое может быть и программной ошибкой). Например, [0.8, 0.2].

Для Раздела 2 (Разработка программного обеспечения), мы бы получили вектор, сильно ориентированный на программное обеспечение, но с медицинскими оттенками из-за "векторов заражения" (infection vectors). Например, [0.1, 0.9].

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

Шаг 3: Хранение эмбеддингов в векторной базе данных (Vector Database)

Созданные эмбеддинги затем сохраняются в специализированной базе данных, называемой векторной базой данных (vector database). Эти базы данных оптимизированы для эффективного хранения, сравнения и поиска среди огромных списков чисел (векторов). В отличие от традиционных реляционных баз данных, векторные базы данных специально разработаны для быстрого поиска ближайших соседей в многомерном пространстве.

На этом этапе предварительная обработка данных завершена. Все фрагменты текста преобразованы в числовые векторы и готовы к быстрому поиску. Теперь система ждет запроса от пользователя.

Шаг 4: Обработка пользовательского запроса

Когда пользователь задает вопрос, например: "Мне интересно о компании. В частности, что делал отдел разработки программного обеспечения в этом году?", этот запрос также пропускается через ту же самую модель эмбеддингов, которая использовалась для создания эмбеддингов исходных документов.

Наш пример запроса будет преобразован в эмбеддинг, который, вероятно, будет иметь низкий "медицинский" балл и высокий "программный" балл. Например, [0.15, 0.85] после нормализации.

Шаг 5: Поиск похожих эмбеддингов и релевантной информации

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

Как работает сходство: Косинусное сходство (Cosine Similarity)

Векторные базы данных используют метрику, называемую косинусным сходством (cosine similarity), для определения того, насколько два эмбеддинга похожи. Эта метрика измеряет косинус угла между двумя векторами в многомерном пространстве. Чем меньше угол между векторами, тем выше их косинусное сходство, и тем более похожи соответствующие им тексты.

Ключевые моменты о косинусном сходстве:

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

Вы также можете встретить термин "косинусное расстояние" (cosine distance) в документации векторных баз данных. Оно просто рассчитывается как (1 - косинусное сходство). При использовании косинусного расстояния:

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

Шаг 6: Формирование итогового промпта для Claude

Наконец, когда наиболее релевантные фрагменты текста найдены, мы объединяем их с исходным вопросом пользователя в единый промпт (prompt) и отправляем его Claude для генерации ответа. Этот промпт специально структурирован так, чтобы Claude понимал, какая часть является вопросом, а какая — предоставленным контекстом.

Пример такого промпта может выглядеть так:

Ответьте на вопрос пользователя, используя предоставленный отчет.

<user_question>
Что делал отдел разработки программного обеспечения в этом году?
</user_question>

<report>
<h2>Раздел 2: Разработка программного обеспечения</h2>
Этот отдел приложил значительные усилия для изучения различных векторов заражения в наших распределенных системах.
</report>

Claude получает этот промпт, анализирует вопрос пользователя в свете предоставленного контекста из <report> и генерирует точный, обоснованный ответ, который напрямую использует извлеченную информацию. Таким образом, Claude не "выдумывает" ответ, а опирается на фактические данные, которые вы ему предоставили.

Заключение

Именно так работает полный цикл RAG! Система успешно извлекает наиболее релевантную информацию на основе семантического сходства и предоставляет ее в качестве контекста для Claude, обеспечивая генерацию точного и информативного ответа. RAG является краеугольным камнем для создания интеллектуальных систем, которые могут взаимодействовать с огромными объемами данных, предоставляя пользователям актуальные и достоверные ответы, выходящие за рамки первоначальных знаний LLM.

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