埋め込みモデルのプロバイダーの設定

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:8分
  • 埋め込みモデルが AI 検索 検索拡張生成 (RAG) アプリケーションで機能するように、使用する AI プロバイダーを決定します。

    始める前に

    希望するプロバイダーの接続および資格情報エイリアスを構成します。詳細については、「Create a Connection & Credential alias」を参照してください。

    必要なロール:admin

    手順

    1. 移動先 すべてをクリックし、フィルターに 「sys_one_extend_capability.list 」と入力して OneExtend 機能テーブルに移動します。
    2. [独自の埋め込みモデルを使用する] 機能を選択します。
    3. [OneExtend 機能定義] 関連リストで、[ 新規] を選択します。
    4. [ 名前 ] フィールドに、機能定義の名前を入力します。
      たとえば、生成の埋め込み (Azure OpenAI) などです
    5. [API タイプ] フィールドで [システム] を選択します。
    6. [API] フィールドで、検索アイコン ( リストからドキュメントを参照) を選択してドキュメントを選択します。
      1. [ テーブル名 ] フィールドで、One API システム実行ツール [one_api_system_executor] テーブルを選択します。
      2. ドキュメント フィールドで、汎用埋め込み を選択します。
      3. [OK] を選択します。
    7. [ 接続および資格情報エイリアス ] フィールドで、カスタム埋め込みモデルと統合するエイリアスを選択します。
    8. [詳細] オプションを選択します。
    9. 前処理スクリプトと後処理スクリプトを作成します。
      AI 検索 RAGアプリケーションが埋め込みモデルとシームレスに連携できるようにするには、前処理スクリプトと後処理スクリプトを作成する必要があります。これらのスクリプトは、モデルが予期して生成するデータの形式を AI 検索 RAG アプリケーションが理解するのに役立ちます。
      次の例は、 Azure OpenAI 要求構造のプリプロセッサースクリプトを示しています。
      (function(inputs) {                                                               //// inputs is the capability inputs which contains request.
                  /* write code here to transform capability input to definition input.            
                   *{
      		"request": {                                                                  //request contains rawInput which will be system-provided.
      			"rawInput": {                                                          //rawInput contains passages(Array of text segments), type(Context of the input) and modelId(Name of the embedding model)
      				"passages": ["Sample text"],
      				"type": "ingest/query",
      				"model": "text-embedding-3-large"
      			},
      			"providerInput": {                                                     //providerInput should be populated using the relevant data from rawInput.passages.
      				"input": ["Sample text"]                                        //The field name "input" inside providerInput is provider-specific and rawInput.passages should be mapped to the appropriate field expected by your provider
      			}
      		}
      	  }
      	 try {
              var parsedInputs = JSON.parse(inputs);
              var request = parsedInputs.request;
              var rawInput = request.rawInput;
              var passagesArray = rawInput.passages;
              var type = rawInput.type;
      
              if (passagesArray && passagesArray.length > 0) {
                  parsedInputs.request.providerInput = {};
                  parsedInputs.request.providerInput.input = passagesArray;
              }
      
          } catch (ex) {
              gs.error("Exception occured while preprocessing of the inputs." + ex);
              throw new Error("Exception occured while OE preprocessing of the inputs : " + ex);
          }
      
          inputs = parsedInputs;
          return inputs;
      })(inputs);
      	 
      次の例は、 Azure OpenAI 要求構造の応答ポストプロセッサースクリプトを示しています。
      (function(outputs) {
          /* write code here to transform definition output to capability output.
      	* outputs contains result from the provider definition implementation.
      	* Expected outputs format from provider definition implementation in success scenario:
      	   "result": {
      			"provider": "custom_embedding_model",
      			"logId": "0ee6f4f4ff112210b6e1ffffffffff03",
      			"status": "success",
      			"response": {"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.008695375,0.0011188902]},{"object":"embedding","index":1,"embedding":[0.012572239,0.017366657]}],"model":"text-embedding-3-large","usage":{"prompt_tokens":4,"total_tokens":4}}
      	    }
      	* Expected outputs format from provider definition implementation in error scenario:
      	   "result": {
      			"responseHeaders": "[Content-Length: 224\r\n, Content-Type: application/json\r\n, apim-request-id: 72b1519e-a367-4f01-b249-8f37d35d50d3\r\n, Date: Thu, 01 May 2025 12:03:44 GMT\r\n]",
      			"responseBody": "{\"error\":{\"code\":\"401\",\"message\":\"Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.\"}}",
      			"provider": "custom_embedding_model",
      			"errorCode": "401",
      			"logId": "0ee6f4f4ff112210b6e1ffffffffff03",
      			"error": "PermissionDenied",
      			"status": "error"
      	   }
      	* Extract the embeddings from the response key of the provider result (in a successful scenario) and elevate it in the final output. Sample format for the same:
      	  "result": {
      			"provider": "custom_embedding_model",
      			"logId": "0ee6f4f4ff112210b6e1ffffffffff03",
      			"status": "success",
      			"response": {"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.008695375,0.0011188902]},{"object":"embedding","index":1,"embedding":[0.012572239,0.017366657]}],"model":"text-embedding-3-large","usage":{"prompt_tokens":4,"total_tokens":4}}
      			"embeddings": [[0.008695375,0.0011188902], [0.012572239,0.017366657]]
      	   }
      	*/
          try {
              outputs = JSON.parse(outputs);
              var embeddingsArray = [];
      
              if (!gs.nil(outputs.result) && !gs.nil(outputs.result.response)) {
                  var responseBody = outputs.result.response;
                  if (!gs.nil(responseBody)) {
                      var data = JSON.parse(responseBody).data;
                      for (var i = 0; i < data.length; i++) {
                          var embeddingResponse = data[i];
                          if (!gs.nil(embeddingResponse) && !gs.nil(embeddingResponse.embedding))
                              embeddingsArray.push(embeddingResponse.embedding);
                      }
                  }
      
                  outputs.result.embeddings = embeddingsArray;
              }
          } catch (ex) {
              gs.error("Exception occured while OE postprocessing of the outputs = " + ex);
              outputs.result.status = "error";
              outputs.result.error = gs.getMessage("Exception occured while OE postprocessing of the outputs : " + ex);
          }
      
          return outputs;
      })(outputs);
    10. [Submit (送信)] を選択します。