はじめに
この記事は【Select AI】クエリできすぎくんを使ってSelect AIを検証してみた(Part 1)の続きになります。まだPart 1をご覧になっていない方は、是非こちらもご覧ください。
「クエリできすぎくん」の環境構築方法から基本的な使い方を、ステップバイステップでご説明しています。
本記事ではPart 1でカバーしきれなかった「チャット・分析」の「カテゴリ予測」、「クエリ書き換え」、「追加指示」を試してみたいと思います。
カテゴリ予測
チャット・分析からSelect AIを試す際に、「カテゴリ予測」という機能があります。
「クエリできすぎくん」では、ユーザーからの質問に最も適したAIプロファイル(カテゴリ)を、自動で選択させることが出来ます。そうすることで、それぞれのAIプロファイルが対象とするデータを最小限にすることが可能で、精度向上やコストの削減につながります。
AIプロファイル(カテゴリ)の自動選択をさせるために、カテゴリの学習を行います。
カテゴリ予測をするための準備
先ずはいくつかAIプロファイルを作成し、そのあと、AIプロファイルのカテゴリを学習させたいと思います。
プロファイル作成
1. 以下の様に入力し、「作成」をクリックします。
- Profile名:任意(本記事ではprofile_grokcodefast1_department)
同じ名前のAIプロファイルは作成不可なので、ユニークな名前にします
- カテゴリ:任意(本記事では部門関連)
「カテゴリ」はSelect AIの標準機能ではなく、「クエリできすぎくん」のみで提供している機能になります。
Select AIのAIプロファイル自体にはカテゴリという概念はなく、クエリできすぎくんが“どのAIプロファイルを使うか”を判断するための仕組みとして利用されています。
- テーブル選択:DEPARTMENT(「テーブル・ビュー一覧を取得」をクリックすると表示されます)
- Region:us-chicago-1
- Model:任意
- Embedding Model:任意
- Enforce Object List:任意
- Comments:任意(表やビューへのコメントをLLMに送信する場合にはtrueにします。本記事ではtrueを選択します)
- Annotations:任意(表やビューへのアノテーションをLLMに送信する場合にはtrueにします。本記事ではtrueを選択します)
- Constraints:任意
2. 同じようにもう一つAIプロファイルを作成します。
- Profile名:任意(本記事ではprofile_grokcodefast1_dep_projt)
- カテゴリ:任意(本記事ではプロジェクトと部門の組み合わせ)
- テーブル選択:DEPARTMENT、PROJECT
その他は先程と同じにし、「作成」をクリック
本記事では表数が非常に少ないため、カテゴリ分けをする必要はありませんが、表やビューの数が非常に多い場合には、カテゴリー分けが有用になると思います。
モデル管理
次に、作成したAIプロファイルのカテゴリを学習させます。
1. こちらから、カテゴリを学習させるためのサンプルデータをダウンロードします。
2. 「モデル管理」タブ内の画面から、ダウンロードしたExcelファイルをドラッグアンドドロップし、「Excelアップロード(全削除&挿入)」をクリックします。

アップロードすると、「アップロード完了」のメッセージが出てきます。

4. カテゴリの学習が行われているか確認してみます。「部門ごとのプロジェクト数」と質問してみます。

「プロジェクトと部門の組み合わせ」カテゴリが選択されました。DEPARTMENT表とPROJECT表のデータを使って回答可能な質問なので、正しくカテゴリを分析出来たことがわかります。
クエリ書き換え
次に、クエリの書き換えを試してみたいと思います。
クエリの書き換えには「用語集」を利用するパターンと、「スキーマ情報」を利用するパターンの2種類があります。

「クエリ書き換え」はSelect AIの標準機能ではなく、「クエリできすぎくん」のみで提供している機能になります。
用語集
先ずは、用語種を利用するパターンを試してみます。
用語集の登録
1. こちらから用語集をダウンロードします。
用語集には、「重点プロジェクト」の考え方と、「ボーナス額」の計算ロジックを記載しています。
2. ダウンロードしたExcelファイルをアップロードします。Excelファイルをドラッグアンドドロップすると、自動でアップロードされます。

