Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kodtolkare gör det möjligt för en Microsoft Foundry-agent att köra Python kod i en miljö för körning i begränsat läge. Agentens Foundry-modell skriver och kör kod för dataanalys, diagramgenerering och iterativa problemlösningsuppgifter.
Tips
Överväg att lägga till det här verktyget med hjälp av en verktygslåda. Genom att använda en verktygslåda kan du återanvända verktyget mellan agenter och körningsmiljöer samt centralisera hantering av autentiseringsuppgifter, versionshantering och tillämpning av principer via en hanterad MCP-slutpunkt. Se snabbstarten för verktygslådan.
I den här artikeln skapar du en agent som använder kodtolkare, laddar upp en CSV-fil för analys och laddar ned ett genererat diagram.
När du aktiverar kodtolkare kan agenten skriva och köra Python kod iterativt för att lösa dataanalyser och matematiska uppgifter och generera diagram.
Viktigt
Kodtolken har yrena avgifter utöver de tokenbaserade avgifterna för Azure OpenAI-användning. Om agenten anropar kodtolkaren samtidigt i två olika konversationer skapar den två kodtolkarsessioner. Varje session är aktiv som standard i en timme med en tidsgräns på 30 minuter.
Förutsättningar
- Grundläggande agentmiljö eller standardagentmiljö. Mer information finns i konfigurationen av agentmiljön .
- Senaste SDK-paketet installerat för ditt språk. .NET SDK är för närvarande i förhandsversion. Se snabbstarten för installationssteg.
- Azure AI-modellimplementering som är konfigurerad för ditt projekt.
Observera
Kodtolk är inte tillgänglig i alla regioner. Se Kontrollera regional tillgänglighet och modelltillgänglighet.
Användningsstöd
I följande tabell visas stöd för SDK och installation.
| stöd för Microsoft Foundry | Python SDK | C#-SDK | SDK för JavaScript | Java SDK | REST API | Grundläggande agentkonfiguration | Standardagentkonfiguration |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Skapa en agent med kodtolkare
Följande exempel visar hur du skapar en agent med kodtolkaren aktiverad, laddar upp en fil för analys och laddar ned de genererade utdata. Varje filuppladdningsexempel genererar en liten CSV i den aktuella arbetskatalogen, laddar upp den och tar sedan bort den lokala temporära filen.
Tips
Du kan anpassa kodtolkningsbeteendet vid körning, till exempel ange vilka filer som ska inkluderas eller justera verktygsparametrar per begäran med hjälp av strukturerade indata.
Exempel på att använda agent med kodtolkverktyg i Python SDK
Följande Python exempel visar hur du lägger till kodtolkarverktyget i en verktygslåda, kopplar verktygslådan till en agent, laddar upp en CSV-fil för analys och begär ett stapeldiagram baserat på data. Välj Prompt Agents för att använda Azure AI Projects SDK för att skapa en agent på serversidan, eller Hosted Agents för att använda Agent Framework FoundryChatClient för att skapa en tillfällig, processbaserad agent.
Aktivera agenter
Det här exemplet visar ett fullständigt arbetsflöde: ladda upp en fil, skapa en agent med kodtolkaren aktiverad, begära datavisualisering och ladda ned det genererade diagrammet.
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")
Förväntade utdata
Exempelkoden genererar utdata som liknar följande exempel:
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
Agenten laddar upp csv-filen till Azure lagring, skapar en sandbox-miljö Python miljö, filtrerar transportsektorföretag, genererar ett PNG-stapeldiagram som visar företagets rörelseresultat och laddar ned diagrammet till din lokala katalog. Filanteckningarna i svaret anger det fil-ID och den containerinformation som behövs för att hämta det genererade diagrammet.
Hostade agenter
Det här exemplet skapar verktygslådan för kodtolkare, använder FoundryChatClient sedan från Microsoft Agent Framework och ansluter till mcp-slutpunkten för verktygslådan med hjälp av FoundryToolbox. Ange miljövariablerna FOUNDRY_PROJECT_ENDPOINT och FOUNDRY_MODEL, och logga in med 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())
Förväntade utdata
Agenten genererar Python kod, kör den i den begränsade containern och returnerar svaret:
Agent: 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
För hela exemplet (inklusive filinmatningar och hur den genererade koden extraheras), se foundry_chat_client_with_code_interpreter.py och foundry_chat_client_code_interpreter_files.py.
Skapa ett diagram med kodtolkare i C#
Följande C#-exempel visar hur du lägger till kodtolkarverktyget i en verktygslåda, kopplar verktygslådan till en agent, laddar upp en CSV-fil för analys och laddar ned det genererade diagrammet. Välj Prompt Agents om du vill använda Azure AI Projects SDK för att skapa en agent på serversidan eller Hosted Agents för att använda Microsoft Agent Framework för att skapa en tillfällig agent i processen.
Aktivera agenter
För asynkron användning, se kodexemplet i Azure SDKs för .NET-repository på 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);
Förväntade utdata
Exempelkoden genererar utdata som liknar följande exempel:
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
Agenten laddar upp din CSV-fil till Azure Storage, skapar en sandboxad Python-miljö, analyserar data för att filtrera poster inom transportsektorn och genererar ett PNG-stapeldiagram. Annoteringens parsning extraherar container-ID och fil-ID från svaret, vilket används för att ladda ned diagrammet till din lokala mapp.
Hostade agenter
Det här exemplet skapar verktygslådan för kodtolkare och använder sedan Microsoft Agent Framework-integrering AddFoundryToolboxes för att göra kodtolkaren tillgänglig för den värdbaserade agenten.
AZURE_AI_PROJECT_ENDPOINTAnge miljövariablerna , AZURE_OPENAI_ENDPOINToch AZURE_AI_MODEL_DEPLOYMENT_NAME och logga in med 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();
Förväntade utdata
Den värdbaserade agenten använder mcp-slutpunkten för verktygslådan för att köra Python i sandbox-miljön och returnera det slutliga svaret:
Response: One solution is x ≈ 6.36, since sin(x) + x^2 is approximately 42 at that value.
En underhållen .NET Agent Framework-integrering finns i Använda en verktygslåda med en värdbaserad agent.
Exempel på att använda agent med kodtolkverktyget i TypeScript SDK
Följande TypeScript-exempel visar hur du lägger till kodtolkarverktyget i en verktygslåda, kopplar verktygslådan till en agent, laddar upp en CSV-fil för analys och begär ett stapeldiagram baserat på data. En JavaScript-version finns i exemplet JavaScript i Azure SDKs för JavaScript-lagringsplatsen på 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);
});
Förväntade utdata
Exempelkoden genererar utdata som liknar följande exempel:
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
Agenten laddar upp csv-filen till Azure lagring, skapar en sandbox-miljö Python miljö, filtrerar transportsektorföretag, genererar ett PNG-stapeldiagram som visar företagets rörelseresultat och laddar ned diagrammet till din lokala katalog. Filanteckningarna i svaret anger det fil-ID och den containerinformation som behövs för att hämta det genererade diagrammet.
Skapa ett diagram med kodtolkare i Java
För de flesta agenter lägger du till kodtolkarverktyget via en verktygslåda och kopplar verktygslådan till din agent som ett MCP-verktyg. Java SDK exponerar ännu inte ett API för att skapa verktygslådan, så skapa verktygslådan med någon av de metoder som stöds för närvarande (Python, REST API, C#, TypeScript eller Foundry-portalen). När verktygslådan har skapats refererar du till dess MCP-slutpunkt från din Java-agent som en McpTool. Följande exempel ansluter MCP-slutpunkten för verktygslådan för kodtolkaren till agenten.
Lägg till beroendet till din pom.xml.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.2.0</version>
</dependency>
Skapa en agent och generera ett diagram
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());
}
}
Förväntade utdata
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.
Agenten använder kodtolkare via verktygslådan MCP-slutpunkt, skriver Python kod med hjälp av matplotlib för att generera diagrammet och kör koden i en sandbox-miljö. Om du vill ha ett exempel som laddar upp en CSV-fil och laddar ned det genererade diagrammet väljer du Python eller TypeScript från språkväljaren överst i den här artikeln. Fler exempel finns i Azure AI-agenter Java SDK-exempel.
Skapa ett diagram med kodtolkaren med hjälp av REST-API:et
I följande exempel visas hur du laddar upp en CSV-fil, skapar en agent med kodtolkare, begär ett diagram och laddar ned den genererade filen.
Förutsättningar
Ange följande miljövariabler:
-
FOUNDRY_PROJECT_ENDPOINT: Projektets slutpunkts-URL. -
AGENT_TOKEN: En bärare-token för Foundry.
Hämta en åtkomsttoken:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Använda kodtolkare i en verktygslåda
Om du vill ladda upp en fil för Code Interpreter för användning via en verktygslåda, laddar du upp filen på Files-slutpunkten på resursnivå (POST {account_endpoint}/openai/v1/files) med headern x-aml-project-id. Till skillnad från agentflödet för promptar får filer som laddas upp via den projektavgränsade Files-slutpunkten (/api/projects/{name}/openai/v1/files) ett owner_id som verktygslådecontainern inte kan verifiera, så tools/call misslyckas med ett fel vid verifiering av ägarskap.
Hämta projektets GUID från Azure Resource Manager. Använd
properties.amlWorkspace.internalId(streckat UUID-format), inteproperties.internalId(inga bindestreck – verktygslådans container avvisar det):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')Ladda upp filen på kontonivå (resurs) med
x-aml-project-idrubriken: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
Den returnerade filen id är det värde som du anger som <FILE_ID> i verktygskonfigurationen. Filer monteras i sandbox-miljön på /mnt/data/{file-id}-{original-filename}.
Viktigt
När kodtolkare används via en verktygslåda i en värdbaserad agent stöds inte användarisolering. Alla användare i samma projekt delar samma containerkontext.
Lägga till kodtolkare i en verktygslåda
Lägg till kodtolkare genom att skapa en verktygslåda och koppla sedan verktygslådan till din agent som ett MCP-verktyg. Mer information finns i Vad är en verktygslåda?
Skapa en verktygslåda som innehåller kodtolkarverktyget:
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>"] } } ] }'Verktygslådan exponerar en MCP-kompatibel ändpunkt på
$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, där<version>är den version som returnerades av föregående anrop.Skapa en projektanslutning för fjärrverktyg som pekar på Toolbox-slutpunkten, med hjälp av en Entra-token för användare så att anroparens identitet vidarebefordras (målgrupp
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
Skapa en agent med verktygslådan för kodtolkare
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"
}
]
}
}'
Generera ett diagram
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."
}'
Svaret innehåller container_file_citation anteckningar med den genererade filinformationen. Spara container_id och file_id värdena från anteckningen.
Ladda ned det genererade diagrammet
curl -X GET "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/containers/<CONTAINER_ID>/files/<FILE_ID>/content" \
-H "Authorization: Bearer $AGENT_TOKEN" \
--output chart.png
Städa upp
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/chart-agent?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Kontrollera regional tillgänglighet och modelltillgänglighet
Verktygets tillgänglighet varierar beroende på region och modell.
Den aktuella listan över regioner och modeller som stöds för kodtolkare finns i Best practices for using tools in Microsoft Foundry Agent Service.
Filtyper som stöds
| Filformat | MIME-typ |
|---|---|
.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 Eller text/xml |
.zip |
application/zip |
Felsökning
| Frågan | Sannolik orsak | Upplösning |
|---|---|---|
| Kodtolkaren körs inte. | Verktyget är inte aktiverat eller så stöder inte modellen det i din region. | Bekräfta att kodtolkaren är aktiverad på agenten. Kontrollera att modelldistributionen stöder verktyget i din region. Se Kontrollera regional tillgänglighet och modelltillgänglighet. |
| Ingen fil genereras. | Agenten returnerade textsvar utan filanteckning. | Kontrollera svarsanteckningar för container_file_citation. Om ingen finns, genererade agenten inte en fil. Omformulera prompten för att uttryckligen begära filutmatning. |
| Filuppladdningen misslyckas. | Filtyp som inte stöds eller fel syfte. | Bekräfta att filtypen finns i listan med filtyper som stöds . Ladda upp med purpose="assistants". |
| Den genererade filen är skadad eller tom. | Kodkörningsfel eller ofullständig bearbetning. | Kontrollera agentens svar efter felmeddelanden. Kontrollera att indata är giltiga. Prova en enklare begäran först. |
| Tidsgräns för sessioner eller långa svarstider. | Kodtolkarsessioner har tidsgränser. | Sessioner har en aktiv tidsgräns på 1 timme och en inaktiv tidsgräns på 30 minuter. Minska komplexiteten i åtgärder eller dela upp i mindre uppgifter. |
| Oväntade faktureringsavgifter. | Flera samtidiga sessioner har skapats. | Varje konversation skapar en separat session. Övervaka sessionsanvändning och konsolidera åtgärder där det är möjligt. |
| Python paketet är inte tillgängligt. | Kodtolkaren har en fast uppsättning paket. | Kodtolkaren innehåller vanliga datavetenskapspaket. Använd anpassad kodtolkare för anpassade paket. |
| Filhämtningen misslyckas. | Container-ID eller fil-ID är felaktigt. | Kontrollera att du använder rätt container_id och file_id från svarsanteckningarna. |
Rensa resurser
Ta bort resurser som du skapade i det här exemplet när du inte längre behöver dem för att undvika löpande kostnader:
- Ta bort agentversionen.
- Ta bort konversationen.
- Ta bort uppladdade filer.
Exempel på konversations- och filrensningsmönster finns i Webbsökningsverktyg och Filsökningsverktyg för agenter.
Körningsmiljö i begränsat läge
Kodtolkaren kör Python kod i en Microsoft hanterad sandbox-miljö. Sandbox-miljön är utformad för att köra obetrodd kod och använder dynamiska sessioner (kodtolksessioner) i Azure Container Apps. Varje session isoleras av en Hyper-V gräns.
Viktiga beteenden att planera för:
- Region: Sandbox-miljön för kodtolkaren körs i samma Azure region som foundry-projektet.
- Sessionslivslängd: En kodtolksession är aktiv i upp till en timme med en tidsgräns för inaktivitet (se viktig anteckning i början av den här artikeln).
- Isolering: Varje session körs i en isolerad miljö. Om agenten anropar kodtolkaren samtidigt i olika konversationer skapas separata sessioner.
- Nätverksisolering och Internetåtkomst: Sandbox-miljön ärver inte konfigurationen av agentundernätet och dynamiska sessioner kan inte göra utgående nätverksbegäranden.
- Filer i sandbox-miljön: Den isolerade Python-miljön har åtkomst till filer som du bifogar för analys. Kodtolkare kan också generera filer, till exempel diagram, och returnera dem som nedladdningsbara utdata.
Om du behöver mer kontroll över sandbox-körningen eller om du behöver en annan isoleringsmodell kan du läsa Verktyget för anpassad kodtolkning för agenter.