Aangepast code-interpreterhulpprogramma voor agenten (preview)

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure previews voor meer informatie.

Met een aangepaste code-interpreter hebt u volledige controle over de runtime-omgeving voor door de agent gegenereerde Python code. U kunt aangepaste Python-pakketten, rekenresources en Azure Container Apps-omgeving-instellingen configureren. De code-interpretercontainer maakt een MCP-server (Model Context Protocol) beschikbaar.

Gebruik een aangepaste code-interpreter wanneer het ingebouwde Code Interpreter-hulpprogramma voor agents niet aan uw vereisten voldoet, bijvoorbeeld wanneer u specifieke Python-pakketten, aangepaste containerinstallatiekopieën of toegewezen rekenresources nodig hebt.

Zie Verbinding maken met Model Context Protocol-servers (preview) voor meer informatie over MCP en hoe agents verbinding maken met MCP-hulpprogramma's.

Gebruiksondersteuning

In dit artikel worden de Azure CLI en een runnable voorbeeldproject gebruikt.

In de volgende tabel ziet u SDK- en installatieondersteuning.

ondersteuning voor Microsoft Foundry Python SDK C#SDK JavaScript SDK Java SDK REST API Basisagent instellen Standaardagent configureren
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ - ✔️

Zie Best practices voor het gebruik van tools in Microsoft Foundry Agent Service voor de meest recente SDK- en API-ondersteuning voor agenten.

SDK-ondersteuning

De aangepaste code-interpreter maakt gebruik van het type MCP-hulpprogramma. Elke SDK die ONDERSTEUNING biedt voor MCP-hulpprogramma's, kan een aangepaste code-interpreteragent maken. De .NET SDK is momenteel in een preview-fase. Zie Maak een agent met aangepaste code-interpreter voor de stappen voor het inrichten van infrastructuur (Azure CLI Bicep).

Voorwaarden

Voordat u begint

Deze procedure voorziet Azure infrastructuur, met inbegrip van Azure Container Apps resources. Controleer de Azure vereisten voor kosten en governance van uw organisatie voordat u implementeert.

Een agent maken met een aangepaste code-interpreter

De volgende stappen laten zien hoe u de infrastructuur inricht en een agent maakt die gebruikmaakt van een aangepaste code-interpreter MCP-server. De infrastructuurinstallatie is van toepassing op alle talen. Taalspecifieke codevoorbeelden volgen.

De preview-functie registreren

Registreer de MCP-serverfunctie voor Azure Container Apps dynamische sessies:

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

De voorbeeldcode ophalen

Kloon de voorbeeldcode in de GitHub-opslagplaats en navigeer naar de map samples/python/prompt-agents/code-interpreter-custom in uw terminal.

De infrastructuur inrichten

Als u de infrastructuur wilt inrichten, voert u de volgende opdracht uit met behulp van de Azure CLI (az):

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

Opmerking

De implementatie kan maximaal één uur duren, afhankelijk van het aantal stand-by-exemplaren dat u aanvraagt. De toewijzing van dynamische sessiegroepen is de langste stap.

De agent configureren en uitvoeren

Kopieer het .env.sample bestand van de opslagplaats naar .env en vul de waarden uit de uitvoer van de implementatie in. U vindt deze waarden in de Azure-portal onder de resourcegroep.

Installeer de Python-afhankelijkheden met behulp van uv sync of pip install. Voer ten slotte uit ./main.py.

Codevoorbeeld

In het volgende Python-voorbeeld ziet u hoe u een agent maakt met een MCP-hulpprogramma voor een aangepaste code-interpreter.

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")

Verwachte uitvoer

Wanneer u het voorbeeld uitvoert, ziet u uitvoer die vergelijkbaar is met:

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

Codevoorbeeld

In het volgende C#-voorbeeld ziet u hoe u een agent maakt met een MCP-hulpprogramma voor een aangepaste code-interpreter. Zie het voorbeeld van het hulpprogramma MCP in de Azure SDK voor .NET opslagplaats op GitHub voor meer informatie over het werken met MCP-hulpprogramma's in .NET.

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

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

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 = { tool }
};

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

Verwachte uitvoer

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

Codevoorbeeld

In het volgende TypeScript-codevoorbeeld ziet u hoe u een agent maakt met een MCP-tool voor een aangepaste code-interpreter. Zie het MCP-hulpprogrammavoorbeeld in de Azure SDK voor JavaScript-opslagplaats op GitHub voor een JavaScript-versie.

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

