Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’interpréteur de code permet à un agent Microsoft Foundry d’exécuter Python code dans un environnement d’exécution en bac à sable (sandbox). Le modèle Foundry de l’agent écrit et exécute du code pour l’analyse des données, la génération de graphique et les tâches de résolution de problèmes itératives.
Conseil
Envisagez d’ajouter cet outil à l’aide d’une boîte à outils. À l’aide d’une boîte à outils, vous pouvez réutiliser l’outil entre les agents et les runtimes, ainsi que centraliser la gestion des informations d’identification, le contrôle de version et l’application des stratégies via un point de terminaison MCP géré. Consultez le guide de démarrage rapide de la boîte à outils.
Dans cet article, vous allez créer un agent qui utilise l’interpréteur de code, charger un fichier CSV pour l’analyse et télécharger un graphique généré.
Lorsque vous activez l’interpréteur de code, votre agent peut écrire et exécuter Python code de manière itérative pour résoudre les tâches mathématiques et d’analyse des données, et pour générer des graphiques.
Important
L'interpréteur de code a des frais supplémentaires au-delà des frais basés sur les jetons pour l'utilisation d'Azure OpenAI. Si votre agent appelle l’interpréteur de code simultanément dans deux conversations différentes, il crée deux sessions d’interpréteur de code. Chaque session est active par défaut pendant une heure avec un délai d’inactivité de 30 minutes.
Conditions préalables
- Environnement d’agent de base ou standard. Pour plus d’informations, consultez la configuration de l’environnement de l’agent .
- Package sdk le plus récent installé pour votre langue. Le sdk .NET est actuellement en préversion. Consultez le guide de démarrage rapide pour connaître les étapes d’installation.
- Le déploiement de modèles d’IA Azure configuré dans votre projet.
Note
L’interpréteur de code n’est pas disponible dans toutes les régions. Consultez Vérifier la disponibilité régionale et de modèle.
Support d'utilisation
Le tableau suivant présente la prise en charge du KIT de développement logiciel (SDK) et de la configuration.
| Prise en charge de Microsoft Foundry | SDK Python | Kit de développement logiciel (SDK) C# | Kit de développement logiciel (SDK) JavaScript | Kit de développement logiciel (SDK) Java | REST API | Configuration de l’agent de base | Configuration de l’agent standard |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Créer un agent avec l’interpréteur de code
Les exemples suivants montrent comment créer un agent avec l’interpréteur de code activé, charger un fichier pour analyse et télécharger la sortie générée. Chaque exemple de chargement de fichier génère un petit fichier CSV dans le répertoire de travail actuel, le charge, puis supprime le fichier temporaire local.
Conseil
Vous pouvez personnaliser le comportement de l’interpréteur de code lors de l’exécution, par exemple spécifier les fichiers à inclure ou ajuster les paramètres d’outil par requête, à l’aide d’entrées structurées.
Exemple d’utilisation de l’agent avec l’outil interpréteur de code dans Python SDK
L’exemple de Python suivant montre comment ajouter l’outil d’interpréteur de code à une boîte à outils, attacher la boîte à outils à un agent, charger un fichier CSV pour l’analyse et demander un graphique à barres en fonction des données. Sélectionnez Prompt Agents pour utiliser le SDK Azure AI Projects afin de créer un agent de prompt côté serveur, ou Hosted Agents pour utiliser le framework Agent FoundryChatClient afin de créer un agent éphémère dans le processus.
Agents déclencheurs
Cet exemple illustre un flux de travail complet : charger un fichier, créer un agent avec l’interpréteur de code activé, demander la visualisation des données et télécharger le graphique généré.
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")
Sortie attendue
L’exemple de code produit une sortie similaire à l’exemple suivant :
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
L’agent charge votre fichier CSV dans le stockage Azure, crée un environnement Python isolé, filtre les entreprises du secteur des transports, génère un graphique à barres au format PNG affichant le bénéfice d’exploitation par entreprise, et télécharge le graphique dans votre répertoire local. Les annotations de fichier dans la réponse fournissent l’ID de fichier et les informations de conteneur nécessaires pour récupérer le graphique généré.
Agents hébergés
Cet exemple crée la boîte à outils de l’interpréteur de code, puis utilise FoundryChatClient à partir de Microsoft Agent Framework et se connecte au point de terminaison MCP de la boîte à outils à l’aide FoundryToolboxde . Définissez les variables d’environnement FOUNDRY_PROJECT_ENDPOINTFOUNDRY_MODEL et connectez-vous avec 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())
Sortie attendue
L’agent génère du code Python, l’exécute dans le conteneur isolé et renvoie la réponse :
Agent: 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Pour obtenir l’exemple complet (y compris les entrées de fichier et l’extraction du code généré), consultez foundry_chat_client_with_code_interpreter.py et foundry_chat_client_code_interpreter_files.py.
Créer un graphique avec l’interpréteur de code en C#
L’exemple C# suivant montre comment ajouter l’outil Interpréteur de code à une boîte à outils, attacher la boîte à outils à un agent, charger un fichier CSV pour l’analyse et télécharger le graphique généré. Sélectionnez Prompt Agents pour utiliser le SDK Azure AI Projects afin de créer un agent de prompt côté serveur, ou Agents hébergés pour utiliser le framework Microsoft Agent afin de créer un agent éphémère dans le processus.
Agents déclencheurs
Pour une utilisation asynchrone, consultez l’exemple de code dans le Kit de développement logiciel (SDK) Azure pour .NET référentiel sur 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);
Sortie attendue
L’exemple de code produit une sortie similaire à l’exemple suivant :
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
L’agent charge votre fichier CSV dans Azure stockage, crée un environnement de Python bac à sable (sandbox), analyse les données pour filtrer les enregistrements du secteur de transport et génère un graphique à barres PNG. L’analyse d’annotation extrait l’ID de conteneur et l’ID de fichier de la réponse, qui sont utilisés pour télécharger le graphique dans votre répertoire local.
Agents hébergés
Cet exemple crée la boîte à outils interpréteur de code, puis utilise l’intégration Microsoft Agent Framework AddFoundryToolboxes pour rendre l’interpréteur de code disponible pour l’agent hébergé. Définissez les variables d’environnement AZURE_AI_PROJECT_ENDPOINT, AZURE_OPENAI_ENDPOINT et AZURE_AI_MODEL_DEPLOYMENT_NAME, puis connectez-vous avec 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();
Sortie attendue
L’agent hébergé utilise le point de terminaison MCP de la boîte à outils pour exécuter Python dans le bac à sable et renvoyer la réponse finale :
Response: One solution is x ≈ 6.36, since sin(x) + x^2 is approximately 42 at that value.
Pour obtenir une intégration .NET Agent Framework gérée, consultez Utiliser une boîte à outils avec un agent hébergé.
Exemple d’utilisation de l’agent avec l’outil interpréteur de code dans le Kit de développement logiciel (SDK) TypeScript
L’exemple TypeScript suivant montre comment ajouter l’outil d’interpréteur de code à une boîte à outils, attacher la boîte à outils à un agent, charger un fichier CSV pour l’analyse et demander un graphique à barres en fonction des données. Pour obtenir une version JavaScript, consultez l’exemple JavaScript dans le référentiel Kit de développement logiciel (SDK) Azure pour JavaScript sur 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);
});
Sortie attendue
L’exemple de code produit une sortie similaire à l’exemple suivant :
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
L’agent charge votre fichier CSV dans le stockage Azure, crée un environnement Python isolé, filtre les entreprises du secteur des transports, génère un graphique à barres au format PNG affichant le bénéfice d’exploitation par entreprise, et télécharge le graphique dans votre répertoire local. Les annotations de fichier dans la réponse fournissent l’ID de fichier et les informations de conteneur nécessaires pour récupérer le graphique généré.
Créer un graphique avec l’interpréteur de code dans Java
Pour la plupart des agents, ajoutez l’outil d’interpréteur de code via une boîte à outils et joignez la boîte à outils à votre agent en tant qu’outil MCP. Le sdk Java n'expose pas encore d'API de création de boîte à outils. Créez donc la boîte à outils à l'aide de l'une des méthodes actuellement prises en charge (Python, API REST, C#, TypeScript ou le portail Foundry). Une fois la boîte à outils créée, référencez son point de terminaison MCP à partir de votre agent Java en tant que McpTool. L’exemple suivant attache le point de terminaison MCP de la boîte à outils de l’interpréteur de code à l’agent.
Ajoutez la dépendance à votre pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.2.0</version>
</dependency>
Créer un agent et générer un graphique
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());
}
}
Sortie attendue
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.
L’agent utilise l’interpréteur de code via le point de terminaison MCP de la boîte à outils, écrit Python code à l’aide de matplotlib pour générer le graphique et exécute le code dans un environnement bac à sable (sandbox). Pour obtenir un exemple qui charge un fichier CSV et télécharge le graphique généré, sélectionnez Python ou TypeScript dans le sélecteur de langue en haut de cet article. Pour plus d’exemples, consultez les exemples du SDK Java Azure AI Agents.
Créer un graphique avec l’interpréteur de code à l’aide de l’API REST
L’exemple suivant montre comment charger un fichier CSV, créer un agent avec l’interpréteur de code, demander un graphique et télécharger le fichier généré.
Conditions préalables
Définissez ces variables d’environnement :
-
FOUNDRY_PROJECT_ENDPOINT: URL du point de terminaison de votre projet. -
AGENT_TOKEN: jeton du porteur pour Foundry.
Obtenez un jeton d’accès :
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Utiliser l’interpréteur de code dans une boîte à outils
Pour téléverser un fichier que Code Interpreter utilisera avec une boîte à outils, téléversez le fichier vers le point de terminaison Fichiers de niveau ressource (POST {account_endpoint}/openai/v1/files) avec l’en-tête x-aml-project-id. Contrairement au flux de l’agent de prompt, les fichiers téléversés via le point de terminaison Files limité au projet (/api/projects/{name}/openai/v1/files) reçoivent un owner_id que le conteneur Toolbox ne peut pas vérifier ; par conséquent, tools/call échoue avec une erreur de vérification de propriété.
Obtenez le GUID du projet à partir de Azure Resource Manager. Utilisez
properties.amlWorkspace.internalId(format UUID avec tirets), et nonproperties.internalId(sans tirets - le conteneur Toolbox le rejette) :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')Chargez le fichier au niveau du compte (ressource) avec l’en-tête
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
Le fichier id retourné est la valeur que vous fournissez comme <FILE_ID> dans la configuration de l’outil. Les fichiers sont montés dans le sandbox à l’emplacement /mnt/data/{file-id}-{original-filename}.
Important
Lorsque l’interpréteur de code est utilisé via une boîte à outils dans un agent hébergé, l’isolation utilisateur n’est pas prise en charge. Tous les utilisateurs du même projet partagent le même contexte de conteneur.
Ajouter l’interpréteur de code à une boîte à outils
Ajoutez l’interpréteur de code en créant une boîte à outils, puis joignez la boîte à outils à votre agent en tant qu’outil MCP. Pour plus d’informations, consultez Qu’est-ce qu’une boîte à outils ?
Créez une boîte à outils qui contient l’outil d’interpréteur de code :
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>"] } } ] }'La boîte à outils expose un point de terminaison compatible MCP à l’emplacement
$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1où<version>est la version retournée par l’appel précédent.Créez une connexion de projet d’outil distant qui pointe vers le point de terminaison de la boîte à outils, en utilisant un jeton Entra utilisateur afin que l’identité de l’appelant soit transmise (audience
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
Créer un agent avec la boîte à outils interpréteur de code
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"
}
]
}
}'
Générer un graphique
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."
}'
La réponse inclut container_file_citation des annotations avec les détails du fichier généré. Enregistrez les valeurs container_id et file_id de l’annotation.
Télécharger le graphique généré
curl -X GET "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/containers/<CONTAINER_ID>/files/<FILE_ID>/content" \
-H "Authorization: Bearer $AGENT_TOKEN" \
--output chart.png
Nettoyage
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/chart-agent?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Vérifier la disponibilité régionale et celle du modèle
La disponibilité des outils varie selon la région et le modèle.
Pour obtenir la dernière liste des régions et modèles pris en charge pour l’interpréteur de code, consultez les meilleures pratiques pour l’utilisation d’outils dans Microsoft Foundry Agent Service.
Types de fichiers pris en charge
| Format de fichier | Type 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 |
Dépannage
| Problème | Cause probable | Résolution |
|---|---|---|
| L’interpréteur de code ne s’exécute pas. | L'outil n'est pas activé ou le modèle ne le prend pas en charge dans votre région. | Vérifiez que l’interpréteur de code est activé sur l’agent. Vérifiez que votre déploiement de modèle prend en charge l’outil dans votre région. Consultez Vérifier la disponibilité régionale et de modèle. |
| Aucun fichier n’est généré. | L’agent a retourné une réponse texte seule sans annotation de fichier. | Vérifiez les annotations de réponse pour container_file_citation. S’il n’existe aucun fichier, l’agent n’a pas généré de fichier. Reformule la demande pour demander explicitement la génération du fichier. |
| Échec du chargement du fichier. | Type de fichier non pris en charge ou objectif incorrect. | Vérifiez que le type de fichier figure dans la liste des types de fichiers pris en charge . Charger avec purpose="assistants". |
| Le fichier généré est endommagé ou vide. | Erreur d’exécution du code ou traitement incomplet. | Vérifiez la réponse de l’agent pour les messages d’erreur. Vérifiez que les données d’entrée sont valides. Essayez d’abord une demande plus simple. |
| Délai d’expiration de session ou latence élevée. | Les sessions Interpréteur de code ont des limites de temps. | Les sessions ont un délai d’expiration actif de 1 heure et un délai d’inactivité de 30 minutes. Réduisez la complexité des opérations ou fractionnez-les en tâches plus petites. |
| Frais de facturation inattendus. | Plusieurs sessions simultanées créées. | Chaque conversation crée une session distincte. Surveillez l’utilisation de la session et consolidez les opérations le cas échéant. |
| Python package non disponible. | L’interpréteur de code a un ensemble fixe de packages. | L’interpréteur de code inclut des packages de science des données courants. Pour les packages personnalisés, utilisez l’interpréteur de code personnalisé. |
| Échec du téléchargement du fichier. | ID de conteneur ou ID de fichier incorrect. | Vérifiez que vous utilisez les balises container_id et file_id correctes à partir des annotations de réponse. |
Nettoyer les ressources
Supprimez les ressources que vous avez créées dans cet exemple lorsque vous n’en avez plus besoin pour éviter les coûts en cours :
- Supprimez la version de l’agent.
- Supprimez la conversation.
- Supprimez les fichiers chargés.
Pour obtenir des exemples de modèles de nettoyage de conversation et de fichier, consultez l’outil de recherche web et l’outil de recherche de fichiers pour les agents.
Environnement d’exécution isolé
L'interpréteur de code exécute du code Python dans un environnement isolé géré par Microsoft. Le bac à sable est conçu pour exécuter du code non approuvé et utilise des sessions dynamic (sessions d’interpréteur de code) dans Azure Container Apps. Chaque session est isolée par une limite de Hyper-V.
Comportements clés à planifier :
- Region : le bac à sable de l’interpréteur de code s’exécute dans la même région Azure que votre projet Foundry.
- Durée de vie de la session : une session Interpréteur de code est active pendant une heure maximum, avec un délai d’inactivité (voir la note importante au début de cet article).
- Isolation : chaque session s’exécute dans un environnement isolé. Si votre agent appelle l’interpréteur de code simultanément dans différentes conversations, des sessions distinctes sont créées.
- Isolation réseau et accès Internet : le bac à sable n’hérite pas de la configuration de votre sous-réseau d’agent, et les sessions dynamiques ne peuvent pas effectuer de requêtes réseau sortantes.
- Files dans le bac à sable : le runtime de Python en bac à sable a accès aux fichiers que vous attachez pour analyse. L’interpréteur de code peut également générer des fichiers, tels que des graphiques, et les retourner sous forme de sorties téléchargeables.
Si vous avez besoin de plus de contrôle sur l'environnement d'exécution protégé ou s'il vous faut un autre modèle d'isolation, consultez l’outil d’interpréteur de code personnalisé pour les agents.
Contenu connexe
- Les meilleures pratiques pour l’utilisation d’outils dans le service Foundry Agent de Microsoft.
- Outil d’interpréteur de code personnalisé pour les agents (préversion)