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.
Important
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 kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
I den här snabbstarten skapar du en verktygslåda som kombinerar två verktyg bakom en hanterad slutpunkt:
- Webbsökning, som motiverar svar i offentliga webbresultat i realtid.
- Microsoft Learn MCP-servern, som motiverar svar i officiell Microsoft dokumentation. Det är en offentlig slutpunkt som inte kräver någon autentisering.
Sedan använder du verktygslådan från en hostad agent skriven i Python. Verktygslådan exponerar en MCP-slutpunkt, så agenten ansluter till en enda URL och identifierar varje verktyg vid körning. Du kan ändra verktygen senare utan att ändra agentkoden.
Om du använder en kodningsagent som GitHub Copilot kan Microsoft Foundry Skill hjälpa dig att skapa verktygslådans slutpunkt, ansluta den till en värdbaserad agent och justera exempelverktygen.
Förutsättningar
Den här snabbstarten bygger på verktygskedjan för värdbaserad agent. Slutför förhandskraven i den värdbaserade agentens snabbstart först, som täcker Azure-prenumerationen, projektroller, Python, Azure Developer CLI (azd) och microsoft.foundry tillägget.
För sökvägen Python SDK använder du avsnittet Python senare i den här artikeln i stället för arbetsflödet Azure Developer CLI eller VS Code. Den vägen skapar verktygslådan med project_client.toolboxes.create_version(...), laddar sedan upp hosted-agent-koden som en ny version och pekar den mot den verktygslådan med namn.
Installera de Python paket som används i den här sökvägen:
pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv
Du behöver ett befintligt Foundry-projekt med en distribuerad chattkompatibel modell. Med Python SDK-spåret i den här snabbstarten skapar du verktygslådan och versionen för den värdbaserade agenten, men det skapar inte något nytt Foundry-projekt eller någon modelldistribution åt dig.
Du behöver också Visual Studio Code med tillägget Microsoft Foundry Toolkit som är inloggad på Azure.
Steg 1: Initiera den värdbaserade agenten
Initiera en värdbaserad agent från foundry-verktygslådans exempel, som ansluter till en verktygslåda via MCP och exponerar dess verktyg för modellen. Du skapar verktygslådan (my-toolbox) i nästa steg och anger dess slutpunkt för agenten. Kör dessa kommandon i en tom katalog.
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
Följ anvisningarna för att välja projektet och en befintlig modelldistribution. När du uppmanas att välja resursallokering för containrar väljer du 1 kärna, 2Gi minne. Agentens containeravbildning behöver mer än standardnivån. Flaggan --src ställer upp agenten som src/toolbox-agent.
Note
Agentmanifest (agent.manifest.yaml) och fristående agentdefinitioner (agent.yaml) är inaktuella. Från och med Foundry-tilläggen azd (azure.ai.agents 1.0.0-beta.1) finns alla värdbaserade agentkonfigurationer i en enda azure.yaml. Se Skapa azure.yaml för värdbaserade agenter.
Steg 2: Skapa verktygslådan
Skapa verktygslådan och kopiera sedan den MCP-slutpunkt som den returnerar. Ange slutpunkten som en miljövariabel i senare steg.
Exemplet definierar verktygslådan azure.yaml som en azure.ai.toolbox tjänst och kopplar den till den värdbaserade agenttjänsten med uses:. Om du ändrar konfigurationen av verktygslådan redigerar du verktygslådetjänsten i azure.yaml, inte src/toolbox-agent/agent.yaml.
Först pekar du kommandona för verktygslådan på det Foundry-projekt som du valde under initieringen. Återanvänd slutpunkten som initieringen redan har lagrat i din azd miljö:
azd env set FOUNDRY_PROJECT_ENDPOINT "$(azd env get-value FOUNDRY_PROJECT_ENDPOINT)"
Exemplet innehåller ett toolbox.yaml i src/toolbox-agent som definierar båda verktygen bakom en slutpunkt. Skapa verktygslådan från filen:
azd ai toolbox create my-toolbox --from-file ./src/toolbox-agent/toolbox.yaml
Den första versionen blir standardversionen automatiskt. Kommandot skriver ut verktygslådans version av MCP-slutpunkten. Kopiera värdet Endpoint från utdata. Ange den som TOOLBOX_ENDPOINT miljövariabel i nästa steg. Det ser ut så här:
https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/my-toolbox/versions/1/mcp?api-version=v1
Öppna Visual Studio Code och välj Foundry Toolkit i aktivitetsfältet.
Logga in på ditt Azure-konto om du uppmanas att göra det.
Under Mina resurser expanderar du projektet och expanderar sedan Verktyg.
I vyn Verktyg väljer du ikonen + Lägg till verktygslåda .
Ange verktygslådans namn (
my-toolbox) och en beskrivning.Välj Webbsökning.
Välj + Lägg till verktyg, välj att lägga till en fjärr-MCP-server och ange serverns URL
https://learn.microsoft.com/api/mcp. Servern är offentlig, så ingen autentisering krävs.Välj Publicera. Publicering skapar den första versionen av verktygslådan.
Kopiera verktygslådans MCP-slutpunkt. Kör följande kommando och kopiera
endpointvärdet från utdata. Ange den somTOOLBOX_ENDPOINTmiljövariabel i nästa steg:azd ai toolbox show my-toolbox --output json
Steg 3: Etablera Azure resurser
Agenten läser verktygslådans MCP-slutpunkt från miljövariabeln TOOLBOX_ENDPOINT, som azure.yaml hämtar från din azd-miljö. Du anger det värdet i nästa steg. Etablera agentens Azure resurser:
azd provision
Steg 4: Kör agenten lokalt
Peka den lokala agenten mot verktygslådan genom att ange dessa värden i
.env-filen isrc/toolbox-agent. Klistra in slutpunkten som du kopierade i steg 2:FOUNDRY_MODEL_NAME=<your-model-deployment-name> TOOLBOX_ENDPOINT=<versioned-endpoint-from-step-2>azd ai agent runinjicerarFOUNDRY_PROJECT_ENDPOINToch läser filen.envför lokala körningar. Exemplet hanterar anslutningen till verktygslådan, HTTP-huvuden och autentisering åt dig.Starta agenten:
azd ai agent runDet här kommandot skapar en virtuell miljö, installerar beroenden och hanterar agenten på
http://localhost:8088. Förhandsgranskningspaket kan generera pip-varningar under installationen. Dessa varningar är inte blockerande.I ett separat terminalfönster anger du prompter som testar verktygen:
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."
Steg 5: Distribuera till Foundry Agent Service
Lagra slutpunkten som du kopierade i Steg 2 i din azd miljö, som azure.yaml löses upp vid driftsättning. Skapa och distribuera sedan agentcontainern:
azd env set TOOLBOX_ENDPOINT "<versioned-endpoint-from-step-2>"
azd deploy
När kommandot är klart visar utdata länkar till agentens lekplats och agentslutpunkten. Anropa den distribuerade agenten:
azd ai agent invoke "What's new in Microsoft Foundry? Use the Microsoft Learn documentation."
sökväg till Python SDK
Använd följande steg om du vill skapa verktygslådan och distribuera den värdbaserade agentversionen med hjälp av Python SDK i stället för Azure Developer CLI- eller VS Code-flödet.
1. Skapa eller välj ett Foundry-projekt
- Öppna Foundry-portalen och skapa ett Foundry-projekt eller välj ett befintligt.
- I projektet distribuerar du en chattkompatibel modell som
gpt-5.4-mini. - Kopiera projektslutpunkten från Översikt och distributionsnamnet frånByggdistributioner>.
2. Ladda ned hosted-agent-exemplet för verktygslådan
Klona lagringsplatsen för Foundry-exempel:
git clone https://github.com/microsoft-foundry/foundry-samples.git
Skapa en arbetsmapp för distributionsskripten. I den mappen skapar du en .env fil med följande värden:
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>
Steg 3: Skapa verktygslådan med Python
Skapa en fil med namnet create_toolbox.py i samma arbetsmapp som .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}")
Kör skriptet:
python create_toolbox.py
Den värdbaserade agenten kan hitta verktygslådan antingen från TOOLBOX_ENDPOINT eller från FOUNDRY_PROJECT_ENDPOINT samt TOOLBOX_NAME. Den här sökvägen använder TOOLBOX_NAME, så du behöver inte lagra den versionerade slutpunkten i .env.
4. Distribuera den värdbaserade agenten med Python
Skapa en fil med namnet deploy_toolbox_agent.py i samma arbetsmapp som .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,
)
Kör skriptet:
python deploy_toolbox_agent.py
Det här skriptet laddar upp verktygslådeexemplet som en ny värdbaserad agentversion, pekar den värdbaserade agenten tillfälligt på den versionen, anropar den med en Microsoft Learn-fråga och återställer den tidigare slutpunktskonfigurationen när den är klar.
5. Verifiera det verktygslådebaserade svaret
Om du konfigurerar verktygslådan korrekt visar svaret att den värdbaserade agenten identifierade verktygslådans verktyg och svarade med hjälp av Microsoft Learn-dokumentationen.
Rensa resurser
Ta bort resurserna när du är klar så att inga avgifter fortsätter att debiteras.
Ta bort verktygslådan:
azd ai toolbox delete my-toolbox --force
När du tar bort verktygslådan slutar dess ändpunkt att fungera. Ta bort den från src/toolbox-agent/.env och rensa den från din azd miljö:
azd env set TOOLBOX_ENDPOINT ""
Ta bort agenten och dess Azure resurser:
Varning
Om den aktuella azd miljön skapade Foundry-projektet azd down tar du bort projektets resursgrupp permanent och allt i den. Om du valde ett befintligt projekt under initieringen azd down lämnar du projektet, dess resursgrupp, den värdbaserade agenten och andra snabbstartsresurser på plats. Om du vill ta bort resurser som du inte längre behöver från det befintliga projektet tar du bort dem separat.
azd down
Ta bort verktygslådan efter namn:
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"])
Om du har skapat en dedikerad resursgrupp eller ett projekt för den här snabbstarten tar du bort den från Azure portalen när du inte längre behöver verktygslådan, chattdistributionen eller den värdbaserade agenten.
Troubleshooting
| Issue | Lösning |
|---|---|
tools/listreturnerar inga Microsoft Learn-verktyg |
Kontrollera att verktyget mslearn i toolbox.yaml pekar på https://learn.microsoft.com/api/mcp. |
Agenten startar men rapporterar TOOLBOX_ENDPOINT is set but empty eller har inga verktyg |
Ange TOOLBOX_ENDPOINT till den versionerade slutpunkten från steg 2 i .env för lokala körningar och kör azd env set TOOLBOX_ENDPOINT "<endpoint>" innan du distribuerar. |
| Anrop till verktygslådans slutpunkt misslyckas med ett auktoriseringsfel | Bekräfta att varje begäran innehåller en Entra-token som är begränsad till https://ai.azure.com/.default. Exemplet hanterar detta åt dig. |
Connection refused vid lokal körning |
Se till att ingen annan process använder port 8088. |
Det här har du lärt dig
I den här snabbstarten kommer du att göra följande:
- Skapat en verktygslåda som kombinerar webbsökning och Microsoft Learn MCP-server bakom en slutpunkt.
- Förbrukade verktygslådan från en Python värdbaserad agent som ansluter via Model Context Protocol med hjälp av Azure Developer CLI eller Python SDK.
- Körde agenten lokalt eller verifierade den via fjärranslutning och distribuerade den till Foundry Agent Service.