L\'API Créer un modèle personnalisé offre aux développeurs et aux administrateurs la possibilité d\'intégrer de manière transparente les grands modèles de langage (LLM) propriétaires ou tiers, ainsi que d\'autres modèles d\'IA directement dans AI Agent Studio.

  • Il nécessite un schéma de charge utile JSON, qui encapsule des informations sur le modèle. Le schéma définit des attributs tels que le nom du fournisseur, le nom du modèle spécifique, les protocoles d\'authentification, les détails du point de terminaison de l\'API (y compris les paramètres de chemin, les paramètres de requête et les en-têtes requis), ainsi que la structure des corps de la requête et de la réponse.
  • L\'API permet aux utilisateurs de définir des variables dans les corps de la requête et de la réponse qui peuvent être remplies dynamiquement pendant l\'exécution. Ces variables peuvent être désignées à des fins différentes en utilisant des annotations spécifiques :
    • PROMPT_QUERY (Obligatoire) : Cette annotation signifie que la variable correspondante doit être remplacée par l\'invite fournie par l\'utilisateur sur la AI Skills page. C\'est essentiel pour transmettre les invites d\'entrée utilisateur au modèle.
    • REQUEST_PARAMETER (Obligatoire) : Cette annotation indique que la variable doit être exposée comme un paramètre configurable sur la Model connections page.
    • MODEL_PARAMETER  : Similaire à REQUEST_PARAMETER, cette annotation désigne la variable pour la configuration sur la AI Skills page.
    • RESPONSE_PARAMETER (Obligatoire) : Cette annotation signifie que la variable sera renvoyée dans la réponse du modèle d\'IA.
  • L\'API renvoie une réponse 200 OK avec le modèle créé en cas de création réussie.
