生成AIエージェント用のRAGツールのOracle Databaseガイドライン

独自の(BYO)ベクトル埋込みをOracle Databaseバージョン23aiからOCI生成AIエージェントに持ち込むことができます。

オブジェクト・ストレージ内のデータを生成AIエージェントで使用できるようにするには、オブジェクト・ストレージのデータ要件を参照してください。使用するエージェントのOpenSearchデータを含むBYO取込みおよび索引付けされたOCI検索を使用可能にするには、生成AIエージェントのOpenSearchガイドラインを使用したRAGツールOCI検索を参照してください。

このトピックでは、生成AIエージェントのデータ・オプションとしてOracle Database 23aiを使用するためのサポート情報、前提条件タスクおよびガイドラインについて説明します。提供される情報は、仮想クラウド・ネットワーク(VCNs)とサブネット、Oracle Database 23aiおよびデータベース・ツール・サービスをよく理解していることを前提としています。

ステップ1: データベース・サポート情報の確認

生成AIエージェントのデータ・オプションとしてOracle Databaseバージョン23aiベクトル・ストアを使用する前に、サポートされている内容を理解し、必要なタスクを完了してください。

データベース・タイプ

生成AIエージェントは、次からのBYOベクトル埋込みをサポートしています。

  • Oracle Base Database 23ai: データベースはプライベート・ネットワーク上に構成できます。DB Systemの作成を参照してください。

  • 次のネットワーク・アクセス・タイプのOracle Autonomous Database 23aiのみ:

    • プライベート・エンドポイント・アクセスのみ: データベースへの接続を認証するために相互TLS (mTLS)認証を有効にできます。mTLS認証を有効にするには、「相互TLS (mTLS)認証が必要」チェック・ボックスを選択します。

    • すべての場所からのセキュア・アクセス: mTLS認証はデフォルトで有効になっており、必須です。

    Autonomous Databaseインスタンスの作成を参照してください。

mTLS認証で有効化されたAutonomous Databases

自律型データベースでmTLS認証が有効になっている場合は、ウォレットをダウンロードし、ウォレット・パスワードを作成し、ウォレットからファイルを抽出する必要があります。ステップ3のWalletのセキュリティ要件を参照してください。ネットワークおよびセキュリティ要件を構成します。

リージョン間およびクロステナンシ・データベースのサポート

クロスリージョンおよびクロステナンシ・データベースのサポートは、プライベート・ネットワーク・アクセスを使用するOracle Database 23aiでのみ使用できます。これには、ネットワーク・アクセス・タイププライベート・エンドポイント・アクセスのみで構成されたOracle Base DatabaseおよびOracle Autonomous Databaseが含まれます。パブリック・アクセスを持つ自律型データベースはサポートされません。

ホスト・リージョンで生成AIエージェントを使用する場合、次の場所にあるプライベート・アクセス・データベースに接続できます:
  • 同じテナンシ内の別のリージョン。エージェント・サービスが使用可能なリージョンでデータベース・ツール接続を作成して、接続を有効にします。
  • 別のテナンシエージェント・サービスが使用可能なテナンシにデータベース・ツール接続を作成して、接続を有効にします。

ネットワーク設定を設定するには、ステップ3のネットワーキング要件(クロスリージョンおよびクロステナンシ・データベース)を参照してください。ネットワークおよびセキュリティ要件を構成します。

接続を作成するには、ステップ5の説明に従って、接続文字列を手動で入力します。データベース・ツール接続の作成

ステップ2.動的グループおよびポリシーの追加

