Bereitstellen eines gehosteten Agents

In diesem Artikel erfahren Sie, wie Sie einen containerisierten Agenten im Foundry Agent Service mithilfe der Azure Developer CLI (azd), des Python SDK oder der REST-API bereitstellen. Wählen Sie eine Bereitstellungsmethode mithilfe der Auswahl oben im Artikel aus. Verwenden Sie die SDK- oder REST-Ansätze, wenn Sie Agent-Bereitstellungen direkt aus Ihren eigenen Anwendungen oder Diensten verwalten möchten.

Wenn Sie erstmals bereitstellen oder eine Schritt-für-Schritt-Anleitung wünschen, lesen Sie den Schnellstart: Erstellen und Bereitstellen eines gehosteten Agent. Die Azure Developer CLI (azd) und VS Code-Erweiterung übernehmen automatisch das Erstellen, Pushen, Versionieren und die RBAC-Konfiguration.

Tipp

Bevorzugen Sie eine dockerlose innere Schleife? Sie können einen gehosteten Agenten auch direkt aus dem Quellcode bereitstellen – laden Sie ein .zip Ihres Python- oder .NET-Codes hoch, und die Plattform erstellt und hostet ihn für Sie.

Wenn Sie einen Codierungs-Agent wie GitHub Copilot verwenden, können Sie mit dem Microsoft Foundry Skill den Containerbereitstellungsablauf planen, Befehle vorbereiten azd und die SDK- oder REST-Schritte mit Ihrem Projekt verbinden.

Bereitstellungslebenszyklus

Jede Bereitstellung des gehosteten Agents folgt dieser Sequenz:

  1. Erstellen und pushen – Packen Sie Ihren Agentcode in ein Containerimage, und übertragen Sie ihn an Azure Container Registry.
  2. Erstellen Sie eine Agentversion – Registrieren Sie das Image beim Foundry Agent Service. Die Plattform stellt Infrastruktur bereit und erstellt eine dedizierte Entra-Agent-Identität.
  3. Status abfragen – Warten Sie, bis der Versionsstatus active erreicht.
  4. Invoke – Senden von Anforderungen an den dedizierten Endpunkt des Agents.

Voraussetzungen

Erforderliche Berechtigungen

Sie benötigen auf Projektebene die Rolle Foundry Project Manager, um einen gehosteten Agenten bereitzustellen. Diese Rolle gewährt Berechtigungen auf der Datenebene zum Erstellen und Aktualisieren von Agenten sowie bei Bedarf die Möglichkeit, Rollenzuweisungen für die von der Plattform erstellte Agent-Identität zu erstellen. Eine detaillierte Aufschlüsselung der beteiligten Berechtigungen finden Sie in der Referenz für Berechtigungen gehosteter Agents.

Wichtig

Die Foundry-RBAC-Rollen wurden kürzlich umbenannt. Foundry User, Foundry Owner, Foundry Account Owner und Foundry Project Manager wurden zuvor Azure KI-Benutzer, Azure KI-Besitzer, Azure KI-Kontobesitzer und Azure AI Project Manager benannt. Möglicherweise werden die vorherigen Namen an einigen Stellen weiterhin angezeigt, während der Umbenennungsrollout ausgeführt wird. Die Rollen-IDs und Kernberechtigungen bleiben durch die Umbenennung unverändert.

Die Plattform erstellt bei der Bereitstellung für jeden gehosteten Agent eine dedizierte Microsoft Entra Agent-Identität. Diese Identität ist ein Dienstprinzipal, den Ihr ausgeführter Container zum Aufrufen von Modellen und Tools verwendet. Sie müssen verwaltete Identitäten nicht manuell konfigurieren. Die Agent-Identität kann standardmäßig über den Projektendpunkt und den Sitzungsspeicher auf Modellinferenz zugreifen. Weisen Sie für externe Ressourcen (z. B. Ihre eigene Azure Storage) RBAC-Rollen manuell dem Microsoft Entra ID des Agents zu. Weitere Informationen finden Sie unter Agentzugriff über die Standardeinstellungen hinaus.

Wenn Sie azd oder die VS Code-Erweiterung verwenden, übernimmt das Tooling die meisten RBAC-Zuweisungen automatisch, einschließlich Container Registry Repository Reader für die verwaltete Identität des Projekts (Abrufen von Images).

