Quickstart: Een werkset bouwen en gebruiken met een gehoste agent

Important

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

In deze quickstart bouwt u een werkset die twee hulpprogramma's achter één beheerd eindpunt combineert:

  • Zoeken op het web, waarmee antwoorden worden gebaseerd op openbare realtime webresultaten.
  • De Microsoft Learn MCP-server, die antwoorden baseert op officiële Microsoft-documentatie. Het is een openbaar eindpunt waarvoor geen verificatie is vereist.

Vervolgens gebruikt u de werkset van een gehoste agent die is geschreven in Python. In de werkset wordt één MCP-eindpunt weergegeven, zodat de agent verbinding maakt met één URL en elk hulpprogramma tijdens runtime detecteert. U kunt de hulpprogramma's later wijzigen zonder agentcode te wijzigen.

Als u een coderingsagent zoals GitHub Copilot gebruikt, kan de Microsoft Foundry Skill helpen bij het bouwen van het werkseteindpunt, het verbinden met een gehoste agent en het aanpassen van de voorbeeldhulpprogramma's.

Prerequisites

Deze quickstart bouwt voort op de hosted-agent toolchain. Voltooi eerst de vereisten in de quickstart voor gehoste agents, die betrekking hebben op het Azure-abonnement, projectrollen, Python, de Azure Developer CLI (azd) en de microsoft.foundry extensie.

Voor het Python SDK-pad gebruikt u de sectie Python verderop in dit artikel in plaats van de Azure Developer CLI of VS Code-werkstroom. Die route maakt de toolbox met project_client.toolboxes.create_version(...), uploadt vervolgens de code van de hosted-agent als een nieuwe versie en verwijst die versie vervolgens op naam naar die toolbox.

Installeer de Python pakketten die in dit pad worden gebruikt:

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

U hebt een bestaand Foundry-project nodig met een geïmplementeerd model dat geschikt is voor chats. Met de Python SDK-route in deze quickstart maak je de toolbox en de hosted-agentversie, maar er wordt niet automatisch een nieuw Foundry-project opgezet en ook geen modelimplementatie voor je aangemaakt.

U hebt ook Visual Studio Code nodig met de Microsoft Foundry Toolkit-extensie, aangemeld bij Azure.

Stap 1: De gehoste agent initialiseren

Initialiseer een gehoste agent uit het foundry-werksetvoorbeeld, dat verbinding maakt met een werkset via MCP en de bijbehorende hulpprogramma's beschikbaar maakt voor het model. U maakt de toolbox (my-toolbox) in de volgende stap en laat de agent naar het eindpunt verwijzen. Voer deze opdrachten uit in een lege map.

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

Volg de aanwijzingen om uw project en een bestaande modelimplementatie te selecteren. Wanneer u wordt gevraagd om de toewijzing van containerresources te selecteren, kiest u 1 kerngeheugen, 2Gi-geheugen. De containerimage van de agent vereist meer dan het standaardniveau. De --src vlag verwijst de agent naar src/toolbox-agent.

Opmerking

Agentmanifesten (agent.manifest.yaml) en zelfstandige agentdefinities (agent.yaml) zijn afgeschaft. Vanaf de Foundry-extensies azd (azure.ai.agents 1.0.0-beta.1) bevindt alle gehoste agentconfiguratie zich in één azure.yaml. Zie Author azure.yaml voor gehoste agents.

Stap 2: De werkset maken

Maak de toolbox en kopieer daarna het MCP-eindpunt dat wordt weergegeven. Stel dat eindpunt in latere stappen in als een omgevingsvariabele.

Het voorbeeld azure.yaml definieert de toolbox als een azure.ai.toolbox service en verbindt deze met de gehoste agentservice met uses:. Als u de configuratie van de werkset wijzigt, bewerkt u de werksetservice in azure.yaml, niet src/toolbox-agent/agent.yaml.

Wijs eerst de toolboxopdrachten naar het Foundry-project dat u tijdens de initialisatie hebt geselecteerd. Hergebruik de endpoint die tijdens de initialisatie al is opgeslagen in uw azd-omgeving:

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

