マーケットプレイス版Oracle WebCenter Content For OCIで会話型検索を有効にする

# はじめに

マーケットプレイス版Oracle WebCenter Content For OCI(以降**WCC For OCI**)は、Oracle Cloud Infrastructure上のVMベースのソリューションとして提供されます。WCC For OCIを使用すると、顧客は数回クリックするだけで環境をプロビジョニング/セットアップでき、クラウド上でコンテンツ・ソリューションを提供できるようになります。

詳細は製品ドキュメントおよび概要紹介資料をご確認ください

https://docs.oracle.com/en/cloud/paas/webcenter-content/webcenter-content-on-marketplace/index.html

https://speakerdeck.com/oracle4engineer/oracle-webcenter-content-for-oci-on-marketplace

# この記事で説明すること、しないこと

2025年2月にWCC For OCIの**14c(14.1.2.0.0)** 対応版の提供開始とともに、**セマンティック検索(Semantic Search)** が新機能としてリリースされました。セマンティック検索の構成手順および利用方法は以下のQita記事にまとめました

https://qiita.com/nakasato310/items/662a3c1e6587dbbea971


今回、2025年4月の新機能として**会話型検索(Conversational Search)** がリリースされました。この記事では、WCC14c For OCIの会話型検索機能を有効化する手順について説明します。

なお、会話型検索で利用するOCI Generative AIに関する説明は割愛します。詳細は以下の製品ドキュメントおよびスライドをご確認ください

https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/home.htm

https://speakerdeck.com/oracle4engineer/oci-generative-ai-service-and-agents-service-zhi-pin-gai-yao

# WCCの会話型検索について

**会話型検索(Conversational Search)** は、WCCに保存されているドキュメントを自然言語クエリで操作できます。対話型の質問応答、ドキュメントの要約、コンテキストに応じた応答をサポートし、ユーザーはドキュメントから必要な情報を効率的に取得できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/74c4a4c6-d898-4190-9e82-f1772dbfb219.png)

日本語で書かれたドキュメントに対して、日本語で問い合わせを行い、回答を日本語で受け取ることもできます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/a02901cc-272d-44e6-a769-b52637f48493.png)


## 会話型検索の利用条件

会話型検索機能の利用条件は以下のとおりです（※2025年5月8日時点）

1. WCCの**セマンティック検索機能**が有効化され、利用可能な状態であること
1. OCI Generative AIをご利用いただけるリージョンが**サブスクライブ済**であること
 
