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

Гибридный поиск: Сочетание семантического и лексического поиска с BM25 для RAG-систем

При разработке систем на основе больших языковых моделей (LLM), таких как Claude, часто возникает необходимость предоставить модели доступ к актуальной и специфической информации, которой нет в ее исходных тренировочных данных. Для этого используется подход, известный как Retrieval Augmented Generation (RAG). Суть RAG заключается в том, чтобы сначала найти релевантные фрагменты информации из большой базы данных, а затем передать их LLM в качестве контекста для генерации ответа. Однако, как показывает практика, полагаться исключительно на один тип поиска в RAG-пайплайнах не всегда оптимально. В этой статье мы рассмотрим, почему чисто семантический поиск может быть недостаточным и как алгоритм BM25, используемый для лексического поиска, помогает создать более надежную и точную систему.

Проблемы чисто семантического поиска

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

Например, если вы ищете "столица Франции", семантический поиск легко найдет документы, где упоминается "Париж", "город любви" или "Эйфелева башня", поскольку все эти понятия семантически связаны. Это его сильная сторона. Однако у этого подхода есть и обратная сторона. Представьте, что вы ищете конкретный идентификатор инцидента, например, "INC-2023-Q4-011", в большом корпоративном документе. Семантический поиск, фокусируясь на контексте и значении, может вернуть разделы, которые семантически связаны с темой кибербезопасности или инцидентов, но при этом не содержат точного совпадения с искомым ID. Он может даже вернуть разделы, которые вообще не упоминают этот ID, но кажутся ему "близкими" по смыслу к другим частям документа, где ID все же присутствует. Это происходит потому, что для семантического поиска важнее концептуальное сходство, а не точное совпадение терминов.

Введение в лексический поиск и алгоритм BM25

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

Одним из наиболее популярных и эффективных алгоритмов для лексического поиска в RAG-системах является BM25 (Best Match 25). Этот алгоритм оценивает релевантность документа запросу, основываясь на частоте появления терминов запроса в документе и их редкости во всей коллекции документов. Он является развитием более ранних моделей, таких как TF-IDF (Term Frequency-Inverse Document Frequency), и отлично подходит для поиска конкретных, уникальных идентификаторов, имен или технических терминов.

Как работает алгоритм BM25?

Давайте разберем процесс работы BM25 по шагам, чтобы понять его логику:

  1. Шаг 1: Токенизация запроса.

    Первым делом пользовательский запрос разбивается на отдельные слова или "токены". Например, запрос "Что случилось с INC-2023-Q4-011?" может быть токенизирован как ["Что", "случилось", "с", "INC-2023-Q4-011"]. Алгоритм игнорирует так называемые "стоп-слова" (часто встречающиеся слова, такие как "что", "с", "и", "в", которые не несут большой смысловой нагрузки для поиска) или присваивает им очень низкий вес.

  2. Шаг 2: Подсчет частоты терминов.

    Для каждого токена из запроса алгоритм подсчитывает, как часто он встречается в каждом документе вашей коллекции. Например, слово "инцидент" может встречаться 5 раз в одном документе и 0 раз в другом. Также учитывается общая частота каждого термина во всей коллекции документов. Это помогает понять, насколько термин является общим или специфическим.

  3. Шаг 3: Взвешивание терминов по важности.

    Здесь BM25 проявляет свою "интеллектуальность". Он присваивает каждому термину запроса "вес" или "важность". Чем реже термин встречается во всей коллекции документов, тем выше его важность. Например, слово "с" будет иметь очень низкую важность, потому что оно встречается почти в каждом документе. В то же время, уникальный идентификатор "INC-2023-Q4-011", который встречается редко, получит очень высокий вес. Это гарантирует, что поиск будет отдавать приоритет документам, содержащим редкие и специфические термины из запроса.

  4. Шаг 4: Определение наилучших совпадений.

    Наконец, BM25 вычисляет "оценку релевантности" для каждого документа относительно запроса. Эта оценка формируется на основе взвешенных частот терминов запроса в документе. Документы, которые содержат больше экземпляров высоко-взвешенных терминов (то есть редких и важных слов из запроса), получают более высокую оценку и считаются более релевантными. Результаты ранжируются по этой оценке, и возвращаются наиболее релевантные документы.

Преимущества BM25 в RAG-системах

Использование BM25 в RAG-системах дает ряд значительных преимуществ, особенно когда речь идет о поиске специфической информации:

Гибридный поиск: объединение сил

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

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

Для реализации BM25 в RAG-пайплайне обычно требуется предварительная обработка данных: текст разбивается на логические "чанки" (фрагменты), которые затем индексируются в специальном хранилище BM25. При выполнении запроса это хранилище быстро находит наиболее релевантные чанки на основе алгоритма BM25. Затем эти результаты объединяются с результатами семантического поиска, чтобы предоставить Claude наиболее полный и точный контекст.

Заключение

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

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