Créer un modèle personnalisé en utilisant Microsoft Entra ID
- Dernière mise à jour2025/10/16
Ce sujet décrit les étapes pour configurer l\'authentification Microsoft Entra ID (anciennement Azure AD) pour les définitions de modèles personnalisés dans AI Agent Studio, permettant une intégration transparente de vos modèles avec Automation 360.
- Utilisez Entra ID lorsque le fournisseur du modèle cible ne prend en charge que l\'authentification OAuth2.
- C\'est souvent le cas avec les Services hébergés sur Azure lorsque l\'authentification par clé API ne peut pas être utilisée en parallèle avec OAuth2.
- Par exemple, les modèles Azure OpenAI utilisent par défaut l\'authentification par clé API, mais si vos exigences de sécurité imposent OAuth2 via Entra ID, vous devez configurer le modèle via la route de définition de modèle personnalisée.
Pour télécharger et utiliser la collection Postman (exemple Entra ID), cliquez sur ce lien Collection Postman - Exemple Entra ID.
Prérequis
- Un compte Azure avec Entra ID activé. Rassemblez les informations requises :
- ID Client
- Secret du client
- URL d\'autorisation
- URL du jeton
- Configurer une connexion OAuth en utilisant Entra ID. Pour plus d\'informations, veuillez consulter Configuration de Microsoft Entra ID.
Pourquoi utiliser un modèle personnalisé et Entra ID ?
Azure OpenAI est pris en charge avec l\'authentification par clé API dans l\'interface utilisateur ; si vous avez besoin de OAuth2/Entra ID à la place, configurez-le via l\'API Modèle personnalisé, car un fournisseur ne peut exposer qu\'un seul mécanisme d\'authentification dans l\'interface utilisateur à la fois.
Procédure
Définition de modèle personnalisé utilisant Entra ID
Voici un exemple simplifié pour un déploiement Azure OpenAI GPT-4.1 mini, utilisant Entra OAuth2 :
POST https:/{{ControlRoomURL}}/gai/prompttools/v1/custommodel
{
"name": "AAI Docs Example - Entra",
"version": "0",
"authAction": {
"authType": "OAUTH2",
"oAuth": {
"location": "header",
"keyName": "Authorization",
"prefix": "Bearer "
}
},
"apiType": "REST",
"actions": [
{
"name": "gpt-4.1-mini",
"displayName": "GPT-4.1 mini",
"description": "GPT-4.1 mini provides a balance between intelligence, speed, and cost that makes it an attractive model for many use cases.",
"method": "POST",
"uri": "https://{resourceName}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version={apiVersion}",
"params": [
{
"type": "PATH_PARAM",
"attribute": [
{
"name": "resourceName",
"label": "Resource Name",
"value": {
"type": "TEXT",
"string": "genaitemplateplatformeastca"
}
}
]
},
{
"type": "PATH_PARAM",
"attribute": [
{
"name": "deployment",
"label": "Deployment",
"value": {
"type": "TEXT",
"string": "deploy-gpt-4.1"
}
}
]
},
{
"type": "PATH_PARAM",
"attribute": [
{
"name": "apiVersion",
"label": "API Version",
"value": {
"type": "TEXT",
"string": "2025-01-01-preview"
}
}
]
}
],
"request": {
"raw": {
"body": "{\"model\": \"gpt-4.1\",\"messages\":[{\"role\":\"system\",\"content\":\"system prompt\"},{\"role\":\"user\",\"content\":\"some prompt query\"}],\"max_completion_tokens\":500}",
"variables": [
{
"path": "$.max_completion_tokens",
"attribute": {
"name": "max_completion_tokens",
"label": "Max tokens",
"value": {
"type": "INTEGER",
"number": "2048"
},
"annotations": [
"MODEL_PARAMETER"
],
"canonicalName": "choices[0].completionTokens"
}
},
{
"path": "$.messages[1].content",
"attribute": {
"name": "prompt",
"label": "prompt",
"value": {
"type": "TEXT"
},
"annotations": [
"PROMPT_QUERY"
]
}
},
{
"path": "$.messages[0].content",
"attribute": {
"name": "systemPrompt",
"label": "System Prompt",
"value": {
"type": "TEXT"
},
"annotations": [
"SYSTEM_PROMPT_MESSAGE"
]
}
}
]
}
},
"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[0].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"
}
}
]
}
}
]
}