Benutzerdefiniertes Codedolmetschertool für Agents (Vorschau)

Wichtig

In diesem Artikel markierte Elemente (Vorschau) befinden sich derzeit in der öffentlichen Vorschau. Diese Vorschau wird ohne Vereinbarung auf Serviceebene bereitgestellt und wird für Produktionsworkloads nicht empfohlen. Bestimmte Features werden möglicherweise nicht unterstützt oder weisen eingeschränkte Funktionen auf. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.

Ein benutzerdefinierter Codedolmetscher bietet Ihnen die vollständige Kontrolle über die Laufzeitumgebung für vom Agent generierten Python Code. Sie können benutzerdefinierte Python Pakete, Computeressourcen und Azure Container Apps Umgebung konfigurieren. Der Codedolmetschercontainer macht einen MCP-Server (Model Context Protocol) verfügbar.

Verwenden Sie einen benutzerdefinierten Codedolmetscher, wenn das integrierte Code-Interpretertool für Agents Ihre Anforderungen nicht erfüllt, z. B. wenn Sie bestimmte Python Pakete, benutzerdefinierte Containerimages oder dedizierte Computeressourcen benötigen.

Weitere Informationen zu MCP und dazu, wie Agents eine Verbindung mit MCP-Tools herstellen, finden Sie unter "Herstellen einer Verbindung mit Modellkontextprotokollservern (Vorschau)".

Tip

Erwägen Sie das Hinzufügen dieses Tools mithilfe einer Toolbox. Mithilfe einer Toolbox können Sie das Tool über Agents und Laufzeiten hinweg wiederverwenden sowie die Verwaltung von Anmeldeinformationen, versionsverwaltung und Richtlinienerzwingung über einen verwalteten MCP-Endpunkt zentralisieren. Sehen Sie sich die Schnellstartanleitung der Toolbox an.

Voraussetzungen

  • Azure CLI Version 2.60.0 oder höher.

  • Python 3.12 oder höher für das verwaltete Beispielprojekt.

  • (Optional) uv für schnellere Python Paketverwaltung.

  • Eine Azure-Abonnement- und Ressourcengruppe mit den folgenden Rollenzuweisungen:

    • Foundry User im Foundry-Projekt zum Konfigurieren und Ausführen des Agents nach der Bereitstellung.

      Wichtig

      Die Foundry-RBAC-Rollen wurden kürzlich umbenannt. Foundry User, Foundry Owner, Foundry Account Owner und Foundry Project Manager wurden zuvor Azure KI-Benutzer, Azure KI-Besitzer, Azure KI-Kontobesitzer und Azure AI Project Manager benannt. Möglicherweise werden die vorherigen Namen an einigen Stellen weiterhin angezeigt, während der Umbenennungsrollout ausgeführt wird. Die Rollen-IDs und Kernberechtigungen bleiben durch die Umbenennung unverändert.

    • Foundry Owner gilt nur für die Zielressourcengruppe, während bei der Beispielbereitstellung die Foundry-Ressourcen und die Projektverbindung erstellt werden.

    • Container Apps ManagedEnvironment-Mitwirkender nur für die Zielressourcengruppe, während mit der Beispielbereitstellung die Container Apps-Umgebung erstellt wird.

    Aktivieren Sie die Bereitstellungsrollen bedarfsgerecht über Microsoft Entra Privileged Identity Management (PIM), und deaktivieren Sie sie nach der Bereitstellung. Alltägliche Agent-Entwickler und Benutzer der Laufzeitumgebung benötigen diese Provisioning-Rollen nicht.

  • Ein Microsoft Foundry SDK. Informationen zur Installation finden Sie in der Schnellstartanleitung .

  • Eine Azure-Region, die sowohl von Foundry Agent Service als auch von Azure Container Apps Dynamic Sessions unterstützt wird. Siehe Azure Container Apps-Regionen für dynamische Sitzungen.

Verwendungsunterstützung

In diesem Artikel werden die Azure CLI und ein runnables Beispielprojekt verwendet.

Die folgende Tabelle zeigt die SDK- und Setupunterstützung.

Microsoft Foundry-Unterstützung Python SDK C# SDK JavaScript SDK Java SDK REST-API Grundlegendes Agent-Setup Standard-Agenten-Einrichtung
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ - ✔️

