Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Tip
Overweeg dit hulpprogramma toe te voegen met behulp van een werkset. Met behulp van een werkset kunt u het hulpprogramma opnieuw gebruiken tussen agents en runtimes, evenals het centraliseren van referentiebeheer, versiebeheer en het afdwingen van beleid via een beheerd MCP-eindpunt. Zie de snelstartgids voor de toolbox.
Voorwaarden
Azure CLI versie 2.60.0 of hoger.
Python 3.12 of hoger voor het onderhouden voorbeeldproject.
(Optioneel) uv voor sneller Python pakketbeheer.
Een Azure-abonnement en resourcegroep met de volgende roltoewijzingen:
Foundry User in het Foundry-project voor het configureren en uitvoeren van de agent na het inrichten.
Belangrijk
De rollen Foundry RBAC zijn onlangs hernoemd. Foundry User, Foundry Owner, Foundry Account Owner en Foundry Project Manager zijn eerder benoemd Azure AI-gebruiker, Azure AI-eigenaar Azure AI-accounteigenaar en Azure AI Project Manager. Het kan zijn dat u op sommige plekken nog steeds de vorige namen ziet terwijl de naamswijziging wordt doorgevoerd. De rol-id's en basismachtigingen worden niet gewijzigd door de naamswijziging.
Foundry Owner alleen voor de doelresourcegroep, terwijl de voorbeeldimplementatie de Foundry-resources en projectverbinding aanmaakt.
Container Apps ManagedEnvironment-inzender voor de doelresourcegroep alleen terwijl de voorbeeldimplementatie de Container Apps-omgeving maakt.
Activeer de provisioningrollen precies op tijd met Microsoft Entra Privileged Identity Management (PIM) en deactiveer ze na de implementatie weer. Dagelijkse agentontwikkelaars en runtimegebruikers hebben deze inrichtingsrollen niet nodig.
Een Microsoft Foundry SDK. Zie de quickstart voor installatie.
Een regio die wordt ondersteund door zowel Foundry Agent Service als Azure Container Apps Dynamische sessies. Zie Azure Container Apps regio's voor dynamische sessies.
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).
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
In het onderhouden voorbeeld van een directe agent wordt het MCP-eindpunt van de sessiegroep opgeslagen in de projectverbinding. Toolboxdefinities vereisen ook dat het eindpunt is opgegeven als server_url. Voeg deze uitvoer toe aan het gekloonde infra.bicep bestand:
output MCP_SERVER_URL string = sessionPool.properties.mcpServerSettings.mcpServerEndpoint
Niet gebruiken poolManagementEndpoint. Deze waarde is het beheereindpunt voor dynamische sessies, niet het MCP-servereindpunt.
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. Wijs de uitvoer van de Bicep-implementatie toe aan de overeenkomende omgevingsvariabelen:
| Bicep-uitvoer | Omgevingsvariabele | Gebruikt voor |
|---|---|---|
AZURE_AI_PROJECT_ENDPOINT |
AZURE_AI_PROJECT_ENDPOINT |
Foundry-projecteindpunt. |
AZURE_AI_CONNECTION_ID |
AZURE_AI_CONNECTION_ID |
Project verbinding waarvan het doel de MCP-server voor de aangepaste code-interpreter is. |
MCP_SERVER_URL |
MCP_SERVER_URL |
Het MCP-eindpunt van de sessiepool, vereist door toolboxdefinities. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
Implementatie van agentmodel. |
De inlinevoorbeelden gebruiken PROJECT_ENDPOINT voor AZURE_AI_PROJECT_ENDPOINT en MCP_CONNECTION_ID voor AZURE_AI_CONNECTION_ID. Het onderhouden voorbeeld voor een directe agent bepaalt het MCP-doel via de projectverbinding en gebruikt https://localhost als vereiste plaatsaanduidings-URL. Voor een toolbox stelt u MCP_SERVER_URL in op de uitvoer mcpServerEndpoint, omdat MCPToolboxToolserver_url of connector_id vereist, zelfs wanneer u ook een projectverbinding opgeeft.
Installeer de Python afhankelijkheden en voer het onderhouden voorbeeld uit met een van deze opdrachtparen:
uv sync
uv run ./main.py
Of maak een virtuele omgeving en installeer de ingecheckte vereisten:
python -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python ./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 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")
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
Een gehoste agent gebruiken
In dit voorbeeld wordt FoundryChatClient gebruikgemaakt van het Microsoft Agent Framework en wordt verbinding gemaakt met het MCP-eindpunt van de werkset met behulp van FoundryToolbox.
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())
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 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");
Verwijder de werksetversie nadat de agent er niet meer naar verwijst. Zie Een toolboxversie verwijderen voor de geverifieerde .NET-aanroep.
Verwachte uitvoer
Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted
Een gehoste agent gebruiken
In dit voorbeeld wordt de integratie van Microsoft Agent Framework AddFoundryToolboxes gebruikt om de gehoste agent te verbinden met de werkset.
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();
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();
// 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);
});
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
Tip
Aanbevolen: Voor de meeste agents voegt u hulpprogramma's toe via een werkset en koppelt u de werkset als een MCP-hulpprogramma aan uw agent. Met de Java SDK wordt nog geen API voor het maken van werksets weergegeven. Maak de werkset dus met behulp van het voorbeeld Python, REST API, C# of TypeScript, of de Foundry-portal, en verwijs vervolgens naar het MCP-eindpunt van uw Java-agent als een McpTool. In het volgende voorbeeld wordt het MCP-eindpunt van de werkset gekoppeld dat de aangepaste code-interpreter bevat aan de agent.
Voeg de afhankelijkheid toe aan uw pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.4.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 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");
}
}
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
Een werkset maken met de aangepaste code-interpreter
Voeg de aangepaste code-interpreter toe door een toolbox te maken. Koppel de werkset vervolgens als MCP-hulpprogramma aan uw agent. Zie Wat is een werkset? voor meer informatie.
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"
}
]
}'
De werkset toont een mcP-compatibel eindpunt op $FOUNDRY_PROJECT_ENDPOINT/toolboxes/custom-code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, waarbij <version> de versie is die wordt geretourneerd door de vorige aanroep.
Een verbinding tussen het hulpmiddel op afstand en de toolbox maken
Maak een projectverbinding voor externe hulpprogramma's die naar het toolbox-eindpunt verwijst. Gebruik een Entra-token zodat de identiteit van de beller wordt doorgegeven (doelgroep https://ai.azure.com):
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
Een agent maken die gebruikmaakt van de werkset
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"
}
]
}
}'
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."
}'
Opschonen
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"
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:
- Controleer of de implementatie van de Azure is voltooid.
- Controleer of het voorbeeld verbinding maakt met behulp van de waarden in uw
.envbestand. - 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. | Voor de implementatie van infrastructuur activeert u Foundry Owner en Container Apps ManagedEnvironment Contributor voor de doelresourcegroep via Microsoft Entra PIM. Deactiveren ze na de implementatie. Voor agentbewerkingen bevestigt u dat u Foundry User hebt in het Foundry-project. |
| 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
Behandelt gegenereerde code en de bijbehorende afhankelijkheden als niet-vertrouwd. Gebruik een goedgekeurde basisimage en een lijst met toegestane pakketten, voer deze uit met de minimaal vereiste rekenkracht en machtigingen, en beperk uitgaande netwerktoegang tot de vereiste bestemmingen. Koppel geen gevoelige gegevens of productiereferenties aan de sessie.
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.