Skip to content

Latest commit

 

History

History
175 lines (121 loc) · 8.32 KB

File metadata and controls

175 lines (121 loc) · 8.32 KB
title Get Started with TiDB + AI via SQL
summary SQL文を使用してTiDBのベクトル検索を素早く使い始め、生成型AIアプリケーションを強化する方法を学びましょう。
aliases
/ja/tidb/stable/vector-search-get-started-using-sql/
/ja/tidb/dev/vector-search-get-started-using-sql/
/ja/tidbcloud/vector-search-get-started-using-sql/

SQL を介して TiDB + AI を使い始める {#get-started-with-tidb-ai-via-sql}

TiDB は、MySQL 構文を拡張してベクトル検索をサポートし、新しい ベクトルデータ型といくつかのベクトル関数を導入します。

このドキュメントでは、SQL ステートメントだけを使用して TiDB Vector Search を開始する方法を説明します。 MySQLコマンドラインクライアントを使用して、次の操作を実行する方法を学習します。

  • TiDBに接続します。
  • ベクトルテーブルを作成します。
  • ベクトル埋め込みを保存する。
  • ベクトル検索クエリを実行します。

注記:

  • ベクトル検索機能はベータ版であり、予告なく変更される場合があります。バグを発見した場合は、GitHubで問題報告してください。
  • ベクトル検索機能は、 TiDB Self-ManagedTiDB Cloud Starter 、およびTiDB Cloud Dedicatedで利用できます。TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合、TiDBのバージョンはv8.4.0以降である必要があります(v8.5.0以降を推奨)。

前提条件 {#prerequisites}

この文書の手順を完了するには、以下が必要です。

TiDBクラスタをお持ちでない場合は、以下の手順で作成できます。

さあ始めましょう {#get-started}

ステップ1. TiDBに接続する {#step-1-connect-to-tidb}

選択したTiDBのデプロイオプションに応じて、TiDBに接続してください。

  1. 私のTiDBページに移動し、次に、対象のTiDB Cloud Starterインスタンスの名前をクリックして、概要ページに移動します。

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

  3. 接続ダイアログで、[接続**方法]ドロップダウンリストから[MySQL CLI]**を選択し、 **[接続タイプ]のデフォルト設定を[パブリック]**のままにします。

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

  5. 接続コマンドをコピーしてターミナルに貼り付けてください。以下はmacOSの例です。

    mysql -u '<prefix>.root' -h '<host>' -P 4000 -D 'test' --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem -p'<password>'

TiDB Self-Managedクラスタが起動したら、ターミナルでクラスタ接続コマンドを実行してください。

以下はmacOSにおける接続コマンドの例です。

mysql --comments --host 127.0.0.1 --port 4000 -u root

ステップ2. ベクトルテーブルを作成する {#step-2-create-a-vector-table}

テーブルを作成する際、 VECTORデータ型を指定することで、列をベクトルとして定義できます。

例えば、3次元の列embedded_documentsを持つテーブルVECTOR } を作成するには、MySQL CLI を使用して次の SQL ステートメントを実行します。

USE test;
CREATE TABLE embedded_documents (
    id        INT       PRIMARY KEY,
    -- Column to store the original content of the document.
    document  TEXT,
    -- Column to store the vector representation of the document.
    embedding VECTOR(3)
);

期待される出力は以下のとおりです。

Query OK, 0 rows affected (0.27 sec)

ステップ3. ベクトル埋め込みをテーブルに挿入する {#step-3-insert-vector-embeddings-to-the-table}

ベクトル埋め込みを持つ3つのドキュメントをembedded_documentsテーブルに挿入します。

INSERT INTO embedded_documents
VALUES
    (1, 'dog', '[1,2,1]'),
    (2, 'fish', '[1,2,4]'),
    (3, 'tree', '[1,0,0]');

期待される出力は以下のとおりです。

Query OK, 3 rows affected (0.15 sec)
Records: 3  Duplicates: 0  Warnings: 0

注記

この例では、ベクトル埋め込みの次元を簡略化し、説明のために3次元ベクトルのみを使用しています。

実際のアプリケーションでは、 埋め込みモデルは多くの場合、数百または数千の次元を持つベクトル埋め込みを生成します。

ステップ4. ベクトルテーブルを照会する {#step-4-query-the-vector-table}

ドキュメントが正しく挿入されたことを確認するには、 embedded_documentsテーブルを照会します。

SELECT * FROM embedded_documents;

期待される出力は以下のとおりです。

+----+----------+-----------+
| id | document | embedding |
+----+----------+-----------+
|  1 | dog      | [1,2,1]   |
|  2 | fish     | [1,2,4]   |
|  3 | tree     | [1,0,0]   |
+----+----------+-----------+
3 rows in set (0.15 sec)

ステップ5. ベクトル検索クエリを実行する {#step-5-perform-a-vector-search-query}

全文検索と同様に、ベクトル検索を使用する場合も、ユーザーはアプリケーションに検索語を入力します。

この例では、検索語は「泳ぐ動物」であり、それに対応するベクトル埋め込みは[1,2,3]であると想定されています。実際のアプリケーションでは、埋め込みモデルを使用して、ユーザーの検索語をベクトル埋め込みに変換する必要があります。

次の SQL ステートメントを実行すると、TiDB はテーブル内のベクトル埋め込み間のコサイン距離 ( [1,2,3]計算してソートすることにより、 vec_cosine_distance } に最も近い上位 3 つのドキュメントを特定します。

SELECT id, document, vec_cosine_distance(embedding, '[1,2,3]') AS distance
FROM embedded_documents
ORDER BY distance
LIMIT 3;

期待される出力は以下のとおりです。

+----+----------+---------------------+
| id | document | distance            |
+----+----------+---------------------+
|  2 | fish     | 0.00853986601633272 |
|  1 | dog      | 0.12712843905603044 |
|  3 | tree     |  0.7327387580875756 |
+----+----------+---------------------+
3 rows in set (0.15 sec)

検索結果の 3 つの用語は、クエリされたベクトルからのそれぞれの距離によってソートされます。距離が小さいほど、対応するdocumentの関連性が高くなります。

したがって、出力結果から判断すると、泳いでいる動物は魚か、泳ぎの才能に恵まれた犬である可能性が最も高い。

参照 {#see-also}