Freigeben über


Benutzerdefiniertes Codedolmetschertool für Agents (Vorschau)

Von Bedeutung

Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. 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)".

Nutzungssupport

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

✔️ (GA) gibt die allgemeine Verfügbarkeit an, ✔️ (Vorschau) gibt die öffentliche Vorschau an, und ein Gedankenstrich (-) gibt an, dass das Feature nicht verfügbar ist.

Microsoft Foundry-Support Python SDK C# SDK JavaScript SDK Java SDK REST API Basic-Agent-Setup Standard-Agent-Setup
✔️ ✔️ (GA) ✔️ (Vorschau) ✔️ (GA) ✔️ (Vorschau) ✔️ (GA) - ✔️

Die neuesten SDK- und API-Unterstützung für Agents-Tools finden Sie unter Bewährte Methoden für die Verwendung von Tools im 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. Die .NET und Java SDKs befinden sich derzeit in der Vorschauversion. Informationen zu den Bereitstellungsschritten der Infrastruktur (Azure CLI, Bicep) finden Sie unter Create an agent with custom code interpreter.

Voraussetzungen

Bevor Sie anfangen

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 die MCP-Serverfunktion für dynamische Sitzungen in Azure Container Apps.

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

Beispielcode herunterladen

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

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 Zuweisung des dynamischen Sitzungspools ist der längste Schritt.

Konfigurieren und Ausführen des Agents

Kopieren Sie die .env.sample Datei aus dem Repository nach .env und füllen Sie die Werte aus dem Bereitstellungsergebnis ein. Sie finden diese Werte im Azure-Portal unter der Ressourcengruppe.

Installieren Sie die Python Abhängigkeiten mithilfe von uv sync oder pip install. Führen Sie abschließend ./main.py aus.

Code-Beispiel

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 PromptAgentDefinition, MCPTool

# 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()

# Configure the custom code interpreter MCP tool
custom_code_interpreter = MCPTool(
    server_label="custom-code-interpreter",
    server_url=MCP_SERVER_URL,
    project_connection_id=MCP_CONNECTION_ID,
)

# Create an agent with the custom code interpreter
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=[custom_code_interpreter],
    ),
    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)
print("Agent deleted")

Erwartete Ausgabe

Wenn Sie das Beispiel ausführen, wird die 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

Code-Beispiel

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 Azure.AI.Projects;
using Azure.AI.Projects.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());

// Create agent with custom code interpreter MCP tool
// Code runs in a sandboxed Azure Container Apps session
McpTool tool = ResponseTool.CreateMcpTool(
    serverLabel: "custom-code-interpreter",
    serverUri: new Uri(mcpServerUrl));
tool.ProjectConnectionId = mcpConnectionId;

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

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

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

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

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

Console.WriteLine(response.GetOutputText());

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

Erwartete Ausgabe

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

Code-Beispiel

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

  // Create agent with custom code interpreter MCP tool
  // The custom code interpreter uses require_approval: "never" because code
  // runs in a sandboxed Azure Container Apps session
  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: "custom-code-interpreter",
        server_url: MCP_SERVER_URL,
        require_approval: "never",
      },
    ],
  });
  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: { name: agent.name, type: "agent_reference" } },
    },
  );
  console.log(`Response: ${response.output_text}`);

  // Clean up
  await project.agents.deleteVersion(agent.name, agent.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

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

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.0.0-beta.1</version>
</dependency>

Code-Beispiel

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.McpTool;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.core.util.BinaryData;
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 mcpServerUrl = "https://your-mcp-server-url";
        // Optional: set to your project connection ID if your MCP server requires authentication
        String mcpConnectionId = "your-mcp-connection-id";

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

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

        // Create custom code interpreter MCP tool
        // Uses require_approval: "never" because code runs in a sandboxed Container Apps session
        McpTool customCodeInterpreter = new McpTool("custom-code-interpreter")
            .setServerUrl(mcpServerUrl)
            .setProjectConnectionId(mcpConnectionId)
            .setRequireApproval(BinaryData.fromString("\"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(customCodeInterpreter));

        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.createWithAgent(
            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.

Abrufen eines Zugriffstokens:

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

Code-Beispiel

1. Erstellen eines Agents mit benutzerdefiniertem Codedolmetscher

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": "custom-code-interpreter",
          "server_url": "<MCP_SERVER_URL>",
          "project_connection_id": "<MCP_PROJECT_CONNECTION_ID>",
          "require_approval": "never"
        }
      ]
    }
  }'

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

3. Bereinigen

curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/CustomCodeInterpreterAgent?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 im Microsoft Foundry, ob Ihr Agent das Tool mithilfe der Tracing-Funktion aufruft. Weitere Informationen finden Sie unter Bewährte Methoden für die Verwendung von Tools im Microsoft Foundry Agent Service.

Problembehandlung

Thema Wahrscheinliche Ursache Beschluss
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 az provider register -n Microsoft.App dann erneut aus.
Fehler beim Deployment aufgrund eines Berechtigungsfehlers Fehlende erforderliche Rollenzuweisungen. Bestätigen Sie, dass Sie die Azure AI Owner und Container Apps ManagedEnvironment Contributor Rollen über das Abonnement oder die Ressourcengruppe haben.
Bereitstellung ist fehlgeschlagen aufgrund eines Regionsfehlers 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 die Verwendung des Tools nicht. Verwenden Sie die Tracing-Funktion in Microsoft Foundry, um die Tool-Aufrufe zu bestätigen. Überprüfen Sie, ob MCP_SERVER_URL mit Ihrem bereitgestellten Container-Apps-Endpunkt übereinstimmt. Siehe 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 Ihrem Bicep-Template.
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

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 beschränken (z. B. nur-Lesen oder nur-Schreiben).

Aufräumen

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.