OCIジェネレーティブAIによる会話型検索

OCI Search with OpenSearchは、OCI生成AIコネクタの作成をサポートします。

コネクタを利用して、取得拡張生成(RAG)、テキスト要約、テキスト生成、会話検索、セマンティック検索など、すべての汎用AI機能にアクセスできます。

このトピックでは、生成AIコネクタの作成に必要な次のステップについて説明します: 各ステップには、必要なコードの汎用テンプレートが含まれています。コンソールを使用して、環境に構成された値を使用してこのコードを自動的に生成できます。RAGパイプラインの作成を参照してください。

前提条件

  • OCI生成AIを使用するには、テナンシが米国中西部(シカゴ)リージョンまたはドイツ中央部(フランクフルト)リージョンにサブスクライブされている必要があります。どちらのリージョンにもクラスタを作成する必要はありません。テナンシがいずれかのリージョンにサブスクライブされていることを確認してください。
  • OCI生成AIコネクタをOpenSearchとともにOCI Searchで使用するには、OpenSearchバージョン2.11を使用するように構成されたクラスタが必要です。デフォルトでは、新しいクラスタはバージョン2.11を使用するように構成されています。クラスタを作成するには、「OpenSearchクラスタの作成」を参照してください。

    バージョン2.3用に構成された既存のクラスタでは、バージョン2.11へのインライン・アップグレードを実行できます。詳細は、OpenSearchクラスタのインライン・アップグレードを参照してください。

    バージョン1.2.3用に構成された既存のクラスタを2.11にアップグレードするには、「OpenSearchクラスタのアップグレード」で説明されているアップグレード・プロセスを使用する必要があります。

  • 生成AIリソースへのアクセス権を付与するポリシーを作成します。次のポリシーの例には、必要な権限が含まれています。

    ALLOW ANY-USER to manage generative-ai-family in tenancy WHERE ALL {request.principal.type='opensearchcluster', request.resource.compartment.id='<cluster_compartment_id>'}

    ポリシーを初めて使用する場合は、ポリシーの開始および共通ポリシーを参照してください。

  • クラスタAPI設定操作を使用して、コネクタを作成できる推奨クラスタ設定を構成します。次の例は、推奨設定を示しています。

    PUT _cluster/settings
    {
      "persistent": {
        "plugins": {
          "ml_commons": {
            "only_run_on_ml_node": "false",
            "model_access_control_enabled": "true",
            "native_memory_threshold": "99",
            "rag_pipeline_feature_enabled": "true",
            "memory_feature_enabled": "true",
            "allow_registering_model_via_local_file": "true",
            "allow_registering_model_via_url": "true",
            "model_auto_redeploy.enable":"true",
            "model_auto_redeploy.lifetime_retry_times": 10
          }
        }
      }
      }

モデル・グループの登録

次の例に示すように、モデル・グループAPIregister操作を使用してモデル・グループを登録します。

POST /_plugins/_ml/model_groups/_register
{
   "name": "public_model_group-emb",
   "description": "This is a public model group"
}

レスポンスで返されたmodel_group_idをノートにとります:

{
  "model_group_id": "<model_group_ID>",
  "status": "CREATED"
}

コネクタの作成

次の例のいずれかに示すように、生成AIコネクタを作成します。

actions/generateTextまたはactions/chatの2つのエンドポイント・オプションがあります。actions/chatモデルを使用することをお薦めします。

actions/chatエンドポイント・オプション

  • cohere.command-r-plus:

    POST _plugins/_ml/connectors/_create
    {
         "name": "Cohere Commar-R-Plus Chat Connector",
         "description": "Check errors in logs",
         "version": 2,
         "protocol": "oci_sigv1",
         "parameters": {
             "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
             "auth_type": "resource_principal"
         },
         "credential": {
         },
         "actions": [
             {
                 "action_type": "predict",
                 "method": "POST",
                 "url": "https://${parameters.endpoint}/20231130/actions/chat",
                 "request_body": "{\"compartmentId\":\"<cluster_compartment_id>\",\"servingMode\":{\"modelId\":\"cohere.command-r-plus\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"message\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":0,\"isStream\":false,\"chatHistory\":[],\"apiFormat\":\"COHERE\"}}",
                 "post_process_function": "def text = params['chatResponse']['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
     
             }
         ]
     } 
  • cohere.command-r-16kモデル:

    POST _plugins/_ml/connectors/_create
    {
         "name": "Cohere Chat Connector",
         "description": "Check errors in logs",
         "version": 2,
         "protocol": "oci_sigv1",
         "parameters": {
             "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
             "auth_type": "resource_principal"
         },
         "credential": {
         },
         "actions": [
             {
                 "action_type": "predict",
                 "method": "POST",
                 "url": "https://${parameters.endpoint}/20231130/actions/chat",
                 "request_body": "{\"compartmentId\":\"<cluster_compartment_id>\",\"servingMode\":{\"modelId\":\"cohere.command-r-16k\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"message\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":0,\"isStream\":false,\"chatHistory\":[],\"apiFormat\":\"COHERE\"}}",
                 "post_process_function": "def text = params['chatResponse']['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
     
             }
         ]
     }
  • meta.llama-3-70b-instructモデル:
    POST _plugins/_ml/connectors/_create
    {
         "name": "Llama3 Chat Connector",
         "description": "Check errors in logs",
         "version": 2,
         "protocol": "oci_sigv1",
         "parameters": {
             "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
             "auth_type": "resource_principal"
         },
         "credential": {
         },
         "actions": [
             {
                 "action_type": "predict",
                 "method": "POST",
                 "url": "https://${parameters.endpoint}/20231130/actions/chat",
                 "request_body": "{\"compartmentId\":\<cluster_compartment_id>\",\"servingMode\":{\"modelId\":\"meta.llama-3-70b-instruct\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":-1,\"isStream\":false,\"apiFormat\":\"GENERIC\",\"messages\":[{\"role\":\"USER\",\"content\":[{\"type\":\"TEXT\",\"text\":\"${parameters.prompt}\"}]}]}}",
                 
                  "post_process_function": "def text = params['chatResponse']['choices'][0]['message']['content'][0]['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
    
    
    
             }
         ]
     }

認証は、リソース・プリンシパルを使用して行われます。クラスタのコンパートメントIDをrequest_bodyに指定します。

レスポンスで返されたconnector_idをノートにとります:

{
  "connector_id": "<connector_ID>",
}

actions/generateTextエンドポイント・オプション

  • cohere.commandモデル:

    POST _plugins/_ml/connectors/_create
    {
         "name": "OpenAI Chat Connector",
         "description": "when did us pass espio",
         "version": 2,
         "protocol": "oci_sigv1",
         "parameters": {
             "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
             "auth_type": "resource_principal"
         },
         "credential": {
         },
         "actions": [
             {
                 "action_type": "predict",
                 "method": "POST",
                 "url": "https://${parameters.endpoint}/20231130/actions/generateText",
                 "request_body": "{\"compartmentId\":\"<cluster_compartment_id>\",\"servingMode\":{\"modelId\":\"cohere.command\",\"servingType\":\"ON_DEMAND\"},\"inferenceRequest\":{\"prompt\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":0,\"returnLikelihoods\":\"GENERATION\",\"isStream\":false ,\"stopSequences\":[],\"runtimeType\":\"COHERE\"}}"
             }
         ]
     }
  • meta.llama-2-70b-chat:

    POST _plugins/_ml/connectors/_create
    {
         "name": "OpenAI Chat Connector",
         "description": "testing genAI connector",
         "version": 2,
         "protocol": "oci_sigv1",
         "parameters": {
             "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
             "auth_type": "resource_principal"
         },
         "credential": {
         },
         "actions": [
             {
                 "action_type": "predict",
                 "method": "POST",
                 "url": "https://${parameters.endpoint}/20231130/actions/generateText",
                 "request_body": "{\"compartmentId\":\"<cluster_compartment_id>\",\"servingMode\":{\"modelId\":\"meta.llama-2-70b-chat\",\"servingType\":\"ON_DEMAND\"},\"inferenceRequest\":{\"prompt\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":-1,\"isStream\":false,\"numGenerations\":1,\"stop\":[],\"runtimeType\":\"LLAMA\"}}",
                "post_process_function": "def text = params['inferenceResponse']['choices'][0]['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
                              
                   }
         ]
     }

認証は、リソース・プリンシパルを使用して行われます。クラスタのコンパートメントIDをrequest_bodyに指定します。

レスポンスで返されたconnector_idを書き留めます。

{
  "connector_id": "<connector_ID>",
}

専用生成AIモデル・エンドポイント・オプション

専用の生成AIモデル・エンドポイントを使用するには、次の変更を使用してコネクタ・ペイロードを再構成します:

  1. modelIdのかわりにendpointIdを使用し、モデル名のかわりに専用モデル・エンドポイントのOCIDを指定します。たとえば:
    \"modelId\":\"meta.llama-2-70b-chat\"
    先:
    \"endpointId\":\"<dedicated_model_enpoint_OCID>\"
  2. servingTypeON_DEMANDからDEDICATEDに変更します。たとえば:

    \"servingType\":\"ON_DEMAND\"
    先:
    \"servingType\":\"DEDICATED\"

専用モデル・エンドポイントを使用してコネクタを作成する方法を示す完全な例を次に示します。

POST _plugins/_ml/connectors/_create
{
     "name": "Cohere Commar-R-Plus Chat Connector",
     "description": "Check errors in logs",
     "version": 2,
     "protocol": "oci_sigv1",
     "parameters": {
         "endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
         "auth_type": "resource_principal"
     },
     "credential": {
     },
     "actions": [
         {
             "action_type": "predict",
             "method": "POST",
             "url": "https://${parameters.endpoint}/20231130/actions/chat",
             "request_body": "{\"compartmentId\":\"<cluster_compartment_id>\",\"servingMode\":{\"endpointId\":\"<dedicated_model_enpoint_OCID>\",\"servingType\":\"DEDICATED\"},\"chatRequest\":{\"message\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":0,\"isStream\":false,\"chatHistory\":[],\"apiFormat\":\"COHERE\"}}",
             "post_process_function": "def text = params['chatResponse']['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
 
         }
     ]
 }

モデルの登録

次の例に示すように、Generative AIコネクタを使用して、前のステップのコネクタIDおよびモデル・グループIDを使用してリモート・モデルを登録します。

POST /_plugins/_ml/models/_register
{
   "name": "oci-genai-embed-test",
   "function_name": "remote",
   "model_group_id": "<model_group_ID>",
   "description": "test semantic",
   "connector_id": "<connector_ID>"
}

モデルのデプロイ

次の例に示すように、Generative AIコネクタを使用して、前のステップのコネクタIDおよびモデル・グループIDを使用してリモート・モデルを登録します。

POST /_plugins/_ml/models/<embedding_model_ID>/_deploy