Démarrage rapide : Créer une boîte à outils et l’utiliser avec un agent hébergé

Important

Les éléments indiqués comme (aperçu) dans cet article sont en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent ne pas être prises en charge ou avoir des fonctionnalités contraintes. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les versions préliminaires de Microsoft Azure.

Dans ce guide de démarrage rapide, vous créez une boîte à outils qui combine deux outils derrière un point de terminaison managé :

  • Recherche web, qui donne lieu à des réponses dans les résultats web publics en temps réel.
  • Le serveur MCP Microsoft Learn, qui s’appuie sur la documentation officielle de Microsoft pour ses réponses. Il s’agit d’un point de terminaison public qui ne nécessite aucune authentification.

Vous utilisez ensuite la boîte à outils à partir d’un agent hébergé écrit dans Python. La boîte à outils expose un point de terminaison MCP, de sorte que l’agent se connecte à une URL unique et découvre chaque outil au moment de l’exécution. Vous pouvez modifier les outils ultérieurement sans modifier le code de l’agent.

Si vous utilisez un agent de codage comme GitHub Copilot, la compétence Microsoft Foundry peut aider à générer le point de terminaison de boîte à outils, à le connecter à un agent hébergé et à ajuster les exemples d’outils.

Prerequisites

Ce guide de démarrage rapide s’appuie sur la chaîne d’outils de l’agent hébergé. Suivez d’abord les conditions préalables dans le guide de démarrage rapide de l’agent hébergé, qui couvrent l’abonnement Azure, les rôles de projet, les Python, l’interface CLI Azure développeur (azd) et l’extensionmicrosoft.foundry.

Pour le chemin du KIT de développement logiciel (SDK) Python, utilisez la section Python plus loin dans cet article au lieu du flux de travail AZURE Developer CLI ou VS Code. Ce chemin crée la boîte à outils avec project_client.toolboxes.create_version(...), puis charge le code de l’agent hébergé sous la forme d’une nouvelle version et le pointe vers cette boîte à outils par nom.

Installez les packages Python utilisés dans ce chemin d’accès :

pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv

Vous avez besoin d’un projet Foundry existant avec un modèle compatible chat déployé. L’option SDK Python dans ce démarrage rapide crée la boîte à outils et la version de l’agent hébergé, mais elle ne génère pas la structure de base d’un nouveau projet Foundry et ne crée pas de déploiement de modèle à votre place.

Vous devez également disposer de Visual Studio Code avec l’extension Microsoft Foundry Toolkit, connecté à Azure.

Étape 1 : Initialiser l’agent hébergé

Initialisez un agent hébergé à partir de l’exemple de boîte à outils Foundry, qui se connecte à une boîte à outils sur MCP et expose ses outils au modèle. Vous créez la boîte à outils (my-toolbox) à l’étape suivante et faites pointer l’agent vers son point de terminaison. Exécutez ces commandes dans un répertoire vide.

mkdir my-toolbox-agent && cd my-toolbox-agent
azd ai agent init -m "https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/04-foundry-toolbox/azure.yaml" --src src/toolbox-agent

Suivez les instructions pour sélectionner votre projet et un déploiement de modèle existant. Lorsque vous êtes invité à sélectionner l’allocation de ressources de conteneur, choisissez 1 cœur, 2Gi mémoire. L’image de conteneur de l’agent nécessite un niveau supérieur au niveau par défaut. L’indicateur --src échafaude l’agent en src/toolbox-agent.

Note

Les manifestes de l’agent (agent.manifest.yaml) et les définitions d’agent autonome (agent.yaml) sont déconseillés. À partir des extensions Foundry azd (azure.ai.agents 1.0.0-beta.1), toute la configuration de l’agent hébergé réside dans un seul azure.yaml. Voir Créer un fichier azure.yaml pour les agents hébergés.

Étape 2 : Créer la boîte à outils

Créez la boîte à outils, puis copiez le point de terminaison MCP qu’elle renvoie. Définissez ce point de terminaison en tant que variable d’environnement dans les étapes ultérieures.

Le azure.yaml de l’exemple définit la boîte à outils comme un service azure.ai.toolbox et la connecte au service d’agent hébergé avec uses:. Si vous modifiez la configuration de la boîte à outils, modifiez le service de boîte à outils dans azure.yaml, et non src/toolbox-agent/agent.yaml.

Tout d’abord, pointez les commandes de boîte à outils sur le projet Foundry que vous avez sélectionné lors de l’initialisation. Réutilisez le point de terminaison que l’initialisation a déjà stocké dans votre environnement azd :

azd env set FOUNDRY_PROJECT_ENDPOINT "$(azd env get-value FOUNDRY_PROJECT_ENDPOINT)"

L’exemple comprend un élément toolbox.yaml dans src/toolbox-agent qui définit les deux outils via un même point de terminaison. Créez la boîte à outils à partir de ce fichier :

