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).
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 | JavaScript SDK | 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.
Förutsättningar
- Azure CLI version 2.60.0 eller senare.
- (Valfritt) uv för snabbare Python pakethantering.
- En Azure-prenumeration och resursgrupp med följande rolltilldelningar:
- En Azure AI Foundry SDK. Se snabbstarten för installation.
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
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
Kopiera .env.sample filen från lagringsplatsen till .env och fyll i värdena från distributionsutdata. Du hittar dessa värden i Azure portalen under resursgruppen.
Installera Python beroenden med hjälp av uv sync eller pip install. Kör slutligen ./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 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")
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
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 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");
Förväntade utdata
Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted
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();
// 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);
});
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
Lägg till beroendet till din pom.xml.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.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 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");
}
}
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
1. Skapa en agent med anpassad kodtolkare
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. 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."
}'
3. Rensa
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/CustomCodeInterpreterAgent?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. | Bekräfta att du har rollerna Azure AI Owner och Container Apps ManagedEnvironment Contributor i prenumerationen eller resursgruppen. |
| 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
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.