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

Введение в текстовые эмбеддинги: Основа семантического поиска

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

Представьте, что у вас есть огромный документ, разбитый на множество небольших частей, или "чанков". Следующий шаг в пайплайне RAG — это определение, какие из этих чанков наиболее релевантны вопросу пользователя. По сути, это задача поиска: нужно просмотреть все текстовые чанки и выявить те, которые относятся к тому, о чем спрашивает пользователь.

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

Что такое текстовый эмбеддинг?

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

Процесс создания эмбеддинга выглядит следующим образом:

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

Понимание числовых измерений эмбеддинга

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

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

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

Почему эмбеддинги так важны для RAG и семантического поиска?

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

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

Таким образом, эмбеддинги позволяют:

Генерация текстовых эмбеддингов: Практический аспект

Хотя Anthropic фокусируется на разработке мощных LLM, таких как Claude, и не предоставляет собственные модели для генерации эмбеддингов, существует множество сторонних провайдеров, предлагающих высококачественные решения. Одним из рекомендованных провайдеров является VoyageAI.

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

После получения ключа и установки соответствующей библиотеки (например, через %pip install voyageai), процесс генерации эмбеддингов становится довольно простым. Вот как может выглядеть функция для генерации эмбеддинга с использованием клиента VoyageAI:

from dotenv import load_dotenv
import voyageai
import os

load_dotenv() # Загружает переменные окружения, включая VOYAGE_API_KEY

# Инициализация клиента VoyageAI
# Предполагается, что VOYAGE_API_KEY установлен в переменных окружения
client = voyageai.Client(api_key=os.getenv("VOYAGE_API_KEY"))

def generate_embedding(text: str, model: str = "voyage-3-large", input_type: str = "query") -> list[float]:
    """
    Генерирует эмбеддинг для заданного текста с использованием модели VoyageAI.

    Args:
        text (str): Текст, для которого нужно сгенерировать эмбеддинг.
        model (str): Название модели эмбеддингов (например, "voyage-3-large").
        input_type (str): Тип входного текста ("query" для запросов, "document" для документов).

    Returns:
        list[float]: Список чисел, представляющих эмбеддинг текста.
    """
    try:
        result = client.embed([text], model=model, input_type=input_type)
        return result.embeddings[0]
    except Exception as e:
        print(f"Ошибка при генерации эмбеддинга: {e}")
        return []

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

Дальнейшие шаги: Сравнение эмбеддингов

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

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

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