Weitere Informationen finden Sie unter Authentifizierung und Autorisierung.

Wichtig

Ob es unterstützt wird, die Azure Container Registry Ihres Hosted-Agents in einem privaten Netzwerk zu platzieren (privater Endpunkt mit deaktiviertem Zugriff über öffentliche Netzwerke), hängt davon ab, wann das Foundry-Projekt erstellt wurde. Projekte, die nach dem 25. Juni 2026 erstellt wurden, unterstützen eine private Registrierung. Projekte, die vor diesem Datum erstellt wurden, erfordern, dass die Registrierung über ihren öffentlichen Endpunkt erreichbar ist, damit die Plattform das Image abrufen kann. Vorhandene Projekte sind nicht betroffen. Eine vollständige Liste der Netzwerkeinschränkungen finden Sie unter "Einschränkungen".

Containeranforderungen

Ihr Container-Image muss die folgenden Anforderungen erfüllen, um auf der Hosted-Agent-Plattform ausgeführt werden zu können.

Wichtig

Die Hostingplattform erfordert x86_64 (linux/amd64) Containerimages. Wenn Sie auf Apple Silicon oder anderen ARM-basierten Computern aufbauen, verwenden Sie docker build --platform linux/amd64 . diese, um zu vermeiden, dass ein inkompatibles ARM-Image erzeugt wird.

Protokollbibliotheken

Gehostete Agents kommunizieren mit dem Foundry-Gateway über Protokollbibliotheken. Wählen Sie das Protokoll aus, das dem Interaktionsmuster Ihres Agents entspricht:

Protokoll Python-Bibliothek .NET-Bibliothek Endpunkt Am besten geeignet für
Antworten azure-ai-agentserver-responses Azure.AI.AgentServer.Responses /responses Unterhaltungs-Chatbots, Streaming, Multi-Turn mit plattformverwalteter Geschichte
Aufrufe azure-ai-agentserver-invocations Azure.AI.AgentServer.Invocations /invocations Webhook-Empfänger, nicht dialogbasierte Verarbeitung, benutzerdefinierte asynchrone Workflows
Aufrufe (WebSocket) azure-ai-agentserver-invocations Azure.AI.AgentServer.Invocations /invocations_ws Bidirektionales Streaming: Echtzeit-Sprach-Agents, interaktive Medien

Das WebSocket-Protokoll verwendet den Bezeichner invocations_ws und wird im selben azure-ai-agentserver-invocations Paket wie die HTTP-Route /invocations ausgeliefert, sodass ein Container beides bedienen kann. Verwenden Sie es, wenn Sie persistentes Vollduplex-Streaming benötigen, z. B. um Mikrofon-PCM an den Agenten zu senden und synthetisierte Audiodaten zurückzuerhalten. Informationen zu VoIP-Szenarien finden Sie unter Erstellen eines VoIP-Agents mit gehosteten Agents.

Ein einzelner Container kann mehrere Protokolle gleichzeitig verfügbar machen, indem sie deklariert werden, wenn Sie den Agent – im protocols Feld des azure.ai.agent Diensts in , einem azure.yamlSDK-Aufruf oder einer REST-API-Anforderung – erstellen und die erforderlichen Bibliotheken importieren. Verwenden Sie die Protokollbibliotheken in Ihrem vorhandenen Framework, unabhängig davon, ob es sich um Microsoft Agent Framework, LangChain oder benutzerdefinierten Code handelt.

Antwortprotokollbibliothek

Die Python- und .NET bibliotheken für das Antwortprotokoll implementieren die AZURE AI-Antwort-API. Importieren Sie das Paket, und implementieren Sie einen Antworthandler. Die Bibliothek verarbeitet Routing, Streaming mit servergesendeten Ereignissen (SSE), Hintergrundausführung, Abbruch, Zwischenspeichern und Reaktionslebenszyklusverwaltung.

Einen Handler implementieren

Der Handler ist die zentrale Abstraktion, die Sie implementieren. Die Bibliothek ruft sie für jede eingehende Anforderung auf und übermittelt die zurückgegebenen Ereignisse über SSE an Clients. In Python schmücken Sie eine asynchrone Funktion mit @app.response_handler:

