【Autonomous Database新機能】SELECT AI RAGを試してみた

# はじめに
Select AIは、Oracle Autonomous Database 23aiで自然言語によるAIベクトル検索を実現します。
Select AI RAGは、AIベクトル検索を使用して企業のソースからデータを取得し、指定された大規模言語モデル（LLM）に対するユーザープロンプトを補強します。エンタープライズ・データ・ストアの情報を活用することで、RAGはハルシネーションを減らし、根拠のある応答を生成します。
現時点、この機能はテキスト形式のファイルのみをサポートしています。PDF をテキストに変換してから、オブジェクト ストレージにアップロードする必要があります。
# 環境準備
1. Autonomous Database　23aiインスタンスを作成する。
2. ユーザーを作成する。
# SELECT AI RAG
1. ADMINユーザでデータベースに接続し必要な権限をSELECTAIユーザに付与する。
```
sqlplus ADMIN/xxxxxxxxxx@xxxxxxxx
grant execute on DBMS_CLOUD to SELECTAI;
grant execute on DBMS_CLOUD_AI to SELECTAI;
```
2.クレデンシャルを作成する。
[DBMS_CLOUD.CREATE_CREDENTIALプロシージャ](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/dbms-cloud-subprograms.html#GUID-742FC365-AA09-48A8-922C-1987795CF36A)
```
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OCI_GENAI_CRED',
user_ocid       => 'ocid1.user.oc1...bq',
tenancy_ocid    => 'ocid1.tenancy.oc1...ba',
private_key     => '-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
OCI_API_KEY',
fingerprint     => '28:b2:a7:...'
);
END;
/ 
```
3.AIプロファイルを作成し、ベクトル索引を作成する。 
[DBMS_CLOUD_AI.CREATE_PROFILEプロシージャ](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/dbms-cloud-ai-package.html#GUID-D51B04DE-233B-48A2-BBFA-3AAB18D8C35C)
[DBMS_CLOUD_AI.CREATE_VECTOR_INDEXプロシージャ](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/dbms-cloud-ai-package.html#GUID-CB37AB86-B625-4798-A3F4-8DD6DBA8B491)
```
BEGIN
    DBMS_CLOUD_AI.create_profile(
        profile_name => 'GENAI_VECTOR',
        attributes => '{"provider": "oci",
                        "credential_name": "OCI_GENAI_CRED", 
                        "vector_index_name": "support"}'
    );

	DBMS_CLOUD_AI.create_vector_index(
		index_name => 'support',
		attributes => '{"vector_db_provider":"oracle",
						"location":"https://objectstorage.us-ashburn-1.oraclecloud.com/n/adwc4pm/b/moviestream-support/o/",
						"profile_name":"GENAI_VECTOR",
						"vector_dimension":1024,
						"vector_distance_metric":"cosine",
						"chunk_overlap":50,
						"chunk_size":450
	}');

	DBMS_CLOUD_AI.set_profile('GENAI_VECTOR');
END;
/
```
4.パイプラインジョブの実行結果を確認する。
```
select * from user_cloud_pipeline_history;
```
![2024-10-21 16-00-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/15d60ba4-6ac2-c5c2-f44d-af6551b6d35f.png)

5.SELECT AIを実行する。
```
SELECT AI NARRATE my roku is stuck on the opening scene of my movie;
```
以下にように回答してくれる。Object Storage中のファイルが参考されたことを確認できる。
```
"The issue you're experiencing with your Roku device getting stuck on the opening scene of your movie is not explicitly addressed in the provided knowledge context. However, there are some troubleshooting steps mentioned for other Roku-related issues that might be helpful.

For instance, you can try restarting your Roku device by unplugging it for a few seconds and then plugging it back in. This might resolve any temporary issues that could be causing the problem.

Additionally, you can try checking the Wi-Fi network connection, as a stable connection is essential for smooth streaming. Ensure that your Wi-Fi network is active and other devices can connect to it.

If the issue persists, you may want to explore other troubleshooting steps or contact Oracle Moviestream support for further assistance.

Sources:
  - device-compatibility-issues.html (https://objectstorage.us-ashburn-1.oraclecloud.com/n/adwc4pm/b/moviestream-support/o/device-compatibility-issues.html)
  - index.html (https://objectstorage.us-ashburn-1.oraclecloud.com/n/adwc4pm/b/moviestream-support/o/index.html)"
```
日本語で質問してみる。
```
SELECT AI NARRATE OraBoosterは何ですか;
```
以下にように回答してくれる。
```
OraBoosterは、当社が開発したロケットエンジンです。このエンジンは、次世代の宇宙探査を支える先進的な推進技術の象徴です。

Sources:
  - rocket.txt (https://objectstorage.us-chicago-1.oraclecloud.com/n/sehubjapacprod/b/ivybucket01/o/folder01/rocket.txt)"
```