はじめに
-
OACの新しいAI機能 「AIエージェント」
で紹介しましたが、OAC(Oracle Analytics Cloud)のAIエージェント機能を使って、役に立つ何かを作ってみようと思い立ちました。
こんなのは、どうでしょうか?
- データベースのどこかにあるはずの情報を自然文で探す
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で準備する
接続とデータセットを作る
まずは接続を作成します。
Oracle Autonomous AI Lakehouseを選択します。
適切な値を入力して接続を作成します。
保存先は、「/マイ・フォルダ/AI Agent」にしました。
作成した接続を元にデータセットを作成します
作っておいたビューをドラッグ&ドロップか、ダブルクリックで選択します。
「列の説明」という名前を付けて、接続と同じ場所に保存します。
AIアシスタント用にインデックスを作成する
作成したデータセットのアクションメニューから「検査」をクリックします。
「検索」タブに移動して、データセットの索引付けを「アシスタント」に変更します。
「保存」して「即時実行」します。
必要に応じてシノニムも作成しておきます。
完了まで待たずに「閉じる」で閉じてしまって構いません。
AIエージェントを作る
「作成」メニューから「AIエージェント」をクリックします。
作成しておいたデータセットを選択して、「エージェントに追加」をクリックします。
補足説明
補足指示は、エージェントに意図・解釈や回答の振る舞いを指示するために使用します。
曖昧さを減らし、ハルシネーションを最小化し、組織の用語・標準に沿った応答に寄せるのが目的です。
今回は、こんな感じにしてみました。
別にマークダウンにする必要はないですが、構造化しやすいかと思って今回はマークダウン形式にしました。
#### 1. 目的
- ユーザーの質問からビジネス用語(キーワード)を自動抽出(例: 「売上」「顧客ID」「月次レポート」など)。
- 抽出された用語を、データカタログの以下の列を対象に検索:
- ドメイン(Subject Area名)
- 表(テーブル名)
- 列(カラム名)
- 列の注釈(列の内容説明)
#### 2. 出力形式
- 列順:所有者 | 表 | 表の注釈 | 列 | 列の注釈
- チャート・タイプは表
#### 3. 照合ルール(優先順位順)
1. 完全一致:抽出キーワードと列、表で完全一致(大文字小文字無視)。
2. 部分一致:表の注釈、列の注釈でキーワードを含む(大文字小文字無視、AND/OR検索可)。
#### 4. 言語・スタイル
- 全て日本語で回答(表ヘッダー・説明含む)。
- 簡潔・明確:余計な前置きなし。質問に直接応答。
最初のメッセージ
初回に表示する案内(目的・サンプル質問など)です。
検索したいデータがどこにあるかを探します。
基本の質問例:
・「販売金額」を探して
バリエーションの質問例:
・売上金額または販売金額を探して
・スキーマ=DEMOで、販売金額の列
・通貨=USDまたは明細粒度の列を探して
保存します
接続とデータセットと同じ場所に、「検索したいデータの場所を探します」という名前で保存しました。
試してみる
OAC AIエージェントを実行
作成したAIエージェントをダブルクリックするか、アクションメニューから「新しいタブで開く」を選択します。
このようになります。
基本の質問例をコピー&ペーストして実行してみます。
ちゃんと見つかりました。
おわりに
思ってたのと違う利用例だったかも知れないですが、Oracle AI Databaseの新しい機能をOACの新しい機能で試してみました。