azd ai toolbox create my-toolbox --from-file ./src/toolbox-agent/toolbox.yaml

La première version devient automatiquement la version par défaut. La commande imprime le point de terminaison MCP versionné de la boîte à outils. Copiez la valeur Endpoint de la sortie. Définissez-la comme variable d’environnement TOOLBOX_ENDPOINT dans les étapes suivantes. Il ressemble à ceci :

https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/my-toolbox/versions/1/mcp?api-version=v1
  1. Ouvrez Visual Studio Code et sélectionnez Foundry Toolkit dans la barre d’activité.

  2. Connectez-vous à votre compte Azure si vous y êtes invité.

  3. Sous Mes ressources, développez votre projet, puis développez Outils.

  4. Dans la vue Outils , sélectionnez l’icône + Ajouter une boîte à outils .

  5. Entrez le nom de la boîte à outils (my-toolbox) et une description.

  6. Sélectionnez Recherche web.

  7. Sélectionnez + Ajouter un outil, choisissez d’ajouter un serveur MCP distant, puis entrez l’URL https://learn.microsoft.com/api/mcpdu serveur. Le serveur est public, donc aucune authentification n’est requise.

  8. Cliquez sur Publier. La publication crée la première version de la boîte à outils.

  9. Copiez le point de terminaison MCP de la boîte à outils. Exécutez la commande suivante et copiez la endpoint valeur à partir de la sortie. Définissez-la comme variable d’environnement TOOLBOX_ENDPOINT dans les étapes suivantes :

    azd ai toolbox show my-toolbox --output json
    

Étape 3 : Approvisionner des ressources Azure

L’agent lit le point de terminaison MCP de la boîte à outils dans la variable d’environnement TOOLBOX_ENDPOINT, que azure.yaml récupère à partir de votre environnement azd. Vous définissez cette valeur dans les étapes suivantes. Provisionnez les ressources Azure de l'agent :

azd provision

Étape 4 : Exécuter l’agent localement

  1. Configurez l’agent local pour qu’il pointe vers votre boîte à outils en définissant ces valeurs dans le fichier .env situé dans src/toolbox-agent. Collez le point de terminaison que vous avez copié à l’étape 2 :

    FOUNDRY_MODEL_NAME=<your-model-deployment-name>
    TOOLBOX_ENDPOINT=<versioned-endpoint-from-step-2>
    

    azd ai agent runinjecte et lit le FOUNDRY_PROJECT_ENDPOINT fichier pour les exécutions .env locales. L’exemple gère pour vous la connexion à la boîte à outils, les en-têtes et l’authentification.

  2. Démarrez l’agent :

    azd ai agent run
    

    Cette commande crée un environnement virtuel, installe des dépendances et sert l’agent sur http://localhost:8088. Les packages en version préliminaire peuvent générer des avertissements pip pendant l’installation. Ces avertissements ne sont pas bloquants.

  3. Dans un terminal séparé, envoyez des requêtes pour tester les outils :

    azd ai agent invoke --local "Find the latest release notes for the Azure CLI on the web."
    azd ai agent invoke --local "How do I create a hosted agent in Microsoft Foundry? Use the Microsoft Learn documentation."
    

Étape 5 : Déployer vers Foundry Agent Service

Stockez le point de terminaison que vous avez copié à l’étape 2 dans votre environnement azd, qui azure.yaml récupère la valeur lors du déploiement. Ensuite, générez et déployez le conteneur de l’agent :

azd env set TOOLBOX_ENDPOINT "<versioned-endpoint-from-step-2>"
azd deploy

Une fois la commande terminée, la sortie affiche des liens vers le playground de l’agent et le point de terminaison de l’agent. Appelez l’agent déployé :

azd ai agent invoke "What's new in Microsoft Foundry? Use the Microsoft Learn documentation."

chemin d’accès du KIT de développement logiciel (SDK) Python

Utilisez les étapes suivantes si vous souhaitez créer la boîte à outils et déployer la version de l’agent hébergé à l’aide du kit de développement logiciel (SDK) Python au lieu du flux CLI Azure développeur ou VS Code.

1. Créer ou choisir un projet Foundry

  1. Ouvrez le portail Foundry et créez un projet Foundry, ou sélectionnez-en un existant.
  2. Dans le projet, déployez un modèle compatible conversation comme gpt-5.4-mini.
  3. Copiez le point de terminaison du projet depuis Vue d’ensemble et le nom du déploiement depuis Build>Deployments.

2. Télécharger l’exemple de boîte à outils pour agent hébergé

Clonez le dépôt d’exemples Foundry :

git clone https://github.com/microsoft-foundry/foundry-samples.git

Créez un dossier de travail pour les scripts de déploiement. Dans ce dossier, créez un .env fichier avec ces valeurs :

