Oracle Database 23ai の AI Profile と Database Role を組み合わせて、表示されてはいけない情報を確実に隠蔽できる SELECT AIのプロトタイプ
$ tree .
.
├── backend (APIサーバー実装 with Helidon)
│ ├── data (外部テーブルアップロード用サンプルファイル)
│ │ ├── leave-log.csv
│ │ ├── leave-log-no-header.csv
│ │ ├── leave-log-no-headers.yaml
│ │ ├── leave-log.yaml
│ │ ├── spot-awards.csv
│ │ └── spot-awards.yaml
│ ├── Dockerfile
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── ai
│ │ │ ├── package-info.java
│ │ │ └── query
│ │ │ ├── CustomExceptionMapper.java
│ │ │ ├── DatabaseService.java
│ │ │ ├── ObjectStorageService.java
│ │ │ ├── SelectAIResource.java
│ │ │ └── UploadSchema.java
│ │ └── resources
│ │ ├── application.yaml
│ │ ├── logging.properties
│ │ └── META-INF
│ │ ├── beans.xml
│ │ ├── microprofile-config.properties
│ │ └── native-image
│ │ └── com
│ │ └── example
│ │ └── select-ai
│ │ └── native-image.properties
│ └── test
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── ai
│ │ └── query
│ │ └── SelectAIResourceTestTest.java
│ └── resources
│ ├── application-test.yaml
│ └── META-INF
│ └── microprofile-config.properties
├── etc
│ └── proto
│ ├── server.sh (サーバー起動サンプルsh)
│ ├── sql (データベース設定SQLファイル)
│ │ ├── hr.sql
│ │ ├── populate.sql
│ │ └── setup.sql
│ └── sql.sh
├── frontend (Streamlit による簡易UI)
│ ├── python
│ │ └── select_ai_chat3.py
│ └── select_ai_chat.sh
└── README.md
$ curl localhost:8080/openapi
tags:
-
description: SELCET AIを活用した自然言語データベース検索API
name: SelectAI
info:
title: Generated API
version: '1.0'
openapi: 3.0.3
paths:
/select-ai/v1:
get:
tags:
- SelectAI
description: サービスの疎通確認用エンドポイントです。
responses:
'200':
content:
application/json: {}
description: サービス稼働中
summary: 疎通確認
/select-ai/v1/external/delete:
post:
tags:
- SelectAI
description: 外部テーブルおよび対応するストレージ上のオブジェクトを削除します。
requestBody:
content:
application/json:
schema:
type: object
description: 削除リクエスト - tableName
required: true
responses:
'204':
description: 削除成功
summary: 外部テーブル削除
/select-ai/v1/external/upload:
post:
tags:
- SelectAI
parameters:
-
description: 上書き可否
example: true
in: query
name: overwrite
schema:
default: 'true'
type: boolean
description: 外部データとスキーマをオブジェクトストレージにアップロードし、外部テーブルを登録します。
requestBody:
content:
application/json:
schema:
type: object
description: アップロードリクエストJson - data, schema
required: true
responses:
'200':
content:
application/json: {}
description: アップロード結果
summary: 外部データアップロード
/select-ai/v1/objects:
get:
tags:
- SelectAI
description: 登録済みのすべてのオブジェクトを一覧表示します。
responses:
'200':
content:
application/json: {}
description: オブジェクト一覧
summary: 全オブジェクト一覧
/select-ai/v1/query:
post:
tags:
- SelectAI
parameters:
-
description: 入力に外部テーブルの付加情報追加
example: false
in: query
name: add-prompt
schema:
default: false
type: boolean
-
description: 出力フォーマット
example: with-schema
in: query
name: format
schema:
default: with-schema
type: string
description: JWTまたはリクエストボディによるユーザーを確認し、SELECT AIを使ってクエリを実行します。
requestBody:
content:
application/json:
schema:
type: object
description: リクエストJson - query, user
required: true
responses:
'200':
content:
application/json: {}
description: クエリ実行結果
summary: AIクエリ実行
/select-ai/v1/reconcile:
get:
tags:
- SelectAI
description: 権限情報とDBロール/AIプロファイルとの整合性をとります。
responses:
'204':
description: 整合処理完了
summary: DBロール/AIプロファイルの再構築
/select-ai/v1/relations:
get:
tags:
- SelectAI
parameters:
-
description: グループ名
in: query
name: group
schema:
type: string
description: 指定されたグループに対するオブジェクト関連情報を一覧表示します。
responses:
'200':
content:
application/json: {}
description: 関連オブジェクト一覧
summary: グループの関連オブジェクト一覧
/select-ai/v1/relations/{operation}:
post:
tags:
- SelectAI
parameters:
-
description: 操作種別(add/delete)
in: path
name: operation
required: true
schema:
type: string
description: グループとオブジェクトの関連付けや解除を行います。
requestBody:
content:
application/json:
schema:
type: object
description: 関連操作リクエスト - group, objects(schema, object)
required: true
responses:
'204':
description: 操作成功
summary: グループとオブジェクトの関連付け/解除
cd backend
mvn package
- etc/proto/sql 配下のSQLスクリプトを実行
- hr.sql 以外は管理者ユーザで実行
- hr.sql は HRユーザで実行
- ウォレットファイルをダウンロードして解凍
- JDBC URLを確認
- etc/proto/server.sh を環境に合わせて修正して起動