Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Comme décrit dans Utiliser l’interpréteur de code pour générer et exécuter du code Python, l’interpréteur de code permet aux agents d’exécuter du code Python pour l’analyse des données, Word, Excel, PowerPoint et le traitement PDF et les visualisations. Reportez-vous à cet article pour comprendre :
- Exigences en matière de licences et régions prises en charge
- Fonctionnalités générales de l’interpréteur de code
- Comment activer l’interpréteur de code pour une invite
- Comment utiliser les capacités de l’interpréteur de code avec une invite
Cet article explique comment les développeurs peuvent utiliser le message Dataverse Predict pour passer des paramètres à des invites compatibles avec l'interpréteur de code et traiter les réponses.
Note
Un scénario courant pour les invites activées par l’interpréteur de code consiste à générer des expériences d’interface utilisateur pour les applications basées sur des modèles à l’aide de composants PCF (Power Apps Component). Reportez-vous à l’exemple de composant PCF de l’interpréteur de code pour obtenir un exemple.
Activer l’interpréteur de code pour l’environnement
L’interpréteur de code doit être activé pour chaque environnement avant de pouvoir l’utiliser. La valeur par défaut est Désactivé. Découvrez comment activer l’interpréteur de code à l’aide du Centre d’administration Power Platform
Les développeurs peuvent utiliser les API des paramètres de gestion de l’environnement Power Platform pour lire ou définir la propriété booléenne pour activer l’interpréteur CopilotStudio_CodeInterpreter de code pour un environnement.
Invites de l'interpréteur de code activées
Chaque invite créée à l’aide de Microsoft Copilot Studio ou d’AI Builder crée un enregistrement dans la table Dataverse AI Model (msdyn_AIModel). Vous avez besoin de l’ID de la ligne lorsque vous appelez le message Predict.
Vous ne pouvez pas créer une invite de commande en ajoutant une nouvelle ligne dans le msdyn_AIModel. Les invites sont créées et mises à jour à l’aide du message AIModelPublish. Ce message public est destiné uniquement à une utilisation interne. Vous devez utiliser l’interface utilisateur pour créer des invites activées par l’interpréteur de code. Vous devez également vous assurer que chaque invite de commande est activée pour un interpréteur de code. L’activation d’une invite est légèrement différente selon que vous modifiez l’invite dans Power Apps ou Copilot Studio. Consultez ces instructions :
Vous pouvez interroger la table msdyn_AIModel à l’aide de la valeur de colonne msdyn_Name pour identifier les invites activées par l’interpréteur de code par nom. La msdyn_AIModel propriété ne peut pas être utilisée pour filtrer uniquement les invites activées par l’interpréteur de code.
Récupérer des données de modèle IA
Utilisez des requêtes comme celles-ci pour récupérer des données de la msdyn_AIModel table à l’aide du nom du modèle en tant que filtre.
/// <summary>
/// Retrieves AI models from Dataverse that match the specified model name pattern.
/// </summary>
/// <param name="service">The IOrganizationService instance used to connect to Dataverse</param>
/// <param name="modelName">The model name prefix to search for (uses BeginsWith matching)</param>
/// <remarks>
/// This method queries the msdyn_aimodel table using a BeginsWith condition, which means it will find
/// models whose names start with the specified modelName string. The search is case-insensitive.
/// If no matching models are found, a message is displayed to the console.
/// </remarks>
/// <example>
/// <code>
/// RetrieveAIModelsExample(service, "GPT");
/// // This will find all AI models whose names start with "GPT"
/// </code>
/// </example>
static void RetrieveAIModelsExample(IOrganizationService service, string modelName)
{
var query = new QueryExpression("msdyn_aimodel")
{
ColumnSet = new ColumnSet("msdyn_name", "msdyn_aimodelid"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions = {
new ConditionExpression(
attributeName:"msdyn_name",
conditionOperator: ConditionOperator.BeginsWith,
value: modelName
)
}
}
};
var results = service.RetrieveMultiple(query);
if (results.Entities.Any())
{
foreach (var entity in results.Entities)
{
Console.WriteLine($"Model Name: {entity["msdyn_name"]}, ID: {entity["msdyn_aimodelid"]}");
}
}
else
{
Console.WriteLine($"No model with a name starting with '{modelName}' was found.");
}
}
Découvrez comment interroger des données à l’aide de QueryExpression
Prédire le contenu du message
Le Predict message est disponible dans le Kit de développement logiciel (SDK) Dataverse pour .NET et l’API web.
Envoi de la requête
Quel que soit le mode d’envoi de la requête, le Predict message nécessite trois paramètres :
- L'identifiant de l’enregistrement
msdyn_AIModel. La façon dont vous définissez cette valeur dépend de l’utilisation du Kit de développement logiciel (SDK) pour .NET ou l’API web. - Les données contenant les paramètres que l'invite est configurée pour accepter. Il est passé en tant que paramètre nommé
requestv2. En savoir plus sur lerequestv2paramètre - Le paramètre
version. La valeur est toujours"2.0".
Paramètre requestv2
Ce paramètre est configuré en tant que type ouvert. En savoir plus sur l’utilisation des types ouverts en général
Un type ouvert est un dictionnaire qui contient des clés et des valeurs. Les valeurs peuvent également être des dictionnaires. Il est donc possible d’envoyer des données complexes et hiérarchiques à l’aide d’un paramètre de type ouvert.
Avec le Kit de développement logiciel (SDK) pour .NET, utilisez la classe Entity et définissez la collection Attributes avec les valeurs. La principale différence dans ce scénario est que l’instance Entity n’a pas de LogicalName défini, elle ne fait donc pas référence à une table Dataverse spécifique.
L’exemple de méthode suivant PredictActionExample utilise la classe OrganizationRequest pour utiliser le Predict message, comme décrit dans Utiliser des messages avec le Kit de développement logiciel (SDK) pour .NET. Vous pouvez également générer une paire de classes typées PredictRequest et PredictResponse.
Découvrez comment générer des classes à liaison anticipée pour le Kit de développement logiciel (SDK) pour .NET
Cet exemple montre également comment définir le paramètre Target à l'aide d'une EntityReference qui se réfère à msdyn_AIModel l’enregistrement en utilisant l’ID.
static PredictActionExample (IOrganizationService service, Guid yourAiModelId)
{
// Create the nested 'patient' entity
var patientEntity = new Entity
{
Attributes =
{
{ "firstname", "John" },
{ "lastname", "Smith" }
}
};
// Create the main 'requestv2' entity
var requestV2Entity = new Entity
{
Attributes =
{
{ "pai_sex", 1 },
{ "pai_age", 10 },
{ "patient", patientEntity }
}
};
// Create the Predict action request
var predictRequest = new OrganizationRequest("Predict")
{
Parameters = new ParameterCollection
{
{ "version", "2.0" },
{ "requestv2", requestV2Entity },
{ "Target", new EntityReference("msdyn_aimodel", new Guid(yourAiModelId)) }
}
};
// Execute the request
var response = service.Execute(predictRequest);
Console.WriteLine("Prediction Result:");
Console.WriteLine(response.Results);
}
Traitement de la réponse
Le type complexe PredictResponse contient la réponse du message dans l'API Web Predict. Le Kit de développement logiciel (SDK) pour .NET a des propriétés de réponse similaires. Pour plus d’informations, reportez-vous à l’exemple de réponse de l’API web précédente.
| Propriété | Type | Descriptif |
|---|---|---|
overrideHttpStatusCode |
Chaîne | Si la prévision n’est pas terminée, 202 indique qu’une interrogation est nécessaire, sinon null. |
overrideLocation |
Chaîne | Null sauf si ce overrideHttpStatusCode n’est pas null. Emplacement de l’interrogation. Envoyez une requête GET à cet emplacement pour consulter le résultat. |
overrideRetryAfter |
Chaîne | Null sauf si ce overrideHttpStatusCode n’est pas null. Suggestion sur le moment où essayer d’interroger. |
response |
Chaîne | Cette propriété est obsolète depuis l’introduction de la responsev2 propriété et doit toujours être null. |
responsev2 |
Entité/expando | Voir les propriétés PredictResponse responsev2 |
Propriétés de PredictResponse responsev2
La responsev2 propriété a deux propriétés :
operationStatus: valeur de chaîne indiquant si l’opération a réussi. La valeur attendue estSuccess.predictionOutput: dictionnaire avec les propriétés suivantes :Propriété Type Descriptif textficelle Contenu généré principal. Le contenu dépend du type de valeur retourné par l’invite. mimetypeficelle Type MIME de texte. textMimeTypeficelle Dupliquer/confirmer le type MIME finishReasonficelle La raison pour laquelle le raisonnement s’est terminé. Il s’agit généralement de stop.codeficelle Code source Python ou espace réservé décrivant le code exécuté. signatureficelle un jeton d’intégrité et de métadonnées codés en base64, avec version logsficelle Sortie du log d’exécution de code Python (le cas échéant). codeThinkingobjet Objet d’espace réservé vide/interne. fileschoix d’objets Artefacts de fichier générés avec file_name,content_typeetbase64_contentpropriétés.structuredOutputobjet Forme canonique de sortie principale avec mimetypeettextde propriétés.artifactsobjet Carte des identificateurs d’artefacts vers les métadonnées et le contenu en base64. Cet objet contient des propriétés spécifiques à la sortie et ces propriétés sont des objets qui ont les propriétés suivantes : artifactName,mimeTypeetbase64Content
Résolution des problèmes
Voici quelques erreurs que vous pouvez rencontrer lors de l’utilisation de l’action Predict avec les invites activées de l'interpréteur de code.
Capacité insuffisante
Lorsque vous n’avez pas de capacité AI Builder restante, vous obtenez cette 403 ForbiddenEntitlementNotAvailable erreur :
{
"error": {
"code": "0x80048d06",
"message": "{\"operationStatus\":\"Error\",\"error\":{\"type\":\"Error\",\"code\":\"EntitlementNotAvailable\",\"innerErrors\":[{\"scope\":\"Generic\",\"target\":null,\"code\":\"NoCapacity\",\"type\":\"Error\",\"message\":\"No capacity was found.\"}]},\"predictionId\":null}"
}
}
Un contrôle PCF qui rencontre cette erreur affiche ce message : Accès refusé. Vous n’êtes pas autorisé à utiliser ce modèle.
La résolution de cette erreur consiste à acheter plus de capacité AI Builder. En savoir plus sur la façon d’obtenir le droit aux crédits AI Builder
Nombre maximal d'appels simultanés atteints
Lorsque vous envoyez trop de requêtes simultanément par environnement ou locataire, vous obtenez cette 500 Internal Server ErrorMaxConcurrentPlexCallsReachedException erreur :
{
"error": {
"code": "0x80048d0a",
"message": "{\"operationStatus\":\"Error\",\"error\":{\"type\":\"Error\",\"code\":\"Unknown\",\"message\":\"Unhandled exception: Microsoft.PowerAI.MiddleEarth.HttpService.CodeInterpreter.Exceptions.MaxConcurrentPlexCallsReachedException\"},\"predictionId\":null}"
}
}
Un contrôle PCF qui rencontre cette erreur affiche ce message : Erreur serveur. Réessayez ultérieurement ou contactez l’administrateur.
La résolution de cette erreur consiste à envoyer moins de demandes. Patientez un peu et réessayez. Il n’existe aucun RetryAfter en-tête de réponse pour recommander la durée pendant laquelle vous devez attendre.