Oracle Select AIでNL2SQLの精度を向上させるためのベストプラクティス (2026/06/22)
Oracle Select AIでNL2SQLの精度を向上させるためのベストプラクティス (2026/06/22)
投稿者:Mark Hornick | Senior Director, AI and Machine Learning Product Management
自然言語からSQLへの変換(NL2SQL)は、生成型AIを日常的なデータ作業に取り入れるための最も実用的な方法の一つです。テーブル名、結合、フィルタ、GROUP BY句から始めるのではなく、解決したいビジネス上の疑問から始めます。Oracle Select AIは、スキーマメタデータとデータベースコンテキストを使用して、データモデルに特化したSQLを生成します。
そのコンテキストが重要なのは、もっともらしいSQLだけでは不十分だからです。生成されるSQLは、適切なオブジェクトを参照し、スキーマがビジネスコンセプトを表現する方法を反映し、有効な結合パスを選択し、既に依存しているセキュリティモデル内で動作する必要があります。Oracle Select AIは、Oracle AI DatabaseおよびOracle Autonomous AI Databaseから受け継がれるデータベース中心のアプローチをサポートしており、基本的なテキストからSQLへの変換をはるかに超える機能を提供します。
以前のブログ記事では、自然言語クエリのためのOracle Select AI、共有テキストtoSQLガイダンス、フィードバックや自動オブジェクト選択などの機能を紹介しました。今回の記事では、AIプロファイルの設計やメタデータの強化から、事前構築済みのエージェントやすぐに使えるチャットボットアプリケーションまで、NL2SQLの精度を向上させるためのベストプラクティスとして、これらのアイデアをまとめています。
AIプロファイルから始めましょう
AIプロファイルは、Oracle Select AIの制御プレーンです。AIプロバイダー、モデル関連の属性、資格情報、対象となるデータベースオブジェクト、メタデータオプション、および生成されるSQLを構成するその他の動作を定義します。SQLコマンドラインでSELECT AI SHOWSQL、RUNSQL、またはEXPLAINSQLを使用すると、Oracle Select AIはアクティブなプロファイルを使用して、モデルに送信される拡張プロンプトに含めるメタデータを決定します。
これにより、プロファイルはNL2SQLの精度を左右する重要な制御ポイントとなります。特定のアプリケーション向けに厳選された少数のオブジェクトから始めることも、スキーマが大きすぎてオブジェクトリストを手動で管理できない場合は、自動オブジェクト選択を使用することもできます。また、テーブルや列のコメント、注釈、制約を有効にすることで、モデルにスキーマのより詳細な記述を与えることも可能です。
注:以下の例では、SHサンプルスキーマと例示用の認証情報名を使用しています。オブジェクトの所有者、認証情報、プロバイダー、およびモデル属性は、ご使用の環境に合わせて調整してください。
BEGIN DBMS_CLOUD_AI.CREATE_PROFILE( profile_name => 'SALES_NL2SQL_PROFILE', attributes => '{ "provider": "oci", "credential_name": "GENAI_CRED", "object_list": [ {"owner": "SH", "name": "SALES"}, {"owner": "SH", "name": "CUSTOMERS"}, {"owner": "SH", "name": "PRODUCTS"}, {"owner": "SH", "name": "TIMES"} ], "object_list_mode": "all", "enforce_object_list": true, "comments": true, "annotations": true, "constraints": true, "temperature": 0 }', status => 'enabled', description => 'Profile for sales NL2SQL examples' ); END; /EXEC DBMS_CLOUD_AI.SET_PROFILE('SALES_NL2SQL_PROFILE'); SELECT AI SHOWSQL 前四半期の製品カテゴリー別の総売上高はいくらでしたか?
この例では、プロファイルによって初期 NL2SQL スコープが 4 つの SH オブジェクトに制限され、より豊富なメタデータが有効になります。テーブルが少ないため、object_list_mode は「all」に設定されています。スキーマにテーブルが多数ある場合は、「automated」を指定して Oracle Select AI に動的に使用するテーブルを決定させることができます。リストされたテーブルのみを使用できるようにするには、enforce_object_list を true に設定して明示的に要求できます。コメント、注釈、制約属性は、Oracle Select AI がモデルに送信される拡張プロンプトに含めることができるスキーマ コンテキストに影響します。
コメントを使ってモデルに分かりやすいスキーマの意味を与えましょう
NL2SQLの精度を向上させる最も簡単な方法の一つは、テーブル名と列名の意味をビジネス用語で記述することです。これは、物理的な名前が省略されている場合、レガシーシステムに基づいている場合、またはアプリケーションを既に知っている人にしか理解できない場合に特に有効です。
例えば、AMOUNT_SOLD という名前の列はデータウェアハウス開発者にとっては十分分かりやすいかもしれませんが、ビジネス上のプロンプトでは、収益、売上、購入金額といった言葉が使われる可能性が高いでしょう。コメントによって、Oracle Select AI はより自然な言語コンテキストを得て、これらの用語を適切な列に結びつけることができます。
COMMENT ON TABLE sh.sales IS
'Fact table containing sales transactions by customer, product, channel, promotion, and time.';
COMMENT ON COLUMN sh.sales.amount_sold IS
'Revenue amount for each sales transaction.';
COMMENT ON COLUMN sh.sales.time_id IS
'Date key used to analyze sales by day, month, quarter, and year.';
COMMENT ON TABLE sh.products IS
'Product dimension containing product names, categories, and descriptions.';
COMMENT ON COLUMN sh.products.prod_category IS
'Business category used for product-level revenue analysis.';
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'SALES_NL2SQL_PROFILE',
attribute_name => 'comments',
attribute_value => 'true'
);
END;
/
SELECT AI SHOWSQL
最新の四半期全体の製品カテゴリ別の収益を表示します。
コメント機能を有効にすると、Oracle Select AIはテーブルと列のコメントを自然言語翻訳のメタデータとして含めることができます。これにより、モデルは正確な列名を指定しなくても、売上がAMOUNT_SOLDに、製品カテゴリがPROD_CATEGORYにマッピングされるべきであることを理解できます。
注釈を使用して、より豊富で構造化されたメタデータを作成します。
コメントも重要ですが、注釈を使うことでより構造化された意味を付加できます。注釈は、ビジネスラベル、同義語、使用方法のガイダンス、またはスキーマに付随するアプリケーション固有のヒントなどを記録するために使用できます。NL2SQLの場合、注釈は、データベースがデータをどのように格納するかだけでなく、人々がデータについてどのように話すかを表現したい場合に役立ちます。
Oracle Select AIは、プロファイル属性annotationsがtrueの場合、拡張プロンプトに注釈を含めます。これにより、アプリケーション層にビジネス用語をハードコーディングすることなく、プロンプトの精度を向上させる別の方法が提供されます。
ALTER TABLE sh.sales ANNOTATIONS (
ADD Business_Description 'Fact table for revenue and unit sales analysis',
ADD NL2SQL_Hint 'Use AMOUNT_SOLD for revenue and QUANTITY_SOLD for units sold'
);
ALTER TABLE sh.sales MODIFY amount_sold ANNOTATIONS (
ADD Business_Term 'Revenue',
ADD Synonyms 'sales amount, purchase amount, booked revenue'
);
ALTER TABLE sh.products MODIFY prod_category ANNOTATIONS (
ADD Business_Term 'Product category',
ADD Synonyms 'category, product line, merchandise category'
);
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'SALES_NL2SQL_PROFILE',
attribute_name => 'annotations',
attribute_value => 'true'
);
END;
/
SELECT AI SHOWSQL
今年、最も高い受注収益を上げた製品ラインはどれですか。
この例では、プロンプトで「製品ライン」と「予約済み収益」が使用されています。注釈には、「製品ライン」が「製品カテゴリ」の同義語であり、「予約済み収益」には「AMOUNT_SOLD」を使用すべきであるという追加情報が示されています。このようなメタデータは、ビジネスユーザーがテーブル名や列名で話さない場合に特に役立ちます。
アノテーションは26aiデータベースの機能であるため、Oracle AI DatabaseまたはOracle Autonomous AI Database環境がアノテーションをサポートしており、かつスキーマにOracle Select AIで使用するビジネス用語のアノテーションが付けられている場合に、このオプションを使用してください。
参照整合性を使用して結合精度を向上させる
NL2SQLの精度は、多くの場合、結合の品質に依存します。顧客地域別および製品カテゴリ別の収益を求めるプロンプトが表示された場合、生成されるSQLは、売上ファクトテーブルを正しいディメンションに結合する必要があります。主キーと外部キーが存在し、プロファイル属性制約が真である場合、Oracle Select AIは参照整合性制約をモデルのメタデータとして含めることができます。
これはAI導入準備において重要なポイントです。適切にモデル化されたスキーマは、人間にとってもAIにとってもクエリが容易になります。制約はデータ品質を確保するだけでなく、Oracle Select AIがSQLを生成する際に役立つ関係情報を提供することもできます。
ALTER TABLE sh.customers ADD CONSTRAINT customers_pk
PRIMARY KEY (cust_id);
ALTER TABLE sh.products ADD CONSTRAINT products_pk
PRIMARY KEY (prod_id);
ALTER TABLE sh.times ADD CONSTRAINT times_pk
PRIMARY KEY (time_id);
ALTER TABLE sh.sales ADD CONSTRAINT sales_customer_fk
FOREIGN KEY (cust_id) REFERENCES sh.customers(cust_id);
ALTER TABLE sh.sales ADD CONSTRAINT sales_product_fk
FOREIGN KEY (prod_id) REFERENCES sh.products(prod_id);
ALTER TABLE sh.sales ADD CONSTRAINT sales_time_fk
FOREIGN KEY (time_id) REFERENCES sh.times(time_id);
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'SALES_NL2SQL_PROFILE',
attribute_name => 'constraints',
attribute_value => 'true'
);
END;
/
SELECT AI SHOWSQL
show revenue by customer region and product category for calendar year 2025;
constraints属性は、主キーや外部キーなどの参照整合性制約をLLMに送信されるメタデータに含めるかどうかを管理します。複数テーブルを扱うクエリの場合、これにより、誤った結合パスや結合条件の欠落を含むSQLが生成される可能性を低減できます。
ビューを使用して、繰り返し発生する質問を簡素化します
また、共通の結合、フィルタ、計算済みメトリックをデータベースに直接エンコードするビューを作成することで、NL2SQLの精度を向上させることもできます。LLMに基本テーブル間のすべての関係を推論させたり、列名からビジネス計算を再構築させたりする代わりに、ビューはtotal_revenue、gross_margin、customer_region、product_categoryなどの専用列を使用して、より明確なセマンティックレイヤーを提供できます。これにより、モデルの推論負荷が軽減され、選択する必要のある有効なSQLパターンの数が制限され、プロンプトが一貫性のある結果を生成する可能性が高くなります。
ビューは、承認済みの結合パスとメトリック定義を一度取得することで、プロンプト、アプリケーション、およびさまざまなAI支援クエリワークフロー間で再利用しやすくなるため、繰り返し発生するビジネス上の質問に特に役立ちます。Oracle Select AIプロファイルオブジェクトリストにこれらのビューを含めると、モデルがプロンプトごとに結合パスとビジネスロジックを再発見するのではなく、統制された再現可能なSQLの生成を誘導するのに役立ちます。
フィードバックを収集し、同様のプロンプトを時間とともに改善する。
強力なメタデータがあっても、NL2SQLは一度で完了する作業ではありません。ビジネス定義は変化し、名前は多義的になり、プロンプトは曖昧になることがあります。フィードバックによって、Oracle Select AIはうまくいった点と修正すべき点を把握し、意味的に類似した過去の例を今後のSQL生成のヒントとして活用できます。
生成された SQL が正しい場合は肯定的なフィードバックを、修正された SQL レスポンスとオプションの自然言語ガイダンスを含む否定的なフィードバックを提供できます。26ai では、Oracle Select AI はプロファイルに対してこの機能が初めて使用されるときにフィードバックベクトルインデックスを作成します。保存された例はベクトルの類似性に基づいて取得され、後続の拡張プロンプトのヒントとして含まれます。
-- First, inspect the generated SQL.
SELECT AI SHOWSQL
which product categories had the highest revenue in Q4 2025;
-- If the SQL is correct, record positive feedback by SQL ID.
EXEC DBMS_CLOUD_AI.FEEDBACK(
profile_name => 'SALES_NL2SQL_PROFILE',
sql_id => '852w8u83gktc1',
feedback_type => 'positive',
operation => 'add'
);
-- If you need to correct the generated SQL, provide negative feedback.
EXEC DBMS_CLOUD_AI.FEEDBACK(
profile_name => 'SALES_NL2SQL_PROFILE',
sql_text => 'select ai showsql which product categories had the highest revenue in Q4 2025',
feedback_type => 'negative',
response => q'[
SELECT p.prod_category, SUM(s.amount_sold) AS revenue
FROM sh.sales s
JOIN sh.products p ON p.prod_id = s.prod_id
JOIN sh.times t ON t.time_id = s.time_id
WHERE t.calendar_quarter_desc = '2025-Q4'
GROUP BY p.prod_category
ORDER BY revenue DESC
]',
feedback_content => 'Use AMOUNT_SOLD for revenue, join PRODUCTS through PROD_ID, and use TIMES for quarter filtering.'
);
注:フィードバックと自動オブジェクトリスト選択は、ベクトルベースの意味類似性検索に依存するため、26aiが必要です。19cでは、コアとなるOracle Select AI NL2SQL機能は引き続き使用できますが、これらのベクトルベースの拡張機能は26aiの機能です。
フィードバックは、プロファイルレベルで共有される知識として扱います。修正フィードバックを追加する前に、修正されたSQLが、単に一人のユーザーによる質問の一時的な解釈ではなく、プロファイルの対象となるユーザーにとって意図されたビジネス定義を反映していることを確認してください。
大規模スキーマには、自動オブジェクトリスト選択を使用する
オブジェクトリストは、AIプロファイルにおいて最も重要な制御要素の一つです。オブジェクトリストによって、NL2SQLの対象となるオブジェクトが決定されます。小規模なアプリケーションでは、厳選されたオブジェクトリストを使用することで検索範囲を絞り込み、曖昧さを軽減できるため、多くの場合最適な選択肢となります。しかし、数百、数千ものテーブルを含むエンタープライズ規模のスキーマでは、あらゆるクエリに対して完璧なオブジェクトリストを維持することは困難になる場合があります。
自動オブジェクトリスト選択機能を使用すると、この問題を解決できます。object_list_mode を automatic に設定すると、Oracle Select AI はプロンプトに最も関連性の高いオブジェクトを識別し、それらのオブジェクトのメタデータのみを送信します。object_list を指定すると、Oracle Select AI はそのリスト内を検索します。26ai で object_list を省略すると、Oracle Select AI はプロファイル所有者がアクセスできるオブジェクトを評価し、関連するオブジェクトを選択できます。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'SALES_AUTO_NL2SQL_PROFILE',
attributes => '{
"provider": "oci",
"credential_name": "GENAI_CRED",
"object_list_mode": "automated",
"comments": true,
"annotations": true,
"constraints": true,
"temperature": 0
}',
status => 'enabled',
description => 'Profile using automated object selection for NL2SQL'
);
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('SALES_AUTO_NL2SQL_PROFILE');
SELECT AI SHOWSQL
which customers increased revenue the most year over year;
-- You can also combine automated mode with a broad but bounded object list.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'RETAIL_AUTO_NL2SQL_PROFILE',
attributes => '{
"provider": "oci",
"credential_name": "GENAI_CRED",
"object_list": [
{"owner": "SH"}
],
"object_list_mode": "automated",
"comments": true,
"annotations": true,
"constraints": true
}',
status => 'enabled'
);
END;
/
このプロファイル制御方式により、ガバナンス、プロンプト範囲、スキーマカバレッジのバランスを柔軟に調整できます。部門レベルのアプリケーションでは、object_list_modeを「all」に設定したキュレーション済みのオブジェクトリストを使用できます。一方、広範囲な分析アシスタントでは、自動オブジェクト選択を使用してスキーマノイズとプロンプトサイズを削減できます。自動モードが有効になっている場合、Oracle Select AIはプロファイル用のオブジェクトリストベクトルインデックスを作成します。
これらのコントロールを組み合わせて、精度の高いワークフローを実現します。
最良の結果を得るには、これらのコントロールを一つだけに頼るのではなく、組み合わせるのが効果的です。実際のワークフローは次のようになります。
- 最初のユースケースに向けて、焦点を絞ったAIプロファイルと厳選されたオブジェクトリストを作成することから始めましょう。
- オブジェクト名に含まれていないビジネス概念については、テーブルと列にコメントを追加してください。
- 同義語、ラベル、使用方法に関するガイダンスなど、スキーマに密接に関連する注釈を追加してください。
- 主キーと外部キーを定義し、プロファイルで制約を有効にします。
- 開発中はSHOWSQLとEXPLAINSQLを使用して、実行前に生成されたSQLを検査できるようにしてください。
- 正しいSQLに対しては肯定的なフィードバックを、結果の改善が必要な場合は修正されたSQLまたはガイダンスを含む否定的なフィードバックを収集します。
- 26ai 上の大規模スキーマの場合、自動オブジェクトリスト選択を使用することで、Oracle Select AI が意味的類似性に基づいて関連オブジェクトを識別できるようになります。
NL2SQL精度チェックリスト
| 精度目標 | プロファイルまたはスキーマ制御 | なぜそれが役立つのか |
| ビジネス用語を列にマッピングする | comments = true | NL2SQLメタデータにテーブルと列のコメントが含まれます |
| 同義語と使用例をキャプチャする | annotations = true | 拡張プロンプトに構造化されたテーブルと列の注釈を追加します。 |
| より良い結合を生成する | constraints = true | メタデータに主キーと外部キーの関係を含める |
| スキーマノイズを低減する | object_list | 特定のアプリケーションで使用可能なオブジェクトを制限します |
| 大規模スキーマへの拡張 | object_list_mode = automated | ベクトル類似性を使用して、プロンプトに最も関連性の高いオブジェクトを選択します。 |
| データベースオブジェクトのセットを制限する | enforce_object_list = true | Oracle Select AIに対し、生成されたSQLに指定されたデータベースオブジェクトのみが含まれていることを検証するよう指示する。 |
| 時間の経過とともに改善する | DBMS_CLOUD_AI.FEEDBACK | 確認済みまたは修正済みの例を保存し、類似の例をヒントとして取得します。 |
| 出力変動を低減する | temperature = 0 | 開発およびテスト中のSQL生成の一貫性を高める |
より一貫性のあるデータワークフローを実現するには、NL2SQLデータ取得エージェントを使用してください。
1回限りのSQL生成では不十分なユースケースの場合は、 Oracle Autonomous AI DatabaseサンプルGitHubリポジトリで入手可能なOracle Select AIの事前構築済みエージェントの1つであるNL2SQLデータ取得エージェントから始めることができます。このエージェントは、Oracle Select AIのNL2SQL生成と、データベースの内省、クエリの修正、フェイルセーフな再試行、一意値チェック、範囲チェック、オプションのWebインテリジェンス、およびチャート生成を組み合わせています。これは、実際の多くの質問がNL2SQLでSQLを生成できないために失敗するのではなく、プロンプトに曖昧な値、無効な日付範囲、0行を返す述語、または視覚化や追加のコンテキストが必要なリクエストが含まれているために失敗するため重要です。
エージェントは、NL2SQLをガイド付きデータ取得ワークフローに変えることで、一貫性と信頼性を向上させます。メタデータの検査、フィルタリング前の有効なカテゴリ値のチェック、数値範囲や日付範囲の検査、SQLステートメントの失敗や行が返されない場合の再試行、構造化された説明可能な応答の返送などが可能です。エージェントはAIプロファイルに紐付けられるため、前述のプロファイル設定の手法が引き続き適用されます。コメント、注釈、制約、オブジェクトリスト、自動オブジェクト選択、フィードバック、モデル設定などによって、エージェントがデータについて推論する方法が形作られます。
このエージェントは、リクエストが曖昧な場合に意味理解を向上させます。モデルに推測を強要するのではなく、ワークフローは人間のインタラクションをツールとして活用できます。つまり、明確化のための質問をし、意図したメトリックやフィルタを確認してから、データ取得タスクを続行します。これは、自信満々でも間違った回答よりも、簡単な説明を求める方がはるかに良い、顧客対応やビジネス対応のチャット体験において特に有効です。プロファイルに基づいたNL2SQLとツールベースのチェック、そして人間の明確化を組み合わせることで、この事前構築済みのNL2SQLデータ取得エージェントは、プロンプトやモデルの選択に関わらず、より一貫性があり、正確で、信頼性の高い回答を生成するのに役立ちます。
事前に構築されたエージェントをインストールし、AIプロファイルにバインドすると、エージェントチームをアプリケーションやチャットボットのインターフェースに公開できます。プロンプトの例としては、選択したプロファイルに関連付けられたテーブルに関する質問、グラフの要求、メタデータの検査や値の検証が有効なデータ取得に関する質問などがあります。
SQLコマンドライン実験で使用したプロファイルを、デプロイ済みアプリケーションにも使用する
Oracle Select AIは、SQLコマンドラインから直接アクセスでき、AIプロファイルを使用して対話型の実験と検証を行うことができます。アプリケーション開発者は、PL/SQLまたはPythonを介して同じ検証済みプロファイルを使用できます。アプリケーションは、プロバイダ、対象オブジェクト、メタデータ、および精度機能を既に制御しているプロファイルを使用してOracle Select AIを呼び出すことができます。
ステートレス環境では、DBMS_CLOUD_AI.GENERATE を使用するとプロファイル名を直接渡すことができます。この方法は、セッションの状態に依存できないアプリケーションコードで役立ちます。
DECLARE
l_sql CLOB;
BEGIN
l_sql := DBMS_CLOUD_AI.GENERATE(
prompt => '前四半期の製品カテゴリ別の総収益を表示します',
profile_name => 'SALES_NL2SQL_PROFILE',
action => 'showsql'
);
DBMS_OUTPUT.PUT_LINE(l_sql);
END;
/
# Oracle Select AI for Python を使用した概念的な Python パターン。
# 本番コードでは、インストールされている Oracle Select AI for Python バージョンの API 名を使用してください。
from select_ai import SelectAI
sai = SelectAI(connection=conn)
sai.set_profile("SALES_NL2SQL_PROFILE")
sql_text = sai.generate(
prompt="前四半期の製品カテゴリ別の総収益を表示します",
action="showsql"
)
print(sql_text)
これにより、プロファイルがガバナンスと動作の境界として強化されます。リクエストがSQLワークシート、APEXアプリケーション、チャットボット、Pythonアプリケーション、またはOracle Select AI Agent Frameworkワークフローのいずれから発生した場合でも、プロファイルによってOracle Select AIがSQL生成に使用できるものが決定されます。
Ask Oracle Select AI を使って、ユーザーにすぐに使えるチャットボットを提供する
Oracle Select AI への自然言語インターフェースをビジネスユーザーに提供するために、チャットボットをゼロから構築する必要はありません。Ask Oracle Select AI APEX アプリケーションは、AI プロファイルと Oracle Select AI Agent フレームワークのエージェント チーム (NL2SQL データ取得エージェントなど) を使用して、NL2SQL および RAG 用の既製のチャットボット エクスペリエンスを提供します。このチャットボット アプリケーションを使用すると、プロファイルの検証、プロンプト間の NL2SQL の動作の比較、生成された SQL と説明の表示、NL2SQL 結果からのグラフの生成、およびアプリケーション UI からのプロファイルまたはエージェントの切り替えが簡単に行えます。
Oracle Select AI の Ask 機能は、開発時とデプロイ時の両方で役立ちます。開発時には、データ所有者とアプリケーションチームが、コメント、注釈、制約、オブジェクトリスト、フィードバック、自動オブジェクト選択が回答の改善に役立っているかどうかを迅速にテストできます。デプロイ時には、コーダーと非コーダーの両方が、既に構成済みの管理対象プロファイルとエージェントを介して、使い慣れたチャットインターフェイスを利用できます。NL2SQL 精度プログラムの場合、この機能により、AI プロファイルの設計、スキーマの拡充、フィードバックの追加、必要に応じてツール駆動型検証のための NL2SQL データ取得エージェントの使用、そして既製の APEX チャットボットによる結果の公開という一連のプロセスが完結します。
セキュリティとガバナンスをデータの近くに維持する
NL2SQLはデータベースの制御を迂回するものではありません。Oracle Select AIは、データベースユーザー、権限、プロファイル構成、およびデータベースセキュリティ機能と連携して動作します。プロファイルを通じて、どのオブジェクトが対象となるか、どのメタデータオプションが有効になるか、どのユーザーが関連パッケージを実行して基となるデータにアクセスできるかを決定します。
これは、NL2SQLの精度とガバナンスが関連しているため重要です。より小さく、適切に管理されたオブジェクトセットは、より正確なSQLを生成し、不要なデータやメタデータの漏洩リスクを低減します。行レベルセキュリティ、仮想プライベートデータベースポリシー、データ編集、その他のデータベース制御が基盤となるSQL実行に適用される場合、これらの制御はアプリケーションアーキテクチャの一部として残ります。
Oracle Select AI NL2SQLとMCPツールの比較
Oracle Select AI NL2SQLとMCPクライアントおよびツールベースのアプローチでは、自然言語からSQLへの生成処理が異なります。Oracle Select AIでは、AIプロバイダ、モデル、アクセス可能なオブジェクト、メタデータ、フィードバック、およびオブジェクト選択動作を制御するAIプロファイルを使用して、Oracle AI Databaseを介してプロンプトがSQLに変換されます。選択されたLLMは、OCI Generative AI Serviceなどの信頼できるOracle環境内、Oracle環境外、またはプライベートホスト環境で実行できます。いずれの場合も、Oracle Select AIは拡張プロンプトをデータベースで準備し、そのプロンプトを選択されたLLMに送信してSQLを受信し、データベース中心のNL2SQLワークフローを提供します。
対照的に、MCPクライアントとツールベースのアプローチでは、通常、MCPクライアントまたはエージェントランタイムが質問に答えるまでに複数回のラウンドトリップを行う必要があります。利用可能なスキーマを検査するためのツール呼び出しが1回、関連するテーブルを一覧表示するためのツール呼び出しが1回、列、コメント、キー、またはサンプル値を検査するための追加の呼び出し、次にSQLを生成するためのLLM呼び出し、続いてSQLを実行するためのツール呼び出し、そして場合によってはエラーを修正するための追加の呼び出しが必要になる場合があります。このオーケストレーションは、多くのシステムにまたがる広範なエージェントワークフローには役立ちますが、NL2SQLでは、グラウンディング、検証、および再試行ロジックの大部分がアプリケーション層に移行します。また、短期および長期メモリ、ベクトルストア、会話履歴、トレースログなどのエージェントAIメモリがデータベースの外で維持される場合、追加のデータガバナンスの考慮事項が導入される可能性があります。これらのストアは、ソースデータと同じ厳格さで管理されていない場合、シャドウデータリポジトリになる可能性があります。Oracle Select AI Agent Frameworkは、エージェントAIメモリをデータベースに保持することでこのパターンに対処していることに注意する価値がありますが、エージェントメモリに関するより詳細な議論は別の記事で取り上げます。
Oracle Select AIは、拡張プロンプトをデータベース内で生成し、LLMへの呼び出しを1回行うだけで特定のプロンプトに対応するSQLクエリを生成することで、MCPベースのNL2SQLに伴うオーバーヘッドを削減します。同時に、プロファイル制御、スキーマメタデータ、フィードバック、およびオブジェクト選択動作をデータに近い場所に保持し、データベースを通じて管理します。
26aiはベクトルベースの精度向上を実現します
Oracle Select AIのコアとなるNL2SQL機能は、サポートされているすべてのリリースで利用可能ですが、最新の精度向上機能の一部は、ベクトルベースの意味類似性検索に依存しています。フィードバック機能は、ベクトル検索を使用して、現在のプロンプトに類似した過去のプロンプトと修正箇所を検索します。自動オブジェクトリスト選択機能は、ベクトル検索を使用して、プロンプトに最も関連性の高いスキーマオブジェクトを特定します。
そのため、フィードバックや自動オブジェクトリスト選択などの機能を利用するには、26aiが必要です。19cを使用している場合でも、プロファイルを慎重に設計し、オブジェクトリストを整理し、コメントを追加し、制約を定義することで、NL2SQLの精度を向上させることができます。フィードバックに基づいたプロンプトの調整や自動オブジェクト選択が必要な場合は、26aiへの移行を検討してください。
まとめ
Oracle Select AI NL2SQL の精度は、データベースがモデルに適切なコンテキストを提供し、AI プロファイルがそのコンテキストを意図的に制御する場合に向上します。まず、重要なオブジェクトから始めます。ビジネス用語がスキーマ要素にマッピングされるようにコメントを追加します。注釈を使用して、より豊富な語彙と使用上のヒントをキャプチャします。参照整合性を定義して、結合パスを明確にします。フィードバックを収集して、同様のプロンプトが時間とともに改善されるようにします。26ai の大規模なスキーマの場合は、自動オブジェクトリスト選択を使用して、モデルに過負荷をかけずに適切なオブジェクトを見つけます。
その後、事前構築済みのエージェントを使用してその基盤を拡張できます。NL2SQLデータ取得エージェントは、ツール駆動型の検証、再試行、対話の明確化、チャート生成機能を追加し、より信頼性の高いデータ取得ワークフローを実現します。Ask Oracle Select AIは、カスタマイズ可能な既製のAPEXベースのチャットボットを提供し、ビジネスユーザーと開発者の両方がこれらのプロファイルとエージェントを使用できます。その結果、データ、メタデータ、データベースセキュリティモデルに忠実な、より信頼性の高い自然言語クエリエクスペリエンスが実現します。NL2SQLを一般的なプロンプトエンジニアリング作業として扱うのではなく、Oracle Select AIを使用して、統制されたデータベース中心のワークフローにすることができます。
コメント
コメントを投稿