diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag.md b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag.md
index af528e2853..8995586488 100644
--- a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag.md
+++ b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag.md
@@ -21,7 +21,7 @@ header:
- テキスト生成モデル:OCI Generative AI(Command R Plus)
- ドキュメントデータのベクトル化に利用するモデル : Oracle Cloud Generative AI Service(embed-multilingual-v3.0)
-- ベクトルデータベース: Oracle Database 23ai Free(OCI Computeにインストール)、Base Database Service
+- ベクトルデータベース: Oracle Database 23ai Free(OCI Computeにインストール)、Base Database Service、Autonomous Database(Always Free)
※LangChainって何?という方は[こちらの記事](https://qiita.com/ksonoda/items/ba6d7b913fc744db3d79#langchain) をご参照ください。
@@ -53,9 +53,8 @@ header:
# RAGの実装
-## 1-1. Oracle Database 23ai Freeをインストールする
-
-[こちら](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector102-23aifree-install/)を参照してOracle Database 23ai Freeをインストールします。
+## 1-1. Oracle Database 23ai Free環境でのセットアップ
+Oracle Database 23ai Free環境でチュートリアルを行う場合は、[102 : 仮想マシンへOracle Database 23ai Freeをインストールしてみよう](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector102-23aifree-install/)を参考に、Oracle Database 23ai Freeをインストールします。既に作成済みの場合はスキップして下さい。
SYSでDBにログインし、本チュートリアルで使用するDBユーザーを作成(ユーザー名docuser, パスワードdocuser)、念のためどこからでも接続できるようにしておきます。
@@ -89,7 +88,7 @@ sqlplus docuser/docuser@freepdb1
## 1-2. Base Database Service環境でのセットアップ
-まずは`SYS`ユーザーでPDBに接続できることを確認します。
+Base Database Service環境でチュートリアルを行う場合は、まず、`SYS`ユーザーでPDBに接続できることを確認します。
OCIコンソールのBaseDBの画面から、データベース名をクリックします。
@@ -156,9 +155,72 @@ exit
+## 1-3. Autonomous Database 23ai Free環境でのセットアップ
+Autonomous Database 23ai Free環境でチュートリアルを行う場合は、[104 :ファイル→テキスト→チャンク→ベクトルへの変換およびベクトル検索を使おう](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector104-file-to-embedding/){:target="_blank"}の[2-1. ADB23ai Always Free編-ファイルの格納](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector104-file-to-embedding/#anchor2){:target="_blank"}を参考に、Database Actionsからユーザーの作成、権限の付与を行います。
+
+DOCUSERに追加で権限を付与します。
+ADMINとしてDatabase ActionsのSQLのツールにアクセスし、DOCUSERに以下の権限を付与します。
+ ```sql
+ BEGIN
+ DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
+ host => '*',
+ ace => xs$ace_type(
+ privilege_list => xs$name_list('connect'),
+ principal_name => 'docuser',
+ principal_type => xs_acl.ptype_db
+ )
+ );
+ END;
+ /
+ ```
+
+
+本ハンズオンではPython環境を用意する必要があります。ADBではComputeやBaseDBのようにOSログインできないため、別のコンピュート・インスタンスやノートブック環境を用意してください。
+Pythonの実行環境を持っていない場合は[204: 開発者向け仮想マシンのセットアップ方法](https://oracle-japan.github.io/ocitutorials/adb/adb204-setup-VM/){:target="_blank"}の[仮想マシンの作成](https://oracle-japan.github.io/ocitutorials/adb/adb204-setup-VM/#anchor1){:target="_blank"}、[仮想マシンへのアクセス](https://oracle-japan.github.io/ocitutorials/adb/adb204-setup-VM/#anchor2){:target="_blank"}を参考にコンピュート・インスタンスを作成します。
+
+
+作成した仮想マシンのIPアドレスはメモしておきます。
+![image.png](14.png)
+
+
+OCIコンソールのAutonomous Databaseの画面で、**Autonomous Database情報>ネットワーク>アクセス制御リスト**を編集します。
+![image.png](13.png)
+
+
+以下の通りに入力します。
+- **IP表記法タイプ**:IPアドレス
+- **値**:先程メモをした仮想マシンのIPアドレス、自分のIPアドレス(Database Actionsアクセス用)
+
+![image.png](15.png)
+
+
+**Autonomous Database情報>ネットワーク>相互TLS(mTLS)**を編集します。
+![image.png](16.png)
+
+
+**相互TLS認証が必要**をオフにし、保存します。
+![image.png](17.png)
+
+
+再度Autonomous Databaseの画面に戻り、**データベース接続**をクリックします。
+![image.png](11.png)
+
+
+**TLS認証**をTLSに変更し、**接続文字列**をメモしておきます。後程Python環境からAutonomous Databaseへ接続する際に使用します。
+![image.png](12.png)
+
+これでTLS接続でAutonomous Databaseに接続する準備が出来ました。
+
+>**【補足】**
+>TLS接続については[108: 接続文字列を利用して接続してみよう](/ocitutorials/adb/adb108-walletless){:target="_blank"}をご参照下さい。
+
+
+
## 2. Python環境のセットアップ
2024/7現在、BaseDB環境ではPython3.6.8がデフォルトでインストールされていますが、本チュートリアルではPython3.11を前提に進めます。なお、OSはOracle Linux 8.8を前提としています。
+Autonomous Database環境の場合は、先程作成したコンピュート・インスタンスにログインします。
+
`root`にスイッチし、以下でPython3.11のインストールを行います。
```sh
sudo su -
@@ -290,7 +352,9 @@ pd.DataFrame(contents)
以降が、このチャンクテキストをベクトルデータベースにロードしつつ、埋め込みモデルを使って、ベクトル化を行う処理です。
-まずは、作成済のdocuserでfreepdb1に接続します。
+まずは、作成済のdocuserでデータベースに接続します。
+
+Autonomous Database 23ai Free、若しくはBaseDBを使用している場合は、先程取得した接続文字列をdsnに貼り付けます。
```python
import oracledb
@@ -300,12 +364,17 @@ username = "docuser"
password = "docuser"
dsn = "localhost/freepdb1"
-# BaseDB版では以下をアンコメントアウトして実行します
+# BaseDB版では以下をコメントアウトして実行します
# oracledb.init_oracle_client()
# username = "docuser"
# password = "WelCome123#123#"
#dsn = "" (例) basedb23ai.xxxx.vcn1.oraclevcn.com:1521/pdb1.xxxx.vcn1.oraclevcn.com
+# Autonomous Database 23ai Free版では以下をコメントアウトして実行します
+# username = "docuser"
+# password = "Welcome12345#"
+# dsn = "" (例) (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxx_xxx_low.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))
+
try:
connection = oracledb.connect(user=username, password=password, dsn=dsn)
print("Connection successful!")
@@ -333,7 +402,14 @@ embeddings = OCIGenAIEmbeddings(
)
```
-**注意**: 以下のエラーが出る場合は、APIキーの設定ファイル~/.oci/configが作成されていません。[501: OCICLIを利用したインスタンス操作](https://oracle-japan.github.io/ocitutorials/adb/adb501-ocicli/)を参照して、APIキーを事前に作成してください。
+**注意**: 以下のエラーが出る場合は、APIキーの設定ファイル`~/.oci/config`が作成されていません。[501: OCICLIを利用したインスタンス操作](https://oracle-japan.github.io/ocitutorials/adb/adb501-ocicli/)を参照して、APIキーを事前に作成してください。
+
+OCIコンソールからAPIキーの作成を行った場合は、`~/.oci`ディレクトリを作成し、`config`ファイルに構成ファイルスニペットを貼り付け、秘密鍵ファイルへのパスを記述してください。
+```
+ValidationError: 1 validation error for OCIGenAIEmbeddings
+__root__
+ Could not authenticate with OCI client. Please check if ~/.oci/config exists. If INSTANCE_PRINCIPLE or RESOURCE_PRINCIPLE is used, Please check the specified auth_profile and auth_type are valid. (type=value_error)
+```
LangChainのお決まりの関数であるfrom_documentsでベクトルデータベースにチャンクテキストをロードします。以下のように、ここまでの手順で定義済のオブジェクトを使って下記一つのコードでチャンクテキストをベクトル化しますが、ここでチャンクテキストとベクトルデータをロードする表を指定することになります。
@@ -370,13 +446,16 @@ oraclevs.create_index(connection, vector_store_dot, params={"idx_name": "rocket"
ロードされたベクトルデータを確認してみます。まずはdocuserでデータベースに接続します。
-```sql
--- Oracle Database 23ai Free版
-sqlplus docuser/docuser@freepdb1
+- **Autonomous Databaseの場合**:
+ Database ActionsのSQLにdocuserとしてログイン
+- **Oracle Database 23ai Free、若しくはBaseDBの場合**:
+ ```sql
+ -- Oracle Database 23ai Free版
+ sqlplus docuser/docuser@freepdb1
--- BaseDB版
--- sqlplus docuser/WelCome123#123#@接続文字列
-```
+ -- BaseDB版
+ -- sqlplus docuser/WelCome123#123#@接続文字列
+ ```
SQLPLUSの表示設定を変更します。
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/11.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/11.png
new file mode 100644
index 0000000000..1f4f9cafce
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/11.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/12.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/12.png
new file mode 100644
index 0000000000..997911688e
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/12.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/13.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/13.png
new file mode 100644
index 0000000000..093506c9c4
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/13.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/14.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/14.png
new file mode 100644
index 0000000000..f35f3b1112
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/14.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/15.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/15.png
new file mode 100644
index 0000000000..882e901587
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/15.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/16.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/16.png
new file mode 100644
index 0000000000..d6256ac9ad
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/16.png differ
diff --git a/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/17.png b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/17.png
new file mode 100644
index 0000000000..42d2280a1e
Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag/17.png differ