Die neuesten SDK- und API-Unterstützung für Agents-Tools finden Sie unter Best practices for using tools in Microsoft Foundry Agent Service.

SDK-Unterstützung

Der benutzerdefinierte Codedolmetscher verwendet den MCP-Tooltyp. Jedes SDK, das MCP-Tools unterstützt, kann einen benutzerdefinierten Codedolmetscher-Agent erstellen. Das .NET SDK ist derzeit als Vorschauversion verfügbar. Informationen zu den Bereitstellungsschritten der Infrastruktur (Azure CLI, Bicep) finden Sie unter Create an agent with custom code interpreter.

Bevor Sie beginnen

Dieses Verfahren enthält Azure Infrastruktur, einschließlich Azure Container Apps Ressourcen. Überprüfen Sie vor der Bereitstellung die Azure Kosten- und Governanceanforderungen Ihrer Organisation.

Erstellen eines Agents mit benutzerdefiniertem Codedolmetscher

Die folgenden Schritte zeigen, wie Sie die Infrastruktur bereitstellen und einen Agent erstellen, der einen benutzerdefinierten Codedolmetscher-MCP-Server verwendet. Das Infrastruktursetup gilt für alle Sprachen. Sprachspezifische Codebeispiele folgen.

Registrieren des Vorschaufeatures

Registrieren Sie das MCP-Serverfeature für dynamische Sitzungen von Azure Container Apps.

az feature register --namespace Microsoft.App --name SessionPoolsSupportMCP
az provider register -n Microsoft.App

Holen Sie sich den Beispielcode

Klonen Sie den Beispielcode im GitHub-Repository und navigieren Sie zum Ordner samples/python/prompt-agents/code-interpreter-custom in Ihrem Terminal.

Bereitstellen der Infrastruktur

Das gepflegte Direct-Agent-Beispiel speichert den MCP-Endpunkt des Sitzungspools in der Projektverbindung. Toolboxdefinitionen erfordern auch den Endpunkt als server_url. Fügen Sie diese Ausgabe zur geklonten infra.bicep Datei hinzu:

output MCP_SERVER_URL string = sessionPool.properties.mcpServerSettings.mcpServerEndpoint

Verwenden Sie poolManagementEndpoint nicht. Dieser Wert ist der Endpunkt für die Verwaltung dynamischer Sitzungen, nicht der MCP-Serverendpunkt.

Führen Sie zum Bereitstellen der Infrastruktur den folgenden Befehl mithilfe des Azure CLI aus (az):

az deployment group create \
    --name custom-code-interpreter \
    --subscription <your_subscription> \
    --resource-group <your_resource_group> \
    --template-file ./infra.bicep

Hinweis

Die Bereitstellung kann je nach Anzahl der von Ihnen angeforderten Standbyinstanzen bis zu einer Stunde dauern. Die zuordnung des dynamischen Sitzungspools ist der längste Schritt.

Konfigurieren und Ausführen des Agents

Kopieren Sie die .env.sample Datei aus dem Repository in .env. Ordnen Sie die Bicep Bereitstellungsausgaben den übereinstimmenden Umgebungsvariablen zu:

Bicep Ausgabe Umgebungsvariable Verwendung
AZURE_AI_PROJECT_ENDPOINT AZURE_AI_PROJECT_ENDPOINT Foundry-Projektendpunkt.
AZURE_AI_CONNECTION_ID AZURE_AI_CONNECTION_ID Projektverbindung, deren Ziel der benutzerdefinierte Code-Interpreter-MCP-Server ist.
MCP_SERVER_URL MCP_SERVER_URL MCP-Endpunkt des Sitzungspools, erforderlich für Toolbox-Definitionen.
AZURE_AI_MODEL_DEPLOYMENT_NAME AZURE_AI_MODEL_DEPLOYMENT_NAME Bereitstellung des Agentenmodells.

