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, les Word, les Excel, les PowerPoint, le traitement de fichiers 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 que vous créez à l’aide de Microsoft Copilot Studio ou de 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 de prompt en créant une nouvelle ligne dans le tableau msdyn_AIModel. Vous créez et mettez à jour des prompts à 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 prompt est activé pour l’interpréteur de code. Le processus d’activation d’une invite diffère 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 la colonne msdyn_Name pour identifier les invites activées par l’interpréteur de code par leur nom. La table msdyn_AIModel n’a pas de propriété que vous pouvez utiliser pour filtrer uniquement les invites pour lesquelles l’interpréteur de code est activé.
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 table msdyn_AIModel à 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.
Envoyer la demande
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. Transmettez ces données 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
Configurez ce paramètre en tant que type ouvert. En savoir plus sur l’utilisation des types open 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, ce qui vous permet d’envoyer des données complexes et hiérarchiques à l’aide d’un paramètre de type ouvert.
En utilisant 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 fait référence à l’enregistrement msdyn_AIModel à l’aide de 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);
}
Traiter la réponse au message Predict
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édiction n’est pas terminée, 202 indique qu’une scrutation est nécessaire. Sinon, la valeur est null. |
overrideLocation |
Chaîne |
null sauf quand overrideHttpStatusCode n’est pas null. Emplacement du polling. Envoyez une requête GET à cet emplacement pour obtenir le résultat. |
overrideRetryAfter |
Chaîne |
null sauf quand 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é. Cette valeur est généralement stop.codeficelle Python code source ou espace réservé décrivant le code exécuté. signatureficelle Jeton de métadonnées et d’intégrité encodé en Base64 et versionné. 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 Mappage des identificateurs d’artefact aux métadonnées et au contenu base64. Cet objet contient des propriétés spécifiques à la sortie. Ces propriétés sont des objets qui ont les propriétés suivantes : artifactName,mimeTypeetbase64Content.
Résolution des problèmes
Les sections suivantes décrivent les erreurs que vous pouvez rencontrer lorsque vous utilisez l’action Predict avec des prompts pour lesquels l’interpréteur de code est activé.
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.
Pour résoudre cette erreur, achetez plus de capacité AI Builder. En savoir plus sur la façon de bénéficier de 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.
Pour résoudre cette erreur, envoyez 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.