Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt
Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller har begränsade funktioner. Mer information finns i Supplemental Terms of Use for Microsoft Azure Previews.
En anpassad kodtolkare ger dig fullständig kontroll över körningsmiljön för agentgenererad Python kod. Du kan konfigurera anpassade Python paket, beräkningsresurser och Azure Container Apps miljö inställningar. Kodtolk behållaren exponerar en Model Context-protokollserver (MCP).
Använd en anpassad kodtolk när det inbyggda verktyget Code Tolk för agenter inte uppfyller dina krav, till exempel när du behöver specifika Python paket, anpassade containeravbildningar eller dedikerade beräkningsresurser.
Mer information om MCP och hur agenter ansluter till MCP-verktyg finns i Ansluta till modellkontextprotokollservrar (förhandsversion).
Tip
Överväg att lägga till det här verktyget med hjälp av en verktygslåda. Med hjälp av ett verktygspaket kan du återanvända verktyget mellan agenter och körmiljöer samt centralisera hantering av autentiseringsuppgifter, versionshantering och efterlevnad av policyer genom en hanterad MCP-slutpunkt. Se snabbstarten för verktygslådan.
Förutsättningar
Azure CLI version 2.60.0 eller senare.
Python 3.12 eller senare för det underhållna exempelprojektet.
(Valfritt) uv för snabbare Python pakethantering.
En Azure-prenumeration och resursgrupp med följande rolltilldelningar:
Foundry User i Foundry-projektet för att konfigurera och köra agenten efter provisioneringen.
Viktigt
Foundrys RBAC-roller har nyligen namnändrats. Foundry User, Foundry Owner, Foundry Account Owner och Foundry Project Manager hette tidigare Azure AI-användare, Azure AI-ägare, Azure AI-kontoägare och Azure AI Project Manager. Du kanske fortfarande ser de tidigare namnen på vissa platser medan namnbytet distribueras. Roll-ID:na och kärnbehörigheterna ändras inte av namnbytet.
Foundry-ägare i målresursgruppen endast när exempeldistributionen skapar Foundry-resurserna och projektanslutningen.
Container Apps ManagedEnvironment Contributor för målresursgruppen endast så länge som exempeldriftsättningen skapar Container Apps-miljön.
Aktivera etableringsrollerna vid behov med Microsoft Entra Privileged Identity Management (PIM) och inaktivera dem när distributionen är slutförd. Vanliga agentutvecklare och användare av körningsmiljön behöver inte dessa provisioneringsroller.
Ett Microsoft Foundry SDK. Se snabbstarten för installation.
En region som stöds av både Foundry Agent Service och Azure Container Apps dynamiska sessioner. Se regioner för Azure Container Apps Dynamic Sessions.
Användningsstöd
Den här artikeln använder Azure CLI och ett körbart exempelprojekt.
I följande tabell visas stöd för SDK och installation.
| stöd för Microsoft Foundry | Python SDK | C#-SDK | SDK för JavaScript | Java SDK | REST API | Grundläggande agentkonfiguration | Standardagentkonfiguration |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | - | ✔️ |
Det senaste SDK- och API-stödet för agentverktyg finns i Best practices for using tools in Microsoft Foundry Agent Service.
SDK-stöd
Den anpassade kodtolkaren använder MCP-verktygstypen. Alla SDK:er som stöder MCP-verktyg kan skapa en anpassad kodtolkagent. .NET SDK är för närvarande i förhandsversion. Information om infrastrukturetableringsstegen (Azure CLI, Bicep) finns i Skapa en agent med anpassad kodtolk.
Innan du börjar
Den här proceduren etablerar Azure infrastruktur, inklusive Azure Container Apps resurser. Granska organisationens Azure kostnads- och styrningskrav innan du distribuerar.
Skapa en agent med anpassad kodtolkare
Följande steg visar hur du etablerar infrastrukturen och skapar en agent som använder en mcp-server för anpassad kodtolk. Infrastrukturkonfigurationen gäller för alla språk. Språkspecifika kodexempel följer.
Registrera förhandsgranskningsfunktionen
Registrera MCP-serverfunktionen för Azure Container Apps dynamiska sessioner:
az feature register --namespace Microsoft.App --name SessionPoolsSupportMCP
az provider register -n Microsoft.App
Hämta exempelkoden
Klona koden sample i GitHub-lagringsplatsen och navigera till mappen samples/python/prompt-agents/code-interpreter-custom i terminalen.
Provisionera infrastrukturen
Det underhållna direktagentexemplet lagrar MCP-slutpunkten för sessionspoolen i projektanslutningen. Verktygslådans definitioner kräver också slutpunkten som server_url. Lägg till dessa utdata i den klonade infra.bicep filen:
output MCP_SERVER_URL string = sessionPool.properties.mcpServerSettings.mcpServerEndpoint
Använd inte poolManagementEndpoint. Det värdet är slutpunkten för hantering av dynamiska sessioner, inte MCP-serverslutpunkten.
Om du vill etablera infrastrukturen kör du följande kommando med hjälp av Azure CLI (az):
az deployment group create \
--name custom-code-interpreter \
--subscription <your_subscription> \
--resource-group <your_resource_group> \
--template-file ./infra.bicep
Observera
Implementeringen kan ta upp till en timme beroende på antalet standby-instans(er) som du begär. Den dynamiska sessionspoolallokeringen är det längsta steget.
Konfigurera och köra agenten
.env.sample Kopiera filen från lagringsplatsen till .env. Mappa Bicep distributionsutdata till matchande miljövariabler:
| Bicep utdata | Miljövariabel | Används för |
|---|---|---|
AZURE_AI_PROJECT_ENDPOINT |
AZURE_AI_PROJECT_ENDPOINT |
Slutpunkt för foundry-projekt. |
AZURE_AI_CONNECTION_ID |
AZURE_AI_CONNECTION_ID |
Projektanslutning vars mål är MCP-servern för anpassad kodtolk. |
MCP_SERVER_URL |
MCP_SERVER_URL |
McP-slutpunkten för sessionspoolen krävs av verktygslådedefinitioner. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
Driftsättning av agentmodell. |
De infogade exemplen använder PROJECT_ENDPOINT för AZURE_AI_PROJECT_ENDPOINT och MCP_CONNECTION_ID för AZURE_AI_CONNECTION_ID. Det underhållna direktagentexemplet löser MCP-målet via projektanslutningen och använder https://localhost som en obligatorisk platshållar-URL. För en verktygslåda anger du MCP_SERVER_URL till mcpServerEndpoint utdata eftersom MCPToolboxTool kräver server_url eller connector_id även när du även tillhandahåller en projektanslutning.
Installera Python beroenden och kör det underhållna exemplet med något av följande kommandopar:
uv sync
uv run ./main.py
Eller skapa en virtuell miljö och installera de incheckade kraven:
python -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python ./main.py
Kodexempel
Följande Python-exempel visar hur man skapar en agent med ett anpassat MCP-verktyg för kodtolkare:
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")
Förväntade utdata
När du kör exemplet visas utdata som liknar:
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
Använda en värdbaserad agent
Det här exemplet använder FoundryChatClient från Microsoft Agent Framework och ansluter till MCP-slutpunkten för verktygslådan med hjälp av 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())
Kodexempel
Följande C#-exempel visar hur du skapar en agent med ett mcp-verktyg för anpassad kodtolk. Mer information om hur du arbetar med MCP-verktyg i .NET finns i MCP-verktygsexemplet i Azure SDKs för .NET lagringsplats på 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");
Ta bort verktygslådans version när agenten inte längre refererar till den. Se Ta bort en verktygslådeversion för det verifierade .NET-anropet.
Förväntade utdata
Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted
Använda en värdbaserad agent
Det här exemplet använder Microsoft Agent Framework-integrering AddFoundryToolboxes för att ansluta den värdbaserade agenten till verktygslådan.
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();
Kodexempel
Följande TypeScript-exempel visar hur du skapar en agent med ett MCP-verktyg för anpassad kodtolkning. En JavaScript-version finns i MCP-verktygsexemplet i Azure SDKs för JavaScript-lagringsplatsen på 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);
});
Förväntade utdata
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
Rekommenderas: För de flesta agenter lägger du till verktyg via en verktygslåda och kopplar verktygslådan till din agent som ett MCP-verktyg. Java SDK exponerar ännu inte ett API för att skapa verktygslådan, så skapa verktygslådan med hjälp av exemplet Python, REST API, C#eller TypeScript eller Foundry-portalen och referera sedan till dess MCP-slutpunkt från din Java agent som en McpTool. I följande exempel ansluts toolbox-MCP-slutpunkten, som innehåller den anpassade kodtolken, till agenten.
Lägg till beroendet till din pom.xml.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.4.0</version>
</dependency>
Kodexempel
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");
}
}
Förväntade utdata
Agent created: CustomCodeInterpreterAgent (version 1)
Response: The factorial of 10 is 3,628,800.
Agent deleted
Förutsättningar
Ange följande miljövariabler:
-
FOUNDRY_PROJECT_ENDPOINT: Projektets slutpunkts-URL. -
AGENT_TOKEN: En bärare-token för Foundry.
Hämta en åtkomsttoken:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Kodexempel
Skapa en verktygslåda med den anpassade kodtolkaren
Lägg till den anpassade kodtolkaren genom att skapa en verktygslåda. Bifoga sedan verktygslådan till din agent som ett MCP-verktyg. Mer information finns i Vad är en verktygslåda?
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"
}
]
}'
Verktygslådan exponerar en MCP-kompatibel ändpunkt på $FOUNDRY_PROJECT_ENDPOINT/toolboxes/custom-code-interpreter-toolbox/versions/<version>/mcp?api-version=v1, där <version> är den version som returnerades av föregående anrop.
Skapa en fjärrverktygsanslutning till verktygslådan
Skapa en fjärrverktygsprojektanslutning som pekar på verktygslådans slutpunkt. Använd en entra-token för användare så att anroparens identitet skickas via (målgrupp 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
Skapa en agent som använder verktygslådan
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"
}
]
}
}'
Skapa ett svar
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."
}'
Rensa
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"
Förväntade utdata
{
"id": "resp_xxxxxxxxxxxx",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "The factorial of 10 is 3,628,800."
}
]
}
]
}
Kontrollera konfigurationen
När du har etablerat infrastrukturen och kört exemplet:
- Bekräfta att Azure distributionen har slutförts.
- Bekräfta att exemplet ansluter med hjälp av värdena i
.envfilen. - I Microsoft Foundry kontrollerar du att agenten anropar verktyget med hjälp av spårning. Mer information finns i Best practices for using tools in Microsoft Foundry Agent Service.
Felsökning
| Frågan | Sannolik orsak | Upplösning |
|---|---|---|
| Funktionsregistreringen väntar fortfarande | Kommandot az feature register returnerar Registering tillstånd. |
Vänta tills registreringen har slutförts (kan ta 15–30 minuter). Kontrollera status med az feature show --namespace Microsoft.App --name SessionPoolsSupportMCP. Kör sedan az provider register -n Microsoft.App igen. |
| Utbyggnaden misslyckas på grund av behörighetsfel | Nödvändiga rolltilldelningar saknas. | För driftsättning av infrastruktur aktiverar du Foundry Owner och Container Apps ManagedEnvironment Contributor för målresursgruppen via Microsoft Entra PIM. Inaktivera dem efter distributionen. För agentåtgärder bekräftar du att du har Foundry-användare i Foundry-projektet. |
| Distribueringen misslyckas med regionfel | Den valda regionen stöder inte Azure Container Apps dynamiska sessioner. | Prova en annan region. Se Azure Container Apps regioner för regioner som stöds. |
| Agenten anropar inte verktyget | MCP-anslutningen är inte korrekt konfigurerad eller så uppmanar inte agentinstruktionerna att använda verktyget. | Använd spårning i Microsoft Foundry för att bekräfta anrop av verktyg. Kontrollera att MCP_SERVER_URL matchar Container Apps-slutpunkt du har distribuerat. Se Metodtips. |
| Tidsgräns för MCP-serveranslutning | Container Apps-sessionspoolen körs inte eller har inga reservinstanser. | Kontrollera sessionspoolens status i Azure-portalen. Öka standbyInstanceCount i din Bicep-mall om det behövs. |
| Kodexekvering misslyckades i containern | Det saknas Python paket i den anpassade containern. | Uppdatera containeravbildningen så att den innehåller nödvändiga paket. Återskapa och distribuera om containern. |
| Autentiseringsfel vid anslutning till MCP-server | Autentiseringsuppgifterna för projektanslutningen är ogiltiga eller har upphört att gälla. | Återskapa autentiseringsuppgifterna för anslutningen och uppdatera .env filen. Kontrollera formatet MCP_PROJECT_CONNECTION_ID . |
Begränsningar
API:erna har inte direkt stöd för filinmatning eller -utmatning, eller användningen av filregister. För att hämta data in och ut måste du använda URL:er, till exempel data-URL:er för små filer och Azure SAS-URL:er (Shared Access Signature) för stora filer.
Säkerhet
Behandla genererad kod och dess beroenden som obetrodda. Använd en lista över tillåtna basavbildningar och paket, kör med minsta möjliga beräkning och behörighet och begränsa utgående nätverksåtkomst till nödvändiga mål. Montera inte känsliga data eller produktionsautentiseringsuppgifter i sessionen.
Om du använder SAS-URL:er för att överföra data in eller ut ur körningstiden:
- Använd kortlivade SAS-token.
- Logga inte SAS-URL:er eller lagra dem i källkontrollen.
- Begränsa behörigheter till det minimum som krävs (till exempel skrivskyddad eller skrivskydd).
Rensa
Om du vill stoppa faktureringen för etablerade resurser tar du bort de resurser som skapats av exempeldistributionen. Om du använde en dedikerad resursgrupp för den här artikeln tar du bort resursgruppen.