VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
vsql_ai 拡張機能は ai_embedding() を追加します。これは埋め込みモデルを呼び出し、保存とクエリができる JSON 配列としてベクトルを返します。
埋め込みの用途
埋め込みモデルは、テキストを固定長の浮動小数点数のベクトルに変換します。2 つのベクトル間の距離は意味的な類似度を反映します。"dog"と"puppy"→ 似たベクトル"dog"と"database index"→ 離れたベクトル
VillageSQL の場合: ai_embedding()
ai_embedding(provider, model, api_key, text) は埋め込みモデルを呼び出し、JSON 配列の文字列を返します。
文字セットの変換
VillageSQL 0.0.6 以前では、ai_embedding() は binary 文字セットを返し、MySQL の JSON パーサーは binary 文字列を拒否します。結果が JSON 列や JSON 関数に届く前に、CONVERT(... USING utf8mb4) を通す必要があります。
CONVERT はもう必要ありません。ただし残しても害はないので、0.0.6 以前との互換性のために、以下のすべての例は引き続きそれを使います。
埋め込みの保存
JSON 配列をJSON 列に保存します。
既存の行への埋め込みのバックフィル
モデルの選択
1 つのテーブル内のすべての埋め込みには同じモデルを使ってください。異なるモデルの埋め込みは比較できません。混在させると無意味な類似度スコアになります。
Anthropic は現在、埋め込み API を提供していません。
セマンティック検索
MySQL も VillageSQL も、ネイティブのベクトル距離関数を提供しません。完全な類似度検索 — 大きなテーブルで最も近いベクトルを見つけること — はアプリケーションコードで実行します。典型的なアーキテクチャは、埋め込みを MySQL に保存し、それらを取得し、アプリケーションでコサイン類似度を計算し、上位の一致を返すというものです。何を埋め込むか
埋め込みの品質は、何を埋め込むかに依存します。いくつかのパターンを示します。よくある質問
異なるモデルの埋め込みを比較できますか?
いいえ。text-embedding-3-small と gemini-embedding-001 の埋め込みは異なるベクトル空間にあります。互いに比較した類似度スコアは無意味です。列ごとに 1 つのモデルに統一してください。
埋め込みはどのくらいのストレージを使いますか?
1536 個の浮動小数点数の JSON 配列は、テキスト文字列として 1 行あたりおよそ 10〜15 KB です。大きなテーブルでは、これが積み上がります。すべての埋め込みを保存する必要があるのか、それともクエリの対象にするものだけでよいのかを検討してください。ai_embedding() はバッチ入力をサポートしますか?
いいえ。各呼び出しは 1 つのテキスト入力を処理します。一括での埋め込みには、アプリケーションで行をループし、UPDATE をバッチで呼び出してください。
テキストが長すぎるとどうなりますか?
埋め込みモデルは、そのトークン制限(OpenAI のモデルでは通常 8191 トークン)で入力を切り詰めます。埋め込みは切り詰められたテキストに対して計算されます。長い文書では、全文ではなく、要約または最初の数段落を埋め込んでください。トラブルシューティング
関連項目
- MySQL を AI API に接続する — vsql_ai 拡張機能のインストールと設定
- MySQL のクエリから AI モデルを実行する — 埋め込みを補完するテキスト生成
- MySQL の UUID — 埋め込みの参照テーブルのための安定した行識別子
- 多次元の範囲クエリ — AI のベクトルを使わない幾何学的な包含と距離のクエリ