POST https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel
Corps de la demande :
{
   "name":"Azure OpenAI reasoning models",
   "version":"0",
   "authAction":{
      "authType":"CUSTOM_KEYS",
      "customKeys":{
         "keys":[
            {
               "location":"header",
               "keyName":"Authorization",
               "prefix":"Bearer "
            }
         ]
      }
   },
   "apiType":"REST",
   "actions":[
      {
         "name":"o3-mini",
         "displayName":"o3-mini",
         "description":"The o1 and o3 series models are specifically designed to tackle reasoning 
          and problem-solving tasks with increased focus and capability. These models spend more time 
          processing and understanding the user's request, making them exceptionally strong in areas 
          like science, coding, math and similar fields. For example, o1 can be used by healthcare researchers 
          to annotate cell sequencing data, by physicists to generate complicated mathematical formulas needed 
          for quantum optics, and by developers in all fields to build and execute multi-step workflows.",
         "method":"POST",
         "uri":"https://{deployment}.openai.azure.com/openai/deployments/o3-mini/chat/completions?api-version=2025-01-01-preview",
         "params":[
            {
               "type":"HEADERS"
            },
            {
               "type":"PATH_PARAM",
               "attribute":[
                  {
                     "name":"deployment",
                     "label":"Deployment",
                     "value":{
                        "type":"TEXT",
                        "string":"aai-openai2"
                     }
                  }
               ]
            }
         ],
         "request":{
            "raw":{
               "body":"{\n        \"messages\": [\n            {\n                \"role\": \"user\",
                \n                \"content\": \"I am going to       Paris, what should I see?\"\n            
                 }\n        ],\n        \"max_completion_tokens\": 100000,\n        \"model\": \"o3-mini\"\n    }",
               "variables":[
                  {
                     "path":"$.max_completion_tokens",
                     "attribute":{
                        "name":"max_completion_tokens",
                        "label":"max_completion_tokens",
                        "value":{
                           "type":"INTEGER",
                           "number":"100000"
                        },
                        "annotations":[
                           "REQUEST_PARAMETER"
                        ]
                     }
                  },
                  {
                     "path":"$.messages.content",
                     "attribute":{
                        "name":"prompt",
                        "label":"prompt",
                        "value":{
                           "type":"TEXT"
                        },
                        "annotations":[
                           "PROMPT_QUERY"
                        ]
                     }
                  }
               ]
            }
         },
         "response":{
            "body":"{\n    \"id\": \"chatcmpl-APwQdLa9WCQAdZg0dO5OjGr2ER4sX\",\n    \"object\": \"chat.completion\",\n
                   \"created\": 1730746163,\n    \"model\": \"o3-mini-2025-01-31\",\n    \"choices\": [\n        {\n
                   \"index\": 0,\n            \"message\": {\n                \"role\": \"assistant\",\n                
                   \"content\": \"Sure! They are one of the most mysterious and exciting objects in space.\",\n
                   \"refusal\": null\n            },\n            \"finish_reason\": \"stop\"\n        }\n    ],\n
                   \"usage\": {\n                \"prompt_tokens\": 17,\n        \"completion_tokens\": 959,\n
                   \"total_tokens\": 976,\n        \"prompt_tokens_details\": {\n            \"cached_tokens\": 0\n
                    },\n        \"completion_tokens_details\": {\n            \"reasoning_tokens\": 64\n        }\n
                    },\n    \"system_fingerprint\": \"fp_35c19d48ca\"\n}",
            "variables":[
               {
                  "path":"$.usage.completion_tokens",
                  "attribute":{
                     "name":"completion_tokens",
                     "label":"completion_tokens",
                     "value":{
                        "type":"INTEGER"
                     },
                     "annotations":[
                        "RESPONSE_PARAMETER"
                     ],
                     "canonicalName":"choices[0].completionTokens"
                  }
               },
               {
                  "path":"$.choices.message.content",
                  "attribute":{
                     "name":"content",
                     "label":"content",
                     "value":{
                        "type":"TEXT",
                        "string":"Some response from LLM"
                     },
                     "annotations":[
                        "RESPONSE_PARAMETER"
                     ],
                     "canonicalName":"choices[0].value"
                  }
               },
               {
                  "path":"$.model",
                  "attribute":{
                     "name":"model",
                     "label":"model",
                     "value":{
                        "type":"TEXT"
                     },
                     "annotations":[
                        "RESPONSE_PARAMETER"
                     ],
                     "canonicalName":"model_name"
                  }
               },
               {
                  "path":"$.usage.prompt_tokens",
                  "attribute":{
                     "name":"prompt_tokens",
                     "label":"prompt_tokens",
                     "value":{
                        "type":"INTEGER"
                     },
                     "annotations":[
                        "RESPONSE_PARAMETER"
                     ],
                     "canonicalName":"choices[0].promptTokens"
                  }
               },
               {
                  "path":"$.usage.total_tokens",
                  "attribute":{
                     "name":"total_tokens",
                     "label":"total_tokens",
                     "value":{
                        "type":"INTEGER"
                     },
                     "annotations":[
                        "RESPONSE_PARAMETER"
                     ],
                     "canonicalName":"choices[0].totalTokens"
                  }
               }
            ]
         }
      }
   ]
}

Paramètres de la demande
Paramètre Type Obligatoire Description
nom Chaîne Oui Nom du modèle personnalisé
description Chaîne Non Description du modèle personnalisé
actionAuth Objet Oui Définit les options d\'authentification pour l\'appel du modèle d\'IA. Pour plus de détails, voir ci-dessous
apiType Chaîne Oui Spécifie le type d\'API (par exemple, « REST »)
actions paramètres Oui Contient un tableau d\'objets, où chaque objet définit un point de terminaison ou une action spécifique dans le modèle personnalisé.

Objet authAction

