Apache Cassandra、Python、およびOllamaを使用してRAGアプリを構築する

リトリーバル拡張生成(RAG)は、ユーザーによって入力されたテキストに基づいてデータソースからリアルタイムデータまたは更新データを取得するための最も一般的なアプローチです。これにより、最先端のニューラル検索を活用したすべての検索アプリケーションが強化されます。

RAG検索システムでは、各ユーザーリクエストが埋め込みモデルによってベクトル表現に変換され、このベクトルの比較はコサイン類似度、最長共通部分列などのさまざまなアルゴリズムを使用して、当社のベクトルサポートデータベースに保存されている既存のベクトル表現と行われます。

ベクトルデータベースに保存されている既存のベクトルは、別のバックグラウンドプロセスによって非同期的に生成または更新されます。

この図はベクトル比較の概念的な概要を提供します

RAGを使用するには、少なくとも埋め込みモデルとアプリケーションによって使用されるベクトルストレージデータベースが必要です。コミュニティやオープンソースプロジェクトからの貢献により、効果的かつ効率的なRAGアプリケーションを構築するための素晴らしいツールセットが提供されています。

この記事では、Pythonアプリケーションにおけるベクターデータベースと埋め込み生成モデルの使用を実装します。このコンセプトを初めて読む方や何度目かの方も、作業に必要なツールだけがあれば十分で、どのツールにもサブスクリプションは必要ありません。単にツールをダウンロードして始めることができます。

私たちの技術スタックは、以下のオープンソースで無料のツールで構成されています:

  • オペレーティングシステム – Ubuntu Linux
  • ベクターデータベース – Apache Cassandra
  • 埋め込みモデル – nomic-embed-text
  • プログラミング言語 – Python

このスタックの主な利点

  • オープンソース
  • データコンプライアンス基準を満たすための隔離されたデータ

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

実装の手順

前提条件が満たされていれば、実装しながら進めることができます。それ以外の場合は、概念を理解するために最後まで読んでください。

前提条件

Ollamaモデルのセットアップ

Ollamaは、ジェネレーティブAIとアプリケーションの間の抽象化を行うオープンソースのミドルウェアサーバであり、ジェネレーティブAIモデルをCLIおよびAPIとして利用可能にするために必要なすべてのツールをインストールします。Ollamaには、llama、phi、mistral、snowflake-arctic-embedなど、ほとんどのオープンソースモデルが含まれています。クロスプラットフォームであり、OSで簡単に構成できます。

Ollamaでは、nomic-embed-text モデルを取得して埋め込みを生成します。

コマンドラインで実行:

Plain Text

 

このモデルはサイズ768のベクトルの埋め込みを生成します。

Apache Cassandraのセットアップとスクリプト

Cassandraは、業界のニーズに応じて高いスケーリングが必要なワークロード量と連携するように設計されたオープンソースのNoSQLデータベースです。最近、バージョン5.0でベクター検索のサポートが追加され、RAGユースケースを容易にします。

注意: CassandraはLinux OSで動作する必要があり、Dockerイメージとしてもインストールできます。

インストール

以下のリンクからApache Cassandraをダウンロードしてください:https://cassandra.apache.org/_/download.html

CassandraをPATHに設定してください。

次のコマンドをコマンドラインで実行してサーバーを起動します:

Plain Text

 

Table

新しいLinuxターミナルを開き、cqlshと入力します。これにより、Cassandra Query Languageのシェルが開きます。次に、以下のスクリプトを実行して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

 

ファイルが実行され、ドキュメントが挿入されると、cqlshコンソールからCassandraデータベースをクエリすることで確認できます。これには、cqlshを開き、次のコマンドを実行します:

SQL

 

これにより、下のスクリーンショットに示されているように、データベースに挿入された10のドキュメントが返されます。

マイルストーン2:ベクターデータベースでのデータ設定が完了しました。

次に、コサイン類似度に基づいてドキュメントをクエリするコードを書きます。コサイン類似度は、2つのベクトル値のドット積です。その公式はA.B / |A||B|です。このコサイン類似度はApache Cassandraによって内部的にサポートされており、データベース内ですべてを計算し、大規模データを効率的に処理するのに役立ちます。

以下のコードは自己説明的であり、ORDER BY <column name> ANN OF <text_vector>を使用してコサイン類似度に基づいて上位3つの結果を取得し、コサイン類似度の値も返します。このコードを実行するには、このベクトル列にインデックスが適用されていることを確認する必要があります。

Python

 

挿入コードはコメントアウトすることを忘れないでください:

Python

 

次に、python app.pyを使用してPythonコードを実行します。

以下の出力が得られます:

Plain Text

 

「バンコクのストリートフードスタンドは、ヴァルンに街の活気あるエネルギーの酸っぱい記憶を残した激辛パッタイを提供しました。」のコサイン類似度は0.8205469250679016で、最も近い一致です。

最終マイルストーン:RAG検索を実装しました。

エンタープライズアプリケーション

Apache Cassandra

企業向けには、Apache Cassandra 5.0をMicrosoft Azure、AWS、GCPなどの人気のクラウドベンダーから使用できます。

Ollama

このミドルウェアは、高性能モデルを実行するためにNvidia製GPUに対応したVMを必要としますが、ベクター生成に使用されるモデルには高性能なVMは必要ありません。トラフィックの要件に応じて、複数のVMを使用することも、Open AIやAnthropyなどの生成AIサービスを利用することもできます。どちらがスケーリングニーズやデータガバナンスニーズのための総所有コストが低いかによります。

Linux VM

Apache CassandraとOllamaは、使用ケースが高い使用を必要としない場合、総所有コストを下げるためやデータガバナンスニーズに対応するために、単一のLinux VMに組み合わせてホストできます。

結論

私たちは、Linux OS、Apache Cassandra、Ollamaを介して使用される埋め込みモデル(nomic-embed-text)、およびPythonを使用することで、追加のクラウドサブスクリプションやサービスなしに、私たちのマシン/サーバーの快適さの中で良好なパフォーマンスのRAGアプリケーションを簡単に構築できます。

ただし、VMをサーバーにホスティングするか、エンタープライズアプリケーションとしてスケーラブルなアーキテクチャに準拠したスケーリングのためにクラウドサブスクリプションを選択することが推奨されます。このApacheでは、Cassandraがベクトルストレージとベクトル比較の重い作業を行うための重要なコンポーネントであり、ベクトル埋め込みを生成するためのOllamaサーバーがあります。

これで終わりです!最後までお読みいただきありがとうございます。

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