7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SELECT AIを利用した自然言語による問い合わせ

Last updated at Posted at 2024-06-06

はじめに

OracleがOCI(Oracle Cloud Infrastructure)で提供しているAutonomous Databaseの機能であるSELECT AIを利用して自然言語による以下のような問い合わせを行います

SELECT AI <自然言語の問い合わせ>;

以下からOCIを無料で利用できます

今回はGPT-4oを利用しているためAPI使用料金として最低5ドルの課金が必要です

Autonomous Databaseの作成

ユーザー作成

SELECT AIを実行するためのユーザを作成します

データベース・アクション>データベースユーザー
image.png
SELECTAIユーザーを作成
image.png

データロード

csvはこちらから拝借

データベース・アクション>データロード
image.png
データのロード
image.png
ローカルファイルからのデータのロード
image.png
スキーマ:SELECTAI、名前:PUBLIC_WIRELESS_LANとします
image.png
データのロード開始
image.png
ロード完了
image.png

SELECT AI

Autonomous Databaseへの接続方法は以下を参照

ADMINユーザでデータベースに接続し必要な権限をSELECTAIユーザに付与

sqlplus ADMIN/xxxxxxxxxx@xxxxxxxx

grant execute on DBMS_CLOUD to SELECTAI;
grant execute on DBMS_CLOUD_AI to SELECTAI;

今回はOpenAI APIを使用
httpアクセスを許可します

BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'api.openai.com',
ace  => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'SELECTAI',
principal_type => xs_acl.ptype_db)
);
END;
/

SELECTAIユーザでデータベースに接続

sqlplus SELECTAI/xxxxxxxxxx@xxxxxxxx

APIキーの取得方法は以下を参照

クレデンシャルの作成
passwordの箇所に取得したAPIキーを貼り付けます

BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username        => 'OPENAI',
password        => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
);
END;
/

プロファイルの作成

BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OPENAI',
attributes   => '{"provider": "openai",
"credential_name": "OPENAI_CRED",
"comments":"true",
"model": "gpt-4o",
"object_list": [
{"owner": "SELECTAI", "name": "PUBLIC_WIRELESS_LAN"}]
}'
);
END;
/

コメントを追加することで表の内容及び列名の補足をします
ここでは列名"名称"の補足をしています

COMMENT ON TABLE "PUBLIC_WIRELESS_LAN" IS '公共Wi-Fiの設置施設の名称を含む';
COMMENT ON COLUMN "PUBLIC_WIRELESS_LAN"."名称" IS '公共Wi-Fiが設置されている施設の名称';

SELECT AIの実行

EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
SELECT AI Wi-Fiが設置されている赤坂の施設を教えて;

"FACILITY_NAME","TOWN","CITY","PREFECTURE","FULL_ADDRESS"
"公衆電話(港区赤坂8-12)","赤坂","港区","東京都","東京都港区赤坂8-12"
"観光案内標識(港区赤坂2-11)","赤坂","港区","東京都","東京都港区赤坂2-11"
"観光案内標識(港区赤坂2-14)","赤坂","港区","東京都","東京都港区赤坂2-14"
"観光案内標識(港区赤坂5-4)","赤坂","港区","東京都","東京都港区赤坂5-4"
"観光案内標識(港区赤坂6-1)","赤坂","港区","東京都","東京都港区赤坂6-1"
"観光案内標識(港区赤坂9-7)","赤坂","港区","東京都","東京都港区赤坂9-7"

6行が選択されました。
SELECT AI NARRATE Wi-Fiが設置されている赤坂の施設を教えて;

"RESPONSE"
"Wi-Fiが設置されている赤坂の施設は以下の通りです:

1. **施設名**: 公衆電話(港区赤坂8-12)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 8-12
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)

2. **施設名**: 観光案内標識(港区赤坂2-11)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 2-11
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)

3. **施設名**: 観光案内標識(港区赤坂2-14)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 2-14
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)

4. **施設名**: 観光案内標識(港区赤坂5-4)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 5-4
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)

5. **施設名**: 観光案内標識(港区赤坂6-1)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 6-1
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)

6. **施設名**: 観光案内標識(港区赤坂9-7)
   - **都道府県**: 東京都
   - **市区町村**: 港区
   - **町字**: 赤坂
   - **番地以下**: 9-7
   - **SSID**: FREE_Wi-Fi_and_TOKYO
   - **URL**: [http://www.wifi-tokyo.jp/ja/](http://www.wifi-tokyo.jp/ja/)"
SELECT AI SHOWSQL Wi-Fiが設置されている赤坂の施設を教えて;

"RESPONSE"
"SELECT
    pwl.名称 AS facility_name,
    pwl.所在地_連結表記 AS full_address,
    pwl.SSID AS ssid,
    pwl.URL AS url
FROM
    SELECTAI.PUBLIC_WIRELESS_LAN pwl
WHERE
    pwl.所在地_町字 LIKE '%赤坂%'

参考

7
1
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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?