:::note info
OCI Generative AIが利用可能なリージョンは、[Regions with Generative AI](https://docs.oracle.com/en-us/iaas/Content/generative-ai/overview.htm#regions)をご確認ください
:::

# 会話型検索の構成手順

以下の製品ドキュメントに従って、WCCの会話検索機能を構成・有効化します

https://docs.oracle.com/en/cloud/paas/webcenter-content/semantic-search/index.html#conversational-search

1. [ポリシーの追加](#1-ポリシーの追加)
1. [WCCのデータベースユーザーに権限を付与する](#2-wccのデータベースユーザーに権限を付与する)
1. [Generative AIサービスをAPIコールするためのAPIキーを作成する](#3-generative-aiサービスをapiコールするためのapiキーを作成する)
1. [Generative AI RESTプロバイダへのアクセスを有効にする](#4-generative-ai-restプロバイダへのアクセスを有効にする)
1. [WCCの会話型検索のプロパティを構成する](#5-wccの会話型検索のプロパティを構成する)

## 1. ポリシーの追加

すべてのGenerative AIリソースへのアクセスを取得するために必要なポリシーを設定します（関連ドキュメント: [生成AIへのアクセス](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/iam-policies.htm)）

テナンシー全体のすべてのGenerative AIリソースにアクセスする場合は、次のポリシーを追加します 
```
allow group <your-group-name> to manage generative-ai-family in tenancy
```

特定のコンパートメント内のすべてのGenerative AIリソースにアクセスする場合は、次のポリシーを追加します
```
allow group <your-group-name> to manage generative-ai-family in compartment <your-compartment-name>
```

## 2. WCCのデータベースユーザーに権限を付与する

セマンティック検索機能構成時に準備したクラウド・シェルからATPにSQL Plusで接続する環境をそのまま利用します（参考記事: [4.3 オブジェクトストレージからONNXファイルをATPにロードする](https://qiita.com/nakasato310/items/662a3c1e6587dbbea971#43-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89onnx%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92atp%E3%81%AB%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B)）

- クラウド・シェル上でSQL Plusを起動し、**admin**ユーザーでATPに接続します   
```sql
satoshi_na@cloudshell:~ (us-chicago-1)$ sqlplus admin@wccmpatps23ai_low

SQL*Plus: Release 19.0.0.0.0 - Production on Wed May 7 05:48:48 2025
Version 19.19.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Enter password: 
Last Successful login time: Wed May 07 2025 04:21:27 +00:00

Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.8.0.25.05

SQL> 
```

- WCCで使用するデータベースユーザーに必要な権限を付与します。ここでは`WCCMP1412_OCS`に権限を付与します
```sql
SQL> GRANT DB_DEVELOPER_ROLE TO WCCMP1412_OCS;

Grant succeeded.

SQL> GRANT EXECUTE ON DBMS_CLOUD_AI TO WCCMP1412_OCS;

Grant succeeded.

SQL>
```

- **DBMS_NETWORK_ACL_ADMIN**プロシージャを使用して、ホストへの接続を許可するための接続権限をユーザー（ここでは`WCCMP1412_OCS`）に付与します
```sql
SQL> BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*',
ace => xs$ace_type(privilege_list => xs$name_list('connect'),
principal_name => 'WCCMP1412_OCS',
principal_type => xs_acl.ptype_db));
END;  2    3    4    5    6    7  
  8  /

PL/SQL procedure successfully completed.

SQL> 
```
- SQL Plusを一旦終了します


## 3. Generative AIサービスをAPIコールするためのAPIキーを作成する

OCIコンソールから**APIキー**を作成します。以下OCIチュートリアルにも手順が記載されていますので、あわせてご確認ください

https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector104-file-to-embedding/#1-%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99

1. OCIコンソールを開き、右上のユーザーアイコンをクリックし、**ユーザー名**をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8f64c11f-51fb-4bc6-8cc1-67b406b20745.png)

1. 左下の**リソース→APIキー**をクリックします
1. **APIキーの追加**をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/e88d85f1-0035-449c-ba0f-dae50f3b4270.png)

1. **APIキー・ペアの作成**を選択した状態で、**秘密キーのダウンロード**をクリックします。秘密キーがローカルPCにダウンロードされます
1. **追加**をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/c09e0a38-d02e-450d-b18e-b44258a32c51.png)
1. 作成したAPIキーの**フィンガープリント**をメモします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8eb6fdad-3516-4ddc-9173-311a61b81fba.png)

## 4. Generative AI RESTプロバイダへのアクセスを有効にする

データベース内の資格情報を安全に管理するには、資格情報ヘルパープロシージャ CREATE_CREDENTIAL および DROP_CREDENTIAL を使用します。これらのプロシージャは、PL/SQLパッケージ DBMS_VECTOR および DBMS_VECTOR_CHAIN の両方で使用できます

https://docs.oracle.com/cd/G11854_01/arpls/dbms_vector_chain1.html#GUID-A6E28402-DC43-44C6-A1B2-75C3F270DD76


- Generative AIにアクセスするには、次の認証パラメータが必要です。既に`private_key（秘密キー）`と`fingerprint（フィンガープリント）`は取得済みです。OCIコンソール等を利用し、`user_ocid（ユーザーOCID）`, `tenancy_ocid（テナンシーOCID）`, `compartment_ocid（コンパートメントOCID）`の3つをそれぞれ確認し、メモします
```json
{ 
    "user_ocid"       : "<user_ocid>",
    "tenancy_ocid"    : "<tenancy_ocid>",
    "compartment_ocid": "<compartment_ocid>",
    "private_key"     : "<private_key>",
    "fingerprint"     : "<fingerprint>" 
}
```
- クラウド・シェル上でSQL Plusを起動し、**WCCのデータベースユーザー**（ここでは`WCCMP1412_OCS`）で再接続します

```sql
satoshi_na@cloudshell:~ (us-chicago-1)$ sqlplus WCCMP1412_OCS@wccmpatps23ai_low

SQL*Plus: Release 19.0.0.0.0 - Production on Wed May 7 05:54:48 2025
Version 19.19.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Enter password: 
Last Successful login time: Wed May 07 2025 05:42:02 +00:00

Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.8.0.25.05

SQL>
```

- 次のコマンドを実行して、OCI資格情報を作成して保存します。ここでは`OCI_CRED`で作成します
```sql
SQL> declare
jo json_object_t;
begin
jo := json_object_t();
jo.put('user_ocid','ocid1.user.oc1..XXXXXXXX');
jo.put('tenancy_ocid','ocid1.tenancy.oc1..XXXXXXXX');
jo.put('private_key','MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+Z9l9lH0IOylT
BvM1tAdZkB30cDng+dJ1hMXvrpjZinzKkeM/AQ/q7WGORFgJOpN7nAx4ntwnf...
...
...UkY/7pofWILp5ZoNXtsL9EEOk5+psxpdc7Q8G+bmQ6ja/XjNml4Q7WDPjuvSl
MUQIY9UlcfWJlz/6cNky39RA');
jo.put('fingerprint','XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX');
jo.put('compartment_ocid','ocid1.compartment.oc1..XXXXXXXX');
dbms_vector_chain.create_credential(
 credential_name   => 'OCI_CRED',
 params            => json(jo.to_string));
end;  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38  
 39  /

PL/SQL procedure successfully completed.

SQL> 
```
- 作成した資格情報を確認するために、以下のSQLクエリを実行します。`GENERATED_TEXT`にテキストが表示されればOKです

```SQL
SQL> SELECT dbms_vector_chain.utl_to_generate_text(
  'What is Oracle Text?',
  json('{
    "provider"       : "OCIGenAI",
    "credential_name": "OCI_CRED",
    "url"            : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
    "model"          : "meta.llama-3.3-70b-instruct",
    "chatRequest"    : {
                        "maxTokens": 256
                       }
  }')
) AS generated_text FROM dual;
  2    3    4    5    6    7    8    9   10   11   12  

GENERATED_TEXT
--------------------------------------------------------------------------------
Oracle Text is a feature of the Oracle Database that allows for full-text search

SQL> 
```

## 5. WCCの会話型検索のプロパティを構成する

1. WCCのネイティブUIに管理ユーザー(ここでは`weblogic`ユーザー)でログインします。URLは`https://<ロードバランサのパブリックIPアドレス>:16200/cs`です
1. **管理→SmartContent→Hybird Search Configuration**を開きます
1. **Conversational Search Configuration**を以下の通りに構成します
    - **Credential Name**: `OCI_CRED`（前の手順で作成した資格情報）を指定
    - **Url**: Generative AI RESTプロバイダのエンドポイントを指定（ここでは`https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat`を指定）
    - **Model**: cohere.command-r-plus-08-2024 もしくは meta.llama-3.3-70b-instruct より選択（ここでは`cohere.command-r-plus-08-2024`を選択）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/11c1f5e2-7015-4050-ac60-07c8c68a3c88.png)

1. **Update Congiguration**をクリックします
1. **Test Connection**をクリックします。**LLM connection successful.** のメッセージが表示されることを確認します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/6dfe8d42-d6ff-4722-963d-ab5bc1a96eda.png)


# 動作確認（会話型検索の実行）

1. WCCのRedwood UIにアクセスします。URLは`https://<ロードバランサのパブリックIPアドレス>:16200/cs?IdcService=REDWOODUI`です
1. **ユーザー名**と**パスワード**を入力します
1. 画面下部のナビゲーションメニューの**検索**をクリックします
1. ドキュメント一覧が表示されます。ドキュメントの会話アイコンをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/41beb9db-8b40-4145-b574-9fab4443228e.png)

1. プレビュー画面を表示され、右パネルにはチャット・タブが表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/9fec7845-759a-4458-bfdb-972290ef5506.png)

1. チャット画面の`こんにちは。私はあなたのチャット・アシスタントです。これを要約しますか。`の**要約**をクリックすると、**Summarize** のメッセージが入力されます
1. しばらくすると、ドキュメントの要約が英語で表示されます
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/b8c17562-e55c-4852-92af-1e91a3f32ace.png)

1. 日本語で問い合わせメッセージを入力し、結果を日本語で受け取ることもできます（ここでは`Autonomous Databaseの特徴をおしえて`などを入力）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/a02901cc-272d-44e6-a769-b52637f48493.png)


# おわりに

マーケットプレイス版Oracle WebCenter Content 14c For OCIの会話型検索機能を有効化する手順を紹介しました。セマンティック検索機能とあわせて、皆さまのお役に立てば幸いです