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

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

All examples on this page work on VillageSQL. Install Now →
VillageSQL の vsql_ai 拡張機能を使用すると、SQL クエリから AI 言語モデルを直接呼び出せます。最初の ai_prompt() を実行する前に、拡張機能をインストールし、API キーを用意する必要があります。このガイドでは、セットアップ、プロバイダーの選択肢、および本番環境に移行する前に重要となるセキュリティ上の考慮事項を説明します。

拡張機能のインストール

API キーを設定したら(後述)、テスト呼び出しを行います。

API キーの設定

ai_prompt() 関数と ai_embedding() 関数は、API キーをパラメータとして受け取ります。推奨されるパターンは、接続時に設定するセッション変数です。ログファイルに残る可能性のあるクエリに、キーのリテラルを埋め込まないでください。'local' プロバイダーの場合は空文字列を渡します。API キーは不要です。
避けるべきこと:
セッション変数は、ファイルに書き出す SQL ではなく、アプリケーションの接続セットアップで設定してください。SET @key = '...' ステートメント自体は、キーを含めてそのまま performance_schema.events_statements_history(MySQL 8.4 ではデフォルトで有効)に記録され、有効にしている一般クエリログやスロークエリログにも記録されます。セッション変数を使用すると、キーを使用するクエリからはキーが除外されますが、キーを設定するステートメントからは除外されません。これを避ける唯一の方法は、キーをリテラルの SQL テキストとして一切送信しないことです。プリペアドステートメントのパラメータとしてバインドするか、サーバーが解析する SQL テキストにリテラルを含めないクライアント側の置換メカニズムを使用してください。

プロバイダーとモデルの選択

Anthropic

最適な用途: 複雑な推論、長い文書、コード生成、および指示に従うタスク。
Claude モデル:
  • claude-fable-5 — 最も高性能。高度な推論と長期的な作業向け
  • claude-opus-5 — 推奨デフォルト。複雑なエージェント型コーディングとエンタープライズ作業向け
  • claude-sonnet-5 — 速度と知能の最良の組み合わせ
  • claude-haiku-4-5 — 最速かつ最もコスト効率が高い
以前の世代も引き続きサポートされています: claude-opus-4-8、claude-opus-4-7、claude-opus-4-6、claude-opus-4-5-20251101、claude-sonnet-4-6、claude-sonnet-4-5-20250929。 Anthropic は ai_embedding() をサポートしていません。

Google Gemini

最適な用途: 埋め込みの生成とマルチモーダルタスク。

OpenAI

最適な用途: 広く採用されている text-embedding-3 ファミリーによる埋め込みの生成。

ローカル(Ollama)

最適な用途: ローカル開発と、ネットワークの外に出せないプライベートなデータ。127.0.0.1:11434 で実行中の Ollama が必要です。API キーは不要で、空文字列を渡します。
Ollama でプルしたモデルであれば、どれでも使用できます。一般的なチャットモデル: llama3.2、mistral、gemma2。一般的な埋め込みモデル: nomic-embed-text、mxbai-embed-large。

プロバイダーの比較

タイムアウトとレート制限に関する考慮事項

AI API の呼び出しには 5〜30 秒かかります。MySQL はデフォルトではクエリの実行時間を制限しませんが(max_execution_time は 0、つまり無制限)、アプリケーションやコネクションプールがこれを設定している場合、30 秒かかる AI 呼び出しは途中で打ち切られることがあります。AI クエリを実行するセッションでは、制限を明示的に引き上げるか確認してください。
多数の行に対するバッチ操作では、これが重要です。各行で ai_prompt() を呼び出す 1000 行の UPDATE は、30 分以上かかることがあります。 すべてのプロバイダーは、1 分あたりに実行できるリクエスト数にレート制限を設けています。レート制限に達すると、ai_prompt() は NULL を返します。一括操作では、50〜100 行のバッチで処理し、アプリケーションのループ内でバッチ間に一時停止を入れてください。バッチのパターンについては、MySQL クエリから AI モデルを実行するを参照してください。

よくある質問

セッション変数の代わりに MySQL のテーブルに API キーを保存できますか?

できますが、あるセキュリティリスクを別のリスクと交換することになります。テーブル方式ではキーを読み取るために SELECT が必要で、そのクエリもログに記録されます。アプリケーションフレームワークがプログラムで設定するセッション変数が、最もクリーンな選択肢です。

API 呼び出しが失敗するとどうなりますか?

関数は NULL を返します。テスト時には結果の NULL を確認してください。呼び出しの直後に SHOW WARNINGS を実行してください。vsql_ai は実際の失敗理由(無効なキー、不明なプロバイダー、サポートされていないモデルなど)を示す Warning 3200 を発生させます。これは単なる NULL よりもはるかに診断に役立ちます。一般的な原因: 無効な API キー、ネットワークのタイムアウト、レート制限への到達、またはサポートされていないモデル名。

同じクエリで異なるプロバイダーを使用できますか?

はい。ai_prompt() は通常の関数です。同じ SELECT 内で、異なるプロバイダーとモデルの組み合わせで呼び出せます。

モデル名は安定していますか?

プロバイダーは時間とともにモデル名を変更します。ここに記載した名前は、拡張機能で現在テスト済みのモデルと一致します。利用可能な最新のモデル識別子については、プロバイダーのドキュメントを確認してください。

トラブルシューティング

関連項目