Compartir a través de


Herramienta de intérprete de código para agentes de Microsoft Foundry

El intérprete de código permite que un agente de Microsoft Foundry ejecute Python código en un entorno de ejecución de espacio aislado. Use esta herramienta para el análisis de datos, la generación de gráficos y las tareas de resolución de problemas iterativas que se benefician de la ejecución del código.

En este artículo, creará un agente que usa el intérprete de código, cargará un archivo CSV para su análisis y descargará un gráfico generado.

Cuando está habilitado, el agente puede escribir y ejecutar Python código de forma iterativa para resolver tareas matemáticas y análisis de datos y generar gráficos.

Importante

El intérprete de código tiene cargos adicionales más allá de las tarifas basadas en tokens para el uso de OpenAI de Azure. Si el agente llama al intérprete de código simultáneamente en dos conversaciones diferentes, se crean dos sesiones de intérprete de código. Cada sesión está activa de forma predeterminada durante una hora con un tiempo de espera de inactividad de 30 minutos.

Soporte de uso

✔️ (GA) indica disponibilidad general, ✔️ (versión preliminar) indica la versión preliminar pública y un guion (-) indica que la característica no está disponible.

Soporte técnico de Microsoft Foundry SDK de Python SDK DE C# SDK de JavaScript SDK de Java REST API Instalación básica del agente Configuración del agente estándar
✔️ ✔️ (GA) ✔️ (Versión preliminar) ✔️ (GA) ✔️ (Versión preliminar) ✔️ (GA) ✔️ ✔️

Prerrequisitos

  • Entorno de agente básico o estándar. Consulte configuración del entorno del agente para obtener más información.
  • El último paquete SDK instalado para tu idioma. Los SDK de .NET y Java están actualmente en versión preliminar. Consulte el inicio rápido para conocer los pasos de instalación.
  • Despliegue del modelo de IA de Azure configurado en tu proyecto.
  • Para las operaciones de archivo: CSV u otros archivos compatibles que se van a cargar para su análisis.

Nota:

El intérprete de código no está disponible en todas las regiones. Consulte Comprobación de la disponibilidad regional y del modelo.

Creación de un agente con el intérprete de código

En los ejemplos siguientes se muestra cómo crear un agente con el intérprete de código habilitado, cargar un archivo para su análisis y descargar la salida generada.

Ejemplo de uso del agente con la herramienta de intérprete de código en Python SDK

En el ejemplo de Python siguiente se muestra cómo crear un agente con la herramienta de intérprete de código, cargar un archivo CSV para su análisis y solicitar un gráfico de barras basado en los datos. Muestra un flujo de trabajo completo: cargar un archivo, crear un agente con el intérprete de código habilitado, solicitar visualización de datos y descargar el gráfico generado.

import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, CodeInterpreterTool, AutoCodeInterpreterToolParam

# Load the CSV file to be processed
asset_file_path = os.path.abspath(
    os.path.join(os.path.dirname(__file__), "../assets/synthetic_500_quarterly_results.csv")
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Upload the CSV file for the code interpreter to use
file = openai.files.create(purpose="assistants", file=open(asset_file_path, "rb"))

# Create agent with code interpreter tool
agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-5-mini",
        instructions="You are a helpful assistant.",
        tools=[CodeInterpreterTool(container=AutoCodeInterpreterToolParam(file_ids=[file.id]))],
    ),
    description="Code interpreter agent for data analysis and visualization.",
)

# Create a conversation for the agent interaction
conversation = openai.conversations.create()

# Send request to create a chart and generate a file
response = openai.responses.create(
    conversation=conversation.id,
    input="Could you please create bar chart in TRANSPORTATION sector for the operating profit from the uploaded csv file and provide file to me?",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

# Extract file information from response annotations
file_id = ""
filename = ""
container_id = ""

# Get the last message which should contain file citations
last_message = response.output[-1]  # ResponseOutputMessage
if (
    last_message.type == "message"
    and last_message.content
    and last_message.content[-1].type == "output_text"
    and last_message.content[-1].annotations
):
    file_citation = last_message.content[-1].annotations[-1]  # AnnotationContainerFileCitation
    if file_citation.type == "container_file_citation":
        file_id = file_citation.file_id
        filename = file_citation.filename
        container_id = file_citation.container_id
        print(f"Found generated file: {filename} (ID: {file_id})")

# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)

# Download the generated file if available
if file_id and filename:
    file_content = openai.containers.files.content.retrieve(file_id=file_id, container_id=container_id)
    print(f"File ready for download: {filename}")
    file_path = os.path.join(os.path.dirname(__file__), filename)
    with open(file_path, "wb") as f:
        f.write(file_content.read())
    print(f"File downloaded successfully: {file_path}")
else:
    print("No file generated in response")

Salida prevista

El código de ejemplo genera una salida similar a la del ejemplo siguiente:

Found generated file: transportation_operating_profit_bar_chart.png (ID: file-xxxxxxxxxxxxxxxxxxxx)
File ready for download: transportation_operating_profit_bar_chart.png
File downloaded successfully: transportation_operating_profit_bar_chart.png

El agente carga el archivo CSV en Azure almacenamiento, crea un entorno de Python de espacio aislado, analiza los datos para filtrar los registros del sector de transporte, genera un gráfico de barras PNG que muestra el beneficio operativo por trimestre y descarga el gráfico en el directorio local. Las anotaciones de archivo de la respuesta proporcionan el identificador de archivo y la información del contenedor necesarias para recuperar el gráfico generado.

Creación de un gráfico con el intérprete de código en C#

En el ejemplo de C# siguiente se muestra cómo crear un agente con la herramienta de intérprete de código y usarlo para generar un gráfico de barras. El agente escribe y ejecuta código Python (mediante matplotlib) en un contenedor aislado. Para el uso asincrónico, consulte el ejemplo code en el SDK de Azure para .NET repositorio en GitHub.

using System;
using Azure.AI.Projects;
using Azure.AI.Projects.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Create an agent with Code Interpreter enabled.
PromptAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a data visualization assistant. When asked to create charts, write and run Python code using matplotlib to generate them.",
    Tools = {
        ResponseTool.CreateCodeInterpreterTool(
            new CodeInterpreterToolContainer(
                CodeInterpreterToolContainerConfiguration.CreateAutomaticContainerConfiguration(
                    fileIds: []
                )
            )
        ),
    }
};
AgentVersion agentVersion = projectClient.Agents.CreateAgentVersion(
    agentName: "myChartAgent",
    options: new(agentDefinition));

// Ask the agent to create a bar chart from inline data.
AgentReference agentReference = new(name: agentVersion.Name, version: agentVersion.Version);
ProjectResponsesClient responseClient = projectClient.OpenAI.GetProjectResponsesClientForAgent(agentReference);

ResponseResult response = responseClient.CreateResponse(
    "Create a bar chart showing quarterly revenue for 2025: Q1=$2.1M, Q2=$2.8M, Q3=$3.2M, Q4=$2.9M. " +
    "Use a blue color scheme, add data labels on each bar, and title the chart 'Quarterly Revenue 2025'. " +
    "Save the chart as a PNG file.");

Console.WriteLine(response.GetOutputText());

// Clean up
projectClient.Agents.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Salida prevista

El código de ejemplo genera una salida similar a la del ejemplo siguiente:

Here is the bar chart showing quarterly revenue for 2025. The chart displays Q1 ($2.1M), Q2 ($2.8M), Q3 ($3.2M), and Q4 ($2.9M) with a blue color scheme, data labels on each bar, and the title "Quarterly Revenue 2025".

El agente crea una sesión de intérprete de código, escribe Python código mediante matplotlib para generar el gráfico de barras, ejecuta el código en un entorno de espacio aislado y devuelve el gráfico como un archivo generado. Para ver un ejemplo que carga un archivo CSV y descarga el gráfico generado, seleccione Python o TypeScript en el selector de idioma de la parte superior de este artículo.

Ejemplo de uso del agente con la herramienta de intérprete de código en el SDK de TypeScript

En el ejemplo de TypeScript siguiente se muestra cómo crear un agente con la herramienta de intérprete de código, cargar un archivo CSV para su análisis y solicitar un gráfico de barras basado en los datos. Para obtener una versión de JavaScript, consulte el ejemplo JavaScript en el repositorio SDK de Azure para JavaScript en GitHub.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
import { fileURLToPath } from "url";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";

// Helper to resolve asset file path
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Load and upload CSV file
  const assetFilePath = path.resolve(
    __dirname,
    "../assets/synthetic_500_quarterly_results.csv",
  );
  const fileStream = fs.createReadStream(assetFilePath);

  // Upload CSV file
  const uploadedFile = await openai.files.create({
    file: fileStream,
    purpose: "assistants",
  });

  // Create agent with Code Interpreter tool
  const agent = await project.agents.createVersion("MyAgent", {
    kind: "prompt",
    model: "gpt-5-mini",
    instructions: "You are a helpful assistant.",
    tools: [
      {
        type: "code_interpreter",
        container: {
          type: "auto",
          file_ids: [uploadedFile.id],
        },
      },
    ],
  });

  // Create a conversation
  const conversation = await openai.conversations.create();

  // Request chart generation
  const response = await openai.responses.create(
    {
      conversation: conversation.id,
      input:
        "Could you please create bar chart in TRANSPORTATION sector for the operating profit from the uploaded csv file and provide file to me?",
    },
    {
      body: { agent: { name: agent.name, type: "agent_reference" } },
    },
  );

  // Extract file information from response annotations
  let fileId = "";
  let filename = "";
  let containerId = "";

  // Get the last message which should contain file citations
  const lastMessage = response.output?.[response.output.length - 1];
  if (lastMessage && lastMessage.type === "message") {
    // Get the last content item
    const textContent = lastMessage.content?.[lastMessage.content.length - 1];
    if (textContent && textContent.type === "output_text" && textContent.annotations) {
      // Get the last annotation (most recent file)
      const fileCitation = textContent.annotations[textContent.annotations.length - 1];
      if (fileCitation && fileCitation.type === "container_file_citation") {
        fileId = fileCitation.file_id;
        filename = fileCitation.filename;
        containerId = fileCitation.container_id;
        console.log(`Found generated file: ${filename} (ID: ${fileId})`);
      }
    }
  }

  // Download the generated file if available
  if (fileId && filename) {
    const safeFilename = path.basename(filename);
    const fileContent = await openai.containers.files.content.retrieve({
      file_id: fileId,
      container_id: containerId,
    });

    // Read the readable stream into a buffer
    const chunks: Buffer[] = [];
    for await (const chunk of fileContent.body) {
      chunks.push(Buffer.from(chunk));
    }
    const buffer = Buffer.concat(chunks);

    fs.writeFileSync(safeFilename, buffer);
    console.log(`File ${safeFilename} downloaded successfully.`);
    console.log(`File ready for download: ${safeFilename}`);
  } else {
    console.log("No file generated in response");
  }

  // Clean up resources
  await project.agents.deleteVersion(agent.name, agent.version);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Salida prevista

El código de ejemplo genera una salida similar a la del ejemplo siguiente:

Found generated file: transportation_operating_profit_bar_chart.png (ID: file-xxxxxxxxxxxxxxxxxxxx)
File transportation_operating_profit_bar_chart.png downloaded successfully.
File ready for download: transportation_operating_profit_bar_chart.png

El agente carga el archivo CSV en Azure almacenamiento, crea un entorno de Python de espacio aislado, analiza los datos para filtrar los registros del sector de transporte, genera un gráfico de barras PNG que muestra el beneficio operativo por trimestre y descarga el gráfico en el directorio local. Las anotaciones de archivo de la respuesta proporcionan el identificador de archivo y la información del contenedor necesarias para recuperar el gráfico generado.

Creación de un gráfico con el intérprete de código en Java

Agregue la dependencia a :

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.0.0-beta.1</version>
</dependency>

Creación de un agente y generación de un gráfico

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AgentVersionDetails;
import com.azure.ai.agents.models.CodeInterpreterTool;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Collections;

public class CodeInterpreterChartExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create code interpreter tool
        CodeInterpreterTool codeInterpreter = new CodeInterpreterTool();

        // Create agent with code interpreter for data visualization
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5-mini")
            .setInstructions("You are a data visualization assistant. When asked to create charts, "
                + "write and run Python code using matplotlib to generate them.")
            .setTools(Collections.singletonList(codeInterpreter));

        AgentVersionDetails agent = agentsClient.createAgentVersion("chart-agent", agentDefinition);

        // Request a bar chart with inline data
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createWithAgent(
            agentReference,
            ResponseCreateParams.builder()
                .input("Create a bar chart showing quarterly revenue for 2025: "
                    + "Q1=$2.1M, Q2=$2.8M, Q3=$3.2M, Q4=$2.9M. "
                    + "Use a blue color scheme, add data labels on each bar, "
                    + "and title the chart 'Quarterly Revenue 2025'. "
                    + "Save the chart as a PNG file."));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Salida prevista

Response: Here is the bar chart showing quarterly revenue for 2025 with Q1 ($2.1M), Q2 ($2.8M), Q3 ($3.2M), and Q4 ($2.9M) displayed in blue with data labels.

El agente crea una sesión de intérprete de código, escribe Python código mediante matplotlib para generar el gráfico y ejecuta el código en un entorno de espacio aislado. Para ver un ejemplo que carga un archivo CSV y descarga el gráfico generado, seleccione Python o TypeScript en el selector de idioma de la parte superior de este artículo. Para obtener más ejemplos, consulte los ejemplos del SDK de Azure AI Agents Java.

Creación de un gráfico con el intérprete de código mediante la API REST

En el ejemplo siguiente se muestra cómo cargar un archivo CSV, crear un agente con el intérprete de código, solicitar un gráfico y descargar el archivo generado.

Prerrequisitos

Establezca estas variables de entorno:

  • : dirección URL del punto de conexión del proyecto.
  • : un token de portador para Foundry.

Obtener un token de acceso:

export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)

1. Cargar un archivo CSV

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/files" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -F "purpose=assistants" \
  -F "file=@quarterly_results.csv"

Guarde el valor de [variable/elemento] de la respuesta (por ejemplo, [valor]).

2. Creación de un agente con intérprete de código

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "name": "chart-agent",
    "definition": {
      "kind": "prompt",
      "model": "<MODEL_DEPLOYMENT>",
      "instructions": "You are a data visualization assistant. When asked to create charts, write and run Python code using matplotlib to generate them.",
      "tools": [
        {
          "type": "code_interpreter",
          "container": {
            "type": "auto",
            "file_ids": ["<FILE_ID>"]
          }
        }
      ]
    }
  }'

3. Generar un gráfico

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "agent_reference": {"type": "agent_reference", "name": "chart-agent"},
    "input": "Create a bar chart of operating profit by quarter from the uploaded CSV file. Use a blue color scheme and add data labels."
  }'

La respuesta incluye anotaciones con los detalles del archivo generado. Guarde los valores y de la anotación.

4. Descargar el gráfico generado

curl -X GET "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/containers/<CONTAINER_ID>/files/<FILE_ID>/content" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  --output chart.png

5. Limpiar

curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/chart-agent?api-version=v1" \
  -H "Authorization: Bearer $AGENT_TOKEN"

Comprobación de la disponibilidad regional y del modelo

La disponibilidad de las herramientas varía según la región y el modelo.

Para obtener la lista actual de regiones y modelos admitidos para el intérprete de código, consulte Procedimientos recomendados para usar herramientas en el servicio Microsoft Foundry Agent.

Tipos de archivo compatibles

Formato de archivo MIME type
.c text/x-c
.cpp text/x-c++
.csv application/csv
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.html text/html
.java text/x-java
.json application/json
.md text/markdown
.pdf application/pdf
.php text/x-php
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.py text/x-python
.py text/x-script.python
.rb text/x-ruby
.tex text/x-tex
.txt text/plain
.css text/css
.jpeg image/jpeg
.jpg image/jpeg
.js text/javascript
.gif image/gif
.png image/png
.tar application/x-tar
.ts application/typescript
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xml o
.zip application/zip

Solución de problemas

Cuestión Causa probable Resolución
El intérprete de código no funciona. La herramienta no está habilitada o el modelo no lo admite en su región. Confirme que el intérprete de código está habilitado en el agente. Compruebe que la implementación del modelo admite la herramienta en su región. Consulte Comprobación de la disponibilidad regional y del modelo.
No se genera ningún archivo. El agente devolvió la respuesta en formato de solo texto sin anotación de archivo. Compruebe las anotaciones de respuesta para . Si no existen ningunos, el agente no ha generado un archivo. Reformule la solicitud para solicitar explícitamente la generación de un archivo de salida.
Se produce un error en la carga de archivos. Tipo de archivo no admitido o propósito incorrecto. Confirme que el tipo de archivo está en la lista de tipos de archivo admitidos . Cargue con .
El archivo generado está dañado o está vacío. Error de ejecución de código o procesamiento incompleto. Compruebe la respuesta del agente para ver los mensajes de error. Compruebe que los datos de entrada son válidos. Pruebe primero una solicitud más sencilla.
Tiempo de espera de sesión o latencia alta. Las sesiones del intérprete de código tienen límites de tiempo. Las sesiones tienen un tiempo de espera activo de 1 hora y un tiempo de espera de inactividad de 30 minutos. Reduzca la complejidad de las operaciones o divida en tareas más pequeñas.
Cargos de facturación inesperados. Se crearon varias sesiones simultáneas. Cada conversación crea una sesión independiente. Supervise el uso de la sesión y consolide las operaciones siempre que sea posible.
Python paquete no disponible. El intérprete de código tiene un conjunto fijo de paquetes. El intérprete de código incluye paquetes comunes de ciencia de datos. En el caso de los paquetes personalizados, use el intérprete de código personalizado.
Se produce un error en la descarga de archivos. El identificador de contenedor o el identificador de archivo son incorrectos. Compruebe que está usando los valores correctos y de las anotaciones de respuesta.

Limpieza de recursos

Elimine los recursos que creó en este ejemplo cuando ya no los necesite para evitar costos continuos:

  • Elimine la versión del agente.
  • Elimine la conversación.
  • Eliminar archivos cargados.

Para obtener ejemplos de patrones de limpieza de archivos y conversaciones, consulte Herramienta de búsqueda web (versión preliminar) y Herramienta de búsqueda de archivos para agentes.

  • Procedimientos recomendados para usar herramientas en el servicio Microsoft Foundry Agent
  • Herramienta de intérprete de código personalizado para agentes (versión preliminar)