Définir un fournisseur pour un modèle d’incorporation

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 3 minutes de lecture
  • Déterminez le fournisseur d’IA à utiliser pour que votre modèle d’incorporation puisse fonctionner dans l’application Recherche IA Génération augmentée de récupération (RAG) (RAG).

    Avant de commencer

    Configurez un alias de connexion et d’informations d’identification pour votre fournisseur préféré. Pour plus d'informations, consultez Create a Connection & Credential alias.

    Rôle requis : admin

    Procédure

    1. Accédez à la Tous, puis entrez sys_one_extend_capability.list dans le filtre pour accéder à la table Options OneExtend.
    2. Sélectionnez l’option Apporter votre propre modèle d’incorporation .
    3. Dans la liste connexe Définitions d’options OneExtend, sélectionnez Nouveau.
    4. Dans le champ Nom , entrez le nom de la définition d’aptitude.
      Par exemple, Génération d’intégration (Azure OpenAI)
    5. Dans le champ Type d’API , sélectionnez système.
    6. Dans le champ API , sélectionnez l’icône de recherche ( Rechercher des documents à l’aide de la liste.) pour sélectionner le document.
      1. Dans le champ Nom de la table , sélectionnez la table Exécuteur système de One API [one_api_system_executor].
      2. Dans le champ Document , sélectionnez Embedder générique.
      3. Sélectionnez OK.
    7. Dans le champ Alias de connexion et d’informations d’identification , sélectionnez l’alias que vous souhaitez intégrer à votre modèle d’incorporation personnalisé.
    8. Sélectionnez l'option Avancé.
    9. Créez des scripts de prétraitement et de post-traitement.
      Pour que votre Recherche IA RAG application fonctionne de manière transparente avec votre modèle d’incorporation, vous devez créer des scripts de prétraitement et de post-traitement. Ces scripts aident l’application Recherche IA RAG à comprendre le format des données attendues et produites par votre modèle.
      L’exemple suivant montre le script de prétraitement pour la structure de la Azure OpenAI demande.
      (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);
      	 
      L’exemple suivant montre le script de post-traitement de réponse pour la structure de demande 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. Sélectionnez Soumettre.