Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, jak wdrożyć agenta hostowanego w usłudze Foundry Agent Service z kodu źródłowego w języku Python lub .NET, bez kompilowania ani publikowania obrazu kontenera. Przesyłasz .zip kopię swojego kodu (a opcjonalnie także zależności), a Agent Service albo uruchamia ją w obecnej postaci, albo kompiluje Twoje zależności za Ciebie w chmurze.
Wskazówka
W większości scenariuszy wdrażaj przy użyciu interfejsu wiersza polecenia Azure Developer CLI (azd) lub Foundry Toolkit for VS Code. Te narzędzia wykonują za Ciebie całą ciężką pracę: pakują kod źródłowy, przesyłają go, sprawdzają dostępność active i automatycznie konfigurują kontrolę dostępu opartą na rolach. Aby rozpocząć, postępuj zgodnie z przewodnikiem Szybki start: wdróż pierwszego hostowanego agenta i wybierz pozycję Kod (lub Kod źródłowy (przekazywanie pliku ZIP)) po wyświetleniu monitu o metodę wdrożenia.
Użyj procedur zestawu SDK i REST w tym artykule, jeśli musisz programowo wdrożyć agentów kodu źródłowego — z zestawu SDK Python lub zestawu SDK .NET we własnych aplikacjach lub bezpośrednio za pośrednictwem interfejsu API REST na potrzeby niestandardowych narzędzi, niezależnej od języka automatyzacji lub integracji z istniejącymi systemami ciągłego dostarczania. W tym artykule wykonasz następujące zadania:
- Wybierz tryb rozwiązywania zależności i spakuj źródło.
- Utwórz agenta, poczekaj, aż osiągnie stan
active, a następnie go wywołaj. - Aktualizuj, sprawdź wersję, pobierz i strumieniuj dzienniki wdrożonego agenta.
Jeśli potrzebujesz pełnej kontroli nad obrazem środowiska uruchomieniowego lub masz już działający plik Dockerfile, użyj ścieżki opartej na kontenerze: Wdróż hostowanego agenta.
Jeśli używasz agenta kodowania, takiego jak GitHub Copilot do tworzenia i wdrażania kodu źródłowego, umiejętności Microsoft Foundry mogą ułatwić przygotowanie projektu i wykonanie wymaganych azdkroków, zestawu SDK lub REST.
Wymagania wstępne
- Projekt Microsoft Foundry w obsługiwanym regionie.
- Azure CLI w wersji 2.80 lub nowszej, zalogowane do dzierżawy, do której należy projekt.
pipw Pythonie 3.13 lub nowszym, aby spakować kod źródłowy lokalnie.Pakiety
azure-ai-projectsw wersji 2.2.0 lub nowszej orazazure-identity.pip install "azure-ai-projects>=2.2.0" azure-identity
Obsługiwane środowiska uruchomieniowe
Pole code_configuration.runtime w definicji agenta akceptuje następujące wartości. Wybierz środowisko uruchomieniowe zgodne z plikami binarnymi w pliku zip — koła x86_64 systemu Linux dla Python lub TargetFramework danych wyjściowych dotnet publish dla .NET.
| Język | Wartości środowiska uruchomieniowego |
|---|---|
| Python |
python_3_13, python_3_14 |
| .NET | dotnet_10 |
Zasady obsługi wersji języka
Środowisko uruchomieniowe usługi Agent Service zawiera obraz kontenera zbudowany przez platformę dla każdej wartości code_configuration.runtime. Aby zapewnić pełne wsparcie dla wdrożonych agentów, platforma Foundry dostosowuje obsługę języków dla hostowanych agentów do wsparcia do końca eksploatacji dla każdego języka. Wsparcie kończy się w dniu zakończenia wsparcia przez społeczność dla danej wersji językowej. Microsoft może wcześniej wycofać wartość code_configuration.runtime, jeśli wymagają tego ograniczenia platformy (takie jak bazowy obraz).
Aby uzyskać harmonogramy zakończenia wsparcia upstream, zobacz:
- Python: Status wersji Python (python.org).
- .NET: zasady obsługi .NET i .NET Core.
Faza wycofania
Po dacie zakończenia życia języka nadal można tworzyć, aktualizować i uruchamiać hostowanych agentów, którzy używają wartości wycofanego środowiska uruchomieniowego. Jednak ci agenci nie kwalifikują się do pomocy technicznej, nowych funkcji ani poprawek zabezpieczeń, dopóki nie uaktualnią ich do obsługiwanego środowiska uruchomieniowego, ustawiając bieżącą code_configuration.runtime wartość i ponownie wdrażając.
Wymagane uprawnienia
Aby wdrożyć agenta hostowanego, musisz mieć rolę Foundry Project Manager na poziomie projektu. Ta rola przyznaje uprawnienia w płaszczyźnie danych do tworzenia i aktualizowania agentów, a także możliwość tworzenia przypisań ról dla tożsamości agenta utworzonego przez platformę, w razie potrzeby. Aby uzyskać szczegółowe zestawienie uprawnień, zobacz informacje referencyjne dotyczące uprawnień hostowanego agenta.
Ważna
Niedawno zmieniono nazwy ról RBAC w usłudze Foundry. Użytkownik Foundry, właściciel Foundry, właściciel konta Foundry i menedżer projektu Foundry były wcześniej nazywane odpowiednio użytkownikiem Azure AI, właścicielem Azure AI, właścicielem konta Azure AI i menedżerem projektu Azure AI. Poprzednie nazwy mogą być nadal widoczne w niektórych miejscach, podczas gdy zmiana nazwy jest wdrażana. Identyfikatory ról i uprawnienia podstawowe są niezmienione przez zmianę nazwy.
Agent działa jako tożsamość zarządzana przypisana przez platformę, która jest oddzielona od tożsamości użytkownika. Ta tożsamość może domyślnie uzyskiwać dostęp do wnioskowania modelu za pośrednictwem punktu końcowego projektu i magazynu sesji. W przypadku zasobów zewnętrznych (na przykład własnego konta usługi Azure Storage) ręcznie przypisz role RBAC do tożsamości Microsoft Entra ID agenta. Aby uzyskać więcej informacji, zobacz Dostęp agenta poza ustawieniami domyślnymi.
Cykl życia wdrożenia
Każde wdrożenie kodu źródłowego przebiega według tej samej sekwencji: spakowanie -> utworzenie lub aktualizacja -> odpytywanie aż do active -> wywołanie. Ścieżka kodu źródłowego używa code_configuration w definicji agenta. Zamiast tego wykorzystywana jest ścieżka oparta na obrazie container_configuration. Te dwie opcje wzajemnie się wykluczają w obrębie jednej wersji.
Wybierz ścieżkę pasującą do przepływu pracy. Jeśli nie masz pewności, zacznij od interfejsu wiersza polecenia dewelopera Azure lub programu VS Code — jest to zalecana ścieżka dla większości klientów.
| Ścieżka | Najlepsze dla | Opakowanie |
|---|---|---|
| Azure Developer CLI lub VS Code | Większość wdrożeń, w tym pierwsze wdrożenia i najszybsza pętla wewnętrzna. | Narzędzie tworzy i przesyła za Ciebie plik ZIP. |
| SDK Python | Programistyczne wdrażanie za pomocą aplikacji Python lub mechanizmów automatyzacji. | Ty tworzysz archiwum ZIP; SDK je przesyła. |
| SDK platformy .NET | Wdrażanie programistyczne z aplikacji .NET lub za pomocą automatyzacji. | Pakiet SDK spakuje folder do pliku ZIP. |
| JavaScript/TypeScript SDK | Programistyczne wdrażanie z aplikacji Node.js lub za pomocą narzędzi do automatyzacji. Wdraża kod źródłowy Python lub .NET; nie ma hostowanego środowiska uruchomieniowego Node.js. | Ty tworzysz archiwum ZIP; SDK je przesyła. |
| API REST | Niestandardowe narzędzia, niezależna od języka automatyzacja i systemy cd. | Skompilujesz plik zip i wyślesz żądanie wieloczęściowe. |
Wybieranie sposobu rozwiązywania zależności
Przed rozpoczęciem wybierz wartość dla code_configuration.dependency_resolution. Ten wybór ma wpływ na to, co umieścisz w zip.
| Wartość | Behavior | Użyj, gdy |
|---|---|---|
remote_build |
Usługa agenta instaluje zależności z requirements.txt (Python) lub przywraca plik projektu (.NET) podczas aprowizacji. |
Chcesz mieć niewielki upload i jak najprostszą pętlę wewnętrzną. Zalecane dla użytkowników po raz pierwszy. |
bundled |
Archiwum ZIP uruchamia się bez zmian. Dołączasz wstępnie skompilowane zależności systemu Linux w packages/ (Python) lub w folderze wyjściowym dotnet publish (.NET). |
Potrzebujesz powtarzalnych kompilacji, Twoje zależności są prywatne lub dostępne wyłącznie jako pakiety wheel albo Twój projekt nie odtwarza zależności poprawnie po stronie serwera. |
W przypadku trybu pakietowego lokalne polecenia kompilacji znajdziesz w sekcji Ręczne pakowanie pliku ZIP.
Wymagania dotyczące zapory dla prywatnych sieci wirtualnych
Jeśli projekt zostanie zabezpieczony przy użyciu prywatnej sieci wirtualnej, przed wdrożeniem zaktualizuj zasady sieci, aby zezwolić na połączenia wychodzące z następującymi punktami końcowymi.
Wszystkie wdrożenia kodu źródłowego wymagają dostępu wychodzącego do:
mcr.microsoft.com*.login.microsoft.com
Aby uzyskać informacje na temat konfiguracji sieci, zobacz Wdrażanie hostowanego agenta w sieci wirtualnej.
Wdrażanie przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure lub programu VS Code
Interfejs wiersza polecenia Azure Developer (azd) i zestaw narzędzi Foundry Toolkit dla VS Code automatyzują cały cykl wdrażania kodu źródłowego — pakują kod źródłowy do archiwum ZIP, obliczają skrót SHA-256, przesyłają je, sprawdzają stan active i konfigurują za Ciebie kontrolę dostępu opartą na rolach. Te narzędzia są zalecaną ścieżką dla większości klientów i najszybszą pętlą wewnętrzną.
Aby zapoznać się z przewodnikiem krok po kroku, zobacz Przewodnik Szybki start: wdrażanie pierwszego hostowanego agenta. Wybierz Kod (lub Kod źródłowy (przesyłanie pliku ZIP)), gdy przewodnik Szybki start poprosi o wybranie metody wdrożenia.
Wybierz wdrożenie kodu źródłowego
Po uruchomieniu azd ai agent init interakcyjnym narzędzie wyświetli monit o wybranie trybu wdrożenia. Wybierz kod, aby wdrożyć ze źródła przez przesłanie pliku ZIP zamiast budowania obrazu kontenera. Wdrażanie kodu jest trybem domyślnym dla Python i .NET hostowanych agentów. Foundry Toolkit for VS Code prosi o wybranie metody wdrażania w taki sam sposób.
Aby wybrać nieinterakcyjnie wdrażanie z kodu źródłowego, na przykład w potoku CI/CD, przekaż parametr --deploy-mode code. Ten tryb wymaga parametrów --runtime i --entry-point oraz akceptuje opcjonalną wartość parametru --dep-resolution: remote_build (domyślnie) lub bundled:
azd ai agent init --no-prompt --project-id "<project-resource-id>" \
--deploy-mode code --runtime python_3_13 --entry-point main.py
Po zainicjowaniu azd zapisuje ustawienia wdrażania kodu źródłowego w polu codeConfiguration usługi azure.ai.agent w pliku azure.yaml:
services:
my-agent:
host: azure.ai.agent
project: src/my-agent
kind: hosted
codeConfiguration:
runtime: python_3_13
entryPoint:
- python
- main.py
dependencyResolution: remote_build
Uruchom polecenie azd up , aby aprowizować i wdrażać. Użyj --deploy-mode container tylko wtedy, gdy chcesz utworzyć lub odwołać się do obrazu kontenera.
Użyj ścieżek SDK lub REST w poniższych sekcjach, gdy chcesz wdrażać programowo z poziomu własnej aplikacji lub integrować się z istniejącymi narzędziami.
Wdrażanie z kodu źródłowego
Wybierz język lub interfejs. Każda zakładka przechodzi ten sam cykl życia: utwórz agenta, sprawdzaj jego stan, aż osiągnie stan active, wywołaj go i pobierz wdrożony kod.
Użyj zestawu SDK Python, aby wdrożyć agentów kodu źródłowego z własnych aplikacji lub automatyzacji. Skompilujesz plik zip samodzielnie i przekażesz jego bajty oraz algorytm SHA-256 do zestawu SDK, który przekazuje go i uwidacznia te same operacje tworzenia, sondowania, wywoływania i pobierania co interfejs API REST. Wdrożenie kodu wymaga azure-ai-projects wersji 2.2.0 lub nowszej.
Kompilowanie pliku zip
SDK języka Python przesyła plik ZIP, który tworzysz. Użyj tego samego układu i zasad rozwiązywania zależności, które opisano w sekcji Ręczne pakowanie pliku zip. Minimalny pakiet remote_build to płaskie archiwum ZIP z main.py i requirements.txt w katalogu głównym.
Tworzenie agenta
import hashlib
from pathlib import Path
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
CodeConfiguration,
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,
)
created = project.agents.create_version_from_code(
agent_name=AGENT_NAME,
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="2.0.0")
],
environment_variables={"AZURE_AI_MODEL_DEPLOYMENT_NAME": "gpt-5.4-mini"},
),
code=(ZIP_PATH.name, code_zip_bytes, "application/zip"),
code_zip_sha256=code_zip_sha256,
description="Hello-world code agent",
)
print(f"Created version: {created.version}")
Dla protokołu Invocations ustaw wpis protocol_versions na ProtocolVersionRecord(protocol="invocations", version="2.0.0"). W przypadku protokołu Invocations (WebSocket) użyj ProtocolVersionRecord(protocol="invocations_ws", version="2.0.0"). W przypadku bundled trybu ustaw dependency_resolution="bundled" i uwzględnij wstępnie utworzone zależności w pliku zip. Aby uzyskać więcej informacji, zobacz Build Linux dependencies locally (Tworzenie zależności systemu Linux lokalnie).
Sonduj jako aktywne
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)
Zobacz Poll for active, aby uzyskać pełną listę wartości stanu i informacje o tym, jak odczytywać obiekt error w razie błędu.
Wywoływanie agenta
Gdy wersja osiągnie active, przypisz klienta OpenAI do punktu końcowego agenta i wywołaj go. W tym przykładzie użyto protokołu Responses:
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)
W przypadku protokołu Invocations wywołaj bezpośrednio punkt końcowy invoke za pomocą tokenu bearer, jak pokazano w sekcji Wywoływanie agenta.
Pobieranie wdrożonego pliku zip
Sprawdź dokładnie, co zostało wdrożone, pobierając plik zip i porównując jego algorytm SHA-256 z przekazaną wartością:
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.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})")
Aby zobaczyć kompletny, w pełni działający przykład, przejrzyj przykłady hostowanego agenta w języku Python.
Ręczne pakowanie pliku zip
Jeśli używasz polecenia azd, pomiń tę sekcję —azd skompiluje plik zip. Przeczytaj to, jeśli używasz interfejsu API REST, jeśli przechodzisz na dołączone rozwiązywanie zależności lub jeśli potrzebujesz pełnej kontroli nad zawartością przesyłanych danych.
Plik ZIP musi mieć pliki bezpośrednio w katalogu głównym — bez nadrzędnego folderu najwyższego poziomu.
Wybierz kartę języka agenta.
układ Python (tryb kompilacji zdalnej)
Usługa instaluje zależności w chmurze z requirements.txt.
agent-code.zip
+-- main.py
+-- requirements.txt
Układ instalacji Python (wariant pakietowy)
Dostarczasz wstępnie skompilowane zależności Linuksa w packages/.
agent-code.zip
+-- main.py # entry point
+-- requirements.txt
+-- packages/ # extracted modules (not raw .whl files)
+-- azure/identity/__init__.py
+-- requests/__init__.py
Lokalne kompilowanie zależności dla systemu Linux (dołączone, Python)
Użyj tagu platformy manylinux2014_x86_64, aby pip pobierać koła systemu Linux nawet z Windows lub macOS.
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: wymusza koła (bez kompilacji źródłowych). Element --python-version musi odpowiadać wartości runtime w definicji agenta.
Warning
Typowe błędy pakowania, które prowadzą do session_creation_failed lub ModuleNotFoundError:
- Zawijanie źródła w folderze (
my-agent/main.pyzamiastmain.pyw katalogu głównym). - Dołączanie surowych plików
.whlwpackages/zamiast wyodrębnionych modułów. - Tworzenie pakietów plików binarnych Windows (
.pyd,.dll) dla środowiska uruchomieniowego systemu Linux.
Limity
| Limit | Wartość |
|---|---|
| Maksymalny rozmiar pliku zip (przekazywanie wieloczęściowe) | 250 MB |
Zobacz cpu, aby uzyskać informacje o obsługiwanych kombinacjach memory i .
Troubleshooting
| Objaw | Prawdopodobna przyczyna | Napraw |
|---|---|---|
401 Unauthorized |
Brakujący token lub token o nieprawidłowym zakresie | Uzyskaj token za pomocą polecenia --resource https://ai.azure.com. |
403 Forbidden |
Wywołujący nie ma kontroli dostępu opartej na rolach w projekcie | Przyznaj role Foundry Agent Consumer (tylko do wywoływania) lub Foundry User (również do tworzenia) na poziomie projektu. |
409 conflict w obszarze Tworzenie (Agent '<name>' already exists) |
Nazwa agenta już istnieje | Użyj opcji Update (POST /agents/{name}) lub wybierz nową nazwę. |
400 bad_request (CPU and Memory must be specified as a valid resource tier) w obszarze Tworzenie lub aktualizowanie |
cpu
/
memory nie są jedną z obsługiwanych warstw |
Ustaw cpu i memory na poprawną parę z sekcji Rozmiary piaskownicy. |
400 bad_request (Agent version is still being provisioned) przy wywołaniu |
Nowa wersja jest w trakcie wdrażania, a aktywna wersja jest przełączana. | Sonduj wersję status do active, a następnie ponów próbę. |
424 session_not_ready przy wywołaniu |
Kontener został uruchomiony, ale /readiness nie zwrócił protokołu HTTP 200 w ramach limitu czasu |
Śledź logi za pomocą :logstream, napraw sondę gotowości lub błąd uruchamiania, wdroż ponownie. |
409 conflict on DELETE agent (Agent has active sessions) |
Otwarte sesje blokują usuwanie | Poczekaj, aż sesje przejdą w stan bezczynności, lub dodaj &force=true, aby usunąć sesje kaskadowo. |
Wersja utknęła w creating (>10 min, kompilacja zdalna) |
Kompilacja serwera nie powiodła się lub nie można rozwiązać problemu requirements.txt |
Przełącz się na dependency_resolution: bundled i wykonaj lokalny prebuild. |
| Wdrażanie kończy się niepowodzeniem w prywatnej sieci wirtualnej | Wymagane punkty końcowe ruchu wychodzącego są blokowane przez zaporę | Zezwól na punkty końcowe wymienione w sekcji Wymagania zapory dla prywatnych sieci wirtualnych, a następnie wdroż ponownie. |
Przejście wersji do failed |
Nieprawidłowy układ zip, błąd składni lub (remote_build) niepowodzenie przywracania/kompilacji |
Przeczytaj najpierw obiekt error wersji — error.code klasyfikuje błąd i error.message zawiera podstawowy wiersz błędu przywracania lub kompilacji (pip dla Python, NuGet dla .NET) oraz link do rozwiązywania problemów. Sprawdź strukturę folderów. Użyj :logstream tylko po uruchomieniu kontenera. |
ModuleNotFoundError w czasie wykonywania |
brak elementu packages/, zawiera surowe pliki .whl lub pliki binarne systemu Windows |
Skompiluj ponownie za pomocą polecenia pip install --target packages/ --platform manylinux2014_x86_64 --only-binary=:all:. |
409 AgentNotCodeBased po pobraniu |
Agent jest oparty na obrazach | Użyj dokumentu wdrażania opartego na kontenerze. |
Uprzątnij zasoby
Jeśli projekt utworzono na podstawie przewodnika Quickstart za pomocą azd, uruchom azd down z katalogu głównego projektu, aby usunąć całe utworzone środowisko.
Aby usunąć agenta wdrożonego za pomocą zestawu SDK lub interfejsu API REST, użyj odpowiedniej ścieżki poniżej.
# 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
Usunięcie agenta powoduje usunięcie wszystkich jego wersji i zakończenie aktywnych sesji. Tej akcji nie można cofnąć.
Następne kroki
- Informacje referencyjne dotyczące uprawnień hostowanego agenta
- Wdrażanie hostowanego agenta w sieci wirtualnej