Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.
Un interprete di codice personalizzato offre il controllo completo sull'ambiente di runtime per il codice Python generato dall'agente. È possibile configurare pacchetti Python personalizzati, risorse di calcolo e l'ambiente di App contenitore di Azure. Il contenitore dell'interprete di codice espone un server MCP (Model Context Protocol).
Usare un interprete di codice personalizzato quando lo strumento integrato di interpretazione del codice per gli agenti non soddisfa i requisiti, ad esempio quando sono necessari specifici pacchetti Python, immagini di container personalizzate o risorse di calcolo dedicate.
Per altre informazioni su MCP e su come gli agenti si connettono agli strumenti MCP, vedere Connettersi ai server del protocollo di contesto del modello (anteprima).
Supporto per l'utilizzo
Questo articolo usa il interfaccia della riga di comando di Azure e un progetto di esempio eseguibile.
La tabella seguente illustra il supporto dell'SDK e della configurazione.
| Supporto Foundry di Microsoft | PYTHON SDK | C# SDK | JavaScript SDK | JAVA SDK | REST API | Configurazione dell'agente di base | Configurazione dell'agente standard |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | - | ✔️ |
Per informazioni sul supporto dell'SDK e delle API più recenti per gli strumenti degli agenti, vedere Best practices per l'uso degli strumenti in Microsoft Foundry Agent Service.
Supporto SDK
L'interprete di codice personalizzato usa il tipo di strumento MCP. Qualsiasi SDK che supporta gli strumenti MCP può creare un agente dell'interprete del codice personalizzato. L'SDK di .NET è attualmente in anteprima. Per i passaggi di provisioning dell'infrastruttura (interfaccia della riga di comando di Azure, Bicep), vedere Creare un agente con interprete di codice personalizzato.
Prerequisiti
- interfaccia della riga di comando di Azure versione 2.60.0 o successiva.
- (Facoltativo) uv per una gestione più rapida dei pacchetti Python.
- Una sottoscrizione Azure e un gruppo di risorse con le assegnazioni di ruolo seguenti:
- Un SDK di Azure AI Foundry. Vedere la guida introduttiva per l'installazione.
Prima di iniziare
Questa procedura effettua il provisioning dell'infrastruttura Azure, incluse le risorse App contenitore di Azure. Esaminare i requisiti di governance e costi Azure dell'organizzazione prima della distribuzione.
Creare un agente con interprete di codice personalizzato
I passaggi seguenti illustrano come effettuare il provisioning dell'infrastruttura e creare un agente che usa un server MCP dell'interprete di codice personalizzato. La configurazione dell'infrastruttura si applica a tutte le lingue. Di seguito sono seguiti esempi di codice specifici del linguaggio.
Registrare la funzionalità di anteprima
Registrare l'opzione server MCP per sessioni dinamiche di App contenitore di Azure.
az feature register --namespace Microsoft.App --name SessionPoolsSupportMCP
az provider register -n Microsoft.App
Ottenere il codice di esempio
Clonare il codice sample nel repository GitHub e passare alla cartella samples/python/prompt-agents/code-interpreter-custom nel terminale.
Configurare l'infrastruttura
Per effettuare il provisioning dell'infrastruttura, eseguire il comando seguente usando il interfaccia della riga di comando di Azure (az):
az deployment group create \
--name custom-code-interpreter \
--subscription <your_subscription> \
--resource-group <your_resource_group> \
--template-file ./infra.bicep
Nota
La distribuzione può richiedere fino a un'ora, a seconda del numero di istanze di standby richieste. L'allocazione dinamica del pool di sessioni è il passaggio più lungo.
Configurare ed eseguire l'agente
Copiare il .env.sample file dal repository a .env e inserire i valori dall'output della distribuzione. Questi valori sono disponibili nel portale di Azure nel gruppo di risorse.
Installare le dipendenze Python usando uv sync o pip install. Infine, eseguire ./main.py.
Esempio di codice
L'esempio di Python seguente illustra come creare un agente utilizzando uno strumento MCP per interprete di codice personalizzato.
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")
Output previsto
Quando si esegue l'esempio, viene visualizzato un output simile al seguente:
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
Esempio di codice
L'esempio C# seguente illustra come creare un agente con uno strumento MCP dell'interprete di codice personalizzato. Per altre informazioni sull'uso degli strumenti MCP in .NET, vedere l'esempio di strumento MCP nel Azure SDK per .NET repository in 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");
Output previsto
Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted
Esempio di codice
L'esempio seguente di TypeScript mostra come sviluppare un agente utilizzando uno strumento MCP per interprete di codice personalizzato. Per una versione JavaScript, vedere l'esempio di strumento MCP nel repository Azure SDK per JavaScript in 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);
});
Output previsto
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
Aggiungi la dipendenza a pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0</version>
</dependency>
Esempio di codice
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");
}
}
Output previsto
Agent created: CustomCodeInterpreterAgent (version 1)
Response: The factorial of 10 is 3,628,800.
Agent deleted
Prerequisiti
Impostare queste variabili di ambiente:
-
FOUNDRY_PROJECT_ENDPOINT: URL dell'endpoint del progetto. -
AGENT_TOKEN: un token portatore per Foundry.
Ottenere un token di accesso:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Esempio di codice
1. Creare un agente con interprete di codice personalizzato
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. Creare una risposta
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. Pulire
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/CustomCodeInterpreterAgent?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Output previsto
{
"id": "resp_xxxxxxxxxxxx",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "The factorial of 10 is 3,628,800."
}
]
}
]
}
Verificare la configurazione
Dopo aver effettuato il provisioning dell'infrastruttura ed aver eseguito l'esempio:
- Verificare che la distribuzione Azure sia stata completata correttamente.
- Verificare che l'esempio si connetta utilizzando i valori nel file
.env. - In Microsoft Foundry, verificare che l'agente chiami lo strumento utilizzando il tracciamento. Per altre informazioni, vedere Best practices for using tools in Microsoft Foundry Agent Service.
Risoluzione dei problemi
| Problema | Probabile causa | Risoluzione |
|---|---|---|
| La registrazione delle funzionalità è ancora in sospeso | Il az feature register comando restituisce Registering lo stato. |
Attendere il completamento della registrazione (può richiedere 15-30 minuti). Controllare lo stato con az feature show --namespace Microsoft.App --name SessionPoolsSupportMCP. Eseguire quindi di nuovo az provider register -n Microsoft.App. |
| La distribuzione non riesce e viene visualizzato un errore di autorizzazione | Assegnazioni di ruolo necessarie mancanti. | Verificare di avere il ruolo di Azure AI Owner e Container Apps ManagedEnvironment Contributor nella sottoscrizione o nel gruppo di risorse. |
| La distribuzione ha esito negativo e viene visualizzato un errore di area | L'area selezionata non supporta App contenitore di Azure sessioni dinamiche. | Provare un'area diversa. Per le aree supportate, vedere App contenitore di Azure. |
| Agent non chiama lo strumento | La connessione MCP non è configurata correttamente o le istruzioni dell'agente non richiedono l'uso dello strumento. | Utilizzare il tracciamento in Microsoft Foundry per confermare l'invocazione dello strumento. Verificare che MCP_SERVER_URL corrisponda all'endpoint delle Container Apps distribuite. Vedere Procedure consigliate. |
| Timeout della connessione al server MCP | Il pool di sessioni di Container Apps non è in esecuzione o non dispone di istanze di standby. | Controllare lo stato del pool di sessioni nel portale di Azure. Aumenta standbyInstanceCount nel tuo modello Bicep, se necessario. |
| L'esecuzione del codice non riesce nel contenitore | Pacchetti Python mancanti nel contenitore personalizzato. | Aggiornare l'immagine del contenitore per includere i pacchetti necessari. Ricompilare e ridistribuire il contenitore. |
| Errore di autenticazione durante la connessione al server MCP | Le credenziali di connessione del progetto non sono valide o scadute. | Rigenerare le credenziali di connessione e aggiornare il .env file. Verificare il MCP_PROJECT_CONNECTION_ID formato. |
Limitazioni
Gli API non supportano direttamente l'input o output dei file o l'uso degli archivi file. Per ottenere dati in uscita, è necessario usare URL, ad esempio URL di dati per file di piccole dimensioni e url di firma di accesso condiviso del servizio BLOB Azure per file di grandi dimensioni.
Sicurezza
Se si utilizzano URL SAS per passare i dati nel runtime o farli uscire dal runtime:
- Usare token di firma di accesso condiviso di breve durata.
- Non registrare gli URL SAS o memorizzarli nel controllo del codice sorgente.
- Limita le autorizzazioni all'ambito minimo richiesto (ad esempio, di sola lettura o di sola scrittura).
Eseguire la pulizia
Per interrompere la fatturazione per le risorse fornite, eliminare le risorse create dal deployment di esempio. Se per questo articolo è stato usato un gruppo di risorse dedicato, eliminare il gruppo di risorse.
Contenuto correlato
- Connettersi ai server del Model Context Protocol (anteprima)
- Migliori pratiche per l'uso degli strumenti nel servizio agente Foundry di Microsoft
- App contenitore di Azure sessioni dinamiche
- Pool di sessioni con contenitori personalizzati
- ambiente App contenitore di Azure
- Installare il interfaccia della riga di comando di Azure
- Strumento interprete del codice per gli agenti