from azure.ai.agentserver.responses import (
    CreateResponse,
    ResponseContext,
    ResponsesAgentServerHost,
    TextResponse,
)

app = ResponsesAgentServerHost()


@app.response_handler
async def handler(
    request: CreateResponse,
    context: ResponseContext,
    _cancellation_signal,
):
    user_input = await context.get_input_text() or ""
    return TextResponse(context, request, text=f"Echo: {user_input}")

Automatische Ereignis- und Lebenszyklusverwaltung

Die Bibliothek verwaltet die Ereignissequenz – Sequenznummern, Ausgabe- und Inhaltsindizes und Element-IDs – und den vollständigen Antwortlebenszyklus automatisch, sodass Sie diesen Zustand nicht selbst nachverfolgen. Jedes Ereignis, das Ihr Handler erzeugt, entspricht genau einem SSE-Ereignis, das vom Host-Framework für Sie verwaltet wird.

Streaming- und Hintergrundmodi

  • Streamingmodus (Standard): SSE-Ereignisse werden in Echtzeit an den verbundenen Client übermittelt.
  • Hintergrundmodus: Der Handler läuft bis zum Abschluss, auch ohne einen verbundenen SSE-Client. Ereignisse werden gepuffert und stehen für die Wiedergabe über GET /responses/{id}.

Antwortlebenszyklus

Die Bibliothek koordiniert den vollständigen Antwortlebenszyklus: created - ->in_progress>completed (oder ).failedcancelled Die Bibliothek verwaltet auch die Abbruch-, Fehlerbehandlungs- und Terminalereignisgarantien automatisch.

Threadsicherheit

Handlerinstanzen sind auf die jeweilige Anfrage beschränkt, sodass zustandsbezogene Daten nicht zwischen Anfragen durchsickern. Die Bibliothek verarbeitet gleichzeitige Anforderungen sicher.

Ausführbare Beispiele finden Sie unter Python-„Bring-Your-Own“-Beispielen.

Gesundheitsendpunkte

Die Protokollbibliotheken machen automatisch einen /readiness Endpunkt für Plattformintegritätsprüfungen verfügbar. Sie müssen dies nicht selbst implementieren.

Hafen

Container bedienen lokal den Datenverkehr auf Port 8088. Im Produktivbetrieb übernimmt das Foundry-Gateway das Routing – Ihr Container muss keinen öffentlichen Port freigeben.

Plattforminjizierte Umgebungsvariablen

Die Plattform des gehosteten Agents fügt Umgebungsvariablen automatisch zur Laufzeit in Ihren Container ein. Ihr Code kann diese Variablen lesen, ohne sie in der env Zuordnung des azure.ai.agent Diensts in azure.yaml oder in den Einstellungen der SDK- und REST-Umgebungsvariablen zu deklarieren. Das FOUNDRY_* Präfix ist für die Plattformverwendung reserviert.

Variable Zweck
FOUNDRY_PROJECT_ENDPOINT Url des Gießereiprojektendpunkts
FOUNDRY_PROJECT_ARM_ID ARM-Ressourcen-ID des Foundry-Projekts
FOUNDRY_AGENT_NAME Name des laufenden Agents
FOUNDRY_AGENT_VERSION Version des laufenden Agents
FOUNDRY_AGENT_SESSION_ID Sitzungs-ID für die aktuelle Anforderung (nur gehostete Container)
APPLICATIONINSIGHTS_CONNECTION_STRING Verbindungszeichenfolge von Application Insights für die Telemetrie

Deklarieren Sie in azure.yaml keine von der Plattform eingefügten Variablen erneut – sie werden automatisch gesetzt.

Variablen, die Sie selbst deklarieren, wie MODEL_DEPLOYMENT_NAME oder Toolbox-MCP-Endpunkte, gehören in die env-Map des azure.ai.agent-Dienstes in azure.yaml oder in den SDK-Aufruf create_version.

Wichtig