「サービスを使用する前にポリシーを追加」の説明に従って、すべての生成AIエージェント・リソースへのアクセス権をユーザーに付与するだけでなく、ボールト・シークレットおよびデータベース・ツールへのアクセス権を持つ動的グループを作成する必要があります。

  1. 動的グループを作成し、次の一致ルールを追加します。

    ALL {resource.type='genaiagent'}

    ヘルプが必要な場合は、動的グループの作成を参照してください。

  2. 動的グループに権限を付与します。

    • デフォルト・アイデンティティ・ドメインで使用できる次のポリシーを記述します。

      allow dynamic-group <dynamic-group-name> 
      to read database-tools-family in compartment <compartment-name>
      
      allow dynamic-group <dynamic-group-name> 
      to read secret-bundle in compartment <compartment-name>
      
    • Oracle Identity Cloud Service (IDCS)ドメイン名および動的グループ名を指定して、デフォルトではないアイデンティティ・ドメインで次のポリシーを使用します:

      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to read database-tools-family in compartment <compartment-name>
      
      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to read secret-bundle in compartment <compartment-name>
      
ヒント

前述のポリシーを記述した後にデータベース・ツール接続にアクセスできない場合、リソース・プリンシパル・セッション・トークンに問題がある可能性があります。動的グループに依存せずに、次のポリシー設定を使用してみます。

allow any-user to read database-tools-family in compartment <compartment-name> where any {request.principal.type='genaiagent'}

allow any-user to read secret-bundle in compartment <compartment-name> where any {request.principal.type='genaiagent'}
ステップ3.ネットワークおよびセキュリティ要件の構成

必要なリソースがまだ構成または作成されていない場合は、これらのタスクを実行します。

ネットワーキング要件
  • データベースをVCNのプライベート・サブネットに追加します。
  • サブネットのイングレス・ルールに次のプロパティを設定します:
    • ソース・タイプ: CIDR
    • ソースCIDR: VCNのIPv4 CIDRブロック(10.0.0.0/16など)
    • IPプロトコル: TCP
    • ソース・ポート範囲: すべて
    • 宛先ポート範囲: 1521-1522
ネットワーク要件(クロスリージョンおよびクロステナンシ・データベース)

次の要件は、プライベート・ネットワーク・アクセスを使用するOracle Database 23aiにのみ適用されます。これには、ネットワーク・アクセス・タイププライベート・エンドポイント・アクセスのみで構成されたOracle Base DatabaseおよびOracle Autonomous Databaseが含まれます。パブリック・アクセスを持つ自律型データベースはサポートされません。

ネットワーク設定

  • 重複しないCIDRを使用して2つのVCNsを設定します。ネットワーク設定を構成するには、リモートVCNピアリングを参照してください。
  • データベースのVCNで、データベース・ポート1521-1522にアクセスするためのデータベース・ツール接続VCN CIDRのイングレス・ルールを追加していることを確認します。

クロスリージョン・データベースの例: 生成AIエージェント・サービスが実行されているリージョンとは異なるリージョンにあるデータベースに接続できます。たとえば:

  • エージェント・サービスは、ORDリージョンのテナンシAで実行されています。

  • プライベート・ネットワーク・アクセスを持つOracleベース・データベースまたはOracle Autonomous Databaseは、PHXリージョンにデプロイされます。

  • プライベート・データベースにアクセスするには、両方のリージョンで動的ルーティング・ゲートウェイ(DRG)を構成し、ORDにデータベース・ツール接続を設定してPHXのデータベースに接続します。

クロステナンシ・データベースの例: 生成AIエージェント・サービスとは別のテナンシにあるデータベースに接続できます。たとえば:

  • エージェント・サービスは、ORDリージョンのテナンシAで実行されています。

  • プライベート・ネットワーク・アクセスを持つOracleベース・データベースまたはOracle Autonomous Databaseは、PHXリージョンのテナンシBにデプロイされます。

  • プライベート・データベースにアクセスするには、両方のテナンシで動的ルーティング・ゲートウェイ(DRG)を構成し、テナンシA (ORDリージョン)でデータベース・ツール接続を設定して、テナンシB (PHXリージョン)のデータベースに接続します。