Het voorbeeld bevat een toolbox.yaml in src/toolbox-agent die beide hulpprogramma's achter één eindpunt definieert. Maak de werkset op basis van dat bestand:

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

De eerste versie wordt automatisch de standaardversie. Met de opdracht wordt het MCP-endpoint met versienummer van de toolbox weergegeven. Kopieer de Endpoint waarde uit de uitvoer. Stel deze in de volgende stappen in als de TOOLBOX_ENDPOINT omgevingsvariabele. Dit ziet er als volgt uit:

https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/my-toolbox/versions/1/mcp?api-version=v1
  1. Open Visual Studio Code en selecteer Foundry Toolkit in de activiteitenbalk.

  2. Meld u aan bij uw Azure-account als u hierom wordt gevraagd.

  3. Vouw onder Mijn resources uw project uit en vouw vervolgens Hulpprogramma's open.

  4. Selecteer in de Tools-weergave het pictogram + Toolbox toevoegen.

  5. Voer de naam van de werkset (my-toolbox) en een beschrijving in.

  6. Selecteer Zoeken op internet.

  7. Selecteer + Hulpprogramma toevoegen, kies ervoor om een externe MCP-server toe te voegen en voer de server-URL https://learn.microsoft.com/api/mcpin. De server is openbaar, dus er is geen verificatie vereist.

  8. Selecteer Publiceren. Als u publiceert, wordt de eerste versie van de werkset gemaakt.

  9. Kopieer het MCP-eindpunt van de werkset. Voer de volgende opdracht uit en kopieer de endpoint waarde uit de uitvoer. Stel deze in de volgende stappen in als de TOOLBOX_ENDPOINT omgevingsvariabele:

    azd ai toolbox show my-toolbox --output json
    

Stap 3: Azure resources inrichten

De agent leest het MCP-eindpunt van de toolbox uit de omgevingsvariabele TOOLBOX_ENDPOINT, die azure.yaml wordt afgeleid uit uw azd omgeving. U stelt die waarde in de volgende stappen in. Richt de Azure-resources van de agent in:

azd provision

Stap 4: Voer de agent lokaal uit

  1. Wijs de lokale agent aan uw werkset door deze waarden in te stellen in het .env bestand in src/toolbox-agent. Plak het eindpunt dat u in stap 2 hebt gekopieerd:

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

    azd ai agent run injecteert FOUNDRY_PROJECT_ENDPOINT en leest het .env bestand voor lokale uitvoeringen. Het voorbeeld verwerkt de toolboxverbinding, headers en authenticatie voor u.

  2. Start de agent:

    azd ai agent run
    

    Met deze opdracht maakt u een virtuele omgeving, installeert u afhankelijkheden en dient u de agent op http://localhost:8088. Previewpakketten kunnen tijdens de installatie pip-waarschuwingen veroorzaken. Deze waarschuwingen zijn niet-blokkerend.

  3. Verzend in een afzonderlijke terminal prompts waarmee de hulpprogramma's worden uitgevoerd:

    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."
    

Stap 5: Implementeren in Foundry Agent Service

Sla het eindpunt op dat u in stap 2 in uw azd omgeving hebt gekopieerd. Dit azure.yaml wordt opgelost tijdens de implementatie. Bouw en implementeer vervolgens de agentcontainer:

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

Wanneer de opdracht is voltooid, ziet u in de uitvoer koppelingen naar de agentspeelplaats en het agenteindpunt. Roep de uitgerolde agent aan:

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

Pad naar Python SDK

Gebruik de volgende stappen als u de werkset wilt maken en de versie van de hosted-agent wilt implementeren met behulp van de Python SDK in plaats van de Azure Developer CLI of VS Code-stroom.

1. Een Foundry-project maken of kiezen

  1. Open de Foundry-portal en maak een Foundry-project of selecteer een bestaand project.
  2. Implementeer in het project een model dat geschikt is voor chats, zoals gpt-5.4-mini.
  3. Kopieer het projecteindpunt uit Overzicht en de implementatienaam uit Build>Deployments.

2. Download het hosted-agent-voorbeeld van de toolbox

Kloon de Foundry-voorbeeldrepository:

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