FOUNDRY_PROJECT_ENDPOINT=<your-project-endpoint>
AZURE_AI_MODEL_DEPLOYMENT_NAME=<your-model-deployment-name>
FOUNDRY_HOSTED_AGENT_NAME=toolbox-agent
TOOLBOX_NAME=my-toolbox
FOUNDRY_SAMPLE_PATH=<full-path-to-foundry-samples/samples/python/hosted-agents/agent-framework/responses/04-foundry-toolbox/src/agent-framework-agent-with-foundry-toolbox-responses>

Étape 3 : Créer la boîte à outils avec Python

Créez un fichier nommé create_toolbox.py dans le même dossier de travail que .env:

import os

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPToolboxTool, WebSearchToolboxTool
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"].rstrip("/")
toolbox_name = os.environ["TOOLBOX_NAME"]

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
):
    created = project_client.toolboxes.create_version(
        name=toolbox_name,
        description="Toolbox with web search and Microsoft Learn MCP.",
        tools=[
            WebSearchToolboxTool(
                name="web_search",
                search_context_size="medium",
            ),
            MCPToolboxTool(
                server_label="mslearn",
                server_url="https://learn.microsoft.com/api/mcp",
                require_approval="never",
            ),
        ],
    )
    print(f"Created toolbox version {created.version} for {created.name}")

    mcp_endpoint = (
        f"{endpoint}/toolboxes/{created.name}/versions/"
        f"{created.version}/mcp?api-version=v1"
    )
    print(f"Toolbox version: {created.version}")
    print(f"Toolbox MCP endpoint: {mcp_endpoint}")

Exécutez le script :

python create_toolbox.py

L’agent hébergé d’exemple peut localiser la boîte à outils à partir de TOOLBOX_ENDPOINT ou de FOUNDRY_PROJECT_ENDPOINT plus TOOLBOX_NAME. Ce chemin utilise TOOLBOX_NAME: vous n’avez donc pas besoin de stocker le point de terminaison avec version dans .env.

4. Déployer l’agent hébergé avec Python

Créez un fichier nommé deploy_toolbox_agent.py dans le même dossier de travail que .env:

import os
import tempfile
import time
import zipfile
from pathlib import Path

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    AgentEndpointConfig,
    CodeConfiguration,
    CodeDependencyResolution,
    FixedRatioVersionSelectionRule,
    HostedAgentDefinition,
    ProtocolConfiguration,
    ProtocolVersionRecord,
    ResponsesProtocolConfiguration,
    VersionSelector,
)
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
agent_name = os.environ.get("FOUNDRY_HOSTED_AGENT_NAME", "toolbox-agent")
toolbox_name = os.environ["TOOLBOX_NAME"]
sample_path = Path(os.environ["FOUNDRY_SAMPLE_PATH"]).resolve()


def create_code_zip(source_dir: Path) -> Path:
    zip_path = Path(tempfile.gettempdir()) / f"{agent_name}.zip"
    excluded = {".git", ".venv", "__pycache__", ".env"}

    with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zip_file:
        for path in source_dir.rglob("*"):
            if not path.is_file():
                continue
            if any(part in excluded for part in path.parts):
                continue
            zip_file.write(path, path.relative_to(source_dir))

    return zip_path


def wait_for_active_version(project_client: AIProjectClient, version: str) -> None:
    for attempt in range(60):
        time.sleep(10)
        details = project_client.agents.get_version(
            agent_name=agent_name,
            agent_version=version,
        )
        status = details["status"]
        print(f"Provisioning status: {status} (attempt {attempt + 1}/60)")

        if status == "active":
            return

        if status == "failed":
            raise RuntimeError(f"Hosted agent provisioning failed: {dict(details)}")

    raise RuntimeError("Timed out waiting for the hosted agent version to become active.")


code_zip_path = create_code_zip(sample_path)

