Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, bir kapsayıcı görüntüsü oluşturmadan veya göndermeden Python veya .NET kaynak kodundan Foundry Agent Service'te Hosted aracısı nasıl dağıtılacağı gösterilmektedir. Kodunuzun bir .zip sürümünü (ve isteğe bağlı olarak bağımlılıklarınızı) yüklersiniz; Agent Service ise bunu olduğu gibi çalıştırır veya bağımlılıklarınızı sizin için bulutta derler.
Tip
Çoğu senaryo için Azure Developer CLI (azd) veya VS Code için Foundry Toolkit ile dağıtın. Bu araçlar sizin için zor işi yapar: kaynağınızı paketler, yükler, active durumunu düzenli olarak denetler ve rol tabanlı erişim denetimini otomatik olarak yapılandırır. Başlamak için Hızlı Başlangıç: İlk barındırılan aracınızı dağıtma kılavuzunu izleyin ve dağıtım yöntemi sorulduğunda Kod (veya Kaynak Kodu (ZIP Yükleme)) seçeneğini belirleyin.
Kendi uygulamalarınızda Python SDK veya .NET SDK'sından veya özel araçlar, dil-bağımsız otomasyon veya mevcut sürekli teslim sistemleriyle tümleştirme için doğrudan REST API üzerinden program aracılığıyla kaynak kod aracıları dağıtmanız gerektiğinde bu makaledeki SDK ve REST yordamlarını kullanın. Bu makalede aşağıdaki görevleri tamamlaacaksınız:
- Bir bağımlılık çözümleme modu seçin ve kaynağınızı paketle.
- Aracı oluşturun,
activeöğesine ulaşmasını bekleyin ve çağırın. - Dağıtılan aracı için günlükleri güncelleme, sürümünü görüntüleme, indirme ve akışını izleme.
Çalışma zamanı görüntüsünün tam denetimine ihtiyacınız varsa veya zaten çalışan bir Dockerfile'ınız varsa kapsayıcı tabanlı yolu kullanın: Barındırılan aracı dağıtma.
Kaynak kodu paketlemek ve dağıtmak için GitHub Copilot gibi bir kodlama aracısı kullanırsanız, Microsoft Döküm Becerisi projenizi hazırlamaya ve gerekli azd, SDK veya REST adımlarını izlemenize yardımcı olabilir.
Prerequisites
- Desteklenen bir bölgede Microsoft Foundry projesi.
- Azure CLI sürüm 2.80 veya üzeri, projenin sahibi olan kiracıda oturum açtı.
pipkaynağınızı yerel olarak paketlemek için Python 3.13 veya sonraki bir sürümünü kullanarak.azure-ai-projectssürümü 2.2.0 veya sonraki veazure-identitypaketleri.pip install "azure-ai-projects>=2.2.0" azure-identity
Desteklenen çalışma zamanları
Aracı code_configuration.runtime tanımındaki alan aşağıdaki değerleri kabul eder. Zip'inizdeki ikili dosyalarla eşleşen çalışma zamanını (Python için Linux x86_64 tekerlekleri) veya .NET için TargetFramework çıkışınızın dotnet publish seçin.
| Dil | Çalışma zamanı değerleri |
|---|---|
| Python |
python_3_13, python_3_14 |
| .NET | dotnet_10 |
Dil sürümü destek ilkesi
Aracı Hizmet çalışma zamanı, her code_configuration.runtime değeri için platform tarafından oluşturulmuş kapsayıcı görüntüsünü içerir. Dağıtılan aracılarınızın tam olarak desteklenmesi için Foundry, barındırılan aracı dili desteğini her dil için kullanım süresi sonu desteğiyle uyumlu hale getirir. Destek, dil sürümünün topluluk destek sonu tarihinde sona erer. Microsoft, platform kısıtlamaları (örneğin altta yatan taban görüntü) gerektiriyorsa bir code_configuration.runtime değerini daha erken kullanımdan kaldırabilir.
Yukarı yönlü destek bitiş takvimleri için bkz:
- Python: Python sürümlerinin Status (python.org).
- .NET: .NET ve .NET Core destek ilkesi.
Kullanımdan kaldırma aşaması
Dil kullanım süresi sonu tarihinden sonra, kullanımdan kaldırılan çalışma zamanı değerini kullanan barındırılan aracıları oluşturmaya, güncelleştirmeye ve çalıştırmaya devam edebilirsiniz. Ancak bu aracılar, code_configuration.runtime için geçerli bir değer ayarlayıp desteklenen bir çalışma zamanına yükseltip yeniden dağıtana kadar destekten, yeni özelliklerden veya güvenlik yamalarından yararlanamaz.
Gerekli izinler
Barındırılan bir aracıyı dağıtabilmek için proje kapsamında Foundry Project Manager rolüne sahip olmanız gerekir. Bu rol, aracı oluşturmak ve güncelleştirmek için veri düzlemi izinlerinin yanı sıra gerekirse platform tarafından oluşturulan aracı kimliği için rol atamaları oluşturma olanağı verir. İlgili izinlerin ayrıntılı dökümü için Barındırılan aracı izinleri başvuru bilgileri bölümüne bakın.
Important
Foundry RBAC rolleri yakın zamanda yeniden adlandırıldı. Foundry User, Foundry Owner, Foundry Hesabı Sahibi ve Foundry Project Manager daha önce Azure Yapay Zeka Kullanıcısı, Azure Yapay Zeka Sahibi, Azure Yapay Zeka Hesabı Sahibi ve Azure Yapay Zeka Project Yöneticisi olarak adlandırıldı. Yeniden adlandırma kullanıma sunulmaya devam ederken bazı yerlerde önceki adları görmeye devam edebilirsiniz. Rol kimlikleri ve temel izinler yeniden adlandırma ile değiştirilmez.
Aracınız, kullanıcı kimliğinizden ayrı olan, platformun atadığı bir yönetilen kimlik olarak çalışır. Bu kimlik, varsayılan olarak proje uç noktası ve oturum depolama alanı aracılığıyla model çıkarıma erişebilir. Dış kaynaklar için (örneğin, size ait Azure Depolama), RBAC rollerini aracının Microsoft Entra kimliğine manuel olarak atayın. Daha fazla bilgi için Varsayılanların ötesinde aracı erişimi konusuna bakın.
Dağıtım yaşam döngüsü
Her kaynak kod dağıtımı aynı sırayı izler: paketle -> oluştur veya güncelle ->active olana kadar sorgula -> çağır. Kaynak kodu yolunda, ajan tanımında code_configuration kullanılır. Görüntü tabanlı yol bunun yerine container_configuration kullanır. Bu iki seçenek tek bir sürümde birbirini dışlar.
İş akışınıza uygun yolu seçin. Emin değilseniz, Azure Geliştirici CLI veya VS Code ile başlayın; çoğu müşteri için önerilen yoldur.
| Yol | En iyi kullanım alanları | Ambalaj |
|---|---|---|
| Azure Developer CLI veya VS Code | Çoğu dağıtım; ilk dağıtımlar ve en hızlı iç döngüler dahil. | Araçlar, ZIP dosyasını sizin için oluşturur ve yükler. |
| Python SDK'sı | Python uygulamalarından veya otomasyon yoluyla programatik dağıtım. | Zip'i oluşturursunuz; SDK bunu karşıya yükler. |
| .NET SDK | .NET uygulamalardan veya otomasyondan programlı dağıtım. | SDK sizin için bir klasör sıkıştırıyor. |
| JavaScript/TypeScript SDK'sı | Node.js uygulamalarından veya otomasyon yoluyla dağıtım. Python veya .NET kaynak kodu dağıtılır; Node.js için barındırılan bir çalışma zamanı yoktur. | Zip'i oluşturursunuz; SDK bunu karşıya yükler. |
| REST API | Özel araçlar, dil-bağımsız otomasyon ve CD sistemleri. | Zip'i oluşturur ve çok parçalı isteği gönderirsiniz. |
Bağımlılıkların nasıl çözümleneceğini seçme
Başlamadan önce için code_configuration.dependency_resolutionbir değer seçin. Bu seçim, ZIP dosyasına ne koyduğunuzu etkiler.
| Değer | Behavior | Şu durumlarda kullanın: |
|---|---|---|
remote_build |
Aracı Hizmeti, requirements.txt (Python) bağımlılıklarını yükler veya sağlama sırasında proje dosyasını (.NET) geri yükler. |
Küçük bir yükleme boyutu ve en basit iç döngüyü istiyorsunuz. İlk kez kullananlar için önerilir. |
bundled |
ZIP dosyası olduğu gibi çalıştırılır. Önceden oluşturulmuş Linux bağımlılıklarını packages/ (Python) veya dotnet publish çıkışında (.NET) gönderirsiniz. |
Yeniden üretilebilir derlemelere ihtiyacınız var, bağımlılıklarınız özel ya da yalnızca wheel paketlerinden oluşuyor veya projeniz sunucu tarafında sorunsuz biçimde geri yüklenmiyor. |
Paketlenmiş mod için bkz. Yerel derleme komutları için zip'i el ile paketleme .
Özel sanal ağlar için güvenlik duvarı gereksinimleri
Projenizin güvenliğini özel bir sanal ağ ile sağlarsanız, dağıtımdan önce ağ ilkenizi aşağıdaki uç noktalara giden bağlantılara izin verecek şekilde güncelleştirin.
Tüm kaynak kod dağıtımları için dışa doğru erişim gerekir:
mcr.microsoft.com*.login.microsoft.com
Ağ yapılandırması için bkz. Sanal ağda barındırılan aracı dağıtma.
Azure Geliştirici CLI veya VS Code kullanarak dağıtma
Azure Developer CLI (azd) ve VS Code için Foundry Toolkit, uçtan uca kaynak kodu dağıtım yaşam döngüsünü otomatikleştirir—kaynağınızı bir ZIP dosyası olarak paketler, SHA-256 değerini hesaplar, yükler, active durumunu düzenli olarak denetler ve rol tabanlı erişim kontrolünü sizin için yapılandırır. Bu araçlar çoğu müşteri için önerilen yoldur ve en hızlı iç döngü.
Adım adım açıklamalı kılavuz için Hızlı Başlangıç: İlk barındırılan aracınızı dağıtma bölümüne bakın. Hızlı başlangıç kılavuzu sizden bir dağıtım yöntemi seçmenizi istediğinde Kod (veya Kaynak Kodu (ZIP yükleme)) seçin.
Kaynak kodu dağıtımı seçme
Etkileşimli olarak çalıştırdığınızda azd ai agent init , araç sizden bir dağıtım modu seçmenizi ister. Kapsayıcı görüntüsü oluşturmak yerine kaynaktan ZIP olarak dağıtım yapmak için kod'u seçin. Kod dağıtımı, Python ve .NET için barındırılan aracılar için varsayılan moddur. VS Code için Foundry Araç Seti de aynı şekilde sizden dağıtım yöntemini ister.
Kaynak kodu dağıtımını etkileşimsiz olarak seçmek için, örneğin bir CI/CD işlem hattında, --deploy-mode code parametresini belirtin. Bu mod, --runtime ve --entry-point gerektirir ve isteğe bağlı olarak --dep-resolution için remote_build (varsayılan) veya bundled değerini kabul eder:
azd ai agent init --no-prompt --project-id "<project-resource-id>" \
--deploy-mode code --runtime python_3_13 --entry-point main.py
Başlatma işleminden sonra azd, kaynak kod dağıtım ayarlarını codeConfiguration içindeki azure.ai.agent hizmetinde bulunan azure.yaml alanına yazar:
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
Sağlamak ve dağıtmak için komutunu çalıştırın azd up .
--deploy-mode container ifadesini yalnızca bunun yerine bir kapsayıcı görüntüsü oluşturmak veya ona başvurmak istediğinizde kullanın.
Kendi uygulamanızdan program aracılığıyla dağıtmanız veya mevcut araçlarla tümleştirmeniz gerektiğinde aşağıdaki bölümlerdeki SDK veya REST yollarını kullanın.
Kaynak koddan dağıtım
Dilinizi veya arabiriminizi seçin. Her sekme aynı yaşam döngüsünü izler: aracıyı oluşturun, active değerine ulaşana kadar yoklayın, ardından aracıyı çağırın ve dağıtılan kodu indirin.
Kaynak kodu aracılarını kendi uygulamalarınızdan veya otomasyonunuzdan dağıtmak için Python SDK'sını kullanın. Zip'i kendiniz derleyip baytlarını ve SHA-256'sını SDK'ya geçirirsiniz; bu da bunu karşıya yükler ve REST API ile aynı oluşturma, yoklama, çağırma ve indirme işlemlerini kullanıma sunar. Kod dağıtımı için 2.2.0 veya sonraki bir sürüm gerekir azure-ai-projects .
ZIP dosyasını oluştur
Python SDK, oluşturduğunuz ZIP dosyasını yükler.
Zip'i el ile paketleme bölümünde açıklanan düzen ve bağımlılık çözümleme kurallarını kullanın. Asgari remote_build paket, kök dizininde main.py ve requirements.txt bulunan düz bir ZIP arşividir.
Ajanı oluşturun
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}")
Çağırmalar protokolü için girdisini protocol_versions olarak ProtocolVersionRecord(protocol="invocations", version="2.0.0")ayarlayın. Çağırmalar (WebSocket) protokolü için kullanın ProtocolVersionRecord(protocol="invocations_ws", version="2.0.0").
bundled modu için dependency_resolution="bundled" olarak ayarlayın ve ZIP dosyasına önceden derlenmiş bağımlılıkları ekleyin. Daha fazla bilgi için bkz. Yerel olarak Linux bağımlılıkları oluşturma.
Etkin olup olmadığını denetle
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)
Durum değerlerinin tam listesi ve başarısızlık durumunda nesnesinin nasıl okunacağı için error bölümüne bakın.
Aracıyı çağırma
Sürüm active düzeyine ulaştıktan sonra, bir OpenAI istemcisini ajan uç noktasına bağlayın ve onu çağırın. Bu örnekte Yanıtlar protokolü kullanılır:
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)
Çağırmalar protokolü için, aracıyı çağırma bölümünde gösterildiği gibi çağırma uç noktasını doğrudan taşıyıcı belirteci ile çağırın.
Dağıtılan zip'i indirme
Zip’i indirip SHA-256 değerini yüklediğiniz değerle karşılaştırarak tam olarak neyin dağıtıldığını doğrulayın:
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})")
Tam bir çalıştırılabilir örnek için bkz. Python barındırılan aracı örnekleri.
Zip'i el ile paketleme
azd kullanıyorsanız, bu bölümü atlayın—azd ZIP dosyasını sizin için oluşturur. REST API kullanıyorsanız, paketlenmiş bağımlılık çözümlemesine geçerseniz veya karşıya yükleme içeriği üzerinde tam denetime ihtiyacınız varsa bunu okuyun.
ZIP dosyası kök dizinde düz yapıda olmalıdır; üst düzeyde sarmalayıcı bir klasör olmamalıdır.
Temsilcinizin diline ait sekmeyi seçin.
Python düzeni (uzak derleme modu)
Hizmet, bağımlılıkları bulutta requirements.txt konumundan yükler.
agent-code.zip
+-- main.py
+-- requirements.txt
Python düzeni (paketlenmiş mod)
packages/ içinde önceden derlenmiş Linux bağımlılıkları sunarsınız.
agent-code.zip
+-- main.py # entry point
+-- requirements.txt
+-- packages/ # extracted modules (not raw .whl files)
+-- azure/identity/__init__.py
+-- requests/__init__.py
Yerel olarak Linux bağımlılıkları oluşturma (paketlenmiş, Python)
manylinux2014_x86_64’in Windows veya macOS üzerinden bile Linux wheel paketlerini indirebilmesi için pip platform etiketini kullanın.
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: tekerlekleri zorlar (kaynak derlemesi yoktur).
--python-version, aracı tanımındaki runtime değeriyle eşleşmelidir.
Warning
session_creation_failed veya ModuleNotFoundError neden olan yaygın paketleme hataları:
- Kaynağı bir klasör içine alma (kök dizinde
my-agent/main.pyyerinemain.py). - Ayıklanan modüller yerine
.whliçinde hampackages/dosyaların dahil edilmesi. - Linux çalışma zamanı için Windows ikili dosyalarını (
.pyd,.dll) paketleme.
Limits
| Limit | Değer |
|---|---|
| En büyük ZIP boyutu (çok parçalı yükleme) | 250 MB |
Desteklenen cpu ve memory birleşimleri için bkz. Korumalı alan boyutları.
Troubleshooting
| Belirti | Olası neden | Düzelt |
|---|---|---|
401 Unauthorized |
Eksik veya yanlış kapsam belirteci |
--resource https://ai.azure.com ile bir belirteç alın. |
403 Forbidden |
Çağıran kullanıcının projede Rol Tabanlı Erişim Denetimi bulunmuyor. | Proje düzeyinde Foundry Agent Consumer (yalnızca çağırma için) veya Foundry User (aynı zamanda geliştirme için) atayın. |
409 conflict Oluşturulduğunda (Agent '<name>' already exists) |
Ajan adı zaten var | Güncelleştir 'i (POST /agents/{name}) kullanın veya yeni bir ad seçin. |
400 bad_request (CPU and Memory must be specified as a valid resource tier) oluşturma veya güncelleme sırasında |
cpu
/
memory desteklenen katmanlardan biri değildir |
cpu arasından geçerli bir çift seçerek memory ve değerlerini buna ayarlayın. |
400 bad_request (Agent version is still being provisioned) çağrısında |
Yeni bir sürümün dağıtımı sürüyor ve aktif sürüm yerine geçiriliyor |
status olana kadar sürümü yoklayın, ardından yeniden deneyin. |
424 session_not_ready çağırma sırasında |
Kapsayıcı başlatıldı ancak /readiness zaman aşımı süresi içinde HTTP 200 döndürmedi |
Günlükleri :logstream ile akış olarak izleyin, hazırlık yoklamasını veya başlangıç hatasını düzeltin, yeniden dağıtım yapın. |
409 conflict DELETE aracısında (Agent has active sessions) |
Açık oturumlar silme işlemini engeller | Oturumların boşta kalmasını bekleyin veya oturumları kademeli olarak silmek için &force=true ekleyin. |
Sürüm creating içinde takılı kaldı (>10 dk, uzak yapı) |
Sunucu derlemesi başarısız oldu veya çözümlenemedi requirements.txt |
dependency_resolution: bundled öğesine geçin ve yerel olarak ön derleme yapın. |
| Özel bir sanal ağda dağıtım başarısız oluyor | Gerekli çıkış uç noktaları güvenlik duvarı tarafından engelleniyor | Özel sanal ağlar için Güvenlik duvarı gereksinimleri'nde uç noktalara izin verin ve yeniden dağıtın. |
Sürüm failed sürümüne geçer. |
Hatalı zip düzeni, söz dizimi hatası veya (remote_build) geri yükleme/derleme hatası |
Önce sürümün error nesnesini okuyun; error.code hatayı sınıflandırır ve error.message temel geri yükleme veya derleme hata satırını (Python için pip, .NET için NuGet) ve bir sorun giderme bağlantısı içerir.
Klasör yapısını doğrulayın.
:logstream öğesini yalnızca kapsayıcı başlatıldıktan sonra kullanın. |
ModuleNotFoundError çalışma zamanında |
packages/ eksik, ham .whl dosyaları içeriyor veya Windows ikili dosyaları var |
pip install --target packages/ --platform manylinux2014_x86_64 --only-binary=:all: ile yeniden derleyin. |
409 AgentNotCodeBased indirme sırasında |
Ajan görüntü tabanlıdır | Kapsayıcı tabanlı dağıtım belgesini kullanın. |
Kaynakları temizle
Projeyi Quickstart bölümünden azd ile oluşturduysanız, oluşturulan ortamın tamamını kaldırmak için proje kök dizininde azd down komutunu çalıştırın.
SDK veya REST API ile dağıtılan bir aracıyı silmek için aşağıdaki eşleşen yolu kullanın.
# 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
Bir aracı silindiğinde tüm sürümleri kaldırılır ve etkin oturumlar sonlanır. Bu eylem geri alınamaz.