Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie einen Hosted-Agent im Foundry Agent Service aus Python oder .NET Quellcode bereitstellen, ohne ein Containerimage zu erstellen oder zu übertragen. Sie laden einen .zip Code (und optional Ihre Abhängigkeiten) hoch, und der Agentdienst führt ihn entweder as-is aus oder erstellt Ihre Abhängigkeiten für Sie in der Cloud.
Tipp
Stellen Sie für die meisten Szenarien die Azure Developer CLI (azd) oder das Foundry Toolkit für VS Code bereit. Diese Tools nehmen Ihnen die Hauptarbeit ab: Sie packen Ihren Quellcode, laden ihn hoch, fragen den Status von active ab und konfigurieren die rollenbasierte Zugriffskontrolle automatisch. Um zu beginnen, folgen Sie der Schnellstartanleitung: Stellen Sie Ihren ersten gehosteten Agent bereit , und wählen Sie Code (oder Quellcode (ZIP-Upload)) aus, wenn Sie zur Eingabe einer Bereitstellungsmethode aufgefordert werden.
Verwenden Sie die SDK- und REST-Verfahren in diesem Artikel, wenn Sie Quellcode-Agents programmgesteuert bereitstellen müssen – aus dem Python SDK oder .NET SDK in Ihren eigenen Anwendungen oder direkt über die REST-API für benutzerdefinierte Tools, sprachunabhängige Automatisierung oder Integration in vorhandene Fortlaufendbereitstellungssysteme. In diesem Artikel führen Sie die folgenden Aufgaben aus:
- Wählen Sie einen Modus zur Abhängigkeitsauflösung aus und paketieren Sie Ihren Quellcode.
- Erstellen Sie den Agenten, warten Sie, bis er
activeerreicht, und rufen Sie ihn auf. - Aktualisieren, Version anzeigen, herunterladen und Protokolle des bereitgestellten Agenten streamen.
Wenn Sie die vollständige Kontrolle über das Laufzeitimage benötigen oder bereits über eine funktionierende Dockerfile-Datei verfügen, verwenden Sie den containerbasierten Pfad: Bereitstellen eines gehosteten Agents.
Important
Die Quellcodebereitstellung für gehostete Agents befindet sich in der Vorschau. Funktionen, Regionsverfügbarkeit und APIs können sich vor der allgemeinen Verfügbarkeit ändern.
Voraussetzungen
- Ein Microsoft Foundry-Projekt in einer unterstützten Region.
- Azure CLI Version 2.80 oder höher, beim Mandanten angemeldet, dem das Projekt gehört.
pipab Python 3.13, um Ihren Quellcode lokal zu paketieren.Die
azure-ai-projectsVersion 2.2.0 oder höher undazure-identity-Pakete.pip install "azure-ai-projects>=2.2.0" azure-identity
Unterstützte Laufzeiten
Das code_configuration.runtime Feld in der Agentdefinition akzeptiert die folgenden Werte. Wählen Sie die Laufzeit aus, die den Binärdateien in Ihrer ZIP-Datei entspricht – Linux-x86_64-Wheels für Python oder die TargetFramework aus Ihrer dotnet publish-Ausgabe für .NET.
| Sprache | Laufzeitwerte |
|---|---|
| Python |
python_3_13, python_3_14 |
| .NET | dotnet_10 |
Sprachversionsunterstützungsrichtlinie
Die Laufzeit des Agent-Diensts enthält für jeden Wert von code_configuration.runtime das von der Plattform erstellte Container-Image. Damit Ihre bereitgestellten Agenten weiterhin vollständig unterstützt werden, stimmt Foundry den Sprachsupport für gehostete Agenten auf den End-of-Life-Support der jeweiligen Sprache ab. Die Unterstützung endet mit dem von der Community festgelegten Supportende für die jeweilige Sprachversion. Microsoft kann einen code_configuration.runtime-Wert früher aussetzen, wenn Plattformeinschränkungen (z. B. das zugrunde liegende Basisimage) erforderlich sind.
Informationen zu übergeordneten End-of-Support-Zeitplänen finden Sie unter:
- Python: Status von Python Versionen (python.org).
- .NET: .NET und .NET Core-Supportrichtlinie.
Einstellungsphase
Nach einem Sprachendedatum können Sie weiterhin gehostete Agents erstellen, aktualisieren und ausführen, die den eingestellten Laufzeitwert verwenden. Diese Agents sind jedoch nicht für Support, neue Features oder Sicherheitspatches berechtigt, bis Sie sie auf eine unterstützte Laufzeit aktualisieren, indem Sie einen aktuellen code_configuration.runtime Wert festlegen und erneut bereitstellen.
Erforderliche Berechtigungen
Sie benötigen Foundry Project Manager auf Projektebene, um einen gehosteten Agenten bereitzustellen. Diese Rolle gewährt Datenebenenberechtigungen zum Erstellen und Aktualisieren von Agenten sowie die Möglichkeit, der von der Plattform erstellten Agent-Identität, die Ihr laufender Code zum Aufrufen von Modellen und Tools verwendet, Foundry User zuzuweisen.
Ihr Agent wird als plattformbasierte verwaltete Identität ausgeführt, die von Ihrer Benutzeridentität getrennt ist. Diese Identität benötigt foundry User , um Modelle aus dem Container aufzurufen. Wenn Sie mit azd oder dem Foundry Toolkit für Visual Code bereitstellen, weisen die Tools diese Rolle automatisch zu. Wenn Sie die Bereitstellung mit REST ausführen, erteilen Sie sie selbst – siehe Referenz zu Gehosteten Agent-Berechtigungen.
Fügen Sie bei REST-Aufrufen den Header für die Previewfunktion in ändernde Anforderungen (Erstellen, Aktualisieren, Löschen) ein, solange sich die Funktion in der Vorschau befindet:
Foundry-Features: CodeAgents=V1Preview,HostedAgents=V1Preview
GET-Anfragen funktionieren heute zwar auch ohne diesen Header, aber senden Sie ihn zur Sicherheit bei jedem Aufruf mit – der Header steuert das Vorschauverhalten und könnte vor der GA strenger durchgesetzt werden.
Bereitstellungslebenszyklus
Jede Quellcodebereitstellung folgt der gleichen Sequenz: Paket → Erstellen oder Aktualisieren → Abfrage, bis active → aufrufen. Der Quellcodepfad verwendet code_configuration in der Agentdefinition; der Image-basierte Pfad verwendet stattdessen container_configuration – die beiden schließen einander innerhalb derselben Version aus.
Wählen Sie den Pfad aus, der ihrem Workflow entspricht. Wenn Sie nicht sicher sind, beginnen Sie mit der Azure Developer CLI oder VS Code – es ist der empfohlene Pfad für die meisten Kunden.
| Pfad | Am besten geeignet für: | Verpackung |
|---|---|---|
| Azure Developer CLI oder VS Code | Die meisten Bereitstellungen, einschließlich der ersten Bereitstellungen und der schnellsten inneren Schleife. | Das Tool erstellt und lädt die ZIP-Datei für Sie hoch. |
| Python SDK | Programmgesteuerte Bereitstellung aus Python-Apps oder der Automatisierung heraus. | Sie erstellen die ZIP-Datei; das SDK lädt es hoch. |
| .NET SDK | Programmatische Bereitstellung aus .NET-Anwendungen oder per Automatisierung. | Das SDK komprimiert einen Ordner für Sie zu einer ZIP-Datei. |
| REST-API | Benutzerdefinierte Tools, sprachunabhängige Automatisierung und CD-Systeme. | Sie erstellen die ZIP-Datei und senden die mehrteilige Anforderung. |
Auswählen, wie Abhängigkeiten aufgelöst werden
Bevor Sie beginnen, wählen Sie einen Wert für code_configuration.dependency_resolution. Diese Auswahl wirkt sich darauf aus, was Sie in die Zip-Datei einfügen.
| Wert | Behavior | Verwenden Sie, wenn |
|---|---|---|
remote_build |
Der Agentdienst installiert Abhängigkeiten von requirements.txt (Python) oder stellt die Projektdatei (.NET) während der Bereitstellung wieder her. |
Sie möchten einen kleinen Upload und die einfachste innere Schleife. Empfohlen für Erstmalige Benutzer. |
bundled |
Die ZIP-Datei wird unverändert ausgeführt. Sie stellen vorkompilierte Linux-Abhängigkeiten in packages/ (Python) oder in der dotnet publish-Ausgabe (.NET) bereit. |
Sie benötigen reproduzierbare Builds, verwenden private Abhängigkeiten oder solche, die ausschließlich als Wheels verfügbar sind, oder Ihr Projekt lässt sich serverseitig nicht sauber wiederherstellen. |
Informationen zum gebündelten Modus finden Sie unter "Manuelles Packen der ZIP-Datei für die lokalen Buildbefehle".
Bereitstellen mithilfe der Azure Developer CLI oder VS Code
Die Azure Developer CLI (azd) und das Foundry Toolkit für VS Code automatisieren den vollständigen Quellcodebereitstellungslebenszyklus– sie packen Ihre Quelle in eine ZIP-Datei, berechnen die SHA-256, laden sie hoch, rufen sie active ab und konfigurieren rollenbasierte Zugriffssteuerung für Sie. Diese Tools sind der empfohlene Weg für die meisten Kunden und die schnellste innere Schleife.
Eine schrittweise exemplarische Vorgehensweise finden Sie in der Schnellstartanleitung: Bereitstellen Ihres ersten gehosteten Agents. Wählen Sie Code (oder Quellcode (ZIP-Upload)) aus, wenn die Schnellstartanleitung eine Bereitstellungsmethode anfragt.
Quellcodebereitstellung auswählen
Wenn Sie azd ai agent init interaktiv ausführen, fordert das Tool Sie auf, einen Bereitstellungsmodus auszuwählen. Wählen Sie Code aus, der aus der Quelle als ZIP-Upload bereitgestellt werden soll, anstatt ein Containerimage zu erstellen. Das Foundry Toolkit für VS Code fordert Sie auf die gleiche Weise zur Bereitstellungsmethode auf.
Wenn Sie die Quellcodebereitstellung nicht interaktiv auswählen möchten – zum Beispiel in einer CI/CD-Pipeline –, übergeben Sie --deploy-mode code. Dieser Modus erfordert --runtime und --entry-pointakzeptiert einen optionalen --dep-resolution Wert von remote_build (Standard) oder bundled:
azd ai agent init --no-prompt --project-id "<project-resource-id>" \
--deploy-mode code --runtime python_3_13 --entry-point main.py
Mit --no-prompt ist der Bereitstellungsmodus standardmäßig auf container eingestellt, daher müssen Sie --deploy-mode code für Quellcode-Bereitstellungen explizit übergeben. Führen Sie nach der Initialisierung azd up aus, um zu provisionieren und bereitzustellen.
Verwenden Sie die SDK- oder REST-Pfade in den folgenden Abschnitten, wenn Sie programmgesteuert aus Ihrer eigenen Anwendung bereitstellen oder in vorhandene Tools integrieren müssen.
Bereitstellen aus dem Quellcode
Wählen Sie Ihre Sprache oder Benutzeroberfläche aus. Jede Registerkarte durchläuft denselben Lebenszyklus: den Agenten erstellen, den Status abfragen, bis er active erreicht, ihn aufrufen und den bereitgestellten Code herunterladen.
Verwenden Sie das Python SDK, um Quellcode-Agents aus Ihren eigenen Anwendungen oder Automatisierungen bereitzustellen. Sie erstellen die ZIP-Datei selbst und übergeben die Bytes und SHA-256 an das SDK, das sie hochlädt und die gleichen Erstellungs-, Abruf-, Aufruf- und Downloadvorgänge wie die REST-API verfügbar macht. Für die Codebereitstellung ist azure-ai-projects Version 2.2.0 oder höher erforderlich.
Die Quellcodebereitstellung verwendet die Vorschauclientoberfläche beta , erstellen Sie also den Client mit allow_preview=True.
Erstellen der ZIP-Datei
Das Python SDK lädt eine zip-Datei hoch, die Sie erstellen. Verwenden Sie die gleichen Layout- und Abhängigkeitsauflösungsregeln, die in "Packen der ZIP"-Datei manuell beschrieben sind. Das minimale remote_build-Payload ist ein flaches ZIP-Archiv mit main.py und requirements.txt im Stammverzeichnis.
Erstellen des Agents
import hashlib
from pathlib import Path
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
CodeConfiguration,
CreateAgentVersionFromCodeContent,
CreateAgentVersionFromCodeMetadata,
HostedAgentDefinition,
ProtocolVersionRecord,
)
from azure.identity import DefaultAzureCredential
# Format: "https://<account>.services.ai.azure.com/api/projects/<project>"
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "my-code-agent"
ZIP_PATH = Path("agent-code.zip")
code_zip_bytes = ZIP_PATH.read_bytes()
code_zip_sha256 = hashlib.sha256(code_zip_bytes).hexdigest()
credential = DefaultAzureCredential()
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=credential,
allow_preview=True,
)
content = CreateAgentVersionFromCodeContent(
metadata=CreateAgentVersionFromCodeMetadata(
description="Hello-world code agent",
definition=HostedAgentDefinition(
cpu="1",
memory="2Gi",
code_configuration=CodeConfiguration(
runtime="python_3_13",
entry_point=["python", "main.py"],
dependency_resolution="remote_build",
),
protocol_versions=[
ProtocolVersionRecord(protocol="responses", version="1.0.0")
],
environment_variables={"AZURE_AI_MODEL_DEPLOYMENT_NAME": "gpt-4.1-mini"},
),
),
code=(ZIP_PATH.name, code_zip_bytes, "application/zip"),
)
created = project.beta.agents.create_version_from_code(
agent_name=AGENT_NAME,
content=content,
code_zip_sha256=code_zip_sha256,
)
print(f"Created version: {created.version}")
Legen Sie für das Aufrufprotokoll den protocol_versions Eintrag auf ProtocolVersionRecord(protocol="invocations", version="1.0.0"). Für den Modus bundled legen Sie dependency_resolution="bundled" fest und liefern vorgefertigte Abhängigkeiten im ZIP-Archiv mit – siehe Linux-Abhängigkeiten lokal erstellen.
Umfrage für „Aktiv“
Die Methoden für die Codebereitstellung (create_version_from_code und download_code) sind auf der Vorschauschnittstelle project.beta.agents verfügbar, aber Lese- und Löschvorgänge wie get_version befinden sich auf project.agents.
import time
while True:
version = project.agents.get_version(
agent_name=AGENT_NAME, agent_version=created.version
)
status = version["status"]
print(f"Status: {status}")
if status == "active":
break
if status == "failed":
raise RuntimeError(f"Provisioning failed: {version.get('error')}")
time.sleep(5)
Eine vollständige Liste der Statuswerte und wie das Objekt im Fehlerfall zu lesen ist, finden Sie unter error.
Agenten aufrufen
Sobald die Version active erreicht, verbinden Sie einen OpenAI-Client mit dem Agent-Endpunkt und rufen Sie ihn auf. In diesem Beispiel wird das Antwortprotokoll verwendet:
openai_client = project.get_openai_client(agent_name=AGENT_NAME)
response = openai_client.responses.create(input="Hello! What can you do?")
print(response.output_text)
Rufen Sie für das Invocations-Protokoll den Invoke-Endpunkt direkt mit einem Bearer-Token auf, wie unter Den Agent aufrufen gezeigt.
Herunterladen der bereitgestellten ZIP-Datei
Überprüfen Sie genau, was bereitgestellt wird, indem Sie die ZIP-Datei herunterladen und ihre SHA-256 mit dem wert vergleichen, den Sie hochgeladen haben:
import hashlib
from pathlib import Path
out_path = Path(f"{AGENT_NAME}-{created.version}.zip")
sha = hashlib.sha256()
with open(out_path, "wb") as f:
for chunk in project.beta.agents.download_code(
agent_name=AGENT_NAME, agent_version=created.version
):
f.write(chunk)
sha.update(chunk)
print(f"Downloaded {out_path} (matches upload: {sha.hexdigest() == code_zip_sha256})")
Ein vollständiges ausführungsfähiges Beispiel finden Sie in den Beispielen Python Hosted-Agent.
Manuelles Packen der ZIP-Datei
Wenn Sie azd verwenden, überspringen Sie diesen Abschnitt — azd erstellt die ZIP-Datei für Sie. Lesen Sie dies, wenn Sie die REST-API verwenden, wenn Sie zu gebündelter Abhängigkeitsauflösung wechseln oder die volle Kontrolle über den Uploadinhalt benötigen.
Die ZIP-Datei muss im Stammverzeichnis flach sein – kein Wrapperordner auf oberster Ebene.
Wählen Sie die Registerkarte für die Sprache Ihres Agenten aus.
Python-Layout (Remote-Build-Modus)
Der Dienst installiert Abhängigkeiten in der Cloud von requirements.txt.
agent-code.zip
├── main.py
└── requirements.txt
Python Layout (gebündelter Modus)
Sie liefern vorkompilierte Linux-Abhängigkeiten in packages/ mit.
agent-code.zip
├── main.py # entry point
├── requirements.txt
└── packages/ # extracted modules (not raw .whl files)
├── azure/identity/__init__.py
└── requests/__init__.py
Lokales Erstellen von Linux-Abhängigkeiten (gebündelt, Python)
Verwenden Sie das Plattformtag manylinux2014_x86_64, damit pip auch unter Windows oder macOS Linux-Wheels herunterlädt.
Bash
pip install -r requirements.txt \
--target packages/ \
--platform manylinux2014_x86_64 \
--python-version 3.13 \
--implementation cp \
--only-binary=:all:
zip -r agent-code.zip main.py requirements.txt packages/
PowerShell /Windows cmd
pip install -r requirements.txt --target packages --platform manylinux2014_x86_64 --python-version 3.13 --implementation cp --only-binary=:all:
tar -a -c -f agent-code.zip main.py requirements.txt packages
--only-binary=:all: erzwingt Wheels (keine Quellbuilds). Der --python-version Wert muss mit dem runtime Wert in der Agentdefinition übereinstimmen.
Warning
Häufige Verpackungsfehler, die verursachen session_creation_failed oder ModuleNotFoundError:
- Die Quelle in einem Ordner speichern (
my-agent/main.pystattmain.pyim Stammverzeichnis). - Einschließen von Rohdateien
.whlinpackages/anstelle extrahierter Module. - Bündeln Windows Binärdateien (
.pyd,.dll) für eine Linux-Laufzeit.
Grenzen
| Limit | Wert |
|---|---|
| Maximale ZIP-Größe (mehrteiliger Upload) | 250 MB |
Informationen zu den unterstützten Kombinationen aus cpu und memory finden Sie unter Sandkastengrößen.
Troubleshooting
| Symptom | Wahrscheinliche Ursache | Beheben |
|---|---|---|
401 Unauthorized |
Fehlendes Token oder Token mit falschem Gültigkeitsumfang | Ein Token mit --resource https://ai.azure.com abrufen. |
403 Forbidden |
Der Aufrufer verfügt nicht über rollenbasierte Access Control für das Projekt. | Gewähren Sie Foundry User (oder höher) im Projektumfang. |
409 conflict beim Erstellen (Agent '<name>' already exists) |
Der Agentname ist bereits vorhanden | Verwenden Sie Update (POST /agents/{name}), oder wählen Sie einen neuen Namen aus. |
400 bad_request (CPU and Memory must be specified as a valid resource tier) beim Erstellen oder Aktualisieren |
cpu
/
memory sind keine der unterstützten Ebenen |
Legen Sie cpu und memory auf ein gültiges Paar aus Sandbox-Größen fest. |
400 bad_request (Agent version is still being provisioned) bei Aufruf |
Eine neue Version wird gerade bereitgestellt und die aktive Version wird gerade ausgetauscht. | Fragen Sie die Version status ab, bis active erreicht ist, und versuchen Sie es dann erneut. |
424 session_not_ready bei Aufruf |
Container gestartet, aber /readiness lieferte innerhalb des Zeitlimits keinen HTTP-200-Statuscode zurück |
Streamen Sie Protokolle mit :logstream, beheben Sie den Bereitschaftstest oder den Startfehler und stellen Sie erneut bereit. |
409 conflict beim DELETE-Agent (Agent has active sessions) |
Offene Sitzungen blockieren das Löschen | Warten Sie, bis Sitzungen inaktiv werden, oder hängen Sie &force=true an, um Sitzungen kaskadierend zu löschen. |
Version hängt in creating fest (>10 Min., Remote-Build) |
Fehler beim Serverbuild oder requirements.txt konnte nicht aufgelöst werden |
Wechseln Sie zu dependency_resolution: bundled und führen Sie lokal einen Prebuild durch. |
Versionsübergänge zu failed |
Ungültiges ZIP-Layout, Syntaxfehler oder (remote_build) Fehler beim Wiederherstellen/Kompilieren |
Lesen Sie zuerst das error-Objekt der Version – error.code klassifiziert den Fehler und error.message enthält die zugrunde liegende Wiederherstellungs- oder Kompilierungsfehlerzeile (Pip für Python, NuGet für .NET) sowie einen Link zur Problembehandlung. Überprüfen Sie die Ordnerstruktur. Verwenden Sie :logstream erst, nachdem der Container gestartet wurde. |
ModuleNotFoundError zur Laufzeit |
packages/ fehlt, enthält unformatierte .whl-Dateien oder enthält Windows Binärdateien. |
Neu erstellen mit pip install --target packages/ --platform manylinux2014_x86_64 --only-binary=:all:. |
409 AgentNotCodeBased beim Download |
Agent ist bildbasiert | Verwenden Sie das containerbasierte Bereitstellungsdokument. |
Bereinigen von Ressourcen
Wenn Sie das Projekt anhand des Schnellstarts mit azd erstellt haben, führen Sie azd down im Projektstammverzeichnis aus, um die gesamte bereitgestellte Umgebung zu entfernen.
Wenn Sie einen Agent löschen möchten, den Sie mit dem SDK oder der REST-API bereitgestellt haben, verwenden Sie den übereinstimmenden Pfad unten.
# Delete one version
project.agents.delete_version(agent_name=AGENT_NAME, agent_version=created.version)
# Delete the agent and all its versions
project.agents.delete(agent_name=AGENT_NAME)
Warning
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.
Nächste Schritte
- Referenz zu gehosteten Agent-Berechtigungen
- Bereitstellen eines gehosteten Agents in einem virtuellen Netzwerk