メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
MySQL には AI モデルを呼び出す手段がありません。データを SQL で処理し、AI の処理のたびにアプリケーションコードへ移し、結果を戻すことになります。VillageSQL の vsql_ai 拡張機能は ai_prompt() を追加します。これはクエリから AI モデルを直接呼び出す関数で、エンリッチ、分類、および生成を、データがすでにある場所で行えるようにします。

問題: SQL と AI の間のコンテキスト切り替え

VillageSQL がない場合の典型的なパターンです。
これは動作しますが、行ごとに SELECT、AI 呼び出し、UPDATE の 3 回のラウンドトリップが必要です。大きなテーブルでは調整のオーバーヘッドが積み重なり、エンリッチのロジックはデータがあるスキーマではなくアプリケーションコードに置かれます。

VillageSQL の場合: SQL の中の ai_prompt()

ai_prompt(provider, model, api_key, prompt) は API 呼び出しを行い、応答を文字列として返します。スカラー関数が使える場所ならどこでも使えます。

行を一括で更新する

最も一般的な用途は、既存の行に対してエンリッチ用の列をバックフィルすることです。
NULL の行がなくなるまで、アプリケーションからこの UPDATE をループで実行します。

プロンプトの結果を WHERE で使う

AI の出力でフィルタすることもできますが、スキャン対象のすべての行についてモデルが呼び出されます。
パフォーマンスのためには、WHERE 句で ai_prompt() を呼び出すのではなく、保存された列を更新してその列に対してクエリすることを優先してください。

複数の列からプロンプトを組み立てる

モデルに完全なコンテキストを与えるには、複数の列をプロンプトに連結します。

パフォーマンスとレート制限

ai_prompt() の各呼び出しは独立した HTTPS リクエストです。一括処理では次の点に注意してください。
  • UPDATE で LIMIT を使う — AI 呼び出しは 1 回あたり 5〜30 秒かかるため、100 行に対する一括 UPDATE には数分かかります。プロバイダーのレート制限内に収まるよう、50〜100 行ずつのバッチで処理してください。max_execution_time は SELECT のみを制限し、ここでは何の効果もありません。実行中の UPDATE を打ち切るには、別のセッションから KILL QUERY <connection_id> を使います。
  • 結果を保存する — 結果を保存せずに SELECT の中で ai_prompt() を呼び出してはいけません。SELECT を繰り返すたびに API 呼び出しが再実行されます。

モデルの選択

分類やラベル付けのタスクでは、許容できる精度が得られる範囲で最も高速かつ安価なモデルを使ってください。より高性能なモデルは、スループットよりも出力品質が重要なタスクのために取っておきます。 セットアップとプロバイダーの構成については、MySQL を AI API に接続するを参照してください。

よくある質問

DEFAULT 式の中で ai_prompt() を使えますか?

いいえ。MySQL では、非決定的な関数(ai_prompt() はこれに該当します)を DEFAULT 式や生成列で使うことはできません。

ストアドプロシージャの中で ai_prompt() を使えますか?

はい。ストアドプロシージャ、トリガー、および関数はいずれも ai_prompt() を呼び出せます。タイムアウトの制約は同じです。トリガーには注意してください。INSERT のたびに AI を呼び出すと、すべての書き込みが遅くなります。

応答の形式はどう制御しますか?

プロンプトで制御します。「Reply with one word: positive, negative, or neutral」と指示すると、分類に適した予測可能な出力が得られます。「Return valid JSON with keys: category, confidence」と指示すると、構造化された出力が得られます。指示が具体的であれば、モデルは確実に指示に従います。

ai_prompt() は失敗時に再試行しますか?

いいえ。API 呼び出しが失敗すると NULL を返します。アプリケーションのバッチループに再試行ロジックを実装する前に、SHOW WARNINGS を実行して理由を確認してください。vsql_ai は実際の失敗理由を含む Warning 3200 を発生させます。

トラブルシューティング

関連項目