Wenn Sie Ihren gehosteten Agent im Foundry Agent Service bereitstellen, fügt die Plattform automatisch eine Application Insights-Verbindungszeichenfolge als Umgebungsvariable in Ihren Agentcontainer ein, wodurch die OpenTelemetry-Ablaufverfolgung standardmäßig aktiviert wird. Um verteilte Ablaufverfolgungen, Anforderungen und Abhängigkeiten anzuzeigen, öffnen Sie die Application Insights-Ressource, die während des Setups im Azure-Portal bereitgestellt wurde, und navigieren Sie zur Untersuchung > der Transaktionssuche oder -leistung. Verwenden Sie azd ai agent monitor für Live-Konsolenprotokolle. Wenn AppInsights aktiviert ist, protokolliert dieses Projekt Ablaufverfolgungen, um Interaktionen auf Benutzerebene mit Agents zu überwachen und auszuwerten. Projektmitglieder, denen in AppInsights die Log Analytics Reader-Rolle zugewiesen wurde, können Nachverfolgungsdaten anzeigen, die personenbezogene Daten und/oder Kundeninhalte enthalten können. Wenn die zugrunde liegenden Log Analytics-Tabellen geschützt sind, benötigen Mitglieder stattdessen die Rolle Privileged Monitoring Data Reader, um diese Ablaufverfolgungsdaten anzuzeigen. Überprüfen Sie, welche Nachverfolgungsdaten erfasst werden und wer diese Daten einsehen und nutzen kann. Weitere Azure Monitor App Insights-Preise können angewendet werden. Erfahren Sie mehr.

Verweisen auf Projektverbindungen in Umgebungsvariablen

Anstatt Geheimnisse (API-Schlüssel, Token, Endpunkte) fest in azure.yaml oder Ihr Image einzucodieren, beziehen Sie sie beim Start der Sandbox aus einer Foundry-Projektverbindung. Jeder Wert, den Sie als Umgebungsvariable deklarieren, kann ein Platzhalterausdruck sein, der von der Plattform aufgelöst wird, bevor der Container gestartet wird.

Platzhaltersyntax

Ein Platzhalter hat die Form ${{connections.<name>.<path>}}, wobei <name> der Ressourcenname der Verbindung ist (im Portal unter Verwalten>Projektdetails>Verbundene Ressourcen sichtbar) und <path> für eines der folgenden Elemente steht:

Pfad Aufgelöst in
credentials.<field> Ein geheimes Feld auf der Verbindung
target Die target-Eigenschaft der Verbindung (z. B. eine Endpunkt-URL)
metadata.<field> Ein Feld unter metadata der Verbindung

Der zu verwendende Feldname hängt von der Verbindungskategorie ab:

Verbindungskategorie Feldname im Platzhalter
ApiKey, AppInsights Immer key--z. B. credentials.key
CustomKeys Der Schlüsselname, den Sie beim Erstellen der Verbindung angegeben haben , z. B. credentials.github_token

Beispiel

Erstellen Sie zunächst eine CustomKeys Verbindung für das Projekt, die den geheimen Schlüssel enthält. Siehe Eine neue Verbindung in Microsoft Foundry hinzufügen. Anschließend kann man in der env-Karte im azure.ai.agent-Dienst in azure.yaml darauf zugreifen:

services:
  my-agent:
    host: azure.ai.agent
    env:
      MODEL_DEPLOYMENT_NAME: gpt-5-mini
      GITHUB_TOKEN: ${{connections.agent-secrets.credentials.github_token}}

Im Sandkastenstart löst Foundry den Platzhalter auf und fügt den aufgelösten Wert als einfache Umgebungsvariable ein. Ihr Code liest ihn wie jede andere Umgebungsvariable:

import os
token = os.environ["GITHUB_TOKEN"]

Ein GET für die Agentversion gibt den Literaltext ${{...}} zurück– der aufgelöste geheime Schlüssel wird niemals über die Verwaltungs-API zurückgegeben.