with (
    code_zip_path.open("rb") as code_stream,
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
):
    original_agent_endpoint = None
    created = None

    try:
        created = project_client.agents.create_version_from_code(
            agent_name=agent_name,
            description="Hosted agent with Foundry Toolbox integration.",
            definition=HostedAgentDefinition(
                cpu="1",
                memory="2Gi",
                code_configuration=CodeConfiguration(
                    runtime="python_3_13",
                    entry_point=["python", "main.py"],
                    dependency_resolution=CodeDependencyResolution.REMOTE_BUILD,
                ),
                environment_variables={
                    "FOUNDRY_PROJECT_ENDPOINT": endpoint,
                    "AZURE_AI_MODEL_DEPLOYMENT_NAME": model_name,
                    "TOOLBOX_NAME": toolbox_name,
                },
                protocol_versions=[
                    ProtocolVersionRecord(protocol="responses", version="2.0.0")
                ],
            ),
            code=code_stream,
        )

        print(f"Created hosted agent version {created.version}")
        wait_for_active_version(project_client, created.version)

        original_agent_endpoint = project_client.agents.get(
            agent_name=agent_name
        ).agent_endpoint
        project_client.agents.update_details(
            agent_name=agent_name,
            agent_endpoint=AgentEndpointConfig(
                version_selector=VersionSelector(
                    version_selection_rules=[
                        FixedRatioVersionSelectionRule(
                            agent_version=created.version,
                            traffic_percentage=100,
                        ),
                    ]
                ),
                protocol_configuration=ProtocolConfiguration(
                    responses=ResponsesProtocolConfiguration()
                ),
            ),
        )

        with project_client.get_openai_client(agent_name=agent_name) as openai_client:
            response = openai_client.responses.create(
                input=(
                    "How do I create a hosted agent in Microsoft Foundry? "
                    "Use the Microsoft Learn documentation."
                ),
            )
            if response.status != "completed":
                raise RuntimeError(f"Agent invocation failed: {response.error}")
            print(response.output_text)
    finally:
        if original_agent_endpoint is not None:
            project_client.agents.update_details(
                agent_name=agent_name,
                agent_endpoint=original_agent_endpoint,
            )

        if created is not None:
            project_client.agents.delete_version(
                agent_name=agent_name,
                agent_version=created.version,
                force=True,
            )

Exécutez le script :

python deploy_toolbox_agent.py

Ce script télécharge l’exemple de boîte à outils en tant que nouvelle version de l’agent hébergé, fait temporairement pointer l’agent hébergé vers cette version, l’invoque avec une question provenant de Microsoft Learn, puis restaure la configuration précédente du point de terminaison une fois l’opération terminée.

5. Vérifier la réponse prise en charge par la boîte à outils

Si vous configurez correctement la boîte à outils, la réponse indique que l’agent hébergé a découvert les outils de la boîte à outils et a répondu en s’appuyant sur la documentation Microsoft Learn.

Nettoyer les ressources

Supprimez les ressources lorsque vous avez terminé afin de cesser d’encourir des frais.

Supprimez la boîte à outils :

azd ai toolbox delete my-toolbox --force

Après avoir supprimé la boîte à outils, son point de terminaison cesse de fonctionner. Retirez-le de src/toolbox-agent/.env et supprimez-le de votre environnement azd :

azd env set TOOLBOX_ENDPOINT ""

Supprimez l’agent et ses ressources Azure :

Warning

Si l’environnement actuel azd a créé le projet Foundry, azd down supprime définitivement le groupe de ressources du projet et tout ce qu’il contient. Si vous avez sélectionné un projet existant pendant l’initialisation, azd down quitte le projet, son groupe de ressources, l’agent hébergé et d’autres ressources de démarrage rapide en place. Pour supprimer les ressources dont vous n’avez plus besoin à partir du projet existant, supprimez-les séparément.

azd down

Supprimez la boîte à outils par nom :

import os

from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(
        endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        credential=credential,
    ) as project_client,
):
    project_client.toolboxes.delete(name=os.environ["TOOLBOX_NAME"])

Si vous avez créé un groupe de ressources ou un projet dédié pour ce guide de démarrage rapide, supprimez-le du portail Azure une fois que vous n’avez plus besoin de la boîte à outils, du déploiement de conversation ou de l’agent hébergé.

Résolution des problèmes

Problème Solution
tools/list ne renvoie aucun outil Microsoft Learn Confirmez que l’outil mslearn dans toolbox.yaml pointe vers https://learn.microsoft.com/api/mcp.
L’agent démarre mais affiche TOOLBOX_ENDPOINT is set but empty ou ne dispose d’aucun outil Définissez TOOLBOX_ENDPOINT sur le point de terminaison versionné de l’étape 2 dans .env pour les exécutions en local, et exécutez azd env set TOOLBOX_ENDPOINT "<endpoint>" avant de déployer.
Les appels au point de terminaison de boîte à outils échouent avec une erreur d’autorisation Vérifiez que chaque requête inclut un jeton Entra limité à https://ai.azure.com/.default. L’exemple gère cela pour vous.
Connection refused lors de l’exécution locale Vérifiez qu’aucun autre processus n’utilise le port 8088.

Ce que vous avez appris

Dans ce guide de démarrage rapide, vous :

  • Construit une boîte à outils qui combine la recherche web et le serveur Microsoft Learn MCP derrière un point de terminaison.
  • Utilisez la boîte à outils à partir d’un agent Python hébergé qui se connecte via le Model Context Protocol à l’aide d’Azure Developer CLI ou du SDK Python.
  • Exécuté l’agent localement ou l’avoir validé à distance et l’avoir déployé sur Foundry Agent Service.

Étape suivante