Die Inline-Beispiele verwenden PROJECT_ENDPOINT für AZURE_AI_PROJECT_ENDPOINT und MCP_CONNECTION_ID für AZURE_AI_CONNECTION_ID. Das gepflegte Direct-Agent-Beispiel löst das MCP-Ziel über die Projektverbindung auf und verwendet https://localhost als erforderliche Platzhalter-URL. Legen Sie MCP_SERVER_URL für eine Toolbox auf die Ausgabe mcpServerEndpoint fest, da MCPToolboxToolserver_url oder connector_id erfordert, selbst wenn Sie zusätzlich eine Projektverbindung angeben.

Installieren Sie die Python Abhängigkeiten, und führen Sie das verwaltete Beispiel mit einem der folgenden Befehlspaare aus:

uv sync
uv run ./main.py

Oder erstellen Sie eine virtuelle Umgebung, und installieren Sie die eingecheckten Anforderungen:

python -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python ./main.py

Codebeispiel

Im folgenden Python Beispiel wird gezeigt, wie Ein Agent mit einem benutzerdefinierten Codedolmetscher-MCP-Tool erstellt wird:

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPTool, MCPToolboxTool, PromptAgentDefinition

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
MCP_SERVER_URL = "https://your-mcp-server-url"
# Optional: set to your project connection ID if your MCP server requires authentication
MCP_CONNECTION_ID = "your-mcp-connection-id"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Add the custom code interpreter MCP server 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
toolbox = project.toolboxes.create_version(
    name="custom-code-interpreter-toolbox",
    description="Toolbox with the custom code interpreter MCP server",
    tools=[
        MCPToolboxTool(
            server_label="custom-code-interpreter",
            server_url=MCP_SERVER_URL,
            project_connection_id=MCP_CONNECTION_ID,
        )
    ],
)

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

# 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 custom-code-interpreter-toolbox-conn \
#      --kind remote-tool \
#      --target "<TOOLBOX_MCP_URL>" \
#      --auth-type user-entra-token \
#      --audience https://ai.azure.com
TOOLBOX_CONNECTION_NAME = "custom-code-interpreter-toolbox-conn"