Considerations

  • Erstellen Sie die Verbindung, bevor Sie die Version bereitstellen. Wenn die Verbindung oder das referenzierte Feld beim Sandkastenstart fehlt, wird der Platzhalter nicht aufgelöst, und die Variable ist leer.
  • Geheimnisse können nur geschrieben werden. GET für eine Verbindung gibt zurück credentials: null. Überprüfen Sie die korrekte Auflösung, indem Sie die Umgebungsvariable innerhalb Ihres laufenden Containers auslesen, nicht durch Überprüfen der Verbindung.
  • Notieren Sie Feldnamen CustomKeys selbst. Die Verwaltungs-API gibt sie nach der Erstellung nie wieder zurück. Bewahren Sie sie direkt bei Ihrer Agent-Quelle auf (z. B. in IaC-Vorlagen oder neben azure.yaml), damit Sie später Platzhalter anlegen können, ohne raten zu müssen.
  • Foundry verwaltet den zugrunde stehenden geheimen Namen. Wenn Sie die Verbindung erstellen, speichert Foundry den Wert in Key Vault unter einem von ihr ausgewählten Namen – Sie können nicht auf ein bereits vorhandenes Key Vault Geheimnis anhand des Namens verweisen. Informationen dazu, wie Sie Ihren eigenen Key Vault als zugrunde liegenden Speicher einbinden, finden Sie unter Set up a Key Vault connection.

Paketieren und testen Sie Ihren Agenten lokal

Überprüfen Sie vor der Bereitstellung in Foundry, ob Ihr Agent lokal mithilfe der Protokollbibliothek funktioniert. Der Container dient denselben Endpunkten lokal wie in der Produktion.

Testen des Antwortprotokolls

POST http://localhost:8088/responses
Content-Type: application/json

{
    "input": "Where is Seattle?",
    "stream": false
}

Das Aufrufprotokoll testen

POST http://localhost:8088/invocations
Content-Type: application/json

{
    "message": "Hello!"
}

Bereitstellen mithilfe der Azure Developer CLI oder VS Code

Die Azure Developer CLI (azd) und das Microsoft Foundry Toolkit für Visual Studio Code automatisieren den vollständigen Bereitstellungslebenszyklus: Erstellen des Containers, Pushen auf Azure Container Registry, Erstellen der Agentversion und Zuweisen von RBAC-Rollen. Eine geführte erste exemplarische Vorgehensweise finden Sie in der Schnellstartanleitung: Erstellen und Bereitstellen eines gehosteten Agents.

Mit einem Befehl bereitstellen

Stellen Sie in einem einzigen Schritt aus Ihrem Agent-Projektverzeichnis die Infrastruktur bereit und führen Sie die Bereitstellung durch:

azd up

azd up kombiniert azd provision, die das Foundry-Projekt erstellt, Modellbereitstellung, Containerregistrierung, Application Insights und verwaltete Identität, mit azd deploy. Verwenden Sie sie für erstmalige Bereitstellungen oder wann immer Sie sowohl Infrastruktur- als auch Agentcode ändern.

Nur Codeänderungen bereitstellen

Wenn Sie Ihre Azure Ressourcen bereits bereitgestellt haben und nur eine neue Agent-Version übertragen müssen:

azd deploy

Während azd deploy führt die CLI Folgendes aus:

  1. Erstellt Ihr Containerimage remote in Azure Container Registry, sodass Sie keine lokale Docker-Installation benötigen.
  2. Pushen des Images in die Registrierung
  3. Erstellt eine gehostete Agent-Version im Foundry Agent Service.
  4. Erstellt eine dedizierte Microsoft Entra Agentidentität und weist die RBAC-Rollen zu, die der Agent für den Zugriff auf Modelle und Tools benötigt.

Versionen verwalten

Jede azd deploy erstellt eine neue Version des Agents. Die CLI behält frühere Versionen bei, und die neueste Version ist standardmäßig aktiv.

Überprüfen Sie die Bereitstellung

azd ai agent show

Die Ausgabe enthält den Agentnamen, die Version, Protokolle, Containerressourcen, Umgebungsvariablen und den Zeitstempel der Erstellung. Verwenden Sie --output table für eine Zusammenfassungsansicht.

Lokales Erstellen von Images

azd erstellt standardmäßig Containerimages remote in Azure Container Registry. Wenn Sie Bilder lokal erstellen möchten, legen Sie es remoteBuild: false fest in azure.yaml. Lokale Builds erfordern Docker Desktop.

Um Prompts und Antworten anhand einer Inhaltssicherheitsrichtlinie zu prüfen, fügen Sie Ihrem Agenten eine Leitplanke für die Inhaltssicherheit hinzu.

