📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

TiDB ベクトル検索を Django ORM と統合する

このチュートリアルでは、 ジャンゴ ORM を使用してTiDB ベクトル検索と対話し、埋め込みを保存し、ベクトル検索クエリを実行する方法について説明します。

注記:

ベクトル検索機能は、TiDB セルフマネージド クラスターとTiDB Cloudサーバーレスクラスターでのみ使用できます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

TiDB クラスターがない場合は、次のように作成できます。

サンプルアプリを実行する

以下の手順に従って、TiDB Vector Search を Django ORM と統合する方法を簡単に学習できます。

ステップ1. リポジトリをクローンする

tidb-vector-pythonリポジトリをローカル マシンにクローンします。

git clone https://github.com/pingcap/tidb-vector-python.git

ステップ2. 仮想環境を作成する

プロジェクト用の仮想環境を作成します。

cd tidb-vector-python/examples/orm-django-quickstart python3 -m venv .venv source .venv/bin/activate

ステップ3. 必要な依存関係をインストールする

デモ プロジェクトに必要な依存関係をインストールします。

pip install -r requirements.txt

あるいは、プロジェクトに次のパッケージをインストールすることもできます。

pip install Django django-tidb mysqlclient numpy python-dotenv

mysqlclient のインストールで問題が発生した場合は、mysqlclient の公式ドキュメントを参照してください。

django-tidbとは何か

django-tidbは Django 用の TiDB 方言であり、Django ORM を拡張して TiDB 固有の機能 (Vector Search など) をサポートし、TiDB と Django 間の互換性の問題を解決します。

django-tidbインストールするには、Django のバージョンと一致するバージョンを選択します。たとえば、 django==4.2.*使用している場合はdjango-tidb==4.2.*インストールします。マイナー バージョンは同じである必要はありません。最新のマイナー バージョンを使用することをお勧めします。

詳細についてはdjango-tidb リポジトリを参照してください。

ステップ4. 環境変数を設定する

