Создание RAG приложений с помощью Apache Cassandra, Python и Ollama

Генерация с дополнением извлечением (RAG) является наиболее популярным подходом для получения данных в реальном времени или обновленных данных из источника на основе текстового ввода пользователей. Таким образом, это дает возможность всем нашим поисковым приложениям использовать современные нейронные технологии поиска.

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

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

Эта диаграмма предоставляет концептуальный обзор сравнения векторов

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

В этой статье мы реализуем использование векторной базы данных и модели генерации встраиваний в приложении на Python. Если вы впервые или в nth раз читаете эту концепцию, вам нужны только инструменты для работы, и никакая подписка на инструменты не требуется. Вы можете просто скачать инструменты и начать.

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

  • Операционная система – Ubuntu Linux
  • Векторная база данных – Apache Cassandra
  • Модель встраивания – nomic-embed-text
  • Язык программирования – Python

Ключевые преимущества этого стека

  • С открытым исходным кодом
  • Изолированные данные для соблюдения стандартов комплаенса

This diagram provides a high-level dependency architecture of the system

Руководство по реализации

Вы можете реализовать и следовать инструкциям, если выполнены предварительные условия; в противном случае читайте до конца, чтобы понять концепции.

Предварительные условия

Настройка модели Ollama

Ollama — это сервер промежуточного программного обеспечения с открытым исходным кодом, который выступает в качестве абстракции между генеративным ИИ и приложениями, устанавливая все необходимые инструменты для того, чтобы модели генеративного ИИ были доступны для использования как CLI и API на машине. Он имеет большинство открыто доступных моделей, таких как llama, phi, mistral, snowflake-arctic-embed и т.д. Он кроссплатформенный и может быть легко настроен в ОС.

В Ollama мы загрузим nomic-embed-text модель для генерации эмбеддингов.

Запустите в командной строке:

Plain Text

 

Эта модель генерирует эмбеддинги размером 768 векторов.

Настройка и скрипты Apache Cassandra

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

Примечание: Cassandra требует операционную систему Linux для работы; также ее можно установить в виде образа Docker.

Установка

Скачайте Apache Cassandra с https://cassandra.apache.org/_/download.html.

Настройте Cassandra в вашем PATH.

Запустите сервер, выполнив следующую команду в командной строке:

Plain Text

 

Таблица

Откройте новый терминал Linux и введите cqlsh; это откроет оболочку для языка запросов Cassandra. Теперь выполните приведенные ниже скрипты, чтобы создать ключевое пространство embeddings, таблицу document_vectors и необходимый индекс edv_ann_index для выполнения векторного поиска.

SQL

 

Примечание: content_vector VECTOR <FLOAT, 768> отвечает за хранение векторов длиной 768, которые генерируются моделью.

Этап 1: Мы готовы с настройкой базы данных для хранения векторов.

Код на Python

Этот язык программирования определенно не нуждается в представлении; он прост в использовании и любим в индустрии с сильной поддержкой сообщества.

Виртуальная среда

Настройте виртуальную среду:

Plain Text

 

Активируйте виртуальную среду:

Plain Text

 

Пакеты

Скачайте пакет Datastax Cassandra:

Plain Text

 

Скачайте пакет requests:

Plain Text

 

Файл

Создайте файл с именем app.py.

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

Python

 

Теперь выполните этот файл с помощью командной строки в виртуальной среде:

Plain Text

 

После выполнения файла и вставки документов это можно проверить, обратившись к базе данных Cassandra из консоли cqlsh. Для этого откройте cqlsh и выполните:

SQL

 

Это вернет 10 вставленных документов в базу данных, как показано на скриншоте ниже.

Этап 2: Мы завершили настройку данных в нашей векторной базе данных.

Теперь мы напишем код для запроса документов на основе косинусного сходства. Косинусное сходство – это скалярное произведение двух векторных значений. Его формула: A.B / |A||B|. Это косинусное сходство поддерживается внутренне Apache Cassandra, что помогает нам вычислять все в базе данных и эффективно обрабатывать большие объемы данных.

Приведенный ниже код сам по себе понятен; он извлекает три лучших результатов на основе косинусного сходства с использованием ORDER BY <имя столбца> ANN OF <text_vector> и также возвращает значения косинусного сходства. Чтобы выполнить этот код, необходимо убедиться, что к этому векторному столбцу применен индекс.

Python

 

Не забудьте закомментировать код вставки:

Python

 

Теперь выполните код Python, используя python app.py.

Мы получим вывод ниже:

Plain Text

 

Вы можете увидеть, что косинусное сходство “Уличные закусочные в Бангкоке подают огненный пад тай, оставляя у Варуна терпкое воспоминание о живой энергии города.” равно 0.8205469250679016, что является наиболее близким совпадением.

Финальный этап: Мы реализовали поиск RAG.

Прикладные программы для предприятий

Apache Cassandra

Для предприятий мы можем использовать Apache Cassandra 5.0 от популярных облачных поставщиков, таких как Microsoft Azure, AWS, GCP и т. д.

Ollama

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

Виртуальная машина с Linux

Apache Cassandra и Ollama могут быть объединены и размещены в одной виртуальной машине с Linux, если сценарий использования не требует высокой загрузки для снижения общей стоимости владения или для решения потребностей в управлении данными.

Заключение

Мы легко можем создавать приложения RAG, используя ОС Linux, Apache Cassandra, встроенные модели (nomic-embed-text), используемые через Ollama, и Python с хорошей производительностью, не требуя дополнительных облачных подписок или услуг на комфорт наших машин/серверов.

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

Это все! Спасибо за то, что прочитали до конца.

Source:
https://dzone.com/articles/build-rag-apps-apache-cassandra-python-ollama