クロステナンシ・ネットワーキング構成は、データベース・サービスとエージェント・サービスが同じリージョンにあるか、異なるリージョンにあるかにかかわらず適用されます。

Vaultのセキュリティ要件

OCI Vaultのボールトは、データベースのシークレット(データベースへのパスワードなど)を格納するために必要です。ボールトをデータベースと同じコンパートメントに作成します。

  1. Create a vault.
  2. マスター暗号化キーを作成します
  3. ボールトで、データベース・パスワードにシークレットを作成します。
Walletのセキュリティ要件

自律型データベースでmTLS認証が有効になっている場合は、次のタスクを実行します:

  1. ウォレットをダウンロードして、ウォレット・パスワードを作成します。クライアント資格証明(ウォレット)のダウンロードを参照してください。
  2. ダウンロードしたウォレットzipから、ファイルewallet.p12を抽出して脇に置きます。データベース・ツール接続を作成するには、PKCS#12ウォレットが必要です。
ステップ4.データベース表およびファンクションの設定

生成AIエージェントで使用するために作成したデータベースで、特定の必須フィールドを含むデータベース表を作成し、問合せからベクトル検索結果を返すデータベース関数を設定します。

データベース表
次のフィールドを使用してOracle Database 23ai表を作成します。

必須フィールド

  • DOCID: 各レコードまたはドキュメントに割り当てられたID
  • BODY: エージェントで検索する実際のコンテンツ
  • VECTOR: bodyコンテンツに基づいて埋込みモデルから生成されるベクトル

オプションのフィールド

  • CHUNKID: チャンク化されたドキュメントのID。ドキュメントが512トークンより大きい場合。
  • URL: コンテンツのURL参照(使用可能な場合)。
  • TITLE: bodyコンテンツのタイトル
  • PAGE_NUMBERS: コンテンツのページ番号(使用可能な場合)。
ヒント

OCI生成AIでテキスト埋込みを作成できます。
データベース関数

ファンクションは、パラメータを取ることができ、値を戻すサブプログラムです。各問合せからベクトル検索結果を返すことができるデータベース関数を設定する必要があります。要件は次のとおりです。

入力パラメータ

  • p_query: 問合せ文字列
  • top_k: 最上位結果の数

戻り型

  • SYS_REFCURSOR

要件

  • 関数の問合せフィールドに使用する埋込みモデルは、表のBODYコンテンツをベクトル埋込みに変換する埋込みモデルと同じである必要があります。

  • ファンクションの戻りフィールドは、表の必須フィールド(DOCIDBODYおよびSCORE)およびオプション・フィールド(CHUNKIDTITLEおよびURL)と一致する必要があります。

    BODYコンテンツは埋込みモデルによって処理され、各コンテンツに対してVECTORが生成されます。この関数は、問合せベクトルと各VECTORの間の距離を計算し、top_k行を返します。SCOREフィールドは、問合せベクトルとBODYVECTORの間の距離を表します。

  • ファンクションの戻りフィールド名が表フィールド名と一致しない場合は、ファンクションの別名を使用する必要があります。

次に、データベース関数の例を示します。

create or replace FUNCTION RETRIEVAL_FUNC (p_query IN VARCHAR2,top_k IN NUMBER) RETURN SYS_REFCURSOR IS
    v_results SYS_REFCURSOR;
    query_vec VECTOR;
BEGIN
    query_vec := dbms_vector.utl_to_embedding(
        p_query,
        json('{
            "provider": "OCIGenAI",
            "credential_name": "OCI_VECTOR_CREDENTIAL",
            "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
            "model": "cohere.embed-english-v3.0"
        }')
    );

    OPEN v_results FOR
        select l.id as DOCID, lv.chunk_id as CHUNKID, l.file_name as TITLE, 
        'https://objectstorage.us-chicago-1.oraclecloud.com/n/{namespace}/b/{bucket_name}/o/' || l.file_name as URL,
        lv.chunk_txt as BODY, vector_distance(embed_vector, query_vec) AS SCORE
        from legislation_vector lv, legislation l
        where l.id = lv.id
        order by SCORE 
        fetch first top_k rows only;

    RETURN v_results;
END;
ステップ5: データベース・ツール接続の作成

データベース・ツール・サービスを使用して、OCIのOracleデータベースへの再利用可能な接続を作成できます。

データベースの接続を作成するには、次のガイドラインに従います。

Oracle Base Database 23ai接続のガイドライン

生成AIエージェントは、プライベート・エンドポイントを介してOracleベース・データベース23aiにアクセスできます。データベース接続を確立するには、次のタスクを実行します。

  1. 次の情報を取得します。

    コンソールで、ナビゲーション・メニューを開き、「Oracle Database」「Oracle Base Database Service」の順に選択します。データベース・システム名を選択し、データベース名を選択します。次のステップの接続情報に使用する次のプロパティをコピーします。

    • データベース・システム
    • Database
    • データベース・ホーム
    • 左側で、「プラガブル・データベース」を選択し、プラガブル・データベース名を選択します。「PDB接続」を選択し、接続文字列を「長い」形式でコピーします。

      長い形式の接続文字列の例:

      (DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)
      (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.62)(PORT=1521)))
      (CONNECT_DATA=(SERVICE_NAME=xxx_pdb1.xxx.dbsvcn.oraclevcn.com)))
  2. データベース・ツールで、次のいずれかのオプションを使用して接続を作成します:

    • 「データベースの選択」オプションを使用して、データベースを選択します。
      1. 「Oracleベース・データベース」を選択します。
      2. データベース・システム、データベース・ホームおよびデータベースを選択します。
      3. プラガブル・データベースを選択してください。
    • クロスリージョン・データベースまたはクロステナンシ・データベースの「データベース情報の入力」オプションを使用して、接続情報を手動で入力します。「接続タイプ」で、「Oracle Database」を選択します。
  3. 次のプロパティを使用して、残りの情報を入力します。

    • ユーザー名を入力し、ユーザーのロールを選択します。

      データベース・ユーザーに必要な権限があることを確認し、ステップ4で準備したデータベース機能を実行できます。データベース表およびファンクションの設定。適切なロールが割り当てられています。たとえば、SYSユーザーには、SYSDBAロールを割り当てます。

    • 「ユーザー・パスワード・シークレット」で、シークレットがすでに作成されている場合は選択します。それ以外の場合は、「パスワード・シークレットの作成」を選択し、作成したボールトにパスワードを格納するシークレットを作成します。
    • 「接続文字列」に、この手順のステップ1でコピーしたプラガブル・データベースの長い形式を貼り付けます。

      クロスリージョン・データベースまたはクロステナンシ・データベースの場合、接続文字列を入力します。

    • 「プライベート・ネットワークを介してデータベースにアクセス」チェック・ボックスを選択します。
    • 「プライベート・エンドポイント」で、次のいずれかを実行します:
      • 「プライベート・エンドポイントの選択」をクリックし、エンドポイントを選択します。
      • 「プライベート・エンドポイントの作成」を選択し、エンドポイントを作成します。「サブネット」で、データベースのプライベート・サブネットを選択します。データベースと同じVCNおよびサブネットを使用してプライベート・エンドポイントを作成していることを確認します。
    • 「Wallet形式」で、Noneを選択して相互TLS (mTLS)認証なしで接続を作成します。
Autonomous Database 23ai接続のガイドライン

生成AIエージェントは、相互TLS (mTLS)認証用に設定されている接続を使用してプライベート・エンドポイントを介してAutonomous Database 23aiにアクセスできます。データベース接続を確立するには、次のタスクを実行します。

  1. 次の情報を取得します。

    コンソールで、ナビゲーション・メニューを開きます。「Oracle Database」を選択し、「Autonomous Database」を選択します。データベースを選択します。データベースの詳細ページで、次のステップの接続情報に使用する次のプロパティをコピーします。

    • データベース名
    • (プライベート・エンドポイント・アクセスのみネットワーク・アクセスの場合)「ネットワーク」セクションで:
      • プライベート・エンドポイントIP
      • プライベート・エンドポイントURL
    • 「データベース接続」を選択し、次の手順を実行します。
      • TNS名のリストで、_highで終わるTNS名を検索し、その接続文字列をコピーします。
      • 相互TLS (mTLS)認証を必要とするデータベースの場合のみ: ウォレットをダウンロードします。ステップ3のWalletのセキュリティ要件を参照してください。ネットワークおよびセキュリティ要件を構成します。
  2. データベース・ツールで、次のいずれかのオプションを使用して接続を作成します:

    • 「データベースの選択」オプションを使用して、データベースを選択します。
      1. 「Oracle Autonomous Database」を選択します。
      2. データベースを選択します。
    • クロスリージョン・データベースまたはクロステナンシ・データベースの「データベース情報の入力」オプションを使用して、接続文字列を手動で入力します。「接続タイプ」で、「Oracle Database」を選択します。
  3. 次のプロパティを使用して、残りの情報を入力します。

    • 「ユーザー名」に、必要な権限を持つユーザーを入力し、ステップ4で準備したデータベース機能を実行できます。データベース表およびファンクションの設定
    • 「ユーザー・パスワード・シークレット」で、シークレットがすでに作成されている場合は選択します。それ以外の場合は、「パスワード・シークレットの作成」を選択し、作成したボールトにパスワードを格納するシークレットを作成します。
    • 「接続文字列」に、_highで終わる接続文字列(データベース詳細ページの「データベース接続」セクションからコピーした文字列)を貼り付けます。
      次に、データベース・タイプに応じて、次のように文字列を更新します。
      • プライベート・アクセス・データベース: retry_countを20から3に減らし、ホストのプライベート・エンドポイントURLをプライベート・エンドポイントIPアドレスに置き換えます。

        接続文字列の例:

        (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)
        (host=<private-endpoint-URL>)(connect_data=(service_name=xxx_high.adb.oraclecloud.com))
        (security=(ssl_server_dn_match=no)))

        更新された接続文字列の例:

        (description= (retry_count=3)(retry_delay=3)(address=(protocol=tcps)(port=1522)
        (host=<private-endpoint-IP>)(connect_data=(service_name=xxx_high.adb.oraclecloud.com))
        (security=(ssl_server_dn_match=no)))

      • パブリック・アクセス・データベース: retry_countを20から3に減らします。

        更新された接続文字列の例:

        (description= (retry_count=3)(retry_delay=3)(address=(protocol=tcps)(port=1522)
        (host=<name>)(connect_data=(service_name=xxx_high.adb.oraclecloud.com))
        (security=(ssl_server_dn_match=yes)))
    • プライベート・エンドポイントの場合:
      • パブリック・アクセス・データベースの場合、プライベート・エンドポイントを構成しないでください。
      • 「プライベート・エンドポイント・アクセスのみ」で、「プライベート・ネットワークを介したデータベースへのアクセス」のチェック・ボックスを選択します。次に、プライベート・エンドポイントを選択するか、「プライベート・エンドポイントの作成」を選択してエンドポイントを作成し、データベースと同じVCNおよびプライベート・サブネットを使用してください。
    • 「Wallet format」の場合:
      • mTLS認証が有効になっていないデータベースの場合、Noneを選択します。
      • mTLS認証が有効になっているデータベースの場合、PKCS#12 wallet(e.g., ewallet.p12)を選択します。次に、ウォレット・コンテンツ・シークレットおよびウォレット・パスワード・シークレットを作成するか、すでにシークレットを作成している場合はそれらを選択します。