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.
Questo articolo illustra come distribuire un agente in contenitori nel servizio Foundry Agent usando l'interfaccia della riga di comando di Azure Developer (azd), Python SDK o l'API REST. Scegliere un metodo di distribuzione usando il selettore nella parte superiore dell'articolo. Usare gli approcci SDK o REST quando si vogliono gestire le distribuzioni degli agenti direttamente dalle applicazioni o dai servizi personali.
Se si esegue la distribuzione per la prima volta o si vuole una procedura dettagliata guidata, vedere Avvio rapido: Creare e distribuire un agente ospitato. Azure Developer CLI (azd) e l'estensione di VS Code gestiscono automaticamente la compilazione, la pubblicazione, la gestione delle versioni e la configurazione RBAC.
Suggerimento
Preferisce un ciclo interno senza Docker? È anche possibile distribuire un agente ospitato direttamente dal codice sorgente (anteprima): caricare un .zip oggetto del codice Python o .NET e la piattaforma compila e lo ospita automaticamente.
Ciclo di vita dell'implementazione
Ogni distribuzione dell'agente ospitato segue questa sequenza:
- Compila e invia - Crea un'immagine del contenitore che includa il codice dell'agente e inviala ad Registro Azure Container.
- Crea una versione dell'agente - Registra l'immagine con Foundry Agent Service. La piattaforma fornisce l'infrastruttura e crea un'identità dedicata dell'agente Entra.
-
Verificare lo stato - Attendere che la versione raggiunga lo stato
active. - Invoke : inviare richieste all'endpoint dedicato dell'agente.
Prerequisiti
- Progetto Microsoft Foundry.
- Codice dell'agente che usa un framework supportato.
- Docker Desktop installato per lo sviluppo di contenitori locali.
- interfaccia della riga di comando di Azure versione 2.80 o successiva.
Autorizzazioni necessarie
Per distribuire un agente ospitato, devi disporre del ruolo Foundry Project Manager a livello di progetto. Questo ruolo concede le autorizzazioni del piano dati per creare e aggiornare gli agenti, oltre alla possibilità di creare assegnazioni di ruolo per l'identità dell'agente creata dalla piattaforma, se necessario. Per una suddivisione dettagliata delle autorizzazioni coinvolte, vedi Riferimento alle autorizzazioni dell'agente ospitato.
Importante
I ruoli di Controllo degli accessi in base al ruolo di Foundry sono stati recentemente rinominati. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager erano precedentemente denominati Azure AI User, Azure AI Owner, Azure AI Account Owner e Azure AI Project Manager. È possibile che i nomi precedenti vengano visualizzati in alcune posizioni durante l'esecuzione della ridenominazione. Gli ID ruolo e le autorizzazioni di base sono invariati dalla ridenominazione.
La piattaforma crea un'identità dell'agente Microsoft Entra dedicata per ogni agente ospitato in fase di distribuzione. Questa identità è un'entità servizio usata dal contenitore in esecuzione per chiamare modelli e strumenti. Non è necessario configurare manualmente le identità gestite. Per impostazione predefinita, l'identità dell'agente può accedere all'inferenza del modello tramite l'endpoint del progetto e l'archiviazione della sessione. Per le risorse esterne (ad esempio una propria archiviazione di Azure), assegnare manualmente i ruoli RBAC al Microsoft Entra ID dell'agente. Per altre informazioni, vedere Accesso dell'agente oltre le impostazioni predefinite.
Se si usa azd o l'estensione VS Code, gli strumenti gestiscono automaticamente la maggior parte delle assegnazioni RBAC, compresa l'assegnazione del ruolo Lettore del repository di Registro Container per l'identità gestita del progetto (pull di immagini).
Per altre informazioni, vedere Autenticazione e autorizzazione.
Importante
Il supporto per l'inserimento del Registro Azure Container dell'agente ospitato dietro una rete privata (endpoint privato con accesso alla rete pubblica disabilitato) dipende dal momento in cui è stato creato il progetto Foundry. I progetti creati dopo il 25 giugno 2026 supportano un registro privato. I progetti creati prima di tale data richiedono che il Registro di sistema sia raggiungibile tramite l'endpoint pubblico in modo che la piattaforma possa eseguire il pull dell'immagine. I progetti esistenti non sono interessati. Per l'elenco completo dei vincoli di rete, vedere Limitazioni.
Requisiti dei contenitori
L'immagine del container deve soddisfare i requisiti seguenti per essere eseguita sulla piattaforma Hosted agent.
Importante
La piattaforma di hosting richiede immagini del contenitore x86_64 (linux/amd64). Se si usa Apple Silicon o altri computer basati su ARM, usare docker build --platform linux/amd64 . per evitare di produrre un'immagine ARM incompatibile.
Librerie di protocolli
Gli agenti ospitati comunicano con il gateway Foundry tramite librerie di protocolli. Scegliere il protocollo che corrisponde al modello di interazione dell'agente:
| Protocollo | libreria Python | libreria .NET | Endpoint | Migliore per |
|---|---|---|---|---|
| Risposte | azure-ai-agentserver-responses |
Azure.AI.AgentServer.Responses |
/responses |
Chatbot conversazionali, streaming, più turni con cronologia gestita dalla piattaforma |
| Invocazioni | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations |
Ricevitori webhook, elaborazione non conversazionale, flussi di lavoro asincroni personalizzati |
| Invocazioni (WebSocket) | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations_ws |
Streaming bidirezionale: agenti vocali in tempo reale, supporti interattivi |
Il protocollo WebSocket usa l'identificatore invocations_ws e viene fornito nello stesso azure-ai-agentserver-invocations pacchetto della route HTTP /invocations , in modo che un contenitore possa servire entrambi. Usalo quando hai bisogno di uno streaming full-duplex continuo, ad esempio per inviare il PCM del microfono all'agente e ricevere in risposta audio sintetico. Per gli scenari vocali, vedere Creare un agente vocale con agenti ospitati.
Un singolo contenitore può esporre più protocolli contemporaneamente dichiarandoli quando si crea l'agente, nel protocols campo del azure.ai.agent servizio in azure.yaml, una chiamata SDK o una richiesta API REST e importando le librerie necessarie. Usare le librerie di protocolli all'interno del framework esistente, sia che si tratti di Microsoft Agent Framework, LangChain o codice personalizzato.
Libreria di protocolli di risposta
Le librerie Python e .NET per il protocollo Risposte implementano l'API risposte di intelligenza artificiale Azure. Importare il pacchetto e implementare l'interfaccia IResponseHandler . La libreria gestisce il routing, lo streaming con eventi inviati dal server ( SSE), l'esecuzione in background, l'annullamento, la memorizzazione nella cache e la gestione del ciclo di vita delle risposte.
IResponseHandler
IResponseHandler è l'astrazione di base implementata. La libreria chiama CreateAsync per ogni richiesta in ingresso e consegna il IAsyncEnumerable<ResponseStreamEvent> restituito ai client attraverso la crittografia del servizio di archiviazione.
public class EchoHandler : ResponseHandler
{
public override IAsyncEnumerable<ResponseStreamEvent> CreateAsync(
CreateResponse request,
ResponseContext context,
CancellationToken cancellationToken)
{
return new TextResponse(context, request,
createText: async ct =>
{
var input = await context.GetInputTextAsync(cancellationToken: ct);
return $"Echo: {input}";
});
}
}
ResponseEventStream
ResponseEventStream gestisce automaticamente sequenceNumber, outputIndex, contentIndex, itemId e il ciclo di vita completo Response. Ogni yield return esegue il mapping uno-a-uno a un evento di crittografia del servizio di archiviazione, quindi non è necessario tenere traccia di questo stato manualmente.
Modalità di streaming e in background
- Modalità di streaming (impostazione predefinita): gli eventi SSE vengono recapitati in tempo reale al client connesso.
-
Modalità in background: il gestore viene eseguito completamente anche senza un client di crittografia del servizio di archiviazione connesso. Gli eventi vengono memorizzati nel buffer e disponibili per la riproduzione tramite
GET /responses/{id}.
Ciclo di vita della risposta
La libreria gestisce l'intero ciclo di vita della risposta: created ->in_progress ->completed (o failed o cancelled). La libreria gestisce automaticamente l'annullamento, la gestione degli errori e garantisce gli eventi terminali.
Sicurezza dei thread
Tutte le istanze del servizio registrate tramite AddResponsesServer() sono thread-safe. Le istanze del gestore hanno ambito per richiesta.
Per indicazioni dettagliate sull'implementazione del gestore, vedere la guida all'implementazione handler. Per esempi eseguibili, vedere gli esempi di protocollo Responses.
Endpoint di integrità
Le librerie di protocolli espongono automaticamente un /readiness endpoint per i controlli di integrità della piattaforma. Non è necessario implementare questa operazione manualmente.
Porta
I container servono traffico sulla porta 8088 localmente. Nell'ambiente di produzione, il gateway Foundry gestisce il routing e il contenitore non deve esporre una porta pubblica.
Variabili di ambiente inserite dalla piattaforma
La piattaforma dell'agente ospitato inserisce automaticamente le variabili di ambiente nel contenitore in fase di esecuzione. Il codice può leggere queste variabili senza dichiararle nella env mappa del azure.ai.agent servizio in o nelle azure.yaml impostazioni delle variabili di ambiente REST e SDK. Il FOUNDRY_* prefisso è riservato per l'uso della piattaforma.
| Variabile | Scopo |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
URL dell'endpoint del progetto Foundry |
FOUNDRY_PROJECT_ARM_ID |
ID risorsa ARM del progetto Foundry |
FOUNDRY_AGENT_NAME |
Nome dell'agente in esecuzione |
FOUNDRY_AGENT_VERSION |
Versione dell'agente in esecuzione |
FOUNDRY_AGENT_SESSION_ID |
ID sessione per la richiesta corrente (solo contenitori ospitati) |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Stringa di connessione di Application Insights per i dati di telemetria |
Non ripetere le variabili inserite dalla piattaforma in azure.yaml : vengono impostate automaticamente.
Le variabili che dichiari tu stesso, come MODEL_DEPLOYMENT_NAME o gli endpoint MCP del toolbox, vanno nella mappa env del servizio azure.ai.agent in azure.yaml o nella chiamata SDK create_version.
Importante
Quando si distribuisce l'agente ospitato nel servizio Foundry Agent, la piattaforma inserisce automaticamente un stringa di connessione di Application Insights nel contenitore dell'agente come variabile di ambiente, abilitando la traccia OpenTelemetry per impostazione predefinita. Per visualizzare le tracce distribuite, le richieste e le dipendenze, aprire la risorsa Application Insights creata durante la configurazione nel portale di Azure e passare a Indaga > Ricerca transazioni o Prestazioni. Usare azd ai agent monitor per i log della console live. Quando AppInsights è abilitato, questo progetto registra le tracce per monitorare e valutare le interazioni a livello di utente con gli agenti. I membri del progetto a cui è assegnato il ruolo Lettore di Log Analytics in AppInsights possono visualizzare i dati di traccia, che potrebbero contenere dati personali e/o Contenuto del cliente. Se le tabelle Log Analytics sottostanti sono protette, i membri devono invece disporre del ruolo Lettore con privilegi dei dati di monitoraggio per visualizzare quei dati di traccia. Esaminare i dati di traccia raccolti e chi può visualizzare e usare questi dati. Potrebbero essere applicate ulteriori tariffe di Monitoraggio di Azure Application Insights.
Scopri di più.
Riferimenti alle connessioni di progetto nelle variabili di ambiente
Anziché codificare direttamente i segreti (chiavi API, token, endpoint) in azure.yaml o nella tua immagine, recuperali da una connessione di progetto Foundry all'avvio della sandbox. Qualsiasi valore dichiarato come variabile di ambiente può essere un'espressione segnaposto risolta dalla piattaforma prima dell'avvio del contenitore.
Sintassi del segnaposto
Un segnaposto ha la forma ${{connections.<name>.<path>}}, dove <name> è il nome della risorsa della connessione (visibile nel portale in Dettagli progetto>Risorse connesse) e <path> è uno dei seguenti:
| Percorso | Risoluzione |
|---|---|
credentials.<field> |
Campo segreto sulla connessione |
target |
La proprietà della connessione target (ad esempio, un URL di un endpoint) |
metadata.<field> |
Un campo sotto quello della connessione metadata |
Il nome del campo da usare dipende dalla categoria di connessione:
| Categoria di connessione | Nome del campo nel placeholder |
|---|---|
ApiKey, AppInsights |
Sempre key- ad esempio, credentials.key |
CustomKeys |
Nome della chiave specificato durante la creazione della connessione, ad esempio credentials.github_token |
Example
Per prima cosa, crea una connessione CustomKeys nel progetto che contiene il segreto. Vedere Aggiungi una nuova connessione in Microsoft Foundry. Quindi fare riferimento a esso dalla env mappa nel azure.ai.agent servizio in azure.yaml:
services:
my-agent:
host: azure.ai.agent
env:
MODEL_DEPLOYMENT_NAME: gpt-5-mini
GITHUB_TOKEN: ${{connections.agent-secrets.credentials.github_token}}
All'avvio della sandbox Foundry risolve il segnaposto e inserisce il valore risolto come variabile di ambiente normale. Il codice lo legge come qualsiasi altro var di env:
import os
token = os.environ["GITHUB_TOKEN"]
Una funzione GET sulla versione dell'agente restituisce il testo letterale ${{...}} , ovvero il segreto risolto non viene mai restituito tramite l'API di gestione.
Considerazioni
- Creare la connessione prima di distribuire la versione. Se la connessione o il campo a cui si fa riferimento non è presente all'avvio della sandbox, il segnaposto non viene risolto e la variabile è vuota.
- I segreti sono di sola scrittura. GET su una connessione restituisce
credentials: null. Verificare la risoluzione leggendo la variabile d'ambiente dall'interno del container in esecuzione, non ispezionando la connessione. - Annota tu stesso i nomi dei campi
CustomKeys. L'API di gestione non le restituisce mai dopo la creazione. Tienili accanto alla sorgente dell'agente (ad esempio, nei modelli IaC o accanto aazure.yaml) in modo da poter creare dei segnaposto successivamente senza dover tirare a indovinare. - Foundry gestisce il nome del segreto di backup. Quando si crea la connessione, Foundry archivia il valore in Key Vault sotto un nome scelto. Non è possibile fare riferimento a un Key Vault segreto preesistente in base al nome. Per collegare il proprio Key Vault come archivio di supporto, vedi Configurare una connessione a Key Vault.
Creare un pacchetto e testare l'agente in locale
Prima di eseguire la distribuzione in Foundry, verificare che l'agente funzioni in locale usando la libreria di protocolli. Il contenitore gestisce gli stessi endpoint in locale come avviene nell'ambiente di produzione.
Testare il protocollo Risposte
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Where is Seattle?",
"stream": false
}
Testare il protocollo Invocations
POST http://localhost:8088/invocations
Content-Type: application/json
{
"message": "Hello!"
}
Eseguire la distribuzione usando l'interfaccia della riga di comando per sviluppatori Azure o VS Code
L'interfaccia a riga di comando Azure Developer (azd) e il Microsoft Foundry Toolkit per Visual Studio Code automatizzano l'intero ciclo di vita della distribuzione: la compilazione del contenitore, il push in Registro Azure Container, la creazione della versione dell'agente e l'assegnazione dei ruoli RBAC. Per una procedura dettagliata guidata per la prima volta, vedere Avvio rapido: Creare e distribuire un agente ospitato.
Eseguire la distribuzione con un comando
Dalla directory del progetto dell'agente, effettuare il provisioning dell'infrastruttura ed eseguire la distribuzione in un unico passaggio:
azd up
azd up combina azd provision, che crea il progetto Foundry, la distribuzione del modello, il registro dei contenitori, Application Insights e l'identità gestita, con azd deploy. Usarlo per le distribuzioni per la prima volta o ogni volta che si modificano sia l'infrastruttura che il codice dell'agente.
Distribuire solo le modifiche al codice
Se è già stato effettuato il provisioning delle risorse Azure ed è sufficiente eseguire il push di una nuova versione dell'agente:
azd deploy
Durante azd deploy, l'interfaccia della riga di comando:
- Compila l'immagine del contenitore in modalità remota in Registro Azure Container, quindi non è necessario usare Docker locale.
- Esegue il push dell'immagine nel registro.
- Crea una versione ospitata dell'agente in Servizio agenti Foundry.
- Crea un'identità agente Microsoft Entra dedicata e assegna i ruoli RBAC di cui l'agente ha bisogno per accedere a modelli e strumenti.
Gestisci versioni
Ogni azd deploy crea una nuova versione dell'agente. L'interfaccia della riga di comando mantiene le versioni precedenti e la versione più recente è attiva per impostazione predefinita.
Verificare la distribuzione
azd ai agent show
L'output include il nome dell'agente, la versione, i protocolli, le risorse del contenitore, le variabili di ambiente e il timestamp di creazione. Usare --output table per una visualizzazione di riepilogo.
Creare immagini in locale
Per impostazione predefinita, azd compila le immagini del contenitore in modalità remota in Registro Azure Container. Per compilare immagini in locale, impostare remoteBuild: false in azure.yaml. Le compilazioni locali richiedono Docker Desktop.
Per sottoporre prompt e risposte a criteri di sicurezza dei contenuti, aggiungi un guardrail di sicurezza dei contenuti al tuo agente.
Eseguire la distribuzione con Python SDK
Usare l'SDK per gestire le distribuzioni degli agenti direttamente dal codice Python.
Prerequisiti aggiuntivi
Immagine del contenitore in Registro Azure Container
Ruolo Writer repository Registro Container o AcrPush nel registro contenitori (per il push delle immagini)
Azure AI Projects SDK versione 2.1.0 o successiva
pip install "azure-ai-projects>=2.1.0"
Creare l'immagine del contenitore ed eseguirne il push
Costruisci la tua immagine Docker:
docker build --platform linux/amd64 -t myagent:v1 .Inviare al Registro Azure Container:
az acr login --name myregistry docker tag myagent:v1 myregistry.azurecr.io/myagent:v1 docker push myregistry.azurecr.io/myagent:v1
Suggerimento
Usare tag di immagine univoci anziché :latest per le distribuzioni riproducibili.
Configurare le autorizzazioni del registro contenitori
Concedi l'accesso all'identità gestita del progetto per il pull delle immagini.
Nel portale Azure passare alla risorsa del progetto Foundry.
Selezionare Identità e copiare l'ID oggetto (entità) sotto Assegnato dal sistema.
Assegnare il ruolo Lettore repository Registro Container a questa identità nel Registro Container. Vedere Ruoli e autorizzazioni di Registro Azure Container.
Creare una versione dell'agent ospitato
Quando si crea una versione, la piattaforma effettua automaticamente il provisioning dell'agente. Non esiste un passaggio di avvio separato. La piattaforma compila uno snapshot del contenitore e rende l'agente pronto per la gestione delle richieste.
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import HostedAgentDefinition, ProtocolVersionRecord, AgentEndpointProtocol, ContainerConfiguration
from azure.identity import DefaultAzureCredential
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create project client
credential = DefaultAzureCredential()
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=credential,
allow_preview=True,
)
# Create a hosted agent version
agent = project.agents.create_version(
agent_name="my-agent",
definition=HostedAgentDefinition(
protocol_versions=[
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0")
],
cpu="1",
memory="2Gi",
container_configuration=ContainerConfiguration(
image="your-registry.azurecr.io/your-image:tag"
),
environment_variables={
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
)
)
print(f"Agent created: {agent.name}, version: {agent.version}")
Per esporre entrambi i protocolli, passare entrambi in protocol_versions:
protocol_versions=[
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS_WS, version="1.0.0"),
],
Parametri chiave:
| Parametro | Descrizione |
|---|---|
agent_name |
Nome univoco (alfanumerico con trattini, massimo 63 caratteri) |
container_configuration.image |
URL completo dell'immagine di Registro Azure Container con tag |
cpu |
Allocazione cpu (ad esempio, "1") |
memory |
Allocazione di memoria (ad esempio, "2Gi") |
protocol_versions |
Protocolli esposti dal contenitore (responses, invocationso entrambi) |
Verificare lo stato della versione
Dopo aver creato una versione, eseguire il polling finché lo stato non è active, quindi richiamare l'agente. Il provisioning richiede in genere meno di un minuto in base alle dimensioni dell'immagine.
import time
# Poll until the agent version is active
while True:
version_info = project.agents.get_version(
agent_name="my-agent",
agent_version=agent.version
)
status = version_info["status"]
print(f"Status: {status}")
if status == "active":
print("Agent is ready!")
break
elif status == "failed":
print(f"Provisioning failed: {version_info['error']}")
break
time.sleep(5)
Valori dello stato della versione:
| Stato | Descrizione |
|---|---|
creating |
Provisioning dell'infrastruttura in corso |
active |
Agent è pronto per gestire le richieste |
failed |
Provisioning non riuscito: controllare il campo error per informazioni dettagliate |
deleting |
La versione è in fase di pulizia |
deleted |
La versione è stata rimossa completamente |
Richiamare l'agente
Dopo che la versione raggiunge active lo stato, usare get_openai_client per creare un client OpenAI associato all'endpoint dell'agente.
Per il protocollo Risposte :
# Create an OpenAI client bound to the agent endpoint
openai_client = project.get_openai_client(agent_name="my-agent")
response = openai_client.responses.create(
input="Hello! What can you do?",
)
print(response.output_text)
Per il protocollo Invocazioni, chiamare direttamente l'endpoint delle invocazioni:
import requests
token = credential.get_token("https://ai.azure.com/.default").token
url = f"{PROJECT_ENDPOINT}/agents/my-agent/endpoint/protocols/invocations"
response = requests.post(url, headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Foundry-Features": "HostedAgents=V1Preview"
}, params={"api-version": "v1"}, json={
"message": "Process this task"
})
print(response.json())
Per esempi più completi, consulta gli esempi di agenti ospitati.
Distribuire usando l'API REST
Usare l'API REST per distribuzioni dirette basate su HTTP o durante l'integrazione con strumenti personalizzati.
Prima di iniziare, creare ed eseguire il push dell'immagine del contenitore in Registro Azure Container e concedere all'identità gestita del progetto il ruolo Lettore del repository del Registro Container per il registro.
Configurare le variabili
BASE_URL="https://{account}.services.ai.azure.com/api/projects/{project}"
API_VERSION="v1"
TOKEN=$(az account get-access-token --resource https://ai.azure.com --query accessToken -o tsv)
Creare un agente
curl -X POST "$BASE_URL/agents?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"definition": {
"kind": "hosted",
"container_configuration": {
"image": "myacr.azurecr.io/my-agent:v1"
},
"cpu": "1",
"memory": "2Gi",
"protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
La creazione di un agente crea anche la versione 1 e attiva il provisioning.
Per visualizzare prompt e risposte rispetto a criteri di sicurezza del contenuto, includi un rai_config oggetto in definition. Vedi Aggiungere una protezione per la sicurezza dei contenuti a un agente ospitato.
Verificare lo stato della versione
Eseguire il polling dell'endpoint versione finché status non diventa active:
while true; do
STATUS=$(curl -s -X GET "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" | jq -r '.status')
echo "Status: $STATUS"
[ "$STATUS" = "active" ] && echo "Ready!" && break
[ "$STATUS" = "failed" ] && echo "Provisioning failed." && exit 1
sleep 5
done
Richiamare l'agente
Usare l'endpoint dedicato dell'agente per inviare richieste. Impostare "stream": true per ricevere eventi inviati dal server.
Protocollo di risposte:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/openai/responses?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input": "Hello! What can you do?",
"store": true
}'
Protocollo invocazioni:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/invocations?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Foundry-Features: HostedAgents=V1Preview" \
-d '{
"message": "Process this task"
}'
Creare una nuova versione
Distribuire il codice o la configurazione aggiornati creando una nuova versione:
curl -X POST "$BASE_URL/agents/my-agent/versions?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"definition": {
"kind": "hosted",
"container_configuration": {
"image": "myacr.azurecr.io/my-agent:v2"
},
"cpu": "1",
"memory": "2Gi",
"protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
Pulire le risorse
Per evitare addebiti, pulire le risorse al termine. Il provisioning della risorsa di calcolo dell'agente viene annullato dopo 15 minuti di inattività, pertanto non ci sono costi quando l'agente non gestisce le richieste.
pulizia della Azure Developer CLI
azd down
Pulizia dell'SDK
Eliminare una singola versione:
project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)
In alternativa, eliminare l'intero agente e tutte le relative versioni:
project.agents.delete(agent_name="my-agent")
Pulizia dell'API REST
Eliminare una singola versione:
curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
In alternativa, eliminare l'intero agente:
curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
Avviso
L'eliminazione di un agente rimuove tutte le relative versioni e termina le sessioni attive. Questa azione non può essere annullata.
Risoluzione dei problemi
Gli errori di provisioning si manifestano nei campi error.code e error.message dell'oggetto versione. Controllare lo stato della versione dopo la creazione per identificare i problemi.
| Codice di errore | Codice HTTP | Soluzione |
|---|---|---|
image_pull_failed |
400 | Verificare l'URI dell'immagine. Conferma che l'identità gestita del progetto disponga di Lettore del repository del Registro Container nell'ACR e che lo stato dei criteri del registro azureADAuthenticationAsArmPolicy sia enabled |
SubscriptionIsNotRegistered |
400 | Registrare il provider di sottoscrizioni |
InvalidAcrPullCredentials |
401 | Correggere l'identità gestita o il controllo degli accessi in base al ruolo del registro |
UnauthorizedAcrPull |
403 | Specificare le credenziali o l'identità corrette |
AcrImageNotFound |
404 | Correggere il nome/il tag dell'immagine o pubblicare l'immagine |
RegistryNotFound |
400/404 | Correggere il DNS del Registro di sistema o la raggiungibilità della rete |
Per gli errori 5xx, contattare Microsoft supporto tecnico.
Per requisiti dettagliati di controllo degli accessi basati su ruolo e risoluzione dei problemi di autorizzazione, vedere il riferimento sulle autorizzazioni dell'agente ospitato.