Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El intérprete de código permite que un agente de Microsoft Foundry ejecute Python código en un entorno de ejecución de espacio aislado. El modelo Foundry del agente escribe y ejecuta código para el análisis de datos, la generación de gráficos y las tareas de resolución de problemas iterativas.
Sugerencia
Considere la posibilidad de agregar esta herramienta mediante un cuadro de herramientas. Mediante el uso de un cuadro de herramientas, puede reutilizar la herramienta entre agentes y entornos de ejecución, así como centralizar la administración de credenciales, el control de versiones y la aplicación de directivas a través de un punto de conexión de MCP administrado. Consulte el inicio rápido del cuadro de herramientas.
En este artículo, creará un agente que usa el intérprete de código, cargará un archivo CSV para su análisis y descargará un gráfico generado.
Al habilitar el intérprete de código, el agente puede escribir y ejecutar Python código de forma iterativa para resolver tareas matemáticas y análisis de datos y generar gráficos.
Importante
El intérprete de código tiene cargos adicionales además de las tarifas basadas en tokens para el uso de Azure OpenAI. Si el agente llama al intérprete de código simultáneamente en dos conversaciones diferentes, crea dos sesiones de intérprete de código. Cada sesión está activa de forma predeterminada durante una hora con un tiempo de espera de inactividad de 30 minutos.
Requisitos previos
- Entorno de agente básico o estándar. Consulte configuración del entorno del agente para obtener más información.
- El paquete SDK más reciente instalado para su idioma. El SDK de .NET está actualmente en versión preliminar. Consulte el inicio rápido para conocer los pasos de instalación.
- Despliegue del modelo de Azure AI configurado en tu proyecto.
Nota
El intérprete de código no está disponible en todas las regiones. Consulte Comprobación de la disponibilidad regional y del modelo.
Soporte de uso
En la tabla siguiente se muestra la compatibilidad con el SDK y la configuración.
| compatibilidad con Microsoft Foundry | SDK de Python | C# SDK | SDK de JavaScript | SDK de Java | REST API | Configuración básica del agente | Configuración del agente estándar |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Creación de un agente con el intérprete de código
En los ejemplos siguientes se muestra cómo crear un agente con el intérprete de código habilitado, cargar un archivo para su análisis y descargar la salida generada. Cada ejemplo de carga de archivos genera un archivo CSV pequeño en el directorio de trabajo actual, lo carga y, a continuación, elimina el archivo temporal local.
Sugerencia
Puede personalizar el comportamiento del intérprete de código en tiempo de ejecución, como especificar qué archivos incluir o ajustar parámetros de herramienta por solicitud, mediante entradas estructuradas.
Ejemplo de uso del agente con la herramienta de intérprete de código en Python SDK
En el ejemplo siguiente Python se muestra cómo agregar la herramienta de intérprete de código a un cuadro de herramientas, adjuntar el cuadro de herramientas a un agente, cargar un archivo CSV para su análisis y solicitar un gráfico de barras basado en los datos. Seleccione Prompt Agents para usar Azure AI Projects SDK y crear un agente de indicaciones del lado del servidor, o Hosted Agents para usar el Agent Framework FoundryChatClient y crear un agente efímero dentro del proceso.
Agentes rápidos
En este ejemplo se muestra un flujo de trabajo completo: cargar un archivo, crear un agente con el intérprete de código habilitado, solicitar visualización de datos y descargar el gráfico generado.
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, CodeInterpreterTool, AutoCodeInterpreterToolParam
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")
Salida esperada
El código de ejemplo genera una salida similar a la del ejemplo siguiente:
Found generated file: transportation_operating_profit_bar_chart.png (ID: file-xxxxxxxxxxxxxxxxxxxx)
File ready for download: transportation_operating_profit_bar_chart.png
File downloaded successfully: transportation_operating_profit_bar_chart.png
El agente carga el archivo CSV en Azure almacenamiento, crea un entorno de Python de espacio aislado, filtra las empresas del sector de transporte, genera un gráfico de barras PNG que muestra el beneficio operativo de la empresa y descarga el gráfico en el directorio local. Las anotaciones de archivo de la respuesta proporcionan el identificador de archivo y la información del contenedor necesarias para recuperar el gráfico generado.
Agentes hospedados
En este ejemplo se crea el cuadro de herramientas de intérprete de código y, a continuación, se usa FoundryChatClient desde Microsoft Agent Framework y se conecta al punto de conexión mcP del cuadro de herramientas mediante FoundryToolbox. Establezca las FOUNDRY_PROJECT_ENDPOINT variables de entorno y FOUNDRY_MODEL e inicie sesión con 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())
Salida esperada
El agente genera código Python, lo ejecuta en el contenedor aislado y devuelve la respuesta:
Agent: 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Para obtener el ejemplo completo (incluidas las entradas de archivo y la extracción del código generado), consulte foundry_chat_client_with_code_interpreter.py y foundry_chat_client_code_interpreter_files.py.
Creación de un gráfico con el intérprete de código en C#
En el ejemplo de C# siguiente se muestra cómo agregar la herramienta Intérprete de código a un cuadro de herramientas, adjuntar el cuadro de herramientas a un agente, cargar un archivo CSV para su análisis y descargar el gráfico generado. Seleccione Prompt Agents para usar el SDK de proyectos de IA de Azure para crear un agente de mensajes del lado servidor o Agentes hospedados para usar el marco del agente de Microsoft para crear un agente efímero en proceso.
Agentes rápidos
Para el uso asincrónico, consulte el ejemplo code en el SDK de Azure para .NET repositorio en 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);
Salida esperada
El código de ejemplo genera una salida similar a la del ejemplo siguiente:
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
El agente carga el archivo CSV en el almacenamiento de Azure, crea un entorno de Python aislado, analiza los datos para filtrar los registros del sector del transporte y genera un gráfico de barras en PNG. El análisis de anotaciones extrae el identificador de contenedor y el identificador de archivo de la respuesta, que se usan para descargar el gráfico en el directorio local.
Agentes hospedados
En este ejemplo se crea el cuadro de herramientas del intérprete de código y, a continuación, se usa la integración de Microsoft Agent Framework AddFoundryToolboxes para que el intérprete de código esté disponible para el agente hospedado. Establezca las AZURE_AI_PROJECT_ENDPOINTvariables de entorno , AZURE_OPENAI_ENDPOINTy AZURE_AI_MODEL_DEPLOYMENT_NAME e inicie sesión con 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();
Salida esperada
El agente hospedado usa el punto de conexión MCP de la caja de herramientas para ejecutar Python en el espacio aislado y devolver la respuesta final:
Response: One solution is x ≈ 6.36, since sin(x) + x^2 is approximately 42 at that value.
Para obtener una integración mantenida de .NET Agent Framework, consulte Uso de un cuadro de herramientas con un agente hospedado.
Ejemplo de uso del agente con la herramienta de intérprete de código en el SDK de TypeScript
En el ejemplo de TypeScript siguiente se muestra cómo agregar la herramienta de intérprete de código a un cuadro de herramientas, adjuntar el cuadro de herramientas a un agente, cargar un archivo CSV para su análisis y solicitar un gráfico de barras basado en los datos. Para obtener una versión de JavaScript, consulte el ejemplo JavaScript en el repositorio SDK de Azure para JavaScript en GitHub.
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
// 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);
});
Salida esperada
El código de ejemplo genera una salida similar a la del ejemplo siguiente:
Found generated file: transportation_operating_profit_bar_chart.png (ID: file-xxxxxxxxxxxxxxxxxxxx)
File transportation_operating_profit_bar_chart.png downloaded successfully.
File ready for download: transportation_operating_profit_bar_chart.png
El agente carga el archivo CSV en Azure almacenamiento, crea un entorno de Python de espacio aislado, filtra las empresas del sector de transporte, genera un gráfico de barras PNG que muestra el beneficio operativo de la empresa y descarga el gráfico en el directorio local. Las anotaciones de archivo de la respuesta proporcionan el identificador de archivo y la información del contenedor necesarias para recuperar el gráfico generado.
Creación de un gráfico con el intérprete de código en Java
Para la mayoría de los agentes, agregue la herramienta de intérprete de código a través de un cuadro de herramientas y adjunte el cuadro de herramientas al agente como una herramienta MCP. El SDK de Java aún no expone una API de creación de cuadros de herramientas, por lo que debe crear el cuadro de herramientas mediante uno de los métodos admitidos actualmente (Python, API REST, C#, TypeScript o el portal de Foundry). Una vez creada la toolbox, haga referencia a su punto de conexión MCP desde su agente Java como McpTool. El siguiente ejemplo asocia el punto de conexión MCP de la caja de herramientas del intérprete de código al agente.
Agregue la dependencia a pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.2.0</version>
</dependency>
Creación de un agente y generación de un gráfico
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AgentVersionDetails;
import com.azure.ai.agents.models.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());
}
}
Salida esperada
Response: Here is the bar chart showing quarterly revenue for 2025 with Q1 ($2.1M), Q2 ($2.8M), Q3 ($3.2M), and Q4 ($2.9M) displayed in blue with data labels.
El agente utiliza Code Interpreter a través del endpoint MCP de la caja de herramientas, escribe código Python utilizando matplotlib para generar el gráfico y ejecuta el código en un entorno aislado. Para ver un ejemplo que carga un archivo CSV y descarga el gráfico generado, seleccione Python o TypeScript en el selector de idioma de la parte superior de este artículo. Para obtener más ejemplos, consulte las muestras del SDK de Java Azure AI Agents
Creación de un gráfico con el intérprete de código mediante la API REST
En el ejemplo siguiente se muestra cómo cargar un archivo CSV, crear un agente con el intérprete de código, solicitar un gráfico y descargar el archivo generado.
Requisitos previos
Establezca estas variables de entorno:
-
FOUNDRY_PROJECT_ENDPOINT: dirección URL del punto de conexión del proyecto. -
AGENT_TOKEN: un token de portador para Foundry.
Obtención de un token de acceso:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Usar intérprete de código en un cuadro de herramientas
Para cargar un archivo que el intérprete de código pueda utilizar a través de una caja de herramientas, cargue el archivo en el punto final Files de nivel de recurso (POST {account_endpoint}/openai/v1/files) con el encabezado x-aml-project-id. A diferencia del flujo del agente de indicaciones, los archivos cargados a través del punto de conexión Files con ámbito de proyecto (/api/projects/{name}/openai/v1/files) reciben un owner_id que el contenedor de herramientas no puede verificar, por lo que tools/call falla con un error de verificación de propiedad.
Obtenga el GUID del proyecto de Azure Resource Manager. Utilice
properties.amlWorkspace.internalId(formato UUID con guiones), noproperties.internalId(sin guiones; el contenedor de la caja de herramientas lo rechaza):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')Cargue el archivo a nivel de cuenta (recurso) con el encabezado
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
El archivo id devuelto es el valor que se proporciona como <FILE_ID> en la configuración de la herramienta. Los archivos se montan en el espacio aislado en /mnt/data/{file-id}-{original-filename}.
Importante
Cuando se usa el intérprete de código a través de un cuadro de herramientas de un agente hospedado, no se admite el aislamiento de usuario. Todos los usuarios del mismo proyecto comparten el mismo contexto de contenedor.
Agregar intérprete de código a un cuadro de herramientas
Agregue el intérprete de código mediante la creación de un cuadro de herramientas y, a continuación, adjunte el cuadro de herramientas al agente como una herramienta MCP. Para obtener más información, consulte ¿Qué es un cuadro de herramientas?
Cree un cuadro de herramientas que contenga la herramienta de intérprete de código:
curl --request POST \ --url "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions?api-version=v1" \ -H "Authorization: Bearer $AGENT_TOKEN" \ -H "Content-Type: application/json" \ --data '{ "description": "Toolbox with the code interpreter tool", "tools": [ { "type": "code_interpreter", "container": { "type": "auto", "file_ids": ["<FILE_ID>"] } } ] }'El cuadro de herramientas expone un punto de conexión compatible con MCP en
$FOUNDRY_PROJECT_ENDPOINT/toolboxes/code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, donde<version>es la versión devuelta por la llamada anterior.Crea una conexión de proyecto de herramienta remota que apunte al punto de conexión de la caja de herramientas, utilizando un token de usuario de Entra para que se transmita la identidad del solicitante (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
Creación de un agente con el cuadro de herramientas del intérprete de código
curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-d '{
"name": "chart-agent",
"definition": {
"kind": "prompt",
"model": "<MODEL_DEPLOYMENT>",
"instructions": "You are a data visualization assistant. When asked to create charts, write and run Python code using matplotlib to generate them.",
"tools": [
{
"type": "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"
}
]
}
}'
Generación de un gráfico
curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-d '{
"agent_reference": {"type": "agent_reference", "name": "chart-agent"},
"input": "Create a bar chart of operating profit by company for the TRANSPORTATION sector from the uploaded CSV file. Use a blue color scheme and add data labels."
}'
La respuesta incluye container_file_citation anotaciones con los detalles del archivo generado. Guarda los valores container_id y file_id de la anotación.
Descarga del gráfico generado
curl -X GET "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/containers/<CONTAINER_ID>/files/<FILE_ID>/content" \
-H "Authorization: Bearer $AGENT_TOKEN" \
--output chart.png
Limpieza
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/chart-agent?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Comprobación de la disponibilidad regional y del modelo
La disponibilidad de las herramientas varía según la región y el modelo.
Para obtener la lista actual de regiones y modelos admitidos para el intérprete de código, consulte Prácticas recomendadas para usar herramientas en Microsoft Foundry Agent Service.
Tipos de archivo admitidos
| Formato de archivo | Tipo 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 o text/xml |
.zip |
application/zip |
Solución de problemas
| Problema | Causa probable | Resolución |
|---|---|---|
| El intérprete de código no se ejecuta. | La herramienta no está habilitada o el modelo no lo admite en su región. | Confirme que el intérprete de código está habilitado en el agente. Compruebe que la implementación del modelo admite la herramienta en su región. Consulte Comprobación de la disponibilidad regional y del modelo. |
| No se genera ningún archivo. | El agente devolvió la respuesta de solo texto sin anotación de archivo. | Compruebe las anotaciones de respuesta para container_file_citation. Si no existen, el agente no ha generado un archivo. Reformule el indicador para solicitar explícitamente la salida de archivos. |
| Se produce un error en la carga de archivos. | Tipo de archivo no admitido o propósito incorrecto. | Confirme que el tipo de archivo está en la lista de tipos de archivo admitidos . Subir con purpose="assistants". |
| El archivo generado está dañado o está vacío. | Error de ejecución de código o procesamiento incompleto. | Compruebe la respuesta del agente para ver los mensajes de error. Compruebe que los datos de entrada son válidos. Pruebe primero una solicitud más sencilla. |
| Tiempo de espera de sesión o latencia alta. | Las sesiones del intérprete de código tienen límites de tiempo. | Las sesiones tienen un tiempo de espera activo de 1 hora y un tiempo de espera de inactividad de 30 minutos. Reduzca la complejidad de las operaciones o divida en tareas más pequeñas. |
| Cargos de facturación inesperados. | Se crearon varias sesiones simultáneas. | Cada conversación crea una sesión independiente. Supervise el uso de la sesión y consolide las operaciones siempre que sea posible. |
| Python paquete no disponible. | El intérprete de código tiene un conjunto fijo de paquetes. | El intérprete de código incluye paquetes comunes de ciencia de datos. En el caso de los paquetes personalizados, use el intérprete de código personalizado. |
| Se produce un error en la descarga de archivos. | El identificador de contenedor o el identificador de archivo son incorrectos. | Compruebe que está usando los valores correctos container_id y file_id de las anotaciones de respuesta. |
Limpieza de recursos
Elimine los recursos que creó en este ejemplo cuando ya no los necesite para evitar costos continuos:
- Elimine la versión del agente.
- Elimine la conversación.
- Eliminar archivos cargados.
Para obtener ejemplos de patrones de limpieza de archivos y conversaciones, consulte Herramienta de búsqueda web y Herramienta de búsqueda de archivos para agentes.
Entorno de ejecución en espacio aislado
Intérprete de código ejecuta código Python en un espacio aislado administrado por Microsoft. El espacio aislado está diseñado para ejecutar código no confiable y utiliza sesiones dinámicas (sesiones de intérprete de código) en Azure Container Apps. Cada sesión está aislada por un entorno de Hyper-V.
Comportamientos clave para planificar:
- Región: El entorno de pruebas de Code Interpreter se ejecuta en la misma región de Azure que su proyecto de Foundry.
- Duración de la sesión: una sesión del intérprete de código está activa hasta una hora, con un tiempo de espera de inactividad (consulte la nota importante al principio de este artículo).
- Aislamiento: cada sesión se ejecuta en un entorno aislado. Si el agente invoca al intérprete de código simultáneamente en diferentes conversaciones, se crean sesiones independientes.
- Aislamiento de red e acceso a Internet: el espacio aislado no hereda la configuración de subred del agente y las sesiones dinámicas no pueden realizar solicitudes de red salientes.
- Archivos en el entorno de pruebas: El tiempo de ejecución de Python en el entorno de pruebas tiene acceso a los archivos que adjunte para su análisis. El intérprete de código también puede generar archivos, como gráficos, y devolverlos como salidas descargables.
Si necesita más control sobre el entorno de ejecución del espacio aislado o necesita un modelo de aislamiento diferente, consulte Herramienta de intérprete de código personalizado para agentes.
Contenido relacionado
- Mejores prácticas para usar herramientas en el Servicio de Agente de Microsoft Foundry
- Herramienta de intérprete de código personalizado para agentes (versión preliminar)