用語集の中身を変更したい場合には、Excelファイルを編集し、再度アップロードし直します。
用語集を使ってクエリを書き換え
1. 「チャット・分析」に戻り、「重点プロジェクトと、その担当部署」と質問を入力します。

2. 「クエリ書き換えを有効化」にチェックを入れ、「実行」をクリックします。

3. 書き換えを実行すると、用語集で登録した情報を基に、LLMがより分かりやすい・回答を生成しやすいように、質問を書き換えてくれました。

4. 「実行」をクリックすると、書き換え後の質問を基に、クエリを生成してくれました。

クエリの実行結果を確認してみると、重点プロジェクト(予算が8000000以上のプロジェクト)と、その担当部署を表示してくれました。

5. 「クエリ書き換えを有効化」のチェックを入れず、再度同じ質問をしてみます。

重点プロジェクトがどの様なものかLLMは知らないので、「重点」というところが無視されてしまいました。
6. AI分析をしてみると、どの様なクエリが生成されているか自然言語で教えてくれます。

スキーマ情報
次に、スキーマ情報を利用するパターンを試してみます。
ここで使われるのは、表名・列名・コメントなどのメタデータのみで、レコードの中身(実データ)は一切参照されません。
スキーマ情報を使ってクエリを書き換え
1. 「部門ごとのプロジェクト数」と入力し、「クエリ書き換えを有効化」にチェックを入れます。

2. 「今回はスキーマ情報を利用」のみにチェックを入れて、「書き換えを実行」をクリックします。

そうすると、スキーマ情報(表やビューの名前、列の名前)を使って、より詳細な質問に書き換わりました。
追加指示
クエリ生成の際に、追加指示や例示を入れてみます。
コメントやアノテーション、フィードバック、用語集等でも情報を補足出来ますが、出力形式や表現方法、振る舞い方など、より全体的な指示をしたい場合には、追加指示から補足をする事が出来ます。
2. 「追加指示・例示を設定」にチェックをいれ、「列名は日本語にして下さい。」と指示を追記します。

3. 「実行」ボタンをクリックすると、SQLクエリが生成されます。日本語の列別名つけてくれています。

4. 先ほど追加指示をしないで同じ質問をした際には、列名が英語になっていましたが、実行結果を確認すると、列名が日本語で表示されています。

Select AIでも追加指示は行う事が出来ます。GENERATE関数を使用し、下記の様に記載することが出来ます。
v_parameter :=
'あなたはSQLクエリ作成のエキスパートです。下記のルールに従ってSQLを生成してください。
対象範囲の厳守
- 指定したテーブル、カラム以外は利用しません。
- 各カラムに設定されたコメントの意味を正確に反映してください。
----------------------<中略>----------------------
- 入庫予定は「product_unit, product_id, weekまたはinbound_week直近1件で取得します。
- 週カラムはsale_week/plan_week/inbound_weekなど命名規則が異なるため、OOで正規化します。';
v_prompt := '冷凍餃子の今週の売上、納入予定と直近の入庫予定をおしえて。';
v_prompt := v_prompt || v_parameter;
-- SELECT AI実行
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => v_prompt,
profile_name => 'profile_name',
action => 'runsql'
)
FROM dual;
最後に
今回試した「カテゴリ予測」、「クエリ書き換え」、「追加指示」を全て使ってみたいと思います。
1. 「重点プロジェクトを担当している部署毎の、担当プロジェクト数」と記入し、カテゴリ予測をします。

2. 「クエリ書き換えを有効化」をクリックし、「用語集を利用」と「スキーマ情報を利用」の両方にチェックが入っている事を確認。「書き換えを実行」をクリックします。

用語集とスキーマ情報の両方を利用して、質問が書き換わりました。より詳細で分かりやすい質問に変更することが出来ました。

3. 「追加指示・例示を設定」にチェックをいれ、「列名は日本語にして下さい。」と指示を追記します。

「実行」をクリックすると、SQLクエリが生成され、その実行結果も表示されました。期待通りの回答が返って来ています。

「クエリできすぎくん」では、Select AIの機能検証に非常に有用な機能が沢山提供されています。「カテゴリ予測」と「クエリ書き換え」を使用することで、より効率的にSelect AIを使用する事が可能です。是非お試し下さい。