# Create an agent that uses the toolbox as an MCP tool
agent = project.agents.create_version(
    agent_name="CustomCodeInterpreterAgent",
    definition=PromptAgentDefinition(
        model="gpt-5-mini",
        instructions="You are a helpful assistant that can run Python code to analyze data and solve problems.",
        tools=[
            MCPTool(
                server_label="toolbox",
                server_url=TOOLBOX_MCP_URL,
                require_approval="never",
                project_connection_id=TOOLBOX_CONNECTION_NAME,
            )
        ],
    ),
    description="Agent with custom code interpreter for data analysis.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

# Test the agent with a simple calculation
response = openai.responses.create(
    input="Calculate the factorial of 10 using Python.",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(f"Response: {response.output_text}")

# Clean up
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
project.toolboxes.delete_toolbox_version(
  toolbox_name=toolbox.name,
  version=toolbox.version,
)
print("Agent deleted")

Erwartete Ausgabe

Wenn Sie das Beispiel ausführen, wird eine Ausgabe ähnlich der folgenden angezeigt:

Agent created (id: agent-xxxxxxxxxxxx, name: CustomCodeInterpreterAgent, version: 1)
Response: The factorial of 10 is 3,628,800. I calculated this using Python's math.factorial() function.
Agent deleted

Verwenden eines gehosteten Agents

Dieses Beispiel verwendet FoundryChatClient aus dem Microsoft Agent Framework und verbindet sich über FoundryToolbox mit dem MCP-Endpunkt der Toolbox.

import asyncio

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 MCPToolboxTool

PROJECT_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>"
MCP_SERVER_URL = "https://your-mcp-server-url"
# Optional: set to your project connection ID if your MCP server requires authentication
MCP_CONNECTION_ID = "your-mcp-connection-id"


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

    # 1. Create the custom code interpreter MCP tool and add it to a toolbox. Using a toolbox is the
    #    recommended way to give agents tools: curate tools once and reuse the
    #    toolbox across agents. See /azure/foundry/agents/concepts/toolbox-overview
    project = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential)
    toolbox = project.toolboxes.create_version(
        name="custom-code-interpreter-toolbox",
        description="Toolbox with the custom code interpreter MCP server",
        tools=[
            MCPToolboxTool(
                server_label="custom-code-interpreter",
                server_url=MCP_SERVER_URL,
                project_connection_id=MCP_CONNECTION_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 run Python code to analyze data and solve problems.",
        tools=[toolbox_tool],
    )

    result = await agent.run("Calculate the factorial of 10 using Python.")
    print(result.text)


    project.toolboxes.delete_toolbox_version(
      toolbox_name=toolbox.name,
      version=toolbox.version,
    )


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

Codebeispiel

Im folgenden C#-Beispiel wird gezeigt, wie Sie einen Agent mit einem benutzerdefinierten Codedolmetscher-MCP-Tool erstellen. Weitere Informationen zum Arbeiten mit MCP-Tools in .NET finden Sie im MCP-Toolbeispiel im Azure SDK für .NET Repository auf GitHub.

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

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var mcpServerUrl = "https://your-mcp-server-url";
// Optional: set to your project connection ID if your MCP server requires authentication
var mcpConnectionId = "your-mcp-connection-id";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Add the custom code interpreter MCP server to a toolbox. Using a toolbox is the
// recommended way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
// Code runs in a sandboxed Azure Container Apps session.
McpTool customCodeInterpreter = ResponseTool.CreateMcpTool(
    serverLabel: "custom-code-interpreter",
    serverUri: new Uri(mcpServerUrl));
customCodeInterpreter.ProjectConnectionId = mcpConnectionId;

ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "custom-code-interpreter-toolbox",
        tools: [ProjectsAgentTool.AsProjectTool(customCodeInterpreter)],
        description: "Toolbox with the custom code interpreter MCP server");

// The toolbox exposes an MCP-compatible endpoint.
var toolboxMcpUrl = new Uri(
    $"{projectEndpoint}/toolboxes/{toolboxVersion.Name}" +
    $"/versions/{toolboxVersion.Version}/mcp?api-version=v1");

// 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 custom-code-interpreter-toolbox-conn \
//      --kind remote-tool \
//      --target "<toolboxMcpUrl>" \
//      --auth-type user-entra-token \
//      --audience https://ai.azure.com
var toolboxConnectionName = "custom-code-interpreter-toolbox-conn";

McpTool toolboxTool = ResponseTool.CreateMcpTool(
    serverLabel: "toolbox",
    serverUri: toolboxMcpUrl,
    toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
        GlobalMcpToolCallApprovalPolicy.NeverRequireApproval));
toolboxTool.ProjectConnectionId = toolboxConnectionName;

DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a helpful assistant that can run Python code to analyze data and solve problems.",
    Tools = { toolboxTool }
};

AgentVersion agent = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "CustomCodeInterpreterAgent",
    options: new(agentDefinition));

Console.WriteLine($"Agent created: {agent.Name} (version {agent.Version})");

// Create a response using the agent
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agent.Name);

ResponseResult response = responseClient.CreateResponse(
    new([ResponseItem.CreateUserMessageItem("Calculate the factorial of 10 using Python.")]));

Console.WriteLine(response.GetOutputText());

// Clean up
projectClient.AgentAdministrationClient.DeleteAgentVersion(
    agentName: agent.Name,
    agentVersion: agent.Version);
Console.WriteLine("Agent deleted");

Löschen Sie die Toolboxversion, nachdem der Agent nicht mehr darauf verweist. Siehe Löschen einer Toolboxversion für den überprüften .NET Aufruf.

Erwartete Ausgabe

Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted

Verwenden eines gehosteten Agents

In diesem Beispiel wird die Microsoft Agent Framework-Integration AddFoundryToolboxes verwendet, um den gehosteten Agent mit der Toolbox zu verbinden.

using System;
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.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;

const string AgentInstructions = "You are a helpful assistant that can run Python code to analyze data and solve problems.";
const string AgentName = "CustomCodeInterpreterAgent";

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";
string mcpServerUrl = "https://your-mcp-server-url";
string mcpConnectionId = "your-mcp-connection-id";

DefaultAzureCredential credential = new();

// 1. Create the custom code interpreter MCP tool and add it 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);
McpTool customCodeInterpreter = ResponseTool.CreateMcpTool(
    serverLabel: "custom-code-interpreter",
    serverUri: new Uri(mcpServerUrl));
customCodeInterpreter.ProjectConnectionId = mcpConnectionId;
ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "custom-code-interpreter-toolbox",
        tools: [ProjectsAgentTool.AsProjectTool(customCodeInterpreter)],
        description: "Toolbox with the custom code interpreter MCP server");

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

