Claude в Google Vertex AI

Подключение Claude через Google Cloud — авторизация, регионы, биллинг.

100 уроков, первые 3 бесплатно. Полный доступ: 1490 руб.

Уроки курса

  1. Welcome to the course
  2. Overview of Claude models
  3. Accessing the API
  4. Vertex AI Setup
  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. Controlling model output
  14. Structured data
  15. Structured data exercise
  16. Quiz on accessing Claude with the API
  17. Prompt evaluation
  18. A typical eval workflow
  19. Generating test datasets
  20. Running the eval
  21. Model based grading
  22. Code based grading
  23. Exercise on prompt evals
  24. Quiz on prompt evaluation
  25. Prompt engineering
  26. Being clear and direct
  27. Being specific
  28. Structure with XML tags
  29. Providing examples
  30. Exercise on prompting
  31. Quiz on prompt engineering techniques
  32. Introducing tool use
  33. Project overview
  34. Tool functions
  35. Tool schemas
  36. Handling message blocks
  37. Sending tool results
  38. Multi-turn conversations with tools
  39. Implementing multiple turns
  40. Using multiple tools
  41. The batch tool
  42. Tools for structured data
  43. The text edit tool
  44. The web search tool
  45. Quiz on tool use with Claude
  46. Introducing Retrieval Augmented Generation
  47. Text chunking strategies
  48. Text embeddings
  49. The full RAG flow
  50. Implementing the RAG flow
  51. BM25 lexical search
  52. A Multi-index RAG pipeline
  53. Reranking results
  54. Contextual retrieval
  55. Quiz on Retrieval Augmented Generation
  56. Extended thinking
  57. Image support
  58. PDF support
  59. Citations
  60. Prompt caching
  61. Rules of prompt caching
  62. Prompt caching in action
  63. Quiz on features of Claude
  64. Introducing MCP
  65. MCP clients
  66. Project setup
  67. Defining tools with MCP
  68. The server inspector
  69. Implementing a client
  70. Defining resources
  71. Accessing resources
  72. Defining prompts
  73. Prompts in the client
  74. MCP review
  75. Quiz on Model Context Protocol
  76. Anthropic apps
  77. Claude Code setup
  78. Claude Code in action
  79. Enhancements with MCP servers
  80. Parallelizing Claude Code
  81. Automated debugging
  82. Computer use
  83. How computer use works
  84. Agents and workflows
  85. Parallelization workflows
  86. Chaining workflows
  87. Routing workflows
  88. Agents and tools
  89. Environment inspection
  90. Workflows vs agents
  91. Quiz on agents and workflows
  92. Final assessment quiz
  93. Course Wrap Up
  94. Course Description
  95. Course Description
  96. Course Description
  97. Course Description
  98. Course Description
  99. Course Description
  100. Course Description
Контекстный поиск (Contextual Retrieval)

Введение: Преодоление проблемы потери контекста в RAG-системах

В мире больших языковых моделей (Large Language Models, LLM) и систем генерации с дополненным поиском (Retrieval Augmented Generation, RAG) способность предоставлять точные и релевантные ответы напрямую зависит от качества извлекаемой информации. Стандартный подход к подготовке документов для векторных баз данных часто включает разделение больших текстов на более мелкие фрагменты, или chunks. Это необходимо для эффективного индексирования и поиска, но порождает фундаментальную проблему: каждый отдельный chunk, вырванный из своего первоначального окружения, теряет связь с более широким контекстом исходного документа.

Представьте себе объемный отчет, разбитый на сотни мелких абзацев. Когда система RAG извлекает один такой chunk в ответ на запрос, этот фрагмент может содержать важную информацию, но без понимания, откуда он взят в документе, к чему относится или какие другие разделы его дополняют, его ценность для LLM может быть значительно снижена. Это приводит к менее точным или неполным ответам, поскольку модель не получает полной картины. Именно эту проблему призван решить контекстный поиск (Contextual Retrieval).

Что такое контекстный поиск (Contextual Retrieval)?

Контекстный поиск — это передовая техника, разработанная для повышения точности RAG-систем путем обогащения отдельных chunks дополнительной информацией об их положении и значении в исходном документе. Вместо того чтобы просто индексировать изолированные фрагменты текста, эта методика добавляет к каждому chunk краткое описание, которое "ситуационирует" его в более широком контексте.

Основная идея заключается в том, чтобы перед добавлением chunks в поисковую базу данных (будь то векторная база данных или индекс BM25) использовать мощь LLM, такой как Claude, для генерации этого дополнительного контекста. Таким образом, когда система RAG извлекает chunk, она получает не просто фрагмент текста, а "контекстуализированный chunk", который содержит как сам текст, так и метаданные, описывающие его место и значение в исходном документе. Это значительно улучшает понимание извлеченной информации и, как следствие, качество генерируемых ответов.