Maak een werkmap voor de implementatiescripts. Maak in die map een .env bestand met deze waarden:

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>

Stap 3: De werkset maken met Python

Maak een bestand met de naam create_toolbox.py in dezelfde werkmap als .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}")

Voer het script uit:

python create_toolbox.py

De gehoste voorbeeldagent kan de toolbox ophalen vanuit TOOLBOX_ENDPOINT of vanuit FOUNDRY_PROJECT_ENDPOINT in combinatie met TOOLBOX_NAME. Dit pad maakt gebruik van TOOLBOX_NAME, zodat u het versie-eindpunt niet hoeft op te slaan in .env.

4. Implementeer de gehoste agent met Python

Maak een bestand met de naam deploy_toolbox_agent.py in dezelfde werkmap als .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,
            )

Voer het script uit:

python deploy_toolbox_agent.py

Met dit script wordt het werksetvoorbeeld geüpload als een nieuwe versie van een gehoste agent, wordt de gehoste agent tijdelijk naar die versie verwezen, wordt het aangeroepen met een Microsoft Learn-vraag en wordt de vorige eindpuntconfiguratie hersteld wanneer deze is voltooid.

5. Controleer het antwoord vanuit de toolbox

Als u de werkset correct configureert, ziet u in het antwoord dat de gehoste agent de werksethulpprogramma's heeft gedetecteerd en beantwoord met behulp van Microsoft Learn-documentatie.

De hulpbronnen opschonen

Verwijder de resources wanneer u klaar bent, zodat er geen kosten meer in rekening worden gebracht.

Verwijder de gereedschapskist:

azd ai toolbox delete my-toolbox --force

Nadat u de toolbox hebt verwijderd, werkt het eindpunt niet meer. Verwijder het uit src/toolbox-agent/.env en wis deze uit uw azd omgeving:

azd env set TOOLBOX_ENDPOINT ""

Verwijder de agent en de bijbehorende Azure resources:

Warning

Als de huidige azd-omgeving het Foundry-project heeft gemaakt, wordt met azd down de resourcegroep van het Foundry-project en alles daarin permanent verwijderd. Als u tijdens de initialisatie een bestaand project hebt geselecteerd, azd down blijft het project, de bijbehorende resourcegroep, de gehoste agent en andere quickstart-resources aanwezig. Als u resources wilt verwijderen die u niet meer nodig hebt uit het bestaande project, verwijdert u ze afzonderlijk.

azd down

Verwijder de werkset op naam:

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"])

Als u voor deze quickstart een toegewezen resourcegroep of project hebt gemaakt, verwijdert u deze uit de Azure-portal nadat u de werkset, chatimplementatie of gehoste agent niet meer nodig hebt.

Probleemoplossingsproces

Issue Solution
tools/listretourneert geen Microsoft Learn-hulpprogramma's Bevestig dat het mslearn hulpprogramma in toolbox.yaml verwijst naar https://learn.microsoft.com/api/mcp.
De agent start, maar meldt TOOLBOX_ENDPOINT is set but empty of heeft geen hulpmiddelen Stel TOOLBOX_ENDPOINT in op de endpoint met versie uit stap 2 in .env voor lokale uitvoer, en voer azd env set TOOLBOX_ENDPOINT "<endpoint>" uit voordat u implementeert.
Aanroepen naar het werkseteindpunt mislukken met een autorisatiefout Bevestig dat elke aanvraag een Entra-token bevat dat is gericht op https://ai.azure.com/.default. Het voorbeeld regelt dit voor u.
Connection refused bij lokale uitvoering Zorg ervoor dat er geen ander proces poort 8088gebruikt.

Wat u hebt geleerd

In deze quickstart gaat u als volgt te werk:

  • Een werkset gebouwd die webzoekopdrachten en de Microsoft Learn MCP-server achter één eindpunt combineert.
  • Gebruikt de werkset van een Python gehoste agent die verbinding maakt via het Model Context Protocol met behulp van Azure Developer CLI of de Python SDK.
  • Agent lokaal uitgevoerd of op afstand gevalideerd en uitgerold naar Foundry Agent Service.

Volgende stap