Bereitstellen mithilfe des Python SDK

Verwenden Sie das SDK, wenn Sie Agentbereitstellungen direkt aus Python Code verwalten möchten.

Zusätzliche Voraussetzungen

  • Python 3.10 oder höher

  • Ein Containerimage in Azure Container Registry

  • Rolle Container Registry-Repository-Writer oder AcrPush in der Containerregistrierung (zum Pushen von Images)

  • Azure AI Projects SDK, Version 2.3.0 oder höher

    pip install "azure-ai-projects>=2.3.0"
    

Erstellen und Pushen Ihres Container-Images

  1. Erstellen Sie Ihr Docker-Image:

    docker build --platform linux/amd64 -t myagent:v1 .
    

    Beispiele für Dockerfiles für Python und C#.

  2. Push zur Azure Container Registry:

    az acr login --name myregistry
    docker tag myagent:v1 myregistry.azurecr.io/myagent:v1
    docker push myregistry.azurecr.io/myagent:v1
    

Tipp

Verwenden Sie eindeutige Imagetags anstelle :latest für reproduzierbare Bereitstellungen.

Konfigurieren von Containerregistrierungsberechtigungen

Gewähren Sie den verwalteten Identitätszugriff Ihres Projekts, um Bilder abzurufen:

  1. Wechseln Sie im portal Azure zu Ihrer Findry-Projektressource.

  2. Wählen Sie "Identität" aus, und kopieren Sie die Objekt-ID (Prinzipal-ID) unter "System zugewiesen".

  3. Weisen Sie dieser Identität in Ihrer Container-Registry die Rolle „Container-Registry-Repository-Leser“ zu. Siehe Azure Container Registry Rollen und Berechtigungen.

Erstellen einer gehosteten Agent-Version

Wenn Sie eine Version erstellen, stellt die Plattform automatisch den Agent fest. Es gibt keinen separaten Startschritt. Die Plattform erstellt einen Container-Snapshot und macht den Agenten bereit, Anfragen zu bearbeiten.

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    AgentEndpointProtocol,
    ContainerConfiguration,
    HostedAgentDefinition,
    ProtocolVersionRecord,
)
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,
)

# 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}")

Um beide Protokolle verfügbar zu machen, geben Sie beide Protokolle in protocol_versions an.

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

Schlüsselparameter:

Parameter Beschreibung
agent_name Eindeutiger Name (alphanumerisch mit Bindestrichen, max. 63 Zeichen)
container_configuration.image Vollständige Azure Container Registry Image-URL mit Tag
cpu CPU-Zuordnung (z. B "1". )
memory Speicherzuweisung (z. B. "2Gi")
protocol_versions Protokolle, die der Container verfügbar macht (responses, invocationsoder beides)

Informationen zum Festlegen, wann die Sitzungsberechnung im Leerlauf läuft, finden Sie unter Verwalten der Sitzungs-Leerlauf.

Abfragen des Versionsstatus

Führen Sie nach der Erstellung einer Version eine Abfrage aus, bis der Status active ist, bevor Sie den Agent aufrufen. Die Bereitstellung dauert in der Regel je nach Bildgröße weniger als eine Minute.

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)

Versionsstatuswerte:

Status Beschreibung
creating Die Bereitstellung der Infrastruktur wird fortgesetzt.
active Agent ist bereit, Anfragen zu bearbeiten
failed Bereitstellung fehlgeschlagen - das error Feld auf Details überprüfen
deleting Version wird bereinigt
deleted Die Version wurde vollständig entfernt.

Agenten aufrufen

Nachdem die Version den Status active erreicht hat, verwenden Sie get_openai_client, um einen OpenAI-Client zu erstellen, der an den Endpunkt des Agenten gebunden ist.

Für das Antwortprotokoll :

# 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)

Rufen Sie für das Aufrufprotokoll den Aufrufendpunkt direkt auf:

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",
}, params={"api-version": "v1"}, json={
    "message": "Process this task"
})

print(response.json())

Ausführlichere Beispiele finden Sie in den Beispielen für gehostete Agent.

Bereitstellen mithilfe der REST-API

Verwenden Sie die REST-API für direkte HTTP-basierte Bereitstellungen oder bei der Integration in benutzerdefinierte Tools.