Как работает контекстный поиск: Пошаговое руководство

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

  1. Разделение документа: Сначала исходный документ разбивается на стандартные chunks, как это обычно делается для RAG-систем.
  2. Подготовка запроса для Claude: Для каждого отдельного chunk формируется специальный запрос к Claude. Этот запрос включает в себя сам chunk и, что критически важно, часть или весь исходный документ (в зависимости от его размера), из которого был извлечен chunk.
  3. Генерация контекста Claude: Claude анализирует предоставленный chunk и окружающий его текст (или весь документ) и генерирует короткий, лаконичный фрагмент текста. Этот фрагмент описывает, как данный chunk вписывается в общую структуру и содержание документа.
  4. Создание "контекстуализированного chunk": Сгенерированный Claude контекст объединяется с оригинальным chunk. Это может быть сделано путем добавления контекста в начало chunk или в виде отдельного поля метаданных.
  5. Индексирование: Полученные "контекстуализированные chunks" затем добавляются в вашу векторную базу данных и/или BM25-индексы для последующего поиска.

Например, если у вас есть раздел о разработке программного обеспечения, который упоминает инцидент 2023 года, Claude может сгенерировать такой контекст: "Этот раздел взят из более крупного отчета о междисциплинарной группе. Он включает упоминание об INC-2023-04-011, которое также упоминается в разделе 'Анализ кибербезопасности'." Такой обогащенный chunk значительно повышает вероятность того, что он будет извлечен по релевантным запросам, даже если сам chunk напрямую не содержит всех этих связей.

Работа с большими документами: Ограничения контекстного окна Claude

Одним из распространенных вызовов при работе с LLM, такими как Claude, является ограничение на размер входного текста, известный как context window. Если исходный документ слишком велик, чтобы полностью поместиться в Claude's context window вместе с обрабатываемым chunk, необходимо применить более интеллектуальный подход к предоставлению контекста.

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

Комбинируя эти элементы, вы даете Claude достаточно информации для эффективного "ситуационирования" chunk, даже если полный документ не может быть передан. Это компромисс между полнотой контекста и ограничениями context window, который оказывается весьма эффективным на практике.

Пример реализации: Обогащение фрагментов с помощью Claude

Для того чтобы Claude мог эффективно сгенерировать контекст для chunk, необходимо правильно сформулировать запрос (prompt). Запрос должен четко указывать, что требуется от модели, и предоставлять ей необходимую информацию.

Типичный prompt для Claude может выглядеть следующим образом:


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

        Вот исходный документ:
        <document>
        {source_text}
        </document>

        Вот фрагмент, который мы хотим ситуационировать в рамках всего документа:
        <chunk>
        {text_chunk}
        </chunk>

        Ответьте только лаконичным контекстом и ничем иным.
    

Здесь {source_text} будет заменено на полный или сокращенный исходный документ, а {text_chunk} — на текущий обрабатываемый фрагмент. Использование XML-тегов, таких как <document> и <chunk>, помогает Claude четко различать различные части входных данных и фокусироваться на задаче.

Когда вы работаете с очень большими документами, где полный source_text не помещается в context window, логика выбора контекста для source_text должна быть более сложной. Вы можете реализовать функцию, которая для каждого chunk собирает контекст, включая:

Эти выбранные фрагменты затем объединяются в одну строку, которая и передается как source_text в prompt к Claude. После получения ответа от Claude, сгенерированный контекст добавляется к оригинальному chunk, и уже этот обогащенный chunk индексируется в вашей системе поиска.

Когда использовать контекстный поиск? Преимущества и компромиссы

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

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

Компромиссы: Важно учитывать, что контекстный поиск добавляет дополнительный этап обработки. Каждая генерация контекста для chunk требует отдельного вызова API к Claude, что увеличивает время обработки и, соответственно, затраты. Поэтому решение об использовании этой техники должно основываться на балансе между необходимостью в высокой точности и доступными ресурсами. Для простых документов с минимальными внутренними связями стандартное разбиение на chunks может быть вполне достаточным.

Заключение

Контекстный поиск (Contextual Retrieval) представляет собой мощное улучшение для RAG-систем, особенно при работе со сложными и объемными документами. Используя возможности LLM, таких как Claude, для интеллектуального обогащения фрагментов текста, мы можем значительно улучшить релевантность поиска и качество генерируемых ответов. Хотя это и требует дополнительных вычислительных ресурсов, для критически важных приложений, где точность имеет первостепенное значение, преимущества контекстного поиска могут быть неоценимы.