Compartir a través de


Intérprete de código para desarrolladores

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.");
    }
}

Más información para consultar datos usando QueryExpression

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 el requestv2 pará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 es Success.

  • predictionOutput: diccionario con las siguientes propiedades:

    Propiedad Tipo Description
    text cuerda / cadena Contenido generado principal. El contenido depende del tipo de valor retornado por el mensaje.
    mimetype cuerda / cadena Tipo MIME de texto.
    textMimeType cuerda / cadena Duplicar o confirmar el tipo MIME
    finishReason cuerda / cadena La razón por la que finalizó el razonamiento. Suele ser stop.
    code cuerda / cadena Código fuente de Python o marcador de posición que describe el código ejecutado.
    signature cuerda / cadena un token de metadatos y de integridad versionado y codificado en Base64
    logs cuerda / cadena Salida del registro de ejecución de código de Python (si se proporciona).
    codeThinking objeto Objeto de marcador de posición vacío o interno.
    files matriz de objetos Artefactos de archivos generados con las propiedades file_name, content_type y base64_content.
    structuredOutput objeto Forma canónica de la salida principal con las propiedades mimetype y text.
    artifacts objeto 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, mimeTypey base64Content

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.

Información adicional

Ejemplo de componente pcF del intérprete de código