生成AIエージェントのSQLツール・ガイドライン

エージェントに構造化問合せ言語(SQL)ツールを設定して、自然言語問合せからSQL問合せ文を生成し、オプションで問合せを実行します。

結合、複数条件および集計を含むSQL SELECT問合せのみが生成および実行されます。

エージェントにSQLツールを追加することで、SQLおよび問合せ最適化技術に関する深い知識がなくても、データベースを問い合せることができます。

生成された問合せをユーザーに送信する前に、ヒューマン・レビューアが介入して編集できるようにするには、エージェント・エンドポイントでオプションの機能「ループでの人間の有効化」を選択します。

このトピックでは、生成AIエージェントでSQLツールを追加および使用するためのサポート情報、前提条件タスクおよびガイドラインについて説明します。

データベース

生成AIエージェントのSQLツールは、Oracle Database (ベース・データベースおよびAutonomous Database)をサポートしています。

表を作成し、優先データベースにデータをロードします。SQLツールを使用して問合せ文を生成し、その問合せを自己修正または実行する場合は、問合せおよび実行のデータを含むデータベースへのデータベース・ツール接続を設定する必要があります。接続の作成の詳細は、データベース・ツール接続の作成(ガイドライン)を参照してください。

SQLツールを使用して問合せ文を生成するのみで、ツールがSQL問合せを自己修正または実行できない場合に、データベースに表を作成する必要がない場合があります。ただし、エージェントでSQLツールを作成する場合は、データベース表スキーマを指定する必要があります。

Database Schema

生成AIエージェントでエージェントにSQLツールを追加する場合は、有効なデータベース・スキーマを指定する必要があります。スキーマが無効な場合、SQLツールの作成は検証ステップで失敗します。

有効なスキーマは、適切に構造化されたデータベース・ブループリントで、次のものが含まれます。

  • 表: エンティティの定義(CustomersOrdersなど)

  • 列: 属性を指定します(たとえば、CustomerIDOrderDate)。

  • 主キー: 行を一意に識別します(たとえば、CustomerID)。

  • 外部キー: リンク表(たとえば、OrdersCustomerIDCustomersを参照)。

  • 制約: ルールを強制します(たとえば、NOT NULLUNIQUE)。

有効なスキーマの例:

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    DepartmentID INT,
    HireDate DATE NOT NULL,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);

適切に構造化されたスキーマにより、データの整合性と効率性が保証されます。

無効なスキーマの例:

CREATE TABLE Employees (
    EmployeeID,
    Name VARCHAR(100),
    DepartmentID INT,
    HireDate DATE
);

構造を持たない無効なスキーマは、潜在的なデータの不整合および非効率につながる可能性があります。この例では、次の理由によりスキーマは無効です。

  • スキーマに主キー(EmployeeIDDepartmentID)がありません。
  • EmployeeIDのデータ型がありません。

モデルのカスタマイズ

SQLツールを作成する場合は、小さいモデルを使用するか大きいモデルを使用するかを選択できます。

小規模なモデルでは、応答時間が短縮され、コンピュート・コストが削減される場合があります。「2025年1月の総売上高の取得」などの単純な問合せには、小規模なモードを選択します。

大規模なモデルでは、精度が向上しますが、レイテンシとコンピュート・コストが高くなります。「Q1 2023でパフォーマンスの高い上位5社の製品の平均売上を地域別にグループ化して表示」など、より複雑な問合せに対してラージ・モデルを選択します。

データベースのダイアレクト

SQLツールは、Oracle SQLおよびSQLiteの方言をサポートしています。

エージェントは、任意の方言に基づいて、Oracle SQLまたはSQLiteの構文ルールに沿った問合せを生成できます。

SQLiteとOracle SQLの構文の違いの例:

Oracle: SELECT * FROM users FETCH FIRST 5 ROWS ONLY;
SQLite: SELECT * FROM users LIMIT 5;

Oracle: SELECT 'Hello' || ' World' FROM dual;
SQLite: SELECT 'Hello' || ' World';

ネットワークおよびセキュリティー要件

