Ferramenta Code Interpreter para agentes Microsoft Foundry

O Interpretador de Código permite que um agente Microsoft Foundry execute código Python num ambiente de execução sandbox. O modelo Foundry do agente escreve e executa código para análise de dados, geração de gráficos e tarefas iterativas de resolução de problemas.

Dica

Considera adicionar esta ferramenta usando uma caixa de ferramentas. Ao utilizar uma caixa de ferramentas, pode reutilizar a ferramenta entre agentes e runtimes, bem como centralizar a gestão de credenciais, versionamento e aplicação de políticas através de um endpoint MCP gerido. Veja o guia de introdução rápida da caixa de ferramentas.

Neste artigo, cria um agente que utiliza o Code Interpreter, carrega um ficheiro CSV para análise e descarrega um gráfico gerado.

Quando ativas o Code Interpreter, o teu agente pode escrever e executar código em Python iterativamente para resolver tarefas de análise de dados e matemática, bem como para gerar gráficos.

Importante

Code Interpreter tem custos adicionais além das taxas baseadas em tokens para a utilização do Azure OpenAI. Se o seu agente chamar o Code Interpreter simultaneamente em duas conversas diferentes, ele cria duas sessões de Code Interpreter. Cada sessão está ativa por padrão durante uma hora, com um tempo limite de inatividade de 30 minutos.

Pré-requisitos

  • Ambiente de agente básico ou padrão. Consulte a configuração do ambiente do agente para mais detalhes.
  • Último pacote SDK instalado para a sua língua. O SDK .NET está atualmente em fase de pré-visualização. Consulte o quickstart para os passos de instalação.
  • Implementação do modelo de IA do Azure configurada no seu projeto.

Nota

O Code Interpreter não está disponível em todas as regiões. Consulte Verificar disponibilidade regional e de modelos.

Suporte de utilização

A tabela seguinte mostra o suporte para SDK e configuração.

Suporte ao Microsoft Foundry Python SDK C# SDK SDK de JavaScript SDK de Java API REST Configuração básica do agente Configuração padrão do agente
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Crie um agente com o Code Interpreter

Os exemplos seguintes demonstram como criar um agente com o Interpretador de Código ativado, carregar um ficheiro para análise e descarregar a saída gerada. Cada amostra de upload de ficheiro gera um pequeno CSV no diretório de trabalho atual, carrega-o e depois elimina o ficheiro temporário local.

Dica

Pode personalizar o comportamento do Interpretador de Código em tempo de execução, como especificar quais os ficheiros a incluir ou ajustar parâmetros da ferramenta por pedido, usando entradas estruturadas.

Exemplo de utilização de agente com ferramenta de interpretação de código no SDK Python

O exemplo seguinte de Python mostra como adicionar a ferramenta interpretadora de código a uma caixa de ferramentas, anexar a caixa de ferramentas a um agente, carregar um ficheiro CSV para análise e solicitar um gráfico de barras baseado nos dados. Selecione Prompt Agents para usar o SDK Azure AI Projects para criar um agente de prompt do lado do servidor, ou Hosted Agents para usar o Agent Framework FoundryChatClient para construir um agente efémero em processo.

Agentes de comando

Este exemplo demonstra um fluxo de trabalho completo: carregar um ficheiro, criar um agente com o Interpretador de Código ativado, solicitar visualização de dados e descarregar o gráfico gerado.

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

CSV_DATA = """name,sector,operating_profit
SkyBridge Logistics,TRANSPORTATION,185.2
Velocity Rail Freight,TRANSPORTATION,310.2
AeroJet Airlines,TRANSPORTATION,510.6
"""
csv_path = os.path.abspath("synthetic-company-financial-results.csv")
with open(csv_path, "w", encoding="utf-8", newline="") as csv_file:
    csv_file.write(CSV_DATA)

# 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 generated CSV file for the code interpreter to use
with open(csv_path, "rb") as csv_file:
    file = openai.files.create(purpose="assistants", file=csv_file)
os.remove(csv_path)

# 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")

Produção esperada

O código de exemplo produz uma saída semelhante ao seguinte exemplo:

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

O agente carrega o seu ficheiro CSV para o armazenamento Azure, cria um ambiente Python sandbox, filtra empresas do setor dos transportes, gera um gráfico de barras PNG mostrando o lucro operacional por empresa e descarrega o gráfico para o seu diretório local. As anotações do ficheiro na resposta fornecem o ID do ficheiro e a informação do contentor necessárias para recuperar o gráfico gerado.

Agentes alojados

Este exemplo cria a caixa de ferramentas do interpretador de código e, em seguida, utiliza FoundryChatClient do Microsoft Agent Framework e liga-se ao ponto final MCP da caixa de ferramentas usando FoundryToolbox. Defina as variáveis de ambiente FOUNDRY_PROJECT_ENDPOINT e FOUNDRY_MODEL, e inicie sessão com az login.

import asyncio
import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox
from azure.identity import AzureCliCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import CodeInterpreterToolboxTool, AutoCodeInterpreterToolParam

PROJECT_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>"
CSV_DATA = """name,sector,operating_profit
SkyBridge Logistics,TRANSPORTATION,185.2
Velocity Rail Freight,TRANSPORTATION,310.2
AeroJet Airlines,TRANSPORTATION,510.6
"""


async def main() -> None:
    credential = AzureCliCredential()

    csv_path = os.path.abspath("synthetic-company-financial-results.csv")
    with open(csv_path, "w", encoding="utf-8", newline="") as csv_file:
        csv_file.write(CSV_DATA)

    # 1. Add the code interpreter tool to a toolbox. Using a toolbox is the recommended way
    #    to give agents tools: you curate tools once and reuse the toolbox across agents.
    #    See /azure/foundry/agents/concepts/toolbox-overview
    project = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential)
    openai = project.get_openai_client()
    with open(csv_path, "rb") as csv_file:
        file = openai.files.create(purpose="assistants", file=csv_file)
    os.remove(csv_path)
    toolbox = project.toolboxes.create_version(
        name="code-interpreter-toolbox",
        description="Toolbox with the code interpreter tool",
        tools=[CodeInterpreterToolboxTool(container=AutoCodeInterpreterToolParam(file_ids=[file.id]))],
    )

    # 2. The toolbox exposes an MCP-compatible endpoint.
    TOOLBOX_MCP_URL = (
        f"{PROJECT_ENDPOINT}/toolboxes/{toolbox.name}"
        f"/versions/{toolbox.version}/mcp?api-version=v1"
    )

    # 3. Attach the toolbox to the hosted agent as an MCP tool.
, timeout=120.0)
    toolbox_tool = FoundryToolbox(credential, url=TOOLBOX_MCP_URL)

agent = Agent(
        client=FoundryChatClient(credential=credential),
        instructions="You are a helpful assistant that can write and execute Python code to solve problems.",
        tools=[toolbox_tool],
    )

    result = await agent.run("Use code to calculate the factorial of 100.")
    print(f"Agent: {result.text}")


if __name__ == "__main__":
    asyncio.run(main())

Produção esperada

O agente gera código Python, executa-o no contentor sandbox e retorna a resposta:

Agent: 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Para a amostra completa (incluindo entradas de ficheiros e extração do código gerado), veja foundry_chat_client_with_code_interpreter.py e foundry_chat_client_code_interpreter_files.py.


Crie um gráfico com o Interpretador de Código em C#

O exemplo seguinte de C# mostra como adicionar a ferramenta Code Interpreter a uma caixa de ferramentas, anexar a caixa de ferramentas a um agente, carregar um ficheiro CSV para análise e descarregar o gráfico gerado. Selecione Prompt Agents para usar o SDK Azure AI Projects para criar um agente de prompt do lado do servidor, ou Hosted Agents para usar o Microsoft Agent Framework para construir um agente efémero em processo.

Agentes de comando

Para uso assíncrono, veja o exemplo de código no repositório do SDK do Azure para .NET no GitHub.

using System;
using System.IO;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
using OpenAI.Files;

const string CsvData = """
name,sector,operating_profit
SkyBridge Logistics,TRANSPORTATION,185.2
Velocity Rail Freight,TRANSPORTATION,310.2
AeroJet Airlines,TRANSPORTATION,510.6
""";
string csvPath = Path.GetFullPath("synthetic-company-financial-results.csv");
File.WriteAllText(csvPath, CsvData);

// 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());

// Upload a CSV file for Code Interpreter to analyze
OpenAIFileClient fileClient = projectClient.ProjectOpenAIClient.GetOpenAIFileClient();
OpenAIFile uploadedFile = fileClient.UploadFile(
  filePath: csvPath,
    purpose: FileUploadPurpose.Assistants);
File.Delete(csvPath);
Console.WriteLine($"Uploaded file: {uploadedFile.Id}");

// Create an agent with Code Interpreter enabled
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a helpful assistant.",
    Tools = {
        ResponseTool.CreateCodeInterpreterTool(
            new CodeInterpreterToolContainer(
                CodeInterpreterToolContainerConfiguration.CreateAutomaticContainerConfiguration(
                    fileIds: [uploadedFile.Id]
                )
            )
        ),
    }
};
ProjectsAgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myChartAgent",
    options: new(agentDefinition));

// Request chart generation from the uploaded CSV data
AgentReference agentReference = new(name: agentVersion.Name, version: agentVersion.Version);
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentReference);

ResponseResult response = responseClient.CreateResponse(
    "Could you please create bar chart in TRANSPORTATION sector for the operating profit " +
    "from the uploaded csv file and provide file to me?");

Console.WriteLine(response.GetOutputText());

// Extract file information from response annotations
ContainerFileCitationMessageAnnotation containerAnnotation = null;
foreach (ResponseItem item in response.OutputItems)
{
    if (item is MessageResponseItem messageItem)
    {
        foreach (ResponseContentPart content in messageItem.Content)
        {
            foreach (ResponseMessageAnnotation annotation in content.OutputTextAnnotations)
            {
                if (annotation is ContainerFileCitationMessageAnnotation cntrAnnotation)
                {
                    containerAnnotation = cntrAnnotation;
                }
            }
        }
    }
}

// Download the generated chart if available
if (containerAnnotation is not null)
{
    ContainerClient containerClient = projectClient.ProjectOpenAIClient.GetContainerClient();
    BinaryData fileData = containerClient.DownloadContainerFile(
        containerId: containerAnnotation.ContainerId,
        fileId: containerAnnotation.FileId);
    File.WriteAllBytes("chart.png", fileData.ToArray());
    Console.WriteLine($"Chart downloaded: {Path.GetFullPath("chart.png")}");
}
else
{
    Console.WriteLine("No file generated in response");
}

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

Produção esperada

O código de exemplo produz uma saída semelhante ao seguinte exemplo:

Uploaded file: file-xxxxxxxxxxxxxxxxxxxx
Here is the bar chart showing operating profit by company in the TRANSPORTATION sector...
Chart downloaded: C:\Users\you\chart.png

O agente carrega o seu ficheiro CSV para o armazenamento Azure, cria um ambiente Python em formato sandbox, analisa os dados para filtrar registos do setor de transportes e gera um gráfico de barras PNG. A análise de anotações extrai o ID do contentor e o ID do ficheiro da resposta, que são usados para descarregar o gráfico para o seu diretório local.

Agentes alojados

Este exemplo cria a caixa de ferramentas do interpretador de código e depois utiliza a integração com o Microsoft Agent Framework AddFoundryToolboxes para disponibilizar o Interpretador de Código ao agente alojado. Defina as AZURE_AI_PROJECT_ENDPOINTvariáveis , AZURE_OPENAI_ENDPOINT, e AZURE_AI_MODEL_DEPLOYMENT_NAME de ambiente, e faça login com az login.

using System;
using System.IO;
using Azure.AI.AgentServer.Responses;
using Azure.AI.AgentServer.Responses.Models;
using Azure.AI.OpenAI;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;
using OpenAI.Files;

const string CsvData = """
name,sector,operating_profit
SkyBridge Logistics,TRANSPORTATION,185.2
Velocity Rail Freight,TRANSPORTATION,310.2
AeroJet Airlines,TRANSPORTATION,510.6
""";
const string AgentInstructions = "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.";
const string AgentName = "CoderAgent";

string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? "https://<account>.services.ai.azure.com/api/projects/<project>";
string openAiEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5-mini";

DefaultAzureCredential credential = new();

// 1. Add the code interpreter tool to a toolbox. Using a toolbox is the recommended
//    way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
OpenAIFileClient fileClient = projectClient.ProjectOpenAIClient.GetOpenAIFileClient();
string csvPath = Path.GetFullPath("synthetic-company-financial-results.csv");
File.WriteAllText(csvPath, CsvData);
OpenAIFile uploadedFile = fileClient.UploadFile(
  filePath: csvPath,
    purpose: FileUploadPurpose.Assistants);
File.Delete(csvPath);

ProjectsAgentTool codeInterpreterTool = ProjectsAgentTool.AsProjectTool(
    ResponseTool.CreateCodeInterpreterTool(
        new CodeInterpreterToolContainer(
            CodeInterpreterToolContainerConfiguration.CreateAutomaticContainerConfiguration(
                fileIds: [uploadedFile.Id]
            )
        )
    ));

ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "code-interpreter-toolbox",
        tools: [codeInterpreterTool],
        description: "Toolbox with the code interpreter tool");

// Create the hosted agent and register the toolbox integration.
AIAgent agent = projectClient.AsAIAgent(
    model: deploymentName,
    instructions: "You are a helpful assistant with access to the toolbox tools.",
    name: "hosted-toolbox-agent");

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.Services.AddFoundryToolboxes(credential, toolboxVersion.Name);

var app = builder.Build();
app.MapFoundryResponses();
app.Run();

Produção esperada

O agente alojado usa o endpoint MCP toolbox para executar Python no sandbox e devolver a resposta final:

Response: One solution is x ≈ 6.36, since sin(x) + x^2 is approximately 42 at that value.

Para uma integração mantida com o .NET Agent Framework, veja Usar uma caixa de ferramentas com um agente alojado.


Exemplo de utilização de agente com ferramenta de interpretação de código no TypeScript SDK

O exemplo seguinte de TypeScript mostra como adicionar a ferramenta interpretadora de código a uma caixa de ferramentas, anexá-la a um agente, carregar um ficheiro CSV para análise e solicitar um gráfico de barras com base nos dados. Para uma versão em JavaScript, veja o exemplo JavaScript no repositório SDK do Azure para JavaScript sobre GitHub.

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

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const CSV_DATA = `name,sector,operating_profit
SkyBridge Logistics,TRANSPORTATION,185.2
Velocity Rail Freight,TRANSPORTATION,310.2
AeroJet Airlines,TRANSPORTATION,510.6
`;

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

  // Generate and upload the CSV file
  const csvPath = "synthetic-company-financial-results.csv";
  fs.writeFileSync(csvPath, CSV_DATA);
  const fileStream = fs.createReadStream(csvPath);

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

  console.log("Creating a toolbox with the code interpreter tool...");

  // 1. Add the code interpreter tool to a toolbox. Using a toolbox is the recommended
  //    way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
  const toolbox = await project.toolboxes.createVersion(
    "code-interpreter-toolbox",
    [
      {
        type: "code_interpreter",
        container: {
          type: "auto",
          file_ids: [uploadedFile.id],
        },
      },
    ],
    { description: "Toolbox with the code interpreter tool" },
  );

  // 2. The toolbox exposes an MCP-compatible endpoint.
  const toolboxMcpUrl =
    `${PROJECT_ENDPOINT}/toolboxes/${toolbox.name}` +
    `/versions/${toolbox.version}/mcp?api-version=v1`;

  // 3. Create a remote-tool project connection that points at the toolbox endpoint.
  //    Use a user Entra token so the caller's identity is passed through
  //    (audience https://ai.azure.com). Create the connection once, for example
  //    with the Azure Developer CLI:
  //
  //    azd ai connection create code-interpreter-toolbox-conn \
  //      --kind remote-tool \
  //      --target "<toolboxMcpUrl>" \
  //      --auth-type user-entra-token \
  //      --audience https://ai.azure.com
  const toolboxConnectionName = "code-interpreter-toolbox-conn";

  // 4. Attach the toolbox to a prompt agent as an MCP tool.
  const agent = await project.agents.createVersion("MyAgent", {
    kind: "prompt",
    model: "gpt-5-mini",
    instructions: "You are a helpful assistant.",
    tools: [
      {
        type: "mcp",
        server_label: "toolbox",
        server_url: toolboxMcpUrl,
        require_approval: "never",
        project_connection_id: toolboxConnectionName,
      },
    ],
  });

  // 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_reference: { 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(
      fileId,
      { container_id: containerId },
    );
    const buffer = Buffer.from(await fileContent.arrayBuffer());

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

Produção esperada

O código de exemplo produz uma saída semelhante ao seguinte exemplo:

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

O agente carrega o seu ficheiro CSV para o armazenamento Azure, cria um ambiente Python sandbox, filtra empresas do setor dos transportes, gera um gráfico de barras PNG mostrando o lucro operacional por empresa e descarrega o gráfico para o seu diretório local. As anotações do ficheiro na resposta fornecem o ID do ficheiro e a informação do contentor necessárias para recuperar o gráfico gerado.

Crie um gráfico com o Interpretador de Código em Java

Para a maioria dos agentes, adiciona a ferramenta de interpretação de código através de uma caixa de ferramentas e liga a caixa de ferramentas ao teu agente como uma ferramenta MCP. O SDK Java ainda não expõe uma API de criação de toolbox, por isso cria a toolbox usando um dos métodos atualmente suportados (Python, REST API, C#, TypeScript ou o portal Foundry). Depois de criada a caixa de ferramentas, refira o respetivo ponto final MCP a partir do seu agente em Java como um McpTool. O exemplo seguinte associa o endpoint MCP do code-interpreter toolbox ao agente.

Adicione a dependência ao seu pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.2.0</version>
</dependency>

Cria um agente e gera um 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.AzureCreateResponseOptions;
import com.azure.ai.agents.models.McpTool;
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";
        String toolboxMcpUrl = projectEndpoint
            + "/toolboxes/code-interpreter-toolbox/versions/1/mcp?api-version=v1";
        String toolboxConnectionName = "code-interpreter-toolbox-conn";

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

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

        // The Java SDK doesn't yet expose a toolbox creation API. Create the
        // code-interpreter toolbox with Python, REST, C#, TypeScript, or the
        // Foundry portal, then attach its MCP endpoint as an MCP tool.
        McpTool toolboxTool = new McpTool("toolbox")
            .setServerUrl(toolboxMcpUrl)
            .setProjectConnectionId(toolboxConnectionName)
            .setRequireApproval("never");

        // Create agent with the code-interpreter toolbox MCP tool
        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(toolboxTool));

        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.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(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());
    }
}

Produção esperada

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.

O agente utiliza o Code Interpreter através do endpoint toolbox MCP, escreve código Python usando matplotlib para gerar o gráfico e executa o código num ambiente sandbox. Para um exemplo que carrega um ficheiro CSV e descarrega o gráfico gerado, selecione Python ou TypeScript no seletor de línguas no topo deste artigo. Para mais exemplos, consulte as amostras Azure AI Agents Java SDK.

Crie um gráfico com o Code Interpreter usando a API REST

O exemplo seguinte mostra como carregar um ficheiro CSV, criar um agente com o Code Interpreter, pedir um gráfico e descarregar o ficheiro gerado.

Pré-requisitos

Defina estas variáveis de ambiente:

  • FOUNDRY_PROJECT_ENDPOINT: URL do endpoint do seu projeto.
  • AGENT_TOKEN: Um token de autenticação para a Foundry.

Obtenha um token de acesso:

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

Use o Interpretador de Código numa caixa de ferramentas

Para carregar um ficheiro para o Code Interpreter utilizar através de uma toolbox, carregue o ficheiro no endpoint Ficheiros de nível de recurso (POST {account_endpoint}/openai/v1/files) com o cabeçalho x-aml-project-id. Ao contrário do fluxo do agente de prompts, os ficheiros carregados através do endpoint Files com âmbito ao nível do projeto (/api/projects/{name}/openai/v1/files) recebem um owner_id que o contentor da toolbox não consegue verificar, pelo que tools/call falha com um erro de verificação de titularidade.

  1. Obtenha o GUID do projeto no Azure Resource Manager. Use properties.amlWorkspace.internalId (formato UUID com traços), nãoproperties.internalId (sem traços - o contentor da toolbox rejeita):

    ARM_TOKEN=$(az account get-access-token --query accessToken -o tsv)
    PROJECT_GUID=$(curl -s -H "Authorization: Bearer $ARM_TOKEN" \
      "https://management.azure.com/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project}?api-version=2025-06-01" \
      | jq -r '.properties.amlWorkspace.internalId')
    
  2. Carregue o ficheiro ao nível da conta (recurso) com o cabeçalho x-aml-project-id:

    cat > synthetic-company-financial-results.csv <<'CSV'
    name,sector,operating_profit
    SkyBridge Logistics,TRANSPORTATION,185.2
    Velocity Rail Freight,TRANSPORTATION,310.2
    AeroJet Airlines,TRANSPORTATION,510.6
    CSV
    
    TOKEN=$(az account get-access-token --scope https://ai.azure.com/.default --query accessToken -o tsv)
    curl -X POST "https://{account}.services.ai.azure.com/openai/v1/files" \
      -H "Authorization: Bearer $TOKEN" \
      -H "x-aml-project-id: $PROJECT_GUID" \
      -F "purpose=assistants" \
      -F "file=@synthetic-company-financial-results.csv"
    rm synthetic-company-financial-results.csv
    

O ficheiro id devolvido é o valor que fornece como <FILE_ID> na configuração da ferramenta. Os ficheiros são montados no sandbox em /mnt/data/{file-id}-{original-filename}.

Importante

Quando o Interpretador de Código é usado através de uma caixa de ferramentas num agente hospedado, o isolamento do utilizador não é suportado. Todos os utilizadores do mesmo projeto partilham o mesmo contexto de contentor.

Adicionar Interpretador de Código a uma caixa de ferramentas

Adicione o Interpretador de Código criando uma caixa de ferramentas e depois anexe a caixa de ferramentas ao seu agente como uma ferramenta MCP. Para mais informações, veja O que é uma caixa de ferramentas?

  • Crie uma caixa de ferramentas que contenha a ferramenta interpretadora de código:

    curl --request POST \
      --url "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions?api-version=v1" \
      -H "Authorization: Bearer $AGENT_TOKEN" \
      -H "Content-Type: application/json" \
      --data '{
        "description": "Toolbox with the code interpreter tool",
        "tools": [
          {
            "type": "code_interpreter",
            "container": {
              "type": "auto",
              "file_ids": ["<FILE_ID>"]
            }
          }
        ]
      }'
    

    A caixa de ferramentas expõe um endpoint compatível com MCP em $FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, onde <version> é a versão devolvida pela chamada anterior.

  • Crie uma ligação de projeto da ferramenta remota que aponte para o ponto final da caixa de ferramentas, utilizando um token Entra de utilizador para que a identidade do autor da chamada seja transmitida (destinatário https://ai.azure.com).

    azd ai connection create code-interpreter-toolbox-conn \
      --kind remote-tool \
      --target "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1" \
      --auth-type user-entra-token \
      --audience https://ai.azure.com
    

Crie um agente com a caixa de ferramentas do interpretador 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": "mcp",
          "server_label": "toolbox",
          "server_url": "'$FOUNDRY_PROJECT_ENDPOINT'/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1",
          "require_approval": "never",
          "project_connection_id": "code-interpreter-toolbox-conn"
        }
      ]
    }
  }'

Gerar um 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 company for the TRANSPORTATION sector from the uploaded CSV file. Use a blue color scheme and add data labels."
  }'

A resposta inclui container_file_citation anotações com os detalhes do ficheiro gerado. Guarde os valores container_id e file_id da anotação.

Descarregue o gráfico gerado

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

Limpeza

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

Verifique a disponibilidade regional e dos modelos

A disponibilidade de ferramentas varia consoante a região e o modelo.

Para a lista atual de regiões e modelos suportados para o Code Interpreter, veja Melhores práticas para usar ferramentas no Microsoft Foundry Agent Service.

Tipos de ficheiros suportados

Formato de ficheiro tipo de MIME
.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 application/xml ou text/xml
.zip application/zip

Resolução de problemas

Problema Causa provável Resolução
O Code Interpreter não funciona. A ferramenta não está ativada ou o modelo não suporta isso na sua região. Confirme que o Interpretador de Código está ativado no agente. Verifique se a implementação do seu modelo suporta a ferramenta na sua região. Consulte Verificar disponibilidade regional e de modelos.
Não é gerado nenhum ficheiro. O agente respondeu apenas por mensagem de texto sem anotação de ficheiro. Verifique as anotações de resposta para container_file_citation. Se não existirem, o agente não gerou nenhum ficheiro. Reformule o prompt para solicitar explicitamente a geração do ficheiro.
Falha o carregamento do ficheiro. Tipo de ficheiro não suportado ou propósito errado. Confirme que o tipo de ficheiro está na lista de tipos de ficheiro suportados . Carregar com purpose="assistants".
O ficheiro gerado está corrompido ou vazio. Erro de execução de código ou processamento incompleto. Verifique a resposta do agente para mensagens de erro. Verifique se os dados de entrada são válidos. Tenta primeiro um pedido mais simples.
Tempo limite da sessão ou alta latência. As sessões do Code Interpreter têm limites de tempo. As sessões têm um tempo de pausa ativa de 1 hora e um tempo de pausa de 30 minutos. Reduzir a complexidade das operações ou dividir em tarefas mais pequenas.
Cobranças de faturamento inesperadas. Múltiplas sessões simultâneas criadas. Cada conversa cria uma sessão separada. Monitorizar a utilização das sessões e consolidar as operações sempre que possível.
Pacote Python não disponível. O Interpretador de Código tem um conjunto fixo de pacotes. O Code Interpreter inclui pacotes comuns de ciência de dados. Para pacotes personalizados, use o interpretador de código personalizado.
O download do ficheiro falha. ID de contentor ou ID de ficheiro incorreto. Verifica que estás a usar o container_id e file_id corretos das anotações de resposta.

Liberar recursos

Apague os recursos que criou neste exemplo quando já não precisar deles para evitar custos contínuos:

  • Apaga a versão do agente.
  • Apaga a conversa.
  • Apagar ficheiros carregados.

Para exemplos de padrões de conversa e limpeza de ficheiros, consulte Ferramenta de pesquisa Web e Ferramenta de pesquisa de ficheiros para agentes.

Ambiente de execução em sandbox

O Code Interpreter executa código Python num sandbox gerido pela Microsoft. O sandbox foi concebido para executar código não confiável e utiliza sessões dinâmicas dinâmicas (sessões do interpretador de código) em Azure Container Apps. Cada sessão é isolada por um limite Hyper-V.

Comportamentos-chave a planear:

  • Region: O sandbox do Interpretador de Código corre na mesma região Azure que o seu projeto Foundry.
  • Vida útil da sessão: Uma sessão com Interpretador de Código está ativa até uma hora, com um tempo de espera (ver a nota Importante no início deste artigo).
  • Isolamento: Cada sessão decorre num ambiente isolado. Se o seu agente invocar o Interpretador de Código simultaneamente em diferentes conversas, são criadas sessões separadas.
  • Isolamento de rede e acesso à internet: O sandbox não herda a configuração da sub-rede do teu agente, e as sessões dinâmicas não conseguem fazer pedidos de rede de saída.
  • Ficheiros no sandbox: O runtime de Python sandbox tem acesso aos ficheiros que anexas para análise. O Code Interpreter também pode gerar ficheiros, como gráficos, e devolvê-los como saídas descarregáveis.

Se precisares de mais controlo sobre o runtime sandbox ou de um modelo de isolamento diferente, consulta a ferramenta Custom code interpreter para agentes.