Bevor Sie beginnen, erstellen Sie Ihr Containerimage, und übertragen Sie es in Azure Container Registry, und weisen Sie der verwalteten Identität des Projekts für die Registrierung die Rolle Container Registry Repository Reader zu.

Einrichten von Variablen

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)

Erstellen eines Agents

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"
      }
    }
  }'

Durch das Erstellen eines Agents wird auch die Version 1 erstellt und die Bereitstellung ausgelöst.

Informationen zum Festlegen, wann die Sitzungsberechnung im Leerlauf läuft, finden Sie unter Verwalten der Sitzungs-Leerlauf.

Um Prompts und Antworten anhand einer Inhaltssicherheitsrichtlinie zu prüfen, fügen Sie ein rai_config-Objekt in definition ein. Siehe auch Fügen Sie einem gehosteten Agent eine Content Safety-Sicherheitsbarriere für Inhalte hinzu.

Abfragen des Versionsstatus

Überprüfen Sie den Versionsendpunkt wiederholt, bis statusactive ist.

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

Agenten aufrufen

Verwenden Sie den dedizierten Endpunkt des Agents, um Anforderungen zu senden. Setzen Sie "stream": true, um Server-gesendete Ereignisse zu empfangen.

Antwortprotokoll:

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
  }'

Aufrufprotokoll:

curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/invocations?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Process this task"
  }'

Erstellen einer neuen Version

Stellen Sie aktualisierten Code oder die aktualisierte Konfiguration bereit, indem Sie eine neue Version erstellen:

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"
      }
    }
  }'

Bereinigen von Ressourcen

Um Gebühren zu vermeiden, bereinigen Sie Ressourcen, nachdem Sie fertig sind. Die Plattform gibt die Rechenressourcen des Agenten nach dem konfigurierten Leerlaufzeitlimit frei, das standardmäßig 15 Minuten beträgt, sodass keine Kosten anfallen, wenn ein Agent keine Anfragen bearbeitet.

Azure Entwickler-CLI-Bereinigung

azd down

SDK-Bereinigung

Löschen einer einzelnen Version:

project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)

Oder löschen Sie den gesamten Agent und alle zugehörigen Versionen. Verwenden Sie force=True, um alle aktiven Sitzungen kaskadierend zu löschen, z. B. unmittelbar nachdem Sie den Agenten aufgerufen haben; ohne force=True schlägt der Aufruf mit einem Konfliktfehler fehl, solange Sitzungen aktiv sind:

project.agents.delete(agent_name="my-agent", force=True)

REST-API-Bereinigung

Löschen einer einzelnen Version:

curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN"

Oder löschen Sie den gesamten Agent:

curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN"

Warnung

Durch das Löschen eines Agents werden alle zugehörigen Versionen entfernt und aktive Sitzungen beendet. Diese Aktion kann nicht rückgängig gemacht werden.

Problembehandlung

Bereitstellungsfehler werden auf den error.code und error.message Feldern des Versionsobjekts angezeigt. Überprüfen Sie den Versionsstatus nach der Erstellung, um Probleme zu identifizieren.

Fehlercode HTTP-Code Lösung
image_pull_failed 400 Überprüfen Sie die URI des Bildes. Überprüfen Sie, ob die vom Projekt verwaltete Identität über die Berechtigung Container Registry-Repositoryleser im ACR verfügt und ob der Richtlinienstatus azureADAuthenticationAsArmPolicy der Registrierung enabled lautet
SubscriptionIsNotRegistered 400 Registrieren des Abonnementanbieters
InvalidAcrPullCredentials 401 Korrektur verwaltete Identität oder Registrierung RBAC
UnauthorizedAcrPull 403 Geben Sie korrekte Zugangsdaten oder Identität an.
AcrImageNotFound 404 Korrigieren des Bildnamens/Tags oder Veröffentlichen eines Bilds
RegistryNotFound 400/404 DNS- oder Netzwerk-Erreichbarkeit der Registry beheben

Wenden Sie sich für 5xx-Fehler an Microsoft Support.

Detaillierte RBAC-Anforderungen und Berechtigungsprobleme finden Sie unter der Referenz zu Berechtigungen für gehostete Agenten.

Nächste Schritte