Разработка с 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: Пошаговое руководство

В предыдущих материалах мы познакомились с концепцией RAG (Retrieval Augmented Generation) и поняли, как она позволяет моделям Claude AI получать доступ к актуальной и специфической информации за пределами их первоначального обучения. Теперь пришло время перейти от теории к практике и рассмотреть пошаговую реализацию этого мощного подхода. Мы пройдем через полный пример, демонстрирующий, как разбить текст на фрагменты, сгенерировать для них embeddings, сохранить их в векторной базе данных и выполнить поиск по сходству.

Пять шагов реализации RAG

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

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

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

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

Представьте, что у вас есть годовой отчет компании. Вместо того чтобы пытаться обработать весь отчет целиком, мы можем разделить его на логические секции: "Введение", "Отдел программной инженерии", "Отдел маркетинга", "Финансовые результаты" и так далее. Каждый такой раздел становится отдельным фрагментом. Это не только упрощает процесс создания embeddings, но и гарантирует, что каждый фрагмент содержит достаточно связную информацию, чтобы быть полезным при поиске.

Шаг 2: Генерация эмбеддингов (Embeddings)

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

Для этого мы используем специальную функцию или модель, которая принимает текст и возвращает соответствующий вектор чисел. Современные системы оптимизированы для эффективной обработки, позволяя генерировать embeddings для всех наших фрагментов одновременно (так называемая пакетная обработка), что значительно ускоряет процесс.

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

Теперь, когда у нас есть embeddings для каждого фрагмента текста, нам нужно где-то их хранить. Для этого мы используем векторную базу данных (Vector Database) — специализированное хранилище, оптимизированное для эффективного хранения и поиска по числовым векторам.

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

Почему важно хранить оригинальный текст?

Представьте, что вы ищете информацию. Если база данных вернет вам только набор чисел, это будет бесполезно. Нам нужен сам текст, который был использован для генерации этих чисел. Именно поэтому мы включаем оригинальный текст фрагмента (или, по крайней мере, ссылку на него) вместе с каждым embedding в нашу базу данных. Embedding служит "указателем" или "отпечатком" текста, помогая нам найти релевантную информацию, но для использования этой информации Claude AI нужен сам текст.

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

Когда пользователь задает вопрос, например: "Что делал отдел программной инженерии в прошлом году?", этот запрос также должен быть преобразован в embedding. Мы используем ту же функцию или модель, что и для фрагментов документа, чтобы сгенерировать числовой вектор для вопроса пользователя. Это позволяет нам сравнивать запрос пользователя с embeddings, хранящимися в нашей векторной базе данных, поскольку теперь они находятся в одном и том же числовом пространстве.

Шаг 5: Поиск релевантного контента

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

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

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

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

Когда мы выполняем наш примерный запрос об отделе программной инженерии, система может вернуть следующие результаты:

Как мы уже упоминали, меньшие значения расстояния указывают на более высокое сходство. Таким образом, "Раздел 2: Программная инженерия" является наиболее релевантным нашему запросу, поскольку его embedding находится ближе всего к embedding пользовательского запроса.

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