Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para obtener más información, vea Supplemental Terms of Use for Microsoft Azure Previews.
Un intérprete de código personalizado proporciona control total sobre el entorno de tiempo de ejecución para el código de Python generado por el agente. Puede configurar paquetes de Python personalizados, recursos de cómputo y configuración del entorno de Azure Container Apps. El contenedor de intérpretes de código expone un servidor de Protocolo de contexto de modelo (MCP).
Use un intérprete de código personalizado cuando la herramienta integrada Code Interpreter para agentes no cumple sus requisitos, por ejemplo, cuando necesita paquetes de Python específicos, imágenes de contenedor personalizadas o recursos de proceso dedicados.
Para obtener más información sobre MCP y cómo los agentes se conectan a las herramientas de MCP, consulte Conexión a servidores de protocolo de contexto de modelo (versión preliminar).
Soporte de uso
En este artículo se usa el Azure CLI y un proyecto de ejemplo ejecutable.
✔️ (GA) indica disponibilidad general, ✔️ (versión preliminar) indica la versión preliminar pública y un guion (-) indica que la característica no está disponible.
| Soporte técnico de Microsoft Foundry | SDK de Python | SDK DE C# | SDK de JavaScript | SDK de Java | REST API | Instalación básica del agente | Configuración del agente estándar |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ (GA) | ✔️ (Versión preliminar) | ✔️ (GA) | ✔️ (Versión preliminar) | ✔️ (GA) | - | ✔️ |
Para obtener la compatibilidad más reciente de SDK y API con las herramientas de agentes, consulte Procedimientos recomendados para usar herramientas en el servicio Microsoft Foundry Agent.
Compatibilidad con SDK
El intérprete de código personalizado usa el tipo de herramienta MCP. Cualquier SDK que admita herramientas de MCP puede crear un agente de intérprete de código personalizado. Los SDK de .NET y Java están actualmente en versión preliminar. Para conocer los pasos de aprovisionamiento de infraestructura (Azure CLI, Bicep), consulte Crear un agente con intérprete de código personalizado.
Prerrequisitos
- Azure CLI versión 2.60.0 o posterior.
- (Opcional) uv para una administración de paquetes Python más rápida.
- Una suscripción y un grupo de recursos de Azure con las siguientes asignaciones de roles:
- Un Azure AI Foundry SDK. Consulte la guía de inicio rápido para la instalación.
Antes de empezar
Este procedimiento aprovisiona infraestructura de Azure, incluidos los recursos de aplicaciones de contenedor de Azure. Revise los requisitos de costos y gobernanza de Azure de su organización antes de desplegar.
Creación de un agente con intérprete de código personalizado
En los pasos siguientes se muestra cómo aprovisionar la infraestructura y crear un agente que use un servidor MCP de intérprete de código personalizado. La configuración de la infraestructura se aplica a todos los idiomas. A continuación, siguen los ejemplos de código específicos del lenguaje.
Registro de la característica de vista previa
Registre la función de servidor MCP para sesiones dinámicas de Azure Container Apps.
az feature register --namespace Microsoft.App --name SessionPoolsSupportMCP
az provider register -n Microsoft.App
Obtener el código de ejemplo
Clone el código sample en el repositorio de GitHub y vaya a la carpeta samples/python/prompt-agents/code-interpreter-custom del terminal.
Aprovisionamiento de la infraestructura
Para aprovisionar la infraestructura, ejecute el comando siguiente mediante el Azure CLI (az):
az deployment group create \
--name custom-code-interpreter \
--subscription <your_subscription> \
--resource-group <your_resource_group> \
--template-file ./infra.bicep
Nota:
La implementación puede tardar hasta una hora, en función del número de instancias en espera que solicite. La asignación del grupo de sesiones dinámicas es el paso más largo.
Configuración y ejecución del agente
Copie el archivo .env.sample del repositorio en .env y complete con los valores del resultado de la implementación. Puede encontrar estos valores en el portal de Azure en el grupo de recursos.
Instale las dependencias de Python mediante uv sync o pip install. Por último, ejecute ./main.py.
Ejemplo de código
El siguiente ejemplo de Python muestra cómo crear un agente utilizando una herramienta MCP de intérprete de código personalizado.
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")
Salida prevista
Al ejecutar el ejemplo, verá una salida similar a la siguiente:
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
Ejemplo de código
El siguiente ejemplo en C# muestra cómo crear un agente utilizando una herramienta de intérprete de código MCP personalizado. Para obtener más información sobre cómo trabajar con herramientas de MCP en .NET, consulte el ejemplo de herramienta MCP en el Azure SDK para .NET repositorio en GitHub.
using Azure.AI.Projects;
using Azure.AI.Projects.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;
PromptAgentDefinition 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.Agents.CreateAgentVersion(
agentName: "CustomCodeInterpreterAgent",
options: new(agentDefinition));
Console.WriteLine($"Agent created: {agent.Name} (version {agent.Version})");
// Create a response using the agent
ProjectResponsesClient responseClient = projectClient.OpenAI.GetProjectResponsesClientForAgent(agent.Name);
ResponseResult response = responseClient.CreateResponse(
new([ResponseItem.CreateUserMessageItem("Calculate the factorial of 10 using Python.")]));
Console.WriteLine(response.GetOutputText());
// Clean up
projectClient.Agents.DeleteAgentVersion(
agentName: agent.Name,
agentVersion: agent.Version);
Console.WriteLine("Agent deleted");
Salida prevista
Agent created: CustomCodeInterpreterAgent (version 1)
The factorial of 10 is 3,628,800.
Agent deleted
Ejemplo de código
El siguiente ejemplo de TypeScript muestra cómo crear un agente utilizando una herramienta MCP con un intérprete de código personalizado. Para obtener una versión de JavaScript, consulte el ejemplo de herramienta MCP en el repositorio de Azure SDK para JavaScript en 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);
});
Salida prevista
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
Agregue la dependencia a pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0-beta.1</version>
</dependency>
Ejemplo de código
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.McpTool;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.core.util.BinaryData;
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(BinaryData.fromString("\"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.createWithAgent(
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");
}
}
Salida prevista
Agent created: CustomCodeInterpreterAgent (version 1)
Response: The factorial of 10 is 3,628,800.
Agent deleted
Prerrequisitos
Establezca estas variables de entorno:
-
FOUNDRY_PROJECT_ENDPOINT: dirección URL del punto de conexión del proyecto. -
AGENT_TOKEN: un token de portador para Foundry.
Obtener un token de acceso:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Ejemplo de código
1. Creación de un agente con intérprete de código personalizado
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. Crear una respuesta
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. Limpiar
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/CustomCodeInterpreterAgent?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Salida prevista
{
"id": "resp_xxxxxxxxxxxx",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "The factorial of 10 is 3,628,800."
}
]
}
]
}
Comprobación de la configuración
Después de aprovisionar la infraestructura y ejecutar el ejemplo:
- Confirme que la implementación de Azure se completó correctamente.
- Confirme que la muestra se conecta mediante los valores en su archivo
.env. - En Microsoft Foundry, compruebe que el agente llama a la herramienta mediante el seguimiento. Para obtener más información, consulte Procedimientos recomendados para usar herramientas en el servicio Microsoft Foundry Agent.
Solución de problemas
| Cuestión | Causa probable | Resolución |
|---|---|---|
| El registro de características sigue pendiente | El az feature register comando devuelve Registering el estado . |
Espere a que se complete el registro (puede tardar entre 15 y 30 minutos). Compruebe el estado con az feature show --namespace Microsoft.App --name SessionPoolsSupportMCP. A continuación, vuelva a ejecutar az provider register -n Microsoft.App . |
| Error de implementación debido a un error de permisos | Faltan las necesarias asignaciones de roles. | Confirme que tiene los roles de Azure AI Owner y Container Apps ManagedEnvironment Contributor en la suscripción o el grupo de recursos. |
| El despliegue falla debido a un error de región | La región seleccionada no admite Azure Container Apps sesiones dinámicas. | Pruebe otra región. Consulte Azure Container Apps regions para ver las regiones admitidas. |
| El agente no llama a la herramienta | La conexión MCP no está configurada correctamente o las instrucciones del agente no solicitan el uso de la herramienta. | Use el seguimiento en Microsoft Foundry para confirmar la invocación de la herramienta. Compruebe que el MCP_SERVER_URL coincide con el punto de conexión de Container Apps que ha implementado. Consulte los procedimientos recomendados. |
| Tiempo de espera de conexión del servidor MCP | El grupo de sesiones de Container Apps no se está ejecutando o no tiene ninguna instancia en espera. | Compruebe el estado del grupo de sesiones en el portal de Azure. Aumente standbyInstanceCount en la plantilla de Bicep si resulta necesario. |
| Error en la ejecución del código en el contenedor | Faltan paquetes Python en el contenedor personalizado. | Actualice la imagen de contenedor para incluir los paquetes necesarios. Recompile y vuelva a implementar el contenedor. |
| Error de autenticación al conectarse al servidor MCP | Las credenciales de conexión del proyecto no son válidas o expiran. | Vuelva a generar las credenciales de conexión y actualice el .env archivo. Compruebe el MCP_PROJECT_CONNECTION_ID formato. |
Limitaciones
Las API no admiten directamente la entrada o salida de archivos ni el uso de almacenes de archivos. Para transferir datos hacia dentro y hacia fuera, debe usar direcciones URL, como URL de datos para archivos pequeños y URL de firma de acceso compartido (SAS) del servicio de Blob de Azure para archivos grandes.
Seguridad
Si usa direcciones URL de SAS para pasar datos dentro o fuera del entorno de ejecución:
- Utilice tokens SAS de corta duración.
- No registre direcciones URL de SAS ni almacénelas en el control de código fuente.
- Limite los permisos al mínimo necesario (por ejemplo, solo de lectura o solo de escritura).
Limpieza
Para detener la facturación de los recursos aprovisionados, elimine los recursos que creó la implementación de ejemplo. Si ha usado un grupo de recursos dedicado para este artículo, elimine el grupo de recursos.
Contenido relacionado
- Conectar a servidores de Model Context Protocol (versión preliminar)
- Procedimientos recomendados para usar herramientas en el servicio Microsoft Foundry Agent
- Azure Container Apps sesiones dinámicas
- Grupos de sesiones con contenedores personalizados
- Azure Container Apps entorno
- Instalar el Azure CLI
- Herramienta de intérprete de código para agentes