選択した TiDB デプロイメント オプションに応じて環境変数を構成します。

    TiDB Cloud Serverless クラスターの場合、クラスター接続文字列を取得し、環境変数を構成するには、次の手順を実行します。

    1. クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。

    2. 右上隅の「接続」をクリックします。接続ダイアログが表示されます。

    3. 接続ダイアログの構成が動作環境と一致していることを確認します。

      • 接続タイプPublicに設定されています

      • ブランチはmainに設定されています

      • 接続先はGeneralに設定されています

      • オペレーティング システムは環境に適合します。

      ヒント:

      プログラムが Windows Subsystem for Linux (WSL) で実行されている場合は、対応する Linux ディストリビューションに切り替えます。

    4. 接続ダイアログから接続パラメータをコピーします。

      ヒント:

      まだパスワードを設定していない場合は、「パスワードの生成」をクリックしてランダムなパスワードを生成します。

    5. Python プロジェクトのルート ディレクトリに.envファイルを作成し、接続パラメータを対応する環境変数に貼り付けます。

      • TIDB_HOST : TiDB クラスターのホスト。
      • TIDB_PORT : TiDB クラスターのポート。
      • TIDB_USERNAME : TiDB クラスターに接続するためのユーザー名。
      • TIDB_PASSWORD : TiDB クラスターに接続するためのパスワード。
      • TIDB_DATABASE : 接続するデータベース名。
      • TIDB_CA_PATH : ルート証明書ファイルへのパス。

      以下は macOS の例です。

      TIDB_HOST=gateway01.****.prod.aws.tidbcloud.com TIDB_PORT=4000 TIDB_USERNAME=********.root TIDB_PASSWORD=******** TIDB_DATABASE=test TIDB_CA_PATH=/etc/ssl/cert.pem

    TiDB セルフマネージド クラスターの場合は、Python プロジェクトのルート ディレクトリに.envファイルを作成します。次の内容を.envファイルにコピーし、TiDB クラスターの接続パラメータに応じて環境変数の値を変更します。

    TIDB_HOST=127.0.0.1 TIDB_PORT=4000 TIDB_USERNAME=root TIDB_PASSWORD= TIDB_DATABASE=test

    ローカル マシンで TiDB を実行している場合、デフォルトではTIDB_HOST127.0.0.1です。初期のTIDB_PASSWORDは空なので、クラスターを初めて起動する場合は、このフィールドを省略できます。

    各パラメータの説明は次のとおりです。

    • TIDB_HOST : TiDB クラスターのホスト。
    • TIDB_PORT : TiDB クラスターのポート。
    • TIDB_USERNAME : TiDB クラスターに接続するためのユーザー名。
    • TIDB_PASSWORD : TiDB クラスターに接続するためのパスワード。
    • TIDB_DATABASE : 接続するデータベースの名前。

    ステップ5.デモを実行する

    データベース スキーマを移行します。

    python manage.py migrate

    Django 開発サーバーを実行します:

    python manage.py runserver

    ブラウザを開いてhttp://127.0.0.1:8000にアクセスし、デモ アプリケーションを試してください。使用可能な API パスは次のとおりです。

    APIパス説明
    POST: /insert_documents埋め込みのあるドキュメントを挿入します。
    GET: /get_nearest_neighbors_documents3 つの最も近い近傍ドキュメントを取得します。
    GET: /get_documents_within_distance一定の距離内の文書を取得します。

    サンプルコードスニペット

    次のサンプル コード スニペットを参照して、独自のアプリケーション開発を完了することができます。

    TiDBクラスターに接続する

    ファイルsample_project/settings.pyに次の設定を追加します。

    dotenv.load_dotenv() DATABASES = { "default": { # https://github.com/pingcap/django-tidb "ENGINE": "django_tidb", "HOST": os.environ.get("TIDB_HOST", "127.0.0.1"), "PORT": int(os.environ.get("TIDB_PORT", 4000)), "USER": os.environ.get("TIDB_USERNAME", "root"), "PASSWORD": os.environ.get("TIDB_PASSWORD", ""), "NAME": os.environ.get("TIDB_DATABASE", "test"), "OPTIONS": { "charset": "utf8mb4", }, } } TIDB_CA_PATH = os.environ.get("TIDB_CA_PATH", "") if TIDB_CA_PATH: DATABASES["default"]["OPTIONS"]["ssl_mode"] = "VERIFY_IDENTITY" DATABASES["default"]["OPTIONS"]["ssl"] = { "ca": TIDB_CA_PATH, }

    プロジェクトTIDB_CA_PATHルート ディレクトリに.envファイルTIDB_USERNAME TIDB_HOSTおよびTIDB_DATABASE TIDB_PORT TiDB クラスターの実際TIDB_PASSWORD値で設定できます。

    ベクターテーブルを作成する

    ベクトル列を定義する

    tidb-djangoベクトル埋め込みをテーブルに格納するためのVectorField提供します。

    3 次元ベクトルを格納するembeddingという名前の列を持つテーブルを作成します。

    class Document(models.Model): content = models.TextField() embedding = VectorField(dimensions=3)

    埋め込み付きドキュメントを保存する

    Document.objects.create(content="dog", embedding=[1, 2, 1]) Document.objects.create(content="fish", embedding=[1, 2, 4]) Document.objects.create(content="tree", embedding=[1, 0, 0])

    最も近い文書を検索する

    TiDB Vector は次の距離関数をサポートしています:

    • L1Distance
    • L2Distance
    • CosineDistance
    • NegativeInnerProduct

    コサイン距離関数に基づいて、クエリ ベクトル[1, 2, 3]に意味的に最も近い上位 3 つのドキュメントを検索します。

    results = Document.objects.annotate( distance=CosineDistance('embedding', [1, 2, 3]) ).order_by('distance')[:3]

    特定の距離内の文書を検索する

    クエリベクトル[1, 2, 3]からのコサイン距離が 0.2 未満のドキュメントを検索します。

    results = Document.objects.annotate( distance=CosineDistance('embedding', [1, 2, 3]) ).filter(distance__lt=0.2).order_by('distance')[:3]

    参照

    このページは役に立ちましたか?