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.
Important
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 ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva creerai una toolbox che combina due strumenti dietro a un unico endpoint gestito:
- Ricerca Web, che giustifica le risposte nei risultati Web pubblici in tempo reale.
- Il server MCP Microsoft Learn, che giustifica le risposte nella documentazione ufficiale Microsoft. Si tratta di un endpoint pubblico che non richiede l'autenticazione.
Si usa quindi la toolbox da un agente ospitato che è scritto in Python. La casella degli strumenti espone un endpoint MCP, quindi l'agente si connette a un singolo URL e individua ogni strumento in fase di esecuzione. È possibile modificare gli strumenti in un secondo momento senza modificare il codice dell'agente.
Prerequisiti
Questo avvio rapido si basa sulla toolchain dell'agente ospitato. Completare prima i prerequisiti nell'Avvio rapido dell'agente ospitato, che illustrano la sottoscrizione Azure, i ruoli del progetto, Python, Azure Developer CLI (azd) e l'estensione microsoft.foundry.
Per il percorso Python SDK, usare la sezione Python più avanti in questo articolo invece del flusso di lavoro Azure Developer CLI o VS Code. Questa procedura crea la toolbox con project_client.toolboxes.create_version(...), quindi carica il codice dell'hosted-agent come nuova versione e lo associa a quella toolbox per nome.
Installare i pacchetti Python usati in questo percorso:
pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv
È necessario un progetto Foundry esistente con un modello con supporto per la chat distribuito. Il percorso Python SDK in questa guida introduttiva crea la casella degli strumenti e la versione dell'agente ospitato, ma non esegue lo scaffolding di un nuovo progetto Foundry o crea automaticamente una distribuzione del modello.
È anche necessario Visual Studio Code con l'estensione Microsoft Foundry Toolkit, connesso a Azure.
Passaggio 1: Inizializzare l'agente ospitato
Inizializzare un agente ospitato dall'esempio della casella degli strumenti Foundry, che si connette a una casella degli strumenti tramite MCP ed espone i relativi strumenti al modello. Nel passaggio successivo, crei la toolbox (my-toolbox) e indirizzi l'agente al suo endpoint. Eseguire questi comandi in una directory vuota.
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
Segui le indicazioni per selezionare il tuo progetto e una distribuzione di modello esistente. Quando viene richiesto di selezionare l'allocazione delle risorse del contenitore, scegliere 1 core, 2Gi memoria. L'immagine del container dell'agente richiede un livello superiore a quello predefinito. Il flag --src consente di eseguire lo scaffolding dell'agente in src/toolbox-agent.
Note
I manifesti dell'agente (agent.manifest.yaml) e le definizioni degli agenti autonomi (agent.yaml) sono deprecati. A partire dalle estensioni Foundry azd (azure.ai.agents 1.0.0-beta.1), tutta la configurazione dell'agente ospitato si trova in un singolo oggetto azure.yaml. Vedere Creare Azure.yaml per gli agenti ospitati
Passaggio 2: Creare la casella degli strumenti
Creare la casella degli strumenti e quindi copiare l'endpoint MCP restituito. Impostare tale endpoint come variabile di ambiente nei passaggi successivi.
Nell'esempio, azure.yaml definisce la toolbox come un servizio azure.ai.toolbox e la connette al servizio agent ospitato con uses:. Se si modifica la configurazione della casella degli strumenti, modificare il servizio casella degli strumenti in azure.yaml, non src/toolbox-agent/agent.yaml.
In primo luogo, puntare i comandi della casella degli strumenti nel progetto Foundry selezionato durante l'inizializzazione. Riutilizza l'endpoint già memorizzato durante l'inizializzazione nell'ambiente azd:
azd env set FOUNDRY_PROJECT_ENDPOINT "$(azd env get-value FOUNDRY_PROJECT_ENDPOINT)"
L'esempio include un toolbox.yaml in src/toolbox-agent che definisce entrambi gli strumenti dietro un unico endpoint. Crea la cassetta degli attrezzi da quel file:
azd ai toolbox create my-toolbox --from-file ./src/toolbox-agent/toolbox.yaml
La prima versione diventa automaticamente la versione predefinita. Il comando stampa l'endpoint MCP con versioning della casella degli strumenti. Copiare il valore Endpoint dall'output. Impostarlo come TOOLBOX_ENDPOINT variabile di ambiente nei passaggi successivi. Avrà l'aspetto seguente:
https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/my-toolbox/versions/1/mcp?api-version=v1
Aprire Visual Studio Code e selezionare Foundry Toolkit nella barra delle attività.
Se richiesto, accedere all'account Azure.
In Risorse personali espandere il progetto e quindi Strumenti.
Nella visualizzazione Strumenti selezionare l'icona + Aggiungi casella degli strumenti .
Immettere il nome della casella degli strumenti (
my-toolbox) e una descrizione.Selezionare Ricerca Web.
Selezionare + Aggiungi strumento, scegliere di aggiungere un server MCP remoto e immettere l'URL
https://learn.microsoft.com/api/mcpdel server . Il server è pubblico, quindi non è necessaria alcuna autenticazione.Seleziona Pubblica. La pubblicazione genera la prima versione della toolbox.
Copiare l'endpoint MCP della casella degli strumenti. Eseguire il comando seguente e copiare il
endpointvalore dall'output. Impostarlo comeTOOLBOX_ENDPOINTvariabile di ambiente nei passaggi successivi:azd ai toolbox show my-toolbox --output json
Passaggio 3: Effettuare il provisioning delle risorse di Azure
L'agente legge l'endpoint MCP della casella degli strumenti dalla variabile di ambiente TOOLBOX_ENDPOINT, che azure.yaml risolve dall'ambiente azd. Questo valore viene impostato nei passaggi successivi. Effettuare il provisioning delle risorse Azure dell'agente:
azd provision
Passaggio 4: Eseguire l'agente a livello locale
Indirizzare l'agente locale alla casella degli strumenti impostando questi valori nel file
.envinsrc/toolbox-agent. Incollare l'endpoint copiato nel passaggio 2:FOUNDRY_MODEL_NAME=<your-model-deployment-name> TOOLBOX_ENDPOINT=<versioned-endpoint-from-step-2>azd ai agent runiniettaFOUNDRY_PROJECT_ENDPOINTe legge il file.envper le esecuzioni in locale. L'esempio gestisce automaticamente per te la connessione al toolbox, gli header e l'autenticazione.Avvia l'agente:
azd ai agent runQuesto comando crea un ambiente virtuale, installa le dipendenze e gestisce l'agente in
http://localhost:8088. I pacchetti di anteprima possono generare avvisi pip durante l'installazione. Questi avvisi non sono bloccanti.In un terminale separato inviare richieste che eseguino gli strumenti:
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."
Passaggio 5. Eseguire la distribuzione in Servizio agenti Foundry
Salvare l'endpoint copiato nel passaggio 2 nell'ambiente azd, che azure.yaml risolve al momento della distribuzione. Compilare e distribuire quindi il contenitore dell'agente:
azd env set TOOLBOX_ENDPOINT "<versioned-endpoint-from-step-2>"
azd deploy
Al termine dell'esecuzione del comando, l'output mostra i collegamenti al playground dell'agente e all'endpoint dell'agente. Richiamare l'agente distribuito:
azd ai agent invoke "What's new in Microsoft Foundry? Use the Microsoft Learn documentation."
Percorso dell'SDK di Python
Usare la procedura seguente se si vuole creare la casella degli strumenti e distribuire la versione dell'agente ospitato usando Python SDK anziché il flusso dell'interfaccia della riga di comando per sviluppatori Azure o vs Code.
1. Creare o scegliere un progetto Foundry
- Aprire il portale di Foundry e creare un progetto Foundry oppure selezionare un progetto esistente.
- Nel progetto distribuire un modello che supporta la chat,
gpt-5.4-miniad esempio . - Copia l'endpoint del progetto da Panoramica e il nome della distribuzione da Build>Deployments.
2. Scaricare l'esempio di agente ospitato nella casella degli strumenti
Clonare il repository degli esempi di Foundry:
git clone https://github.com/microsoft-foundry/foundry-samples.git
Creare una cartella di lavoro per gli script di distribuzione. In tale cartella creare un .env file con questi valori:
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>
Passaggio 3: Creare la casella degli strumenti con Python
Creare un file denominato create_toolbox.py nella stessa cartella di lavoro di .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}")
toolbox = project_client.toolboxes.get(name=toolbox_name)
mcp_endpoint = (
f"{endpoint}/toolboxes/{toolbox.name}/versions/"
f"{toolbox.default_version}/mcp?api-version=v1"
)
print(f"Default toolbox version: {toolbox.default_version}")
print(f"Toolbox MCP endpoint: {mcp_endpoint}")
Eseguire lo script:
python create_toolbox.py
L'agente ospitato di esempio può risolvere la casella degli strumenti da TOOLBOX_ENDPOINT o da FOUNDRY_PROJECT_ENDPOINT più TOOLBOX_NAME. Questo percorso usa TOOLBOX_NAME, quindi non è necessario archiviare l'endpoint con versione in .env.
4. Distribuire l'agente ospitato con Python
Creare un file denominato deploy_toolbox_agent.py nella stessa cartella di lavoro di .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."
),
)
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,
)
Eseguire lo script:
python deploy_toolbox_agent.py
Questo script carica l'esempio della casella degli strumenti come nuova versione dell'agente ospitato, punta temporaneamente l'agente ospitato a tale versione, lo richiama con una domanda di Microsoft Learn e ripristina la configurazione dell'endpoint precedente al termine.
5. Verifica la risposta generata tramite Toolbox
Se configuri correttamente il toolbox, la risposta mostra che l'agente ospitato ha rilevato gli strumenti del toolbox e ha risposto utilizzando la documentazione di Microsoft Learn.
Pulire le risorse
Elimina le risorse quando hai finito, per evitare ulteriori addebiti.
Eliminare la casella degli strumenti:
azd ai toolbox delete my-toolbox --force
Dopo aver eliminato la casella degli strumenti, l'endpoint smette di funzionare. Rimuoverlo da src/toolbox-agent/.env e cancellarlo dall'ambiente azd:
azd env set TOOLBOX_ENDPOINT ""
Eliminare l'agente e le relative risorse Azure:
Avvertimento
azd down Elimina definitivamente ogni risorsa nel gruppo di risorse, incluso il progetto Foundry, le distribuzioni di modelli, registro contenitori e l'agente ospitato. Se è stato effettuato il provisioning in un gruppo di risorse che contiene altre risorse, tali risorse vengono eliminate anche.
azd down
Eliminare la casella degli strumenti in base al nome:
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"])
Se è stato creato un gruppo di risorse o un progetto dedicato per questa guida introduttiva, eliminarlo dal portale di Azure dopo che la casella degli strumenti, la distribuzione della chat o l'agente ospitato non sono più necessari.
Troubleshooting
| Issue | Soluzione |
|---|---|
tools/list non restituisce alcuno strumento di Microsoft Learn |
Verificare che lo strumento mslearn in toolbox.yaml punti a https://learn.microsoft.com/api/mcp. |
L'agente si avvia, ma segnala TOOLBOX_ENDPOINT is set but empty o non ha strumenti |
Impostare TOOLBOX_ENDPOINT sull'endpoint con versioning del passaggio 2 in .env per le esecuzioni in locale ed eseguire azd env set TOOLBOX_ENDPOINT "<endpoint>" prima di effettuare la distribuzione. |
| Le chiamate all'endpoint della casella degli strumenti hanno esito negativo con un errore di autorizzazione | Conferma che ogni richiesta includa un token Entra con ambito https://ai.azure.com/.default. L'esempio gestisce automaticamente questa operazione. |
Connection refused in esecuzione locale |
Verificare che nessun altro processo usi la porta 8088. |
Cosa si è appreso
Questo avvio rapido spiega come:
- È stato creato un set di strumenti che combina la ricerca sul Web e il server MCP di Microsoft Learn in un unico endpoint.
- Usare il toolbox da un agente Python ospitato che si connette tramite il Model Context Protocol usando Azure Developer CLI o l'SDK Python.
- Ha eseguito l'agente in locale oppure lo ha validato da remoto e lo ha distribuito in Foundry Agent Service.