{
   "name":"Azure OpenAI reasoning models",
   "description":"string",
   "version":"0",
   "authAction":{
      "authType":"CUSTOM_KEYS",
      "customKeys":{
         "keys":[
            {
               "location":"header",
               "keyName":"Authorization",
               "prefix":"Bearer "
            }
         ]
      }
   }

{
   "name":"Bedrock - Claude2.1",
   "description":"string",
   "version":"string",
   "authAction":{
      "authType":"AWS_SIGNATURE_V4",
      "awsSignatureV4":{
         "accessKey":{
            "location":"header",
            "keyName":"aws_sign_access_key"
         },
         "secretkey":{
            "location":"header",
            "keyName":"aws_sign_access_key"
         },
         "sessionkey":{
            "location":"header",
            "keyName":"aws_sign_session_key"
         }
      }
   },
   "api_type":"REST",
   "actions":[
      {
         .... 
      }
   ]
}
Paramètre Type Obligatoire Description
authType Chaîne Oui Type d\'authentification. API_KEY pour la clé API, OAUTH2 pour OAuth2, CUSTOM_KEYS pour plusieurs clés et AWS_SIGNATURE_V4 pour l\'authentification spécifique à AWS.
API_KEY, OAUTH2, ou CUSTOM_KEYS Objet Oui Définit les clés d\'authentification personnalisée. Ses attributs sont décrits ci-dessous sous clés.
  • API_KEY est requis, si authType est API_KEY.
  • OAUTH2 est requis, si authType est OAUTH2.
  • CUSTOM_KEYS est requis, si authType est CUSTOM_KEYS.
↳↳ keys paramètres Oui Tableau d\'objets clé pour l\'authentification.
↳↳↳ location Chaîne Oui Où la clé doit être placée (par exemple, « header »).
↳↳↳keyName Chaîne Oui Nom de la clé (par exemple, « Authorization », « x-api-key »).
↳↳↳ prefix Objet Non Préfixe facultatif à ajouter à la valeur de la clé (par exemple, « Bearer » pour les jetons de type bearer).
awsSignatureV4 Objet Oui AWS_SIGNATURE_V4 est requis si authType est AWS_SIGNATURE_V4. Cet objet définit les identifiants AWS (ID de clé d\'accès, clé d\'accès secrète, clé de session) pour l\'authentification par signature AWS.
↳↳ accessKey Objet Oui Définit l\'ID de clé d\'accès AWS.
↳↳↳ location Chaîne Oui Où la clé d\'accès doit être placée (par exemple, « header », « query »).
↳↳↳ keyName Chaîne Oui Nom du paramètre pour la clé d\'accès (par exemple, « aws_sign_access_key »).
↳↳ secretkey Objet Oui Définit la clé d\'accès secrète AWS.
↳↳↳ location Chaîne Oui Où la clé secrète doit être placée.
↳↳↳ keyName Chaîne Oui Nom du paramètre pour la clé secrète.
↳↳ sessionkey Objet Non Définit la clé de session AWS (facultatif).
↳↳↳ location Chaîne Oui Où la clé de session doit être placée.
↳↳↳ keyName Chaîne Oui Nom du paramètre pour la clé de session.

Tableau actions

{
   "actions":[
      {
         "name":"o3-mini",
         "displayName":"o3-mini",
         "description":"The o1 and o3 series models are specifically designed to tackle reasoning 
          and problem-solving tasks with increased focus and capability. These models spend more time 
          processing and understanding the user's request, making them exceptionally strong in areas 
          like science, coding, math and similar fields. For example, o1 can be used by healthcare researchers 
          to annotate cell sequencing data, by physicists to generate complicated mathematical formulas needed 
          for quantum optics, and by developers in all fields to build and execute multi-step workflows.",
         "method":"POST",
         "uri":"https://{deployment}.openai.azure.com/openai/deployments/o3-mini/chat/completions?api-version=2025-01-01-preview",
         "params":[
            {
               "type":"string",
               "attribute":[
                  {
                     "name":"string",
                     "label":"string",
                     "value":{
                        "type":"string",
                        "string":"string",
                        "number":"string"
                     }
                  }
               ]
            }
         ],
         "request":{
            "raw":{
               "body":"string",
               "variables":[
                  {
                     ....
                  }
               ]
            }
         },
         "response":{
            "body":"string",
            "variables":[
               {
                  ....
               }
            ]
         }
      }
   ]
}
Paramètre Type Obligatoire Description
nom Chaîne Oui Nom programmatique du point de terminaison/de l\'action du modèle spécifique.
displayName Chaîne Oui Nom convivial du point de terminaison du modèle, affiché dans l\'interface utilisateur.
description Chaîne Non Description détaillée du point de terminaison du modèle et de ses capacités.
méthode Chaîne Oui Méthode HTTP pour l\'appel API. Doit généralement être POST pour la plupart des modèles d\'IA générative.
uri Chaîne Oui URI complet du point de terminaison du modèle d\'IA. Paramètres dynamiques dans l\'URI.
Tableau des paramètres Non Contient une collection de paramètres qui sont utilisés lors de la configuration de la Model connection et seront insérés dans l\'URI lors de l\'appel à l\'API du modèle d\'IA au moment de l\'exécution. Le paramètre peut être soit une variable PATH_PARAM, soit une variable QUERY_PARAM. Vous pouvez également ajouter les EN-TÊTES associés à cette requête API. Dans l\'exemple, deploymentId et projectId sont des variables PATH_PARAM et apiVersion est une variable QUERY_PARAM.
Demande Objet Oui Définit le format et la structure des données qui doivent être envoyées au modèle, y compris les variables et leurs annotations. Le corps spécifie la structure et le contenu de la requête. Le tableau variables définit les éléments dynamiques à l\'intérieur du corps, en utilisant le chemin pour spécifier l\'emplacement de la variable dans la structure JSON.
Réponse Objet Spécifie le format et la structure des données que le modèle renverra, y compris les variables, leurs annotations et leurs noms canoniques. Le corps spécifie la structure et le contenu de la réponse. Le tableau variables définit les éléments dynamiques à l\'intérieur du corps, en utilisant le chemin pour spécifier l\'emplacement de la variable dans la structure JSON.

Tableau params

{
   "params":[
      {
         "type":"HEADERS"
      },
      {
         "type":"PATH_PARAM",
         "attribute":[
            {
               "name":"deployment",
               "label":"Deployment",
               "value":{
                  "type":"TEXT",
                  "string":"aai-openai2"
               }
            }
         ]
      }
   ]
Paramètre Type Obligatoire Description
type Chaîne Oui Type de paramètre (par exemple, HEADERS, PATH_PARAM, QUERY_PARAM).
attribut paramètres Oui Tableau d\'objets d\'attribut définissant les détails du paramètre. Requis pour PATH_PARAM et QUERY_PARAM.
name Chaîne Oui Le nom du paramètre (par exemple, « deployment », « api-version »).
label Chaîne Non Étiquette conviviale pour le paramètre, affichée dans l\'interface utilisateur.
value Objet Non Objet contenant la valeur par défaut ou initiale du paramètre. Voici les attributs :
  • type (chaîne) : Le type de données de la valeur du paramètre (par exemple, TEXT, INTEGER).
  • string (chaîne) : La valeur de chaîne si type est TEXT.
  • number (chaîne) : La valeur numérique si type est INTEGER.

Objet request

{
    "request":{
      "raw":{
         "body":"{\n        \"messages\": [\n            {\n                \"role\": \"user\",
                \n                \"content\": \"I am going to       Paris, what should I see?\"\n            
                 }\n        ],\n        \"max_completion_tokens\": 100000,\n        \"model\": \"o3-mini\"\n    }",
         "variables":[
            {
               "path":"$.max_completion_tokens",
               "attribute":{
                  "name":"max_completion_tokens",
                  "label":"max_completion_tokens",
                  "value":{
                     "type":"INTEGER",
                     "number":"100000"
                  },
                  "annotations":[
                     "REQUEST_PARAMETER"
                  ]
               }
            },
            {
               "path":"$.messages.content",
               "attribute":{
                  "name":"prompt",
                  "label":"prompt",
                  "value":{
                     "type":"TEXT"
                  },
                  "annotations":[
                     "PROMPT_QUERY"
                  ]
               }
            }
         ]
      }
   }
Paramètre Type Obligatoire Description
brut Objet Oui Définit le corps de la requête brut et ses variables dynamiques.
body Chaîne Oui Chaîne JSON brute représentant la structure du corps de la requête. Cette chaîne doit contenir des espaces réservés pour les variables.
variables paramètres Non Tableau d\'objets définissant des éléments dynamiques à l\'intérieur du corps.
↳↳ path Chaîne Oui Chemin JSONPath vers l\'emplacement de la variable dans la structure JSON body.
↳↳ attribute Objet Oui Objet décrivant les propriétés de la variable.
↳↳↳ name Chaîne Oui Nom interne de la variable.
↳↳↳label Chaîne Non Étiquette conviviale de la variable.
↳↳↳ value Objet Non Objet contenant la valeur par défaut ou initiale de la variable.
↳↳↳ annotations paramètres Non Tableau de chaînes spécifiant l\'objectif de la variable. Annotations pris en charge : PROMPT_QUERY, REQUEST_PARAMETER, MODEL_PARAMETER.

Objet response

{
      "response":{
      "body":"{\n    \"id\": \"chatcmpl-APwQdLa9WCQAdZg0dO5OjGr2ER4sX\",\n    \"object\": \"chat.completion\",\n
                   \"created\": 1730746163,\n    \"model\": \"o3-mini-2025-01-31\",\n    \"choices\": [\n        {\n
                   \"index\": 0,\n            \"message\": {\n                \"role\": \"assistant\",\n                
                   \"content\": \"Sure! They are one of the most mysterious and exciting objects in space.\",\n
                   \"refusal\": null\n            },\n            \"finish_reason\": \"stop\"\n        }\n    ],\n
                   \"usage\": {\n                \"prompt_tokens\": 17,\n        \"completion_tokens\": 959,\n
                   \"total_tokens\": 976,\n        \"prompt_tokens_details\": {\n            \"cached_tokens\": 0\n
                    },\n        \"completion_tokens_details\": {\n            \"reasoning_tokens\": 64\n        }\n
                    },\n    \"system_fingerprint\": \"fp_35c19d48ca\"\n}",
      "variables":[
         {
            "path":"$.usage.completion_tokens",
            "attribute":{
               "name":"completion_tokens",
               "label":"completion_tokens",
               "value":{
                  "type":"INTEGER"
               },
               "annotations":[
                  "RESPONSE_PARAMETER"
               ],
               "canonicalName":"choices[0].completionTokens"
            }
         },
         {
            "path":"$.choices.message.content",
            "attribute":{
               "name":"content",
               "label":"content",
               "value":{
                  "type":"TEXT",
                  "string":"Some response from LLM"
               },
               "annotations":[
                  "RESPONSE_PARAMETER"
               ],
               "canonicalName":"choices[0].value"
            }
         },
         {
            "path":"$.model",
            "attribute":{
               "name":"model",
               "label":"model",
               "value":{
                  "type":"TEXT"
               },
               "annotations":[
                  "RESPONSE_PARAMETER"
               ],
               "canonicalName":"model_name"
            }
         },
         {
            "path":"$.usage.prompt_tokens",
            "attribute":{
               "name":"prompt_tokens",
               "label":"prompt_tokens",
               "value":{
                  "type":"INTEGER"
               },
               "annotations":[
                  "RESPONSE_PARAMETER"
               ],
               "canonicalName":"choices[0].promptTokens"
            }
         },
         {
            "path":"$.usage.total_tokens",
            "attribute":{
               "name":"total_tokens",
               "label":"total_tokens",
               "value":{
                  "type":"INTEGER"
               },
               "annotations":[
                  "RESPONSE_PARAMETER"
               ],
               "canonicalName":"choices[0].totalTokens"
            }
         }
      ]
   }
}
Paramètre Type Obligatoire Description
corps Chaîne Oui Chaîne JSON brute représentant la structure attendue du corps de la réponse du modèle.
variables paramètres Non Tableau d\'objets définissant comment extraire les éléments dynamiques de la réponse body.
path Chaîne Oui Chemin JSONPath vers l\'emplacement de la variable dans la structure JSON body.
attribute Objet Oui Objet décrivant les propriétés de la variable.
↳↳ name Chaîne Oui Nom interne de la variable.
↳↳label Chaîne Non Étiquette conviviale de la variable.
↳↳ value Objet Non Objet contenant la valeur par défaut ou initiale de la variable.
↳↳ annotations paramètres Non Tableau de chaînes spécifiant l\'objectif de la variable. Annotation prise en charge : RESPONSE_PARAMETER.
↳↳ canonicalName Chaîne Non Chemin JSON vers la variable dans le schéma canonique Automation Anywhere.
  • Utilisez choices[0].completionTokens pour renseigner le nombre de jetons consommés pour générer la réponse.
  • Utilisez choices[0].value pour alimenter la réponse du LLM.
  • Utilisez model_name pour renseigner le nom ou l\'identifiant du modèle d\'IA.
  • Utilisez choices[0].promptTokens pour renseigner le nombre de jetons consommés par l\'invite.
  • Utilisez choices[0].totalTokens pour renseigner le nombre total de jetons consommés pour satisfaire la demande.