Codebeispiel

Im folgenden TypeScript-Beispiel wird gezeigt, wie Sie einen Agent mit einem benutzerdefinierten Codedolmetscher-MCP-Tool erstellen. Eine JavaScript-Version finden Sie im Beispiel zum MCP-Tool im Azure SDK für JavaScript-Repository auf GitHub.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const MCP_SERVER_URL = "https://your-mcp-server-url";

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

  // Add the custom code interpreter MCP server to a toolbox. Using a toolbox is
  // the recommended way to give agents tools. Code runs in a sandboxed Azure
  // Container Apps session, so the tool uses require_approval: "never".
  // See /azure/foundry/agents/concepts/toolbox-overview
  const toolbox = await project.toolboxes.createVersion(
    "custom-code-interpreter-toolbox",
    [
      {
        type: "mcp",
        server_label: "custom-code-interpreter",
        server_url: MCP_SERVER_URL,
        require_approval: "never",
      },
    ],
    { description: "Toolbox with the custom code interpreter MCP server" },
  );

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

  // 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 custom-code-interpreter-toolbox-conn \
  //      --kind remote-tool \
  //      --target "<toolboxMcpUrl>" \
  //      --auth-type user-entra-token \
  //      --audience https://ai.azure.com
  const toolboxConnectionName = "custom-code-interpreter-toolbox-conn";

  // Create an agent that uses the toolbox as an MCP tool
  const agent = await project.agents.createVersion("CustomCodeInterpreterAgent", {
    kind: "prompt",
    model: "gpt-5-mini",
    instructions:
      "You are a helpful assistant that can run Python code to analyze data and solve problems.",
    tools: [
      {
        type: "mcp",
        server_label: "toolbox",
        server_url: toolboxMcpUrl,
        require_approval: "never",
        project_connection_id: toolboxConnectionName,
      },
    ],
  });
  console.log(`Agent created (name: ${agent.name}, version: ${agent.version})`);

  // Send a request to the agent
  const response = await openai.responses.create(
    {
      input: "Calculate the factorial of 10 using Python.",
    },
    {
      body: { agent_reference: { name: agent.name, type: "agent_reference" } },
    },
  );
  console.log(`Response: ${response.output_text}`);

  // Clean up
  await project.agents.deleteVersion(agent.name, agent.version);
  await project.toolboxes.deleteVersion(toolbox.name, toolbox.version);
  console.log("Agent deleted");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Erwartete Ausgabe

Agent created (name: CustomCodeInterpreterAgent, version: 1)
Response: The factorial of 10 is 3,628,800. I calculated this using Python's math.factorial() function.
Agent deleted

Tip

Empfohlen: Fügen Sie für die meisten Agents Tools über eine Toolbox hinzu, und fügen Sie die Toolbox als MCP-Tool an Ihren Agent an. Das Java SDK stellt noch keine API zum Erstellen von Toolboxes bereit. Erstellen Sie die Toolbox daher mithilfe des Python-, REST API-, C#- oder TypeScript-Beispiels oder über das Foundry portal, und verweisen Sie dann in Ihrem Java-Agenten auf dessen MCP-Endpunkt als McpTool. Im folgenden Beispiel wird der MCP-Endpunkt der Toolbox, der den benutzerdefinierten Code-Interpreter enthält, an den Agenten angebunden.

Fügen Sie die Abhängigkeit zu Ihrem pom.xml hinzu:

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

