3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OAC AIエージェントの利用例 ほしいデータがどこにあるかを探す

3
Posted at

はじめに

こんなのは、どうでしょうか?

  • データベースのどこかにあるはずの情報を自然文で探す

Oracle DBの中のデータを探す

Oracle DBの表や列には、コメントやアノテーション(注釈)を設定できます。
これらを一元的に参照するビューを作成して、そこからOACのデータセットを作成しようかと思います。

  • 本記事ではコメントは使用せずにアノテーションのみを使用しようと思いますが、コメントを使う場合でも考え方は一緒です。

ビューを作る

こんなビューを作成します。Oracle DB 23ai以降で、Annotationが利用可能なバージョンを想定しています。
今回は、Oracle Autonomous AI Lakehouseに作成しますので、データベースのバージョンは 26ai です。
不要な行を減らすために、特定のスキーマに限定しました。
ビューは、adminユーザーで作成しました。

列名 備考
所有者 表の所有者。ADMINとかDEMOとか
SALESとかPRODUCTSとかの表の名前
表の注釈 表に対する注釈
表に含まれる列の名前
列の注釈 列に対する注釈。設定されていない場合は「未登録」と表示

列に対しては、DESCRIPTIONとEXAMPLEの2つのアノテーションが設定されており、それぞれ列の説明と値の例が注釈として設定されている、という想定です。

CREATE OR REPLACE VIEW DD_COLUMNS_V AS
SELECT
    atc.owner AS 所有者,
    atc.table_name AS ,
    NVL(da_obj.annotation_value, '未確認(注釈未登録)') AS 表の注釈,
    atc.column_name AS ,
    NVL(
        LISTAGG(da_col.annotation_value, ', 値の例: ')
            WITHIN GROUP (ORDER BY da_col.annotation_name),
        '未確認(注釈未登録)'
    ) AS 列の注釈
FROM
    all_tab_columns atc
LEFT JOIN
    all_annotations_usage da_col
    ON atc.owner = da_col.annotation_owner
    AND atc.table_name = da_col.object_name
    AND atc.column_name = da_col.column_name
    AND da_col.object_type IN ('TABLE', 'VIEW')
    AND da_col.annotation_name IN ('DESCRIPTION', 'EXAMPLE')
LEFT JOIN
    all_annotations_usage da_obj
    ON atc.owner = da_obj.annotation_owner
    AND atc.table_name = da_obj.object_name
    AND da_obj.column_name IS NULL
    AND da_obj.object_type IN ('TABLE', 'VIEW')
    AND da_obj.annotation_name = 'DESCRIPTION'
WHERE
    atc.owner IN ('ADMIN', 'DEMO')
GROUP BY
    atc.owner,
    atc.table_name,
    da_obj.annotation_value,
    atc.column_name,
    atc.column_id
ORDER BY
    atc.owner,
    atc.table_name,
    atc.column_id;

ついでに、いくつかの列にコメントやアノテーションを追加してみます。

alter table DEMO.PRODUCTS modify(prod_subcategory annotations(description '製品サブカテゴリ'));
alter table DEMO.PRODUCTS modify(prod_subcategory annotations(example 'DVDレコーダー、本棚など'));
alter table DEMO.PRODUCTS modify(prod_category annotations(description '製品カテゴリ'));
alter table DEMO.PRODUCTS modify(prod_category annotations(example 'エレクトロニクス、家具など'));
alter table DEMO.SALES modify(AMOUNT_SOLD annotations(description '販売金額がUSDで格納されています'));
alter table DEMO.SALES modify(AMOUNT_SOLD annotations(example '小数点以下2桁の数値'));
alter table DEMO.SALES modify(QUANTITY_SOLD annotations(description '販売数量が格納されています'));
alter table DEMO.SALES modify(QUANTITY_SOLD annotations(example '小数点以下2桁の数値'));
commit;
確認
select * from dd_columns_v where 所有者='DEMO' and  in ('PRODUCTS','SALES');