SQLステートメントの生成後にSQLクエリーを実行するためにSQLツールを有効にして使用する場合は、次の要件が設定されていることを確認します。

  • データベースのプライベート・サブネットで構成するイングレス・ルールについては、ネットワーキング要件(クロスリージョンおよびクロステナンシのサポートなし)を参照してください。

  • データベース・パスワード・シークレットを格納するには、OCI Vaultのボールトが必要です。ボールトをデータベースと同じコンパートメントに作成します。

  • 自律型データベースで相互TLS (mTLS)認証が有効になっている場合は、ウォレットをダウンロードしてファイルを抽出する必要があります。Walletのセキュリティ要件を参照してください。

データベース・ツール接続

SQLツールを有効にすると、SQL文の生成後に自己修正して問合せを実行できます。SQL実行または自己修正が有効な場合、問合せおよび実行のデータを含むデータベースへのデータベース・ツール接続が必要です。

接続の作成の詳細は、データベース・ツール接続の作成(ガイドライン)を参照してください。

入力および出力用のオブジェクト・ストレージ

オブジェクト・ストレージ・バケットを使用して、SQLツールへの入力ファイルを格納できます。SQL実行がSQLツールで有効になっている場合、実行中のSQL問合せの出力ファイルをオブジェクト・ストレージに格納できます。

入力

エージェントにSQLツールを追加する場合、詳細を手動で入力するか、オブジェクト・ストレージ・バケットにアップロードされたファイルを選択して次の入力を提供できます:

  • データベース・スキーマ
  • コンテキスト内学習の例
  • 表と列の説明

オブジェクト・ストレージでアップロードされたファイルを入力として使用するには、入力タイプに適切なファイル形式および拡張子を使用していることを確認してください:

  • データベース・スキーマの場合: スキーマ・ファイルを作成し、ファイル拡張子.sqlで保存します。例: hrcreate.sql
  • コンテキスト内学習の例の場合: ファイル拡張子.txtを使用してテキスト・ファイルに例を追加します。例: hr-icl.txt
  • 表および列の説明: 表および列の説明を、ファイル拡張子.txtを使用してテキスト・ファイルに追加します。例: hr-describe.txt

出力

SQLツールでSQL実行が有効になっている場合は、チャット・セッション中にエージェント・エンドポイントが出力結果を格納できるようにすることもできます。エージェント・エンドポイントでSQL実行出力結果を保存できるようにする場合は、優先コンパートメントにオブジェクト・ストレージ・バケットがあることを確認してください。バケットのオブジェクトに対してライフサイクル・ポリシー・ルールを設定して、オブジェクトの経過期間が指定日数を超えた場合に実行するアクション(削除やアーカイブなど)を指定できます。また、オブジェクト名フィルタを使用して、ライフサイクル・ルールが適用されるオブジェクトを指定することもできます。オブジェクト・ストレージでのポリシー・ルールおよびフィルタの作成についてサポートが必要な場合は、オブジェクト・ストレージでのオブジェクト・ライフサイクル・ポリシーの作成を参照してください。

エージェント・エンドポイントで出力結果ストレージを有効にし、使用するバケットを指定するには、生成AIエージェントでのエンドポイントの作成を参照してください。

出力結果ストレージが有効な場合、生成AIエージェントは、チャット・セッション中に結果に100行を超える行がある場合にのみ、指定されたオブジェクト・ストレージ・バケット内の.csvファイルに出力を格納します。生成AIエージェントは、100行未満の場合、出力結果を格納しません。

IAMポリシー

サービスを使用できる前のポリシーの追加の説明に従って、すべての生成AIエージェント・リソースへのアクセス権をユーザーに付与してください。

次の項も確認し、SQLツールでエージェントで特定の関数を使用する必要があるタスク(SQL実行の有効化など)を完了します。

動的グループ

OCI Identity and Access Management (IAM)で、次の場合に動的グループを作成します。

  • オブジェクト・ストレージからのファイルを入力として使用します(データベース・スキーマのインポートなど)。
  • SQLツールで、文の生成後にSQL問合せを実行できるようにします。

次の照合ルールを動的グループに追加します:

ALL {resource.type='genaiagent'}

ヘルプが必要な場合は、動的グループの作成を参照してください。

オブジェクト・ストレージ