Verwachte uitvoer

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

Voeg de afhankelijkheid toe aan uw pom.xml:

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

Codevoorbeeld

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 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("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.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");
    }
}

Verwachte uitvoer

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

Voorwaarden

Stel deze omgevingsvariabelen in:

  • FOUNDRY_PROJECT_ENDPOINT: de EINDPUNT-URL van uw project.
  • AGENT_TOKEN: Een bearer-token voor Foundry.

Een toegangstoken ophalen:

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

Codevoorbeeld

1. Een agent maken met aangepaste code-interpreter

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. Een antwoord maken

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. Opschonen

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

Verwachte uitvoer

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

Uw installatie controleren

Nadat u de infrastructuur hebt ingericht en het voorbeeld hebt uitgevoerd:

  1. Controleer of de implementatie van de Azure is voltooid.
  2. Controleer of het voorbeeld verbinding maakt met behulp van de waarden in uw .env bestand.
  3. Controleer in Microsoft Foundry of uw agent het hulpprogramma aanroept met behulp van tracering. Voor meer informatie, zie Beste werkwijzen voor het gebruik van hulpprogramma's in Microsoft Foundry Agent Service.

Probleemoplossing

Probleem Waarschijnlijke oorzaak Resolutie
Functieregistratie is nog in behandeling De az feature register opdracht retourneert de Registering status. Wacht tot de registratie is voltooid (kan 15-30 minuten duren). Controleer de status met az feature show --namespace Microsoft.App --name SessionPoolsSupportMCP. Voer vervolgens az provider register -n Microsoft.App opnieuw uit.
Implementatie mislukt met machtigingsfout Vereiste roltoewijzingen ontbreken. Controleer of u de rollen van Azure AI-eigenaar en Container Apps ManagedEnvironment-bijdrager hebt voor het abonnement of de resourcegroep.
Implementatie mislukt met regiofout De geselecteerde regio biedt geen ondersteuning voor Azure Container Apps dynamische sessies. Probeer een andere regio. Zie Azure Container Apps regio's voor ondersteunde regio's.
Agent roept het hulpprogramma niet aan De MCP-verbinding is niet juist geconfigureerd of de agentinstructies vragen geen gebruik van het hulpprogramma. Tracering gebruiken in Microsoft Foundry om de activering van een tool te bevestigen. Controleer of de MCP_SERVER_URL overeenkomt met het gedeployde Container Apps-eindpunt. Zie Best practices.
Time-out van MCP-server verbinding De Container Apps-sessiegroep wordt niet uitgevoerd of heeft geen stand-by-exemplaren. Controleer de status van de sessiegroep in de Azure-portal. Verhoog standbyInstanceCount indien nodig in uw Bicep-sjabloon.
Uitvoering van code mislukt in container Ontbrekende Python pakketten in de aangepaste container. Werk uw container-image bij om de vereiste pakketten op te nemen. Bouw de container opnieuw en implementeer deze opnieuw.
Verificatiefout bij het maken van verbinding met MCP-server De referenties voor de projectverbinding zijn ongeldig of verlopen. Genereer de verbindingsreferenties opnieuw en werk het .env bestand bij. Controleer de MCP_PROJECT_CONNECTION_ID indeling.

Beperkingen

De API's ondersteunen geen bestandsinvoer of uitvoer, of het gebruik van bestandsarchieven. Als u gegevens in en uit wilt halen, moet u URL's gebruiken, zoals gegevens-URL's voor kleine bestanden en Azure SAS-URL's (Shared Access Signature) van Blob Service voor grote bestanden.

Veiligheid

Als u SAS-URL's gebruikt om gegevens door te geven in of uit de runtime:

  • Gebruik KORTdurende SAS-tokens.
  • Registreer geen SAS-URL's of sla deze op in broncodebeheer.
  • Beperk machtigingen tot het strikt noodzakelijke (bijvoorbeeld alleen lezen of alleen schrijven).

Opschonen

Als u de facturering voor ingerichte resources wilt stoppen, verwijdert u de resources die zijn gemaakt door de voorbeeldimplementatie. Als u een toegewezen resourcegroep voor dit artikel hebt gebruikt, verwijdert u de resourcegroep.