RAG на Elasticsearch

Урок 259 из 299 курса «OpenAI Cookbook»: официальный курс OpenAI Academy (ОпенАИ) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

Этот notebook демонстрирует, как: Индексировать векторный набор данных Википедии от OpenAI в Elasticsearch Создать embedding для вопроса с помощью endpoint'а embeddings от OpenAI Выполнить семантический поиск по индексу Elasticsearch, используя закодированный вопрос Отправить лучшие результаты поиска в API endpoint Chat Completions от OpenAI для генерации с дополненной выборкой (RAG) ℹ️ Если вы уже ознакомились с нашим notebook'ом по семантическому поиску, вы можете перейти сразу к последнему шагу! ℹ️ Для этого notebook'а мы используем развертывание Elasticsearch в Elastic Cloud. Если у вас еще нет развертывания Elastic, вы можете зарегистрироваться для получения бесплатной пробной версии Elastic Cloud. Для подключения к Elasticsearch вам необходимо создать экземпляр клиента с Cloud ID и паролем для вашего развертывания. Найдите Cloud ID для вашего развертывания, перейдя по ссылке https://cloud.elastic.co/deployments и выбрав ваше развертывание. На этом шаге мы загружаем набор данных embeddings Википедии от OpenAI и извлекаем zip-файл. Далее мы используем библиотеку Pandas для чтения распакованного CSV-файла в DataFrame. Этот шаг упрощает массовую индексацию данных в Elasticsearch. Теперь нам нужно создать индекс Elasticsearch с необходимыми маппингами. Это позволит нам индексировать данные в Elasticsearch. Мы используем тип поля dense_vector для полей title_vector и content_vector. Это специальный тип поля, который позволяет нам хранить плотные векторы в Elasticsearch. Позже нам потребуется использовать поле dense_vector для kNN-поиска. Следующая функция генерирует необходимые bulk-действия, которые могут быть переданы в Bulk API Elasticsearch, чтобы мы могли эффективно индексировать несколько документов за один запрос. Для каждой строки в DataFrame функция возвращает словарь, представляющий один документ для индексации. Поскольку DataFrame большой, мы будем индексировать данные batch'ами по 100. Мы индексируем данные в Elasticsearch, используя helpers Python-клиента для Bulk API. Проверим индекс с помощью простого match-запроса.

План урока

  1. Установка пакетов и импорт модулей
  2. Подключение к Elasticsearch
  3. Загрузка набора данных
  4. Чтение CSV-файла в Pandas DataFrame.
  5. Создание индекса с маппингом
  6. Индексация данных в Elasticsearch

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды