Code Interpreter-hulpprogramma voor Microsoft Foundry-agents

Met code-interpreter kan een Microsoft Foundry-agent Python code uitvoeren in een omgeving voor uitvoering in een sandbox. Het Foundry-model van de agent schrijft en voert code uit voor gegevensanalyse, grafiekgeneratie en iteratieve probleemoplossingstaken.

Tip

Overweeg dit hulpprogramma toe te voegen met behulp van een werkset. Met behulp van een werkset kunt u het hulpprogramma opnieuw gebruiken tussen agents en runtimes, evenals het centraliseren van referentiebeheer, versiebeheer en het afdwingen van beleid via een beheerd MCP-eindpunt. Zie de snelstartgids voor de toolbox.

In dit artikel maakt u een agent die code-interpreter gebruikt, uploadt u een CSV-bestand voor analyse en downloadt u een gegenereerde grafiek.

Wanneer u Code Interpreter inschakelt, kan uw agent iteratief Python code schrijven en uitvoeren om gegevensanalyse- en wiskundige taken op te lossen en grafieken te genereren.

Belangrijk

Code-interpreter heeft extra kosten naast de token-gebaseerde kosten voor het gebruik van Azure OpenAI. Als uw agent code-interpreter tegelijkertijd aanroept in twee verschillende gesprekken, worden er twee Code Interpreter-sessies gemaakt. Elke sessie is standaard één uur actief met een time-out voor inactiviteit van 30 minuten.

Voorwaarden

  • Basis- of standaardagentomgeving. Zie de configuratie van de agentomgeving voor meer informatie.
  • Het nieuwste SDK-pakket dat is geïnstalleerd voor uw taal. De .NET SDK is momenteel in een preview-fase. Zie de quickstart voor de installatiestappen.
  • Azure ai-modelimplementatie geconfigureerd in uw project.

Opmerking

Code-interpreter is niet beschikbaar in alle regio's. Zie Controleer de beschikbaarheid van regio's en modellen.

Gebruiksondersteuning

In de volgende tabel ziet u SDK- en installatieondersteuning.

ondersteuning voor Microsoft Foundry Python SDK C#SDK JavaScript SDK Java SDK REST API Basisagent instellen Standaardagent configureren
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Een agent maken met Code Interpreter

In de volgende voorbeelden ziet u hoe u een agent maakt waarvoor Code Interpreter is ingeschakeld, een bestand uploadt voor analyse en de gegenereerde uitvoer downloadt. Elk voorbeeld voor het uploaden van bestanden genereert een klein CSV-bestand in de huidige werkmap, uploadt het bestand en verwijdert vervolgens het lokale tijdelijke bestand.

Tip

U kunt het gedrag van de code-interpreter tijdens uitvoeringstijd aanpassen, zoals het specifiek maken welke bestanden u wilt opnemen of het aanpassen van toolparameters per aanvraag, met behulp van gestructureerde invoer.

Voorbeeld van het gebruik van agent met het hulpprogramma code-interpreter in Python SDK

In het volgende Python voorbeeld ziet u hoe u het code-interpreterhulpprogramma toevoegt aan een werkset, de werkset koppelt aan een agent, een CSV-bestand uploadt voor analyse en een staafdiagram aanvraagt op basis van de gegevens. Selecteer Prompt-agents om de AZURE AI Projects SDK te gebruiken om een promptagent aan de serverzijde te maken, of Hosted Agents om het Agent Framework FoundryChatClient te gebruiken om een tijdelijke, in-process agent te maken.

Agents aansturen

In dit voorbeeld ziet u een volledige werkstroom: een bestand uploaden, een agent maken waarvoor Code Interpreter is ingeschakeld, gegevensvisualisatie aanvragen en de gegenereerde grafiek downloaden.

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

Verwachte uitvoer

De voorbeeldcode produceert uitvoer die vergelijkbaar is met het volgende voorbeeld:

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

De agent uploadt uw CSV-bestand naar Azure opslag, maakt een sandbox-Python-omgeving, filtert transportsectorbedrijven, genereert een PNG-staafdiagram met de bedrijfswinst en downloadt de grafiek naar uw lokale map. De bestandsaantekeningen in het antwoord bevatten de bestands-id en containergegevens die nodig zijn om de gegenereerde grafiek op te halen.

Gehoste agents

In dit voorbeeld wordt de code-interpreter-werkset gemaakt, vervolgens gebruikt FoundryChatClient vanuit het Microsoft Agent Framework en wordt verbinding gemaakt met het MCP-eindpunt van de werkset met behulp van FoundryToolbox. Stel de FOUNDRY_PROJECT_ENDPOINT en FOUNDRY_MODEL omgevingsvariabelen in en meld u aan met 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())

Verwachte uitvoer

De agent genereert Python code, voert deze uit in de container in de sandbox en retourneert het antwoord:

Agent: 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Zie foundry_chat_client_with_code_interpreter.py en foundry_chat_client_code_interpreter_files.py voor het volledige voorbeeld (inclusief bestandsinvoer en het extraheren van de gegenereerde code).


Een grafiek maken met Code Interpreter in C#

In het volgende C#-voorbeeld ziet u hoe u het hulpprogramma Code Interpreter toevoegt aan een werkset, de werkset koppelt aan een agent, een CSV-bestand uploadt voor analyse en de gegenereerde grafiek downloadt. Selecteer Prompt Agents om de Azure AI Projects SDK te gebruiken om een promptagent aan de serverzijde te maken of Hosted Agents om het Microsoft Agent Framework te gebruiken om een tijdelijke, in-process agent te maken.

Agents aansturen

Zie het voorbeeldvoorbeeld code in de Azure SDK voor .NET opslagplaats op GitHub voor asynchroon gebruik.

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

Verwachte uitvoer

De voorbeeldcode produceert uitvoer die vergelijkbaar is met het volgende voorbeeld:

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

De agent uploadt uw CSV-bestand naar Azure opslag, maakt een sandbox-Python-omgeving, analyseert de gegevens voor het filteren van transportsectorrecords en genereert een PNG-staafdiagram. Met de annotatie wordt de container-ID en bestand-ID uit het antwoord geëxtraheerd. Deze worden gebruikt om het diagram naar uw lokale directory te downloaden.

Gehoste agents

In dit voorbeeld wordt de code-interpreter-werkset gemaakt en vervolgens de Microsoft Agent Framework-integratie AddFoundryToolboxes gebruikt om code-interpreter beschikbaar te maken voor de gehoste agent. Stel de AZURE_AI_PROJECT_ENDPOINT, AZURE_OPENAI_ENDPOINTen AZURE_AI_MODEL_DEPLOYMENT_NAME omgevingsvariabelen in en meld u aan met 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();

Verwachte uitvoer

De gehoste agent gebruikt het MCP-eindpunt van de werkset om Python uit te voeren in de sandbox en het uiteindelijke antwoord te retourneren:

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

Zie Een werkset gebruiken met een gehoste agent voor een onderhouden .NET Agent Framework-integratie.


Voorbeeld van het gebruik van agent met het hulpprogramma code-interpreter in de TypeScript SDK

In het volgende TypeScript-voorbeeld ziet u hoe u het hulpprogramma code-interpreter toevoegt aan een werkset, de werkset koppelt aan een agent, een CSV-bestand uploadt voor analyse en een staafdiagram aanvraagt op basis van de gegevens. Zie het JavaScript-voorbeeld in de Azure SDK voor JavaScript-opslagplaats op GitHub voor een JavaScript-versie.

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

Verwachte uitvoer

De voorbeeldcode produceert uitvoer die vergelijkbaar is met het volgende voorbeeld:

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

De agent uploadt uw CSV-bestand naar Azure opslag, maakt een sandbox-Python-omgeving, filtert transportsectorbedrijven, genereert een PNG-staafdiagram met de bedrijfswinst en downloadt de grafiek naar uw lokale map. De bestandsaantekeningen in het antwoord bevatten de bestands-id en containergegevens die nodig zijn om de gegenereerde grafiek op te halen.

Een grafiek maken met Code Interpreter in Java

Voor de meeste agents voegt u het hulpprogramma voor de code-interpreter toe via een werkset en koppelt u de werkset als een MCP-hulpprogramma aan uw agent. Met de Java SDK wordt nog geen API voor het maken van werksets weergegeven. Maak daarom de werkset met behulp van een van de momenteel ondersteunde methoden (Python, REST API, C#, TypeScript of de Foundry-portal). Zodra de toolbox is gemaakt, neemt u het MCP-eindpunt ervan op als een McpTool in uw Java-agent. In het volgende voorbeeld wordt het MCP-eindpunt van de code-interpreter-werkset gekoppeld aan de agent.

Voeg de afhankelijkheid toe aan uw pom.xml:

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

Een agent maken en een grafiek genereren

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

Verwachte uitvoer

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.

De agent gebruikt Code Interpreter via het MCP-eindpunt van de werkset, schrijft Python code met behulp van matplotlib om de grafiek te genereren en voert de code uit in een sandboxomgeving. Voor een voorbeeld waarmee een CSV-bestand wordt geüpload en de gegenereerde grafiek wordt gedownload, selecteert u Python of TypeScript in de taalkiezer bovenaan dit artikel. Zie de Azure AI Agents Java SDK-voorbeelden voor meer voorbeelden.

Een grafiek maken met Code Interpreter met behulp van de REST API

In het volgende voorbeeld ziet u hoe u een CSV-bestand uploadt, een agent maakt met Code Interpreter, een grafiek aanvraagt en het gegenereerde bestand downloadt.

Voorwaarden

Stel deze omgevingsvariabelen in:

  • FOUNDRY_PROJECT_ENDPOINT: de EINDPUNT-URL van uw project.
  • AGENT_TOKEN: Een bearer-token voor Foundry.

Een toegangstoken ophalen:

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

Code-interpreter gebruiken in een werkset

Als u een bestand wilt uploaden zodat Code Interpreter het via een toolbox kan gebruiken, upload het bestand dan naar het bestandseindpunt op resourceniveau (POST {account_endpoint}/openai/v1/files) met de x-aml-project-id-header. In tegenstelling tot de stroom van de promptagent krijgen bestanden die via het projectgebonden Files-eindpunt (/api/projects/{name}/openai/v1/files) zijn geüpload een owner_id die de toolbox-container niet kan verifiëren, waardoor tools/call mislukt met een fout bij eigendomsverificatie.

  1. Haal de project-GUID op uit Azure Resource Manager. Gebruik properties.amlWorkspace.internalId (gestreepte UUID-indeling), nietproperties.internalId (geen streepjes - de werksetcontainer weigert het):

    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. Upload het bestand op accountniveau (resource) met de x-aml-project-id header:

    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
    

Het geretourneerde bestand id is de waarde die u opgeeft zoals <FILE_ID> in de configuratie van het hulpprogramma. Bestanden worden gekoppeld in de sandbox op /mnt/data/{file-id}-{original-filename}.

Belangrijk

Wanneer Code Interpreter wordt gebruikt via een werkset in een gehoste agent, wordt gebruikersisolatie niet ondersteund. Alle gebruikers in hetzelfde project delen dezelfde containercontext.

Code-interpreter toevoegen aan een werkset

Voeg Code Interpreter toe door een werkset te maken en koppel de werkset vervolgens als een MCP-hulpprogramma aan uw agent. Zie Wat is een toolbox? voor meer informatie.

  • Maak een werkset die het code-interpreterhulpprogramma bevat:

    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>"]
            }
          }
        ]
      }'
    

    De werkset toont een mcP-compatibel eindpunt op $FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, waarbij <version> de versie is die wordt geretourneerd door de vorige aanroep.

  • Maak een projectverbinding voor externe hulpprogramma's die verwijst naar het toolbox-eindpunt, met behulp van een Entra-gebruikerstoken zodat de identiteit van de aanroeper wordt doorgegeven (doelgroep 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
    

Een agent maken met de code-interpreter-werkset

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"
        }
      ]
    }
  }'

Een grafiek genereren

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."
  }'

Het antwoord bevat container_file_citation aantekeningen met de gegenereerde bestandsgegevens. Sla de container_id en file_id waarden op uit de aantekening.

De gegenereerde grafiek downloaden

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

Schoonmaken

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

Beschikbaarheid van modellen en regio's controleren

Beschikbaarheid van hulpprogramma's verschilt per regio en model.

Zie Best practices voor het gebruik van hulpprogramma's in Microsoft Foundry Agent Service voor de huidige lijst met ondersteunde regio's en modellen voor Code Interpreter.

Ondersteunde bestandstypen

Bestandsindeling 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 application/xml Of text/xml
.zip application/zip

Probleemoplossing

Probleem Waarschijnlijke oorzaak Resolutie
Code-interpreter wordt niet uitgevoerd. Het hulpprogramma is niet ingeschakeld of het model biedt geen ondersteuning voor het hulpprogramma in uw regio. Controleer of de code-interpreter is ingeschakeld bij de agent. Controleer of uw modelimplementatie het hulpprogramma in uw regio ondersteunt. Zie Controleer de beschikbaarheid van regio's en modellen.
Er wordt geen bestand gegenereerd. Agent heeft een antwoord met alleen tekst geretourneerd zonder bestandsaantekening. Controleer antwoordaantekeningen voor container_file_citation. Als er geen bestaan, heeft de agent geen bestand gegenereerd. Herformuleer de prompt om expliciet uitvoer van het bestand aan te vragen.
Het uploaden van bestanden mislukt. Niet-ondersteund bestandstype of verkeerd doel. Controleer of het bestandstype zich in de lijst met ondersteunde bestandstypen bevindt. Uploaden met purpose="assistants".
Gegenereerd bestand is beschadigd of leeg. Fout bij het uitvoeren van code of onvolledige verwerking. Controleer het antwoord van de agent op foutberichten. Controleer of de invoergegevens geldig zijn. Probeer eerst een eenvoudigere aanvraag.
Sessieverval of hoge latentie. Code Interpreter-sessies hebben tijdslimieten. Sessies hebben een time-out van 1 uur en een time-out voor inactiviteit van 30 minuten. Verminder de complexiteit van bewerkingen of splitst in kleinere taken.
Onverwachte factureringskosten. Er zijn meerdere gelijktijdige sessies gemaakt. Elk gesprek maakt een afzonderlijke sessie. Bewaak het sessiegebruik en voeg waar mogelijk bewerkingen samen.
Python pakket niet beschikbaar. Code Interpreter heeft een vaste set pakketten. Code Interpreter bevat algemene data science-pakketten. Gebruik aangepaste code-interpreter voor aangepaste pakketten.
Downloaden van bestand mislukt. Container-ID of bestands-ID onjuist. Controleer of u de juiste container_id en file_id uit de antwoordnotities gebruikt.

Resources opschonen

Verwijder resources die u in dit voorbeeld hebt gemaakt wanneer u ze niet meer nodig hebt om doorlopende kosten te voorkomen:

  • Verwijder de agentversie.
  • Verwijder het gesprek.
  • Geüploade bestanden verwijderen.

Zie voor voorbeelden van gespreks- en bestandsopruimingspatronen het webzoekprogramma en het bestandszoekprogramma voor agents.

Omgeving voor uitvoering in sandbox

Code-interpreter voert Python code uit in een door Microsoft beheerde sandbox. De sandbox is ontworpen voor het uitvoeren van niet-vertrouwde code en maakt gebruik van dynamische sessies (code-interpretersessies) in Azure Container Apps. Elke sessie wordt geïsoleerd door een Hyper-V grens.

Belangrijk gedrag voor het plannen van:

  • Region: De code-interpreter-sandbox wordt uitgevoerd in dezelfde Azure regio als uw Foundry-project.
  • Levensduur van de sessie: een code-interpretersessie is maximaal één uur actief, met een time-out voor inactiviteit (zie de belangrijke opmerking aan het begin van dit artikel).
  • Isolatie: elke sessie wordt uitgevoerd in een geïsoleerde omgeving. Als uw agent code-interpreter gelijktijdig aanroept in verschillende gesprekken, worden er afzonderlijke sessies gemaakt.
  • Netwerkisolatie en internettoegang: de sandbox neemt de configuratie van uw agentsubnet niet over en dynamische sessies kunnen geen uitgaande netwerkaanvragen indienen.
  • Bestanden in de sandbox: De runtime in de sandbox Python heeft toegang tot bestanden die u voor analyse bijvoegt. Code Interpreter kan ook bestanden genereren, zoals grafieken, en deze retourneren als downloadbare uitvoer.

Als u meer controle nodig hebt over de sandbox-runtime of als u een ander isolatiemodel nodig hebt, zie het hulpprogramma voor aangepaste code-interpreter voor agents.