Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Como se describe en Uso del intérprete de código para generar y ejecutar código de Python, el intérprete de código proporciona una manera de que los agentes ejecuten código python para el análisis de datos, Word, Excel, PowerPoint y procesamiento de PDF y visualizaciones. Consulte este artículo para comprender lo siguiente:
- Requisitos de licencias y regiones admitidas
- Funcionalidades generales del intérprete de código
- Cómo habilitar el intérprete de código para una solicitud
- Uso de las capacidades del intérprete de código con una indicación
En este artículo se describe cómo los desarrolladores pueden usar el mensaje de Dataverse Predict para pasar parámetros a indicaciones con el intérprete de código activado y procesar las respuestas.
Nota:
Un escenario habitual para los avisos habilitados para intérpretes de código es generar experiencias de interfaz de usuario para aplicaciones basadas en modelo mediante componentes de Power Apps (PCF). Consulte el ejemplo de componente PCF del intérprete de código para obtener un ejemplo.
Habilitación del intérprete de código para el entorno
El intérprete de código debe estar habilitado para cada entorno antes de poder usarlo. El valor predeterminado es Desactivado. Aprenda a habilitar el intérprete de código mediante el Centro de administración de Power Platform.
Los desarrolladores pueden usar las API de configuración de administración de entornos de Power Platform para leer o establecer la CopilotStudio_CodeInterpreter propiedad booleana para habilitar el intérprete de código para un entorno.
Indicaciones habilitadas para el intérprete de código
Cada mensaje creado con Microsoft Copilot Studio o AI Builder crea un nuevo registro en la tabla Modelo de IA de Dataverse (msdyn_AIModel). Necesita el identificador de la fila cuando invoca el mensaje Predict.
No puedes crear un indicador creando una nueva fila en msdyn_AIModel. Las solicitudes se crean y actualizan mediante el mensaje AIModelPublish. Este mensaje público es solo para uso interno. Debe usar la interfaz de usuario para crear avisos con el intérprete de código activado. También debe asegurarse de que cada instrucción esté habilitada para el intérprete de código. La habilitación de un mensaje es ligeramente diferente en función de si se edita el mensaje en Power Apps o Copilot Studio. Consulte estas instrucciones:
Puede consultar la msdyn_AIModel tabla mediante el valor de columna msdyn_Name para identificar los mensajes habilitados por el intérprete de código por nombre. No msdyn_AIModel tiene una propiedad que se pueda usar para filtrar solo las indicaciones compatibles con el intérprete de código.
Recuperación de datos del modelo de IA
Use consultas como las siguientes para recuperar datos de la msdyn_AIModel tabla con el nombre del modelo como filtro.
/// <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.");
}
}
Predicción de mensajes
El Predict mensaje está disponible tanto en el SDK de Dataverse para .NET como en la API web.
Envío de la solicitud
Independientemente de cómo envíe la solicitud, el Predict mensaje requiere tres parámetros:
- El id. del registro de
msdyn_AIModel. La forma de establecer este valor depende de si usa el SDK para .NET o la API web. - Los datos que contienen los parámetros que el mensaje está configurado para aceptar. Esto se pasa como un parámetro denominado
requestv2. Más información sobre elrequestv2parámetro - El parámetro de
version. El valor siempre es"2.0".
Parámetro requestv2
Este parámetro se configura como un tipo abierto. Más información sobre cómo usar tipos abiertos en general
Un tipo abierto es un diccionario que contiene claves y valores. Los valores también pueden ser diccionarios, por lo que es posible enviar datos complejos jerárquicos mediante un parámetro de tipo abierto.
Con el SDK para .NET, use la clase Entity y establezca la colección Attributes con los valores . La diferencia clave en este escenario es que la Entity instancia no tiene un valor LogicalName establecido, por lo que no hace referencia a una tabla específica de Dataverse.
El siguiente PredictActionExample método de ejemplo usa la clase OrganizationRequest para usar el Predict mensaje tal como se describe en Uso de mensajes con el SDK para .NET. Como alternativa, puede generar un par de clases de tipo PredictRequest y PredictResponse.
Más información acerca de generar clases en tiempo de compilación para el SDK para .NET
En este ejemplo también se muestra cómo establecer el Target parámetro con una EntityReference que hace referencia al msdyn_AIModel registro mediante el identificador.
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);
}
Procesamiento de la respuesta
El tipo complejo PredictResponse contiene la respuesta del mensaje Predict en la API web. El SDK para .NET tiene propiedades de respuesta similares. Consulte el ejemplo anterior de respuesta de la API web para obtener más información.
| Propiedad | Tipo | Description |
|---|---|---|
overrideHttpStatusCode |
String | En caso de que no se complete la predicción, 202 indica que es necesario realizar un sondeo; de lo contrario, es null. |
overrideLocation |
String | Null excepto cuando overrideHttpStatusCode no es NULL. Ubicación del sondeo. Se envió una solicitud GET a esta ubicación para sondear el resultado. |
overrideRetryAfter |
String | Null excepto cuando overrideHttpStatusCode no es NULL. Sugerencia sobre cuándo intentar sondear. |
response |
String | Esta propiedad está obsoleta debido a la introducción de la propiedad responsev2 y siempre debe ser nula. |
responsev2 |
Entidad/expando | Consulte PredictResponse responsev2 properties (Propiedades de PredictResponse responsev2). |
Propiedades de PredictResponse responsev2
La responsev2 propiedad tiene dos propiedades:
operationStatus: valor de cadena que muestra si la operación se realizó correctamente. El valor esperado esSuccess.predictionOutput: diccionario con las siguientes propiedades:Propiedad Tipo Description textcuerda / cadena Contenido generado principal. El contenido depende del tipo de valor retornado por el mensaje. mimetypecuerda / cadena Tipo MIME de texto. textMimeTypecuerda / cadena Duplicar o confirmar el tipo MIME finishReasoncuerda / cadena La razón por la que finalizó el razonamiento. Suele ser stop.codecuerda / cadena Código fuente de Python o marcador de posición que describe el código ejecutado. signaturecuerda / cadena un token de metadatos y de integridad versionado y codificado en Base64 logscuerda / cadena Salida del registro de ejecución de código de Python (si se proporciona). codeThinkingobjeto Objeto de marcador de posición vacío o interno. filesmatriz de objetos Artefactos de archivos generados con las propiedades file_name,content_typeybase64_content.structuredOutputobjeto Forma canónica de la salida principal con las propiedades mimetypeytext.artifactsobjeto Mapa de identificadores de artefactos a metadatos y contenido en base64. Este objeto contiene propiedades específicas de la salida y estas propiedades son objetos que tienen las siguientes propiedades: artifactName,mimeTypeybase64Content
Solución de problemas
A continuación se muestran algunos errores que pueden producirse al usar la Predict acción con avisos habilitados para el intérprete de código.
Capacidad insuficiente
Cuando no tenga ninguna capacidad restante de AI Builder, obtendrá este 403 ForbiddenEntitlementNotAvailable error:
{
"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 control PCF que encuentra este error muestra este mensaje: Acceso denegado. No tiene permiso para usar este modelo.
La resolución de este error es comprar más capacidad de AI Builder. Más información sobre cómo obtener derechos a créditos de AI Builder
Se alcanzó el número máximo de llamadas concurrentes
Cuando envíe demasiadas solicitudes simultáneamente por entorno o inquilino, obtendrá este 500 Internal Server ErrorMaxConcurrentPlexCallsReachedException error:
{
"error": {
"code": "0x80048d0a",
"message": "{\"operationStatus\":\"Error\",\"error\":{\"type\":\"Error\",\"code\":\"Unknown\",\"message\":\"Unhandled exception: Microsoft.PowerAI.MiddleEarth.HttpService.CodeInterpreter.Exceptions.MaxConcurrentPlexCallsReachedException\"},\"predictionId\":null}"
}
}
Un control PCF que encuentra este error muestra este mensaje: Error del servidor. Inténtelo de nuevo más tarde o póngase en contacto con el administrador.
La resolución de este error es enviar menos solicitudes. Espere un breve tiempo e inténtelo de nuevo. No hay ningún RetryAfter encabezado de respuesta para recomendar cuánto tiempo debe esperar.