Codebeispiel

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 CustomCodeInterpreterExample {
    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/custom-code-interpreter-toolbox/versions/1/mcp?api-version=v1";
        // Set to the remote-tool project connection that points at the toolbox MCP endpoint.
        String toolboxConnectionId = "custom-code-interpreter-toolbox-conn";

        // Create clients to call Foundry API
        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

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

        // Attach the toolbox MCP endpoint as an MCP tool.
        // Uses require_approval: "never" because code runs in a sandboxed Container Apps session.
        McpTool toolboxTool = new McpTool("toolbox")
            .setServerUrl(toolboxMcpUrl)
            .setProjectConnectionId(toolboxConnectionId)
            .setRequireApproval("never");

        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5-mini")
            .setInstructions("You are a helpful assistant that can run Python code to analyze data and solve problems.")
            .setTools(Collections.singletonList(toolboxTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion(
            "CustomCodeInterpreterAgent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("Calculate the factorial of 10 using Python."));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
        System.out.println("Agent deleted");
    }
}

Erwartete Ausgabe

Agent created: CustomCodeInterpreterAgent (version 1)
Response: The factorial of 10 is 3,628,800.
Agent deleted

Voraussetzungen

Legen Sie diese Umgebungsvariablen fest:

  • FOUNDRY_PROJECT_ENDPOINT: Ihre Projektendpunkt-URL.
  • AGENT_TOKEN: Ein Bearer-Token für Foundry.

Zugriffstoken abrufen:

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

Codebeispiel

Erstellen einer Toolbox mit dem benutzerdefinierten Codedolmetscher

Fügen Sie den benutzerdefinierten Codedolmetscher hinzu, indem Sie eine Toolbox erstellen. Fügen Sie dann die Toolbox als MCP-Tool an Ihren Agent an. Weitere Informationen finden Sie unter Was ist eine Toolbox?

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/custom-code-interpreter-toolbox/versions?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "description": "Toolbox with the custom code interpreter MCP server",
    "tools": [
      {
        "type": "mcp",
        "server_label": "custom-code-interpreter",
        "server_url": "<MCP_SERVER_URL>",
        "project_connection_id": "<MCP_PROJECT_CONNECTION_ID>",
        "require_approval": "never"
      }
    ]
  }'

Die Toolbox stellt unter $FOUNDRY_PROJECT_ENDPOINT/toolboxes/custom-code-interpreter-toolbox/versions/<version>/mcp?api-version=v1 einen MCP-kompatiblen Endpunkt bereit, wobei <version> die vom vorherigen Aufruf zurückgegebene Version ist.

Erstellen Sie eine Verbindung mit dem Remote-Tool zur Toolbox

Erstellen Sie eine Remotetoolprojektverbindung, die auf den Toolboxendpunkt verweist. Verwenden Sie ein Benutzer-Entra-Token, damit die Identität des Anrufers (Zielgruppe https://ai.azure.com) übergeben wird:

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

Erstellen eines Agents, der die Toolbox verwendet

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "name": "CustomCodeInterpreterAgent",
    "definition": {
      "kind": "prompt",
      "model": "<MODEL_DEPLOYMENT>",
      "instructions": "You are a helpful assistant that can run Python code to analyze data and solve problems.",
      "tools": [
        {
          "type": "mcp",
          "server_label": "toolbox",
          "server_url": "'$FOUNDRY_PROJECT_ENDPOINT'/toolboxes/custom-code-interpreter-toolbox/versions/<version>/mcp?api-version=v1",
          "require_approval": "never",
          "project_connection_id": "custom-code-interpreter-toolbox-conn"
        }
      ]
    }
  }'

Erstellen einer Antwort

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": "CustomCodeInterpreterAgent"},
    "input": "Calculate the factorial of 10 using Python."
  }'

Bereinigen

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

curl -X DELETE \
  "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/custom-code-interpreter-toolbox/versions/<version>?api-version=v1" \
  -H "Authorization: Bearer $AGENT_TOKEN"

Erwartete Ausgabe

{
  "id": "resp_xxxxxxxxxxxx",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "The factorial of 10 is 3,628,800."
        }
      ]
    }
  ]
}

Überprüfen Des Setups

Nachdem Sie die Infrastruktur bereitgestellt und das Beispiel ausgeführt haben:

  1. Bestätigen Sie, dass die Azure Bereitstellung erfolgreich abgeschlossen wurde.
  2. Vergewissern Sie sich, dass das Beispiel eine Verbindung mit den Werten in Ihrer .env Datei herstellt.
  3. Überprüfen Sie in Microsoft Foundry, ob Ihr Agent das Tool mithilfe der Ablaufverfolgung aufruft. Weitere Informationen finden Sie unter Best practices for using tools in Microsoft Foundry Agent Service.

Problembehandlung