Pour plus de détails sur l\'API de création de modèle personnalisé, y compris la réponse et les paramètres de réponse, voir API IA Agent Studio

Autres API de modèle personnalisé

Obtenir des informations sur l\'API de modèle personnalisé
GET https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel/vendors/{vendorName}/models/{modelName}
  • Cette API récupère la définition des modèles personnalisés existants.
  • Il nécessite le nom du fournisseur (vendorName) et le nom du modèle (modelName) en tant que paramètres de chemin.
  • L\'API renvoie une réponse 200 OK contenant les objets représentant le modèle demandé.
Mettre à jour l\'API de définition de modèle personnalisé
PUT https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel
  • Cette API met à jour une définition de modèle personnalisé existante.
    Remarque : Cette API ne peut mettre à jour que des modèles personnalisés qui n\'ont pas de Model connections associé.
  • Il nécessite le nom du fournisseur (vendorName) et le nom du modèle (modelName) pour identifier le modèle qui sera mis à jour.
  • L\'API renvoie une réponse 200 OK avec le modèle mis à jour en cas de mise à jour réussie.
Mettre à jour le nom et la description de l\'API de définition de modèle personnalisé
PATCH https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel
  • Cette API met à jour le nom et la description de la définition du modèle personnalisé.
  • Il nécessite le nom du fournisseur (vendorName) et le nom du modèle (modelName) pour identifier le modèle qui sera mis à jour.
  • L\'API renvoie une réponse 200 OK avec les détails du modèle mis à jour en cas de mise à jour réussie.