所有者            表の注釈                                                 列の注釈
------ -------- ------------------------------------ ---------------- ------------------------------------------------------------
DEMO   PRODUCTS 製品に関するディメンション表         PROD_ID          一意な製品番号, 値の例: 6桁の番号
DEMO   PRODUCTS 製品に関するディメンション表         PROD_SUBCATEGORY 製品サブカテゴリ, 値の例: DVDレコーダー、本棚など
DEMO   PRODUCTS 製品に関するディメンション表         PROD_CATEGORY    製品カテゴリ, 値の例: エレクトロニクス、家具など
DEMO   SALES    販売金額と販売数量に関するファクト表 QUANTITY_SOLD    販売数量が格納されています, 値の例: 小数点以下2桁の数値
DEMO   SALES    販売金額と販売数量に関するファクト表 AMOUNT_SOLD      販売金額がUSDで格納されています, 値の例: 小数点以下2桁の数値                     

OACで準備する

接続とデータセットを作る

まずは接続を作成します。

image.png

Oracle Autonomous AI Lakehouseを選択します。

image.png

適切な値を入力して接続を作成します。
保存先は、「/マイ・フォルダ/AI Agent」にしました。

image.png

作成した接続を元にデータセットを作成します

作っておいたビューをドラッグ&ドロップか、ダブルクリックで選択します。

image.png

「列の説明」という名前を付けて、接続と同じ場所に保存します。

image.png

AIアシスタント用にインデックスを作成する

作成したデータセットのアクションメニューから「検査」をクリックします。
「検索」タブに移動して、データセットの索引付けを「アシスタント」に変更します。
「保存」して「即時実行」します。

image.png

必要に応じてシノニムも作成しておきます。

image.png

完了まで待たずに「閉じる」で閉じてしまって構いません。

AIエージェントを作る

「作成」メニューから「AIエージェント」をクリックします。

image.png

作成しておいたデータセットを選択して、「エージェントに追加」をクリックします。

image.png

補足説明

補足指示は、エージェントに意図・解釈や回答の振る舞いを指示するために使用します。
曖昧さを減らし、ハルシネーションを最小化し、組織の用語・標準に沿った応答に寄せるのが目的です。
今回は、こんな感じにしてみました。
別にマークダウンにする必要はないですが、構造化しやすいかと思って今回はマークダウン形式にしました。

#### 1. 目的
- ユーザーの質問からビジネス用語(キーワード)を自動抽出(例: 「売上」「顧客ID」「月次レポート」など)。
- 抽出された用語を、データカタログの以下の列を対象に検索:
  - ドメイン(Subject Area名)
  - 表(テーブル名)
  - 列(カラム名)
  - 列の注釈(列の内容説明)

#### 2. 出力形式
- 列順:所有者 | 表 | 表の注釈 | 列 | 列の注釈
- チャート・タイプは表

#### 3. 照合ルール(優先順位順)
1. 完全一致:抽出キーワードと列、表で完全一致(大文字小文字無視)。
2. 部分一致:表の注釈、列の注釈でキーワードを含む(大文字小文字無視、AND/OR検索可)。

#### 4. 言語・スタイル
- 全て日本語で回答(表ヘッダー・説明含む)。
- 簡潔・明確:余計な前置きなし。質問に直接応答。

最初のメッセージ

初回に表示する案内(目的・サンプル質問など)です。

検索したいデータがどこにあるかを探します。

基本の質問例:

  ・「販売金額」を探して

バリエーションの質問例:

  ・売上金額または販売金額を探して

  ・スキーマ=DEMOで、販売金額の列

  ・通貨=USDまたは明細粒度の列を探して

保存します

接続とデータセットと同じ場所に、「検索したいデータの場所を探します」という名前で保存しました。

image.png

image.png

試してみる

OAC AIエージェントを実行

作成したAIエージェントをダブルクリックするか、アクションメニューから「新しいタブで開く」を選択します。

image.png

このようになります。

image.png

基本の質問例をコピー&ペーストして実行してみます。

  • 「販売金額」を探して
    image.png

ちゃんと見つかりました。

  • スキーマ=DEMOで、販売金額の列
    もうちょっと限定してみました。
    image.png

おわりに

思ってたのと違う利用例だったかも知れないですが、Oracle AI Databaseの新しい機能をOACの新しい機能で試してみました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?