Angelegenheit Wahrscheinliche Ursache Auflösung
Die Feature-Registrierung steht noch aus. Der az feature register Befehl gibt den Zustand zurück Registering . Warten Sie, bis die Registrierung abgeschlossen ist (kann 15-30 Minuten dauern). Überprüfen Sie den Status mit az feature show --namespace Microsoft.App --name SessionPoolsSupportMCP. Führen Sie dann az provider register -n Microsoft.App erneut aus.
Bereitstellung fehlgeschlagen wegen Berechtigungsfehler. Fehlende erforderliche Rollenzuweisungen. Aktivieren Sie für die Infrastrukturbereitstellung über Microsoft Entra PIM Foundry Owner und Container Apps ManagedEnvironment Contributor für die Zielressourcengruppe. Deaktivieren Sie sie nach der Bereitstellung. Bestätigen Sie bei Agentvorgängen, dass Sie den Findry-Benutzer im Foundry-Projekt haben.
Fehler bei der Bereitstellung wegen Regionsfehler Der ausgewählte Bereich unterstützt Azure Container Apps dynamische Sitzungen nicht. Probieren Sie eine andere Region aus. Informationen zu unterstützten Regionen finden Sie unter Azure Container Apps.
Agent ruft das Tool nicht auf Die MCP-Verbindung ist nicht ordnungsgemäß konfiguriert, oder die Agentanweisungen fordern nicht zur Verwendung des Tools auf. Verwenden Sie die Ablaufverfolgung in Microsoft Foundry, um den Werkzeugaufruf zu bestätigen. Überprüfen Sie, ob die MCP_SERVER_URL mit Ihrem bereitgestellten Container-Apps-Endpunkt übereinstimmt. Weitere Informationen finden Sie unter "Bewährte Methoden".
Timeout für die MCP-Serververbindung Der Container Apps-Sitzungspool wird nicht ausgeführt oder besitzt keine Standby-Instanzen. Überprüfen Sie den Sitzungspoolstatus im Azure-Portal. Erhöhen Sie bei Bedarf standbyInstanceCount in Ihrer Bicep-Vorlage.
Fehler bei der Codeausführung im Container Fehlende Python Pakete im benutzerdefinierten Container. Aktualisieren Sie Ihr Containerimage so, dass erforderliche Pakete enthalten sind. Erstellen Sie den Container neu und stellen Sie ihn erneut bereit.
Authentifizierungsfehler beim Herstellen einer Verbindung mit dem MCP-Server Die Anmeldeinformationen für die Projektverbindung sind ungültig oder abgelaufen. Generieren Sie die Verbindungsanmeldeinformationen neu, und aktualisieren Sie die .env Datei. Überprüfen Sie das MCP_PROJECT_CONNECTION_ID Format.

Einschränkungen

Die APIs unterstützen keine direkte Dateieingabe oder -ausgabe oder die Verwendung von Dateispeichern. Um Daten ein- und auszugeben, müssen Sie URLs wie Daten-URLs für kleine Dateien und Azure SAS-URLs (Blob Service Shared Access Signature) für große Dateien verwenden.

Sicherheit

Behandeln Sie generierten Code und deren Abhängigkeiten als nicht vertrauenswürdig. Verwenden Sie ein genehmigtes Basis-Image und eine Positivliste für Pakete, führen Sie sie mit den minimal erforderlichen Rechenressourcen und Berechtigungen aus, und beschränken Sie den ausgehenden Netzwerkzugriff auf die erforderlichen Zieladressen. Stellen Sie vertrauliche Daten oder Produktionsanmeldeinformationen nicht in die Sitzung ein.

Wenn Sie SAS-URLs zum Übergeben von Daten in oder außerhalb der Laufzeit verwenden:

  • Verwenden Sie kurzlebige SAS-Token.
  • Protokollieren Sie keine SAS-URLs, oder speichern Sie sie nicht in der Quellcodeverwaltung.
  • Bereichsberechtigungen auf das erforderliche Minimum (z. B. nur Lesen oder nur Schreiben).

Bereinigen

Um die Abrechnung für bereitgestellte Ressourcen zu beenden, löschen Sie die von der Beispielbereitstellung erstellten Ressourcen. Wenn Sie eine dedizierte Ressourcengruppe für diesen Artikel verwendet haben, löschen Sie die Ressourcengruppe.