Supprimer l\'API de modèle personnalisé
DELETE https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel/vendors/{vendorName}/models/{modelName}
  • Cette API supprime un modèle personnalisé existant.
  • Similaire à l\'API GET, elle utilise (vendorName) et (modelName) comme paramètres de chemin pour identifier le modèle cible.
    Remarque : Le modèle ne peut être supprimé que s\'il n\'est pas actuellement associé à un Model connections actif. Cela signifie que vous devez d\'abord supprimer tout AI Skills et Task Bots qui dépendent de Model connection avant de tenter de supprimer la définition du modèle.
  • L\'API renvoie une réponse 204 No Content après une suppression réussie.
API Liste des modèles personnalisés
POST https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel/list
  • Cette API récupère une liste de tous les modèles personnalisés définis pour tous les fournisseurs au sein du Control Room.
  • Il accepte un corps de requête facultatif contenant un objet FilterRequest, permettant aux utilisateurs de filtrer les résultats en fonction de critères spécifiques.
  • L\'API renvoie une réponse 200 OK avec des objets contenant les modèles demandés.

Pour plus de détails sur les API ci-dessus, voir API IA Agent Studio. Vous pouvez télécharger ici une collection Postman pour AI Agent Studio - des définitions de modèles personnalisés qui contiennent des exemples d\'appels d\'API pour se connecter aux modèles personnalisés.