エージェントでSQLツールを設定する場合は、データベース・スキーマ、およびオプションでコンテキスト内学習の例と表と列の説明を指定する必要があります。

オブジェクト・ストレージ・バケットのファイルを使用して入力を提供する場合は、動的グループにコンパートメント内のオブジェクト・ストレージのオブジェクトを読み取る権限を付与します。

Allow dynamic-group <dynamic-group-name> to inspect buckets in compartment <compartment-name> where target.bucket.name = '<bucket-name>'

Allow dynamic-group <dynamic-group-name> to read objects in compartment <compartment-name> where target.bucket.name = '<bucket-name>'

SQL実行、自己修正および出力ストレージ

SQLツールでチャット・セッションでSQL問合せを実行できるようにする場合は、問合せおよび実行のデータを含むデータベースへのデータベース・ツール接続が必要です。データベースに接続するには、次のポリシーを記述して、ボールト・シークレットおよびデータベース・ツール・サービスにアクセスするための適切な権限を動的グループに付与します。SQL問合せ文の検証後に、SQLツールがチャット・セッションで自己修正を実行できるようにする場合は、このポリシーも必要です。

Allow dynamic-group <dynamic-group-name> to use database-tools-connections in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to read database-tools-family in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to read secret-family in compartment <compartment-name>

SQLツールでSQL実行が有効になっている場合は、結果に100行以上ある場合に、エージェント・エンドポイントがチャット・セッション中に出力結果を格納できるようにすることもできます。出力結果を有効にする場合は、次のポリシーを設定して動的グループに権限を付与します。

allow dynamic-group <dynamic-group-name> to {BUCKET_INSPECT, BUCKET_READ, OBJECT_INSPECT, OBJECT_READ, OBJECT_CREATE, OBJECT_OVERWRITE, PAR_MANAGE} in compartment <compartment-name> where target.bucket.name = 
'<bucket-name>'

コンテキスト内学習の例(オプション)

データベース・スキーマに関するコンテキストは、ユーザーが尋ねる可能性のある質問の例と、回答例として予想されるSQL問合せの形式で指定できます。コンテキスト内学習の例は、類似したユーザー問合せへの回答に役立ちます。

例:

Question: Show all employees who were born in CA.
Oracle SQL: SELECT * FROM Employees WHERE BIRTHSTATE = 'CA';

Question: Get the employeeid of employees who joined in 2020.
Oracle SQL: SELECT employeeID FROM Employees WHERE hireDate = '2020';

カスタム指示(オプション)

エージェントの動作を変更するためのプロンプトを1つ以上指定できます。

次に例を示します:

Always use aggregators such as COUNT, SUM, AVG, MIN, and MAX in Oracle SQL queries that contain GROUP BY.
If the Oracle SQL query contains ORDER BY, then show the ORDER BY metric in the SELECT clause as well.
If all columns must be returned, use the (*) notation.
Ensure to include all relevant WHERE filtering conditions even when the number of conditions is larger than those of in-context learning examples.

表および列の説明(オプション)

表および列の説明を追加すると、問合せの精度が向上し、あいまいさが処理され、モデルが複雑な問合せおよび特定の用語をよりよく理解できるようになります。たとえば、Ordersstatus列をOrder status: pending, shipped, or deliveredと記述すると、モデルがユーザー問合せで正しく解釈するのに役立ちます。

次に例を示します:

Description of the important tables in the schema:

Employees         Employee names and other information
Departments       Department names and other information 

Description of the important columns of the tables in the schema:

EMPLOYEES TABLE

employees.employeeID     A unique code assigned to each employee. employeeID links the data in this file with records in the other files.
employees.departmentID   A unique code that identifies the department an employee belongs to
employees.birthYear      Year employee was born
employees.birthMonth     Month employee was born
employees.birthState     State where employee was born
employees.birthCity      City where employee was born
employees.nameFirst      Employee's first name
employees.nameLast       Employee's last name
employees.nameMiddle     Employee's middle name
employees.hireDate       Year employee joined the company

---------------------------------------------------------------------
DEPARTMENTS TABLE

department.departmentID    A unique code assigned to each department
department.departmentName  Name of the department
department.locationID      Unique code that identifies the location of a department
department.managerID       Unique code that identifies the department's manager