OCIジェネレーティブAIによる会話型検索
OCI Search with OpenSearchは、OCI生成AIコネクタの作成をサポートします。
コネクタを利用して、取得拡張生成(RAG)、テキスト要約、テキスト生成、会話検索、セマンティック検索など、すべての汎用AI機能にアクセスできます。
前提条件
- 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 } } } }
モデル・グループの登録
次の例に示すように、モデル・グループAPIのregister操作を使用してモデル・グループを登録します。
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モデル・エンドポイントを使用するには、次の変更を使用してコネクタ・ペイロードを再構成します:
modelId
のかわりにendpointId
を使用し、モデル名のかわりに専用モデル・エンドポイントのOCIDを指定します。たとえば:
先:\"modelId\":\"meta.llama-2-70b-chat\"
\"endpointId\":\"<dedicated_model_enpoint_OCID>\"
servingType
をON_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