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 を環境に合わせて修正して起動