生成AIエージェントのためのOracle Databaseガイドライン

OCI生成AIエージェントでデータを使用できるようにするには、次のデータ・オプションがあります:

  • オブジェクト・ストレージ・データ: データ・ファイルをOCIオブジェクト・ストレージにアップロードし、生成AIエージェントがデータを自動的に収集できるようにします。このオプションは、サービス管理です。データ・ファイルがオブジェクト・ストレージにある場合は、このトピックをスキップします。
  • OpenSearchデータ: エージェントが使用するOpenSearchデータを使用して、独自の(BYO)取り込みおよび索引付けされたOCI検索を使用します。このオプションがある場合は、このトピックをスキップしてください。
  • Oracle Databaseベクトル・ストア: Oracle Base Database 23aiまたはAutonomous Database 23aiベクトル・ストアから生成AIエージェントに独自の(BYO)ベクトル埋込みを使用します。このトピックでは、Oracle Base Database 23ai、Autonomous Database 23aiおよびデータベース・ツールをすでに理解している場合に、このオプションに関するガイドラインを示します。
ノート

  • 「米国中西部(シカゴ)」リージョンで次のステップを実行します。生成AIエージェントは、このリージョンでのみ使用できます。
データベースの要件

生成AIエージェントはデータベースを管理しないため、生成AIエージェントがデータベースに接続できるように既存のデータベースを設定する必要があります。次の要件

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

必須フィールド

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

オプションのフィールド

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

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;
ネットワークおよびセキュリティー要件

次に、ネットワークに関する高度なガイドラインを示します。

ネットワーキング要件
  • OCIの仮想クラウド・ネットワーク(VCN)のプライベート・サブネットにデータベースを追加します。
  • サブネットのイングレス・ルールの次のプロパティを設定します:
    • ソース・タイプ: CIDR
    • ソースCIDR: VCNのIPv4 CIDRブロック(10.0.0.0/16など)
    • IPプロトコル: TCP
    • ソース・ポート範囲: すべて
    • 宛先ポート範囲: 1521-1522
セキュリティ要件
  • Vaultの作成: データベースのシークレットを保存します。
  • ボールトをデータベースと同じコンパートメントに作成します。
データベース・ツールの接続要件

データベース・ツール・サービスを使用して、OCI内のOracleデータベースへの再利用可能な接続を作成できます。データベースの接続を作成するには、次のガイドラインに従います。

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

生成AIエージェントは、相互TLS (mTLS)認証なしで設定された接続を持つプライベート・エンドポイントを介してのみ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. 次のプロパティを使用して、接続を作成します

    • 「データベースの選択」オプションを使用して、「Oracleベース・データベース」を選択します。
    • 「データベース・システム」「データベース・ホーム」および「データベース」を選択します。
    • 「プラガブル・データベース」を選択します。
    • 「ユーザー名」および「ロール」を入力します。データベース・ユーザーに必要な権限があること、最初のトピックで準備したデータベース機能を実行できること、および適切なロールが割り当てられていることを確認します。たとえば、ユーザー名SYSの場合は、SYSDBAロールを割り当てます。
    • 「ユーザー・パスワード・シークレット」で、「パスワード・シークレットの作成」を選択し、前の項で作成したボールトにパスワードを格納するシークレットを作成します。
    • 「接続文字列」に、ステップ1のプラガブル・データベースの長い形式を貼り付けます。
    • プライベート・ネットワークを介してデータベースにアクセスのボックスにチェックマークを入れます。
    • 「プライベート・エンドポイントの選択」を選択します。
    • 「プライベート・エンドポイントの作成」をクリックし、「サブネット」でデータベースのプライベート・サブネットを選択して、「作成」をクリックします。
    • 「Wallet形式」で、Noneを選択して相互TLS (mTLS)認証なしで接続を作成します。
Autonomous Database 23ai接続のガイドライン
生成AIエージェントは、相互TLS (mTLS)認証なしで設定された接続を持つプライベート・エンドポイントを介してのみAutonomous Database 23aiにアクセスできます。次のタスクを実行して、プライベート・エンドポイント・アクセスを持つデータベース接続を作成します:
  1. コンソールで、ナビゲーション・メニューを開き、「Oracle Database」「Autonomous Database」の順に選択します。
  2. 次のプロパティで自律型データベースを作成します:
    • ネットワーク・アクセスの選択: 「プライベート・エンドポイント・アクセスのみ」を選択します。
    • 相互TLS (mTLS)認証が必要: ボックスを選択解除します。
  3. 自律型データベースがある場合は、データベースの詳細ページに移動し、「その他のアクション」を選択して、「ネットワーク・アクセスの更新」をクリックします。「プライベート・エンドポイント・アクセスのみ」を選択し、「更新」をクリックします。次に、自律型データベースの詳細ページの「ネットワーク」で、相互TLS (mTLS)認証について、「編集」をクリックし、ボックスを選択解除して「保存」をクリックします。

  4. データベースの詳細ページから、次の情報を収集します。

    • データベース名
    • 「ネットワーク」セクションで:
      • プライベート・エンドポイントIP
      • プライベート・エンドポイントURL
    • 「データベース接続」をクリックし、TNS名のリストで、_highで終わるTNS名を検索し、その接続文字列をコピーします。
  5. 次のプロパティを使用して、接続を作成します

    • 「データベースの選択」オプションを使用して、「Oracle Autonomous Database」を選択します。
    • 「データベース」を選択します。
    • 必要な権限を持つ「ユーザー名」を入力し、最初のトピックで準備したデータベース機能を実行できます。
    • 「ユーザー・パスワード・シークレット」で、「パスワード・シークレットの作成」を選択し、前の項で作成したボールトにパスワードを格納するシークレットを作成します。
    • 「接続文字列」に、データベース詳細ページのデータベース接続情報からコピーした接続文字列である_highで終わる接続文字列を貼り付けます。接続を更新し、再試行回数を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)))
    • プライベート・ネットワークを介してデータベースにアクセスのボックスにチェックマークを入れます。
    • 「プライベート・エンドポイントの選択」を選択します。
    • 「プライベート・エンドポイントの作成」をクリックし、「サブネット」でデータベースのプライベート・サブネットを選択して、「作成」をクリックします。
    • 「Wallet形式」で、Noneを選択して相互TLS (mTLS)認証なしで接続を作成します。