إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
توضح لك هذه المقالة كيفية نشر وكيل محوى في خدمة Foundry Agent باستخدام Python SDK أو REST API. استخدم هذه الأساليب عندما ترغب في إدارة نشر الوكلاء مباشرة من تطبيقاتك أو خدماتك.
إذا كنت تنشر لأول مرة أو ترغب في أسرع مسار، استخدم خيار البدء السريع: إنشاء ونشر وكيل مستضاف بدلا من ذلك. تستخدم البداية السريعة Azure Developer CLI (azd) أو VS Code، والتي تتولى بناء ودفع وإصدار وتكوين RBAC تلقائيا.
دورة حياة النشر
كل نشر للوكيل المستضاف يتبع هذا التسلسل:
- Build and push — قم بتغليف كود الوكيل في صورة حاوية وادفعها إلى Azure Container Registry.
- إنشاء نسخة وكيل — سجل الصورة في خدمة وكلاء Foundry. توفر المنصة بنية تحتية وتنشئ هوية وكيل مخصصة ل Entra.
-
استطلاع للحالة — انتظر حتى تصل
activeحالة الإصدار إلى . - الاستدعاء — إرسال الطلبات إلى نقطة النهاية المخصصة للوكيل.
المتطلبات الأساسية
- مشروع Microsoft Foundry.
- كود الوكيل باستخدام إطار عمل مدعوم.
- تم تثبيت Docker Desktop لتطوير الحاويات المحلية.
- Azure CLI الإصدار 2.80 أو أحدث.
الصلاحيات المطلوبة
تحتاج إلى Azure مدير Project الذكاء الاصطناعي في نطاق project لإنشاء ونشر وكلاء مستضافة. يشمل هذا الدور كل من صلاحيات مستوى البيانات لإنشاء الوكلاء والقدرة على تعيين دور المستخدم الذكي Azure لهوية الوكيل التي تنشئه المنصة. تحتاج هوية الوكيل إلى Azure AI User في المشروع للوصول إلى النماذج والقطع الأثرية أثناء وقت التشغيل.
إذا كنت تستخدم azd إضافة VS Code، فإن الأدوات تتعامل مع معظم تعيينات RBAC تلقائيا، بما في ذلك:
- قارئ مستودع سجل الحاويات لهوية المشروع المدارة (سحب الصور)
- Azure مستخدم الذكاء الاصطناعي لهوية الوكيل التي أنشأها المنصة (نموذج وقت التشغيل والوصول إلى الأداة)
ملاحظة
تنشئ المنصة هوية وكيل إنترا مخصصة لكل وكيل مستضاف في وقت النشر. هذه الهوية هي مبدأ خدمة تستخدمه الحاوية التشغيلية لاستدعاء النماذج والأدوات. لا تحتاج إلى تكوين الهويات المدارة يدويا. ومع ذلك، يجب أن يكون لدى المستخدم الذي ينشئ الوكيل إذن بتعيين Azure AI User لتلك الهوية — ولهذا السبب يوصى ب Azure AI Project Manager على Azure AI User فقط.
ملاحظة
بينما تتعامل امتدادات azd وVS Code مع تعيينات RBAC الأساسية تلقائيا، قد تتطلب السيناريوهات المعقدة إعدادا يدويا إضافيا. للحصول على تفاصيل شاملة حول جميع الأذونات وتوزيع الأدوار المعنية، راجع مرجع أذونات الوكيل المستضاف.
لمزيد من المعلومات، راجع المصادقة والتفويض.
مهم
يجب أن يكون Azure Container Registry الذي يحتفظ بصورة الحاوية الخاصة بوكيلك المستضاف متاحا حاليا عبر نقطة النهاية العامة. وضع السجل خلف شبكة خاصة (نقطة نهاية خاصة مع تعطيل الوصول إلى الشبكة العامة) غير مدعوم حاليا للوكلاء المستضافين — فالمنصة لا تستطيع سحب الصورة. للحصول على القائمة الكاملة لقيود الشبكة، راجع القيود.
متطلبات الحاويات
يجب أن تستوفي صورة الحاوية الخاصة بك المتطلبات التالية لتعمل على منصة الوكيل المستضاف.
مهم
تتطلب منصة الاستضافة x86_64 صور الحاويات (linux/amd64). إذا بنيت على Apple Silicon أو أجهزة أخرى تعتمد على ARM، استخدمها docker build --platform linux/amd64 . لتجنب إنتاج صورة ARM غير متوافقة.
مكتبات البروتوكول
يتواصل الوكلاء المستضيفون مع بوابة Foundry عبر مكتبات البروتوكولات. اختر البروتوكول الذي يتوافق مع نمط تفاعل وكيلك:
| البروتوكول | مكتبة Python | مكتبة .NET | نقطة النهاية | الأفضل ل |
|---|---|---|---|---|
| الردود | azure-ai-agentserver-responses |
Azure.AI.AgentServer.Responses |
/responses |
روبوتات دردشة حوارية، بث، تعدد الأدوار مع تاريخ مدار من المنصة |
| الدعاءات | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations |
مستقبلات Webhook، معالجة غير حوارية، سير عمل غير متزامن مخصص |
يمكن لحاوية واحدة أن تكشف البروتوكولين في نفس الوقت عن طريق إعلان كلاهما عند إنشاء الوكيل — في agent.yaml ملف أو استدعاء SDK أو طلب واجهة برمجة تطبيقات REST — واستيراد كلا المكتبتين. استخدم مكتبات البروتوكول داخل إطار العمل الحالي، سواء كان ذلك Microsoft Agent Framework، أو LangChain، أو كود مخصص.
نقاط النهاية الصحية
تكشف مكتبات البروتوكول تلقائيا نقطة /readiness نهاية لفحوصات صحة المنصة. لا تحتاج إلى تنفيذ ذلك بنفسك.
الميناء
تخدم الحاويات حركة المرور على الميناء 8088 محليا. في الإنتاج، تتولى بوابة Foundry التوجيه — لا تحتاج الحاوية إلى كشف منفذ عام.
متغيرات البيئة المحقونة بالمنصة
تقوم منصة الوكيل المستضاف تلقائيا بحقن متغيرات البيئة في الحاوية أثناء وقت التشغيل. يمكن لكودك قراءة هذه دون إعلانها في agent.yaml أو environment_variables.
FOUNDRY_* البادئة مخصصة للاستخدام على المنصة.
| المتغير | الغرض |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
رابط نقطة نهاية مشروع Foundry |
FOUNDRY_PROJECT_ARM_ID |
معرف مورد مشروع Foundry ARM |
FOUNDRY_AGENT_NAME |
اسم الوكيل الجاري |
FOUNDRY_AGENT_VERSION |
نسخة من وكيل الجار |
FOUNDRY_AGENT_SESSION_ID |
معرف الجلسة للطلب الحالي (الحاويات المستضافة فقط) |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Application Insights سلسلة الاتصال للقياس عن بعد |
لا تعيد إعلان المتغيرات agent.yaml المحقونة في المنصة — فهي تضبط تلقائيا.
المتغيرات التي تعلن عنها بنفسك، مثل MODEL_DEPLOYMENT_NAME نقاط نهاية MCP في صندوق الأدوات، تدخل في environment_variables قسم agent.yaml أو استدعاء SDK create_version .
قم بتغليفك واختباره محليا
قبل النشر في Foundry، تحقق من عمل وكيلك محليا باستخدام مكتبة البروتوكولات. تخدم الحاوية نفس نقاط النهاية محليا كما تخدم في الإنتاج.
اختبار بروتوكول الاستجابات
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Where is Seattle?",
"stream": false
}
اختبار بروتوكول الاستدعاءات
POST http://localhost:8088/invocations
Content-Type: application/json
{
"message": "Hello!"
}
النشر باستخدام Azure Developer CLI أو VS Code
تقوم Azure Developer CLI (azd) وإضافة VS Code بأتمتة دورة حياة النشر الكاملة. للحصول على دليل خطوة بخطوة، راجع البدء السريع: إنشاء ونشر وكيل مستضاف.
النشر باستخدام حزمة تطوير Python SDK
استخدم SDK عندما تريد إدارة نشر الوكلاء مباشرة من كود Python.
متطلبات إضافية
صورة حاوية بنظام Azure Container Registry
كاتب مستودع سجل الحاويات أو دور AcrPush على سجل الحاويات (لدفع الصور)
Azure AI Projects SDK الإصدار 2.1.0 أو أحدث
pip install "azure-ai-projects>=2.1.0"
ابن ودفع صورة الحاوية الخاصة بك
ابن صورة Docker الخاصة بك:
docker build --platform linux/amd64 -t myagent:v1 .Push to Azure Container Registry:
az acr login --name myregistry docker tag myagent:v1 myregistry.azurecr.io/myagent:v1 docker push myregistry.azurecr.io/myagent:v1
نصيحة
استخدم علامات الصور الفريدة بدلا من :latest النشر القابل للتكرار.
تكوين صلاحيات سجل الحاويات
امنح هوية مشروعك المدارة حق الوصول لسحب الصور:
في بوابة Azure، انتقل إلى مورد مشروع Foundry الخاص بك.
اختر Identity وانسخ معرف الكائن (الرئيسي) تحت النظام المخصص.
قم بتعيين دور قارئ مستودع سجل الحاويات لهذا الهوية في سجل الحاويات الخاص بك. انظر Azure Container Registry الأدوار والأذونات.
إنشاء نسخة وكيل مستضاف
إنشاء نسخة يؤدي إلى تحفيز المنصة لتوفير الوكيل تلقائيا. لا توجد خطوة بدء منفصلة — المنصة تبني لقطة حاوية وتجعل الوكيل جاهزا لخدمة الطلبات.
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import HostedAgentDefinition, ProtocolVersionRecord, AgentProtocol
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(
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0")
],
cpu="1",
memory="2Gi",
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}")
لعرض كلا البروتوكولين، مرر كلاهما في container_protocol_versions:
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentProtocol.INVOCATIONS, version="1.0.0")
],
المعايير الرئيسية:
| المعلمة | الوصف |
|---|---|
agent_name |
اسم فريد (أبجدي رقمي مع شرطات، الحد الأقصى 63 حرفا) |
image |
Full Azure Container Registry image URL with tag |
cpu |
تخصيص وحدة المعالجة المركزية (على سبيل المثال، "1") |
memory |
تخصيص الذاكرة (على سبيل المثال، "2Gi") |
container_protocol_versions |
البروتوكولات التي تعرضها الحاوية (responses, invocations, أو كلاهما) |
استطلاع لحالة الإصدار
بعد إنشاء نسخة، قم بالاستطلاع حتى تصل active الحالة قبل استدعاء الوكيل. عادة ما يستغرق الإعداد أقل من دقيقة حسب حجم الصورة.
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)
قيم حالة الإصدارات:
| الحالة | الوصف |
|---|---|
creating |
توفير البنية التحتية جار |
active |
الوكيل جاهز لتلبية الطلبات |
failed |
فشل التوفير — تحقق error من الحقل للتفاصيل |
deleting |
النسخة قيد التنظيف |
deleted |
تمت إزالة النسخة بالكامل |
استدعاء الوكيل
بعد أن يصل active الإصدار إلى الحالة، استخدم get_openai_client لإنشاء عميل OpenAI مرتبط بنقطة نهاية الوكيل.
بالنسبة لبروتوكول الاستجابات :
# 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)
بالنسبة لبروتوكول الاستدعاءات ، استدعي نقطة نهاية الاستدعاءات مباشرة:
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())
للحصول على أمثلة أكثر شمولا، راجع عينات الوكلاء المستضافة.
نشر باستخدام واجهة برمجة تطبيقات REST
استخدم واجهة برمجة تطبيقات REST للنشر المباشر المعتمد على HTTP أو عند التكامل مع أدوات مخصصة.
قبل أن تبدأ، قم ببناء ودفع صورة الحاوية الخاصة بكوقم بتكوين صلاحيات سجل الحاويات.
إعداد المتغيرات
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)
إنشاء وكيل
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",
"image": "myacr.azurecr.io/my-agent:v1",
"cpu": "1",
"memory": "2Gi",
"container_protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
إنشاء وكيل أيضا ينشئ النسخة 1 ويفعل التفكير.
استطلاع لحالة الإصدار
استطلاع نقطة نهاية الإصدار حتى status يكون: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
استدعاء الوكيل
استخدم نقطة النهاية المخصصة للوكيل لإرسال الطلبات. قم بضبط "stream": true لاستقبال الأحداث المرسلة من الخادم.
بروتوكول الردود:
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
}'
بروتوكول الاستدعاءات:
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"
}'
أنشئ نسخة جديدة
نشر الكود أو التكوين المحدث عن طريق إنشاء نسخة جديدة:
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",
"image": "myacr.azurecr.io/my-agent:v2",
"cpu": "1",
"memory": "2Gi",
"container_protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
موارد التنظيف
لتجنب التقاضي، قم بتنظيف الموارد عند الانتهاء. يتم إلغاء تخصيص حساب الوكيل بعد 15 دقيقة من عدم النشاط، لذا لا توجد تكلفة عندما لا يقوم الوكيل بخدمة الطلبات.
تنظيف Azure Developer CLI
azd down
تنظيف SDK
حذف نسخة واحدة:
project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)
أو حذف الوكيل بالكامل وجميع إصداراته:
project.agents.delete(agent_name="my-agent")
تنظيف واجهة برمجة التطبيقات REST
حذف نسخة واحدة:
curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
أو حذف الوكيل بالكامل:
curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
تحذير
حذف وكيل يزيل جميع نسخه وينهي الجلسات النشطة. هذا الفعل لا يمكن التراجع عنه.
استكشاف الأخطاء
تظهر أخطاء التوفير في كائنات error.code الإصدار والحقول error.message . تحقق من حالة الإصدار بعد الإنشاء لتحديد المشاكل.
| رمز الخطأ | رمز HTTP | الحل |
|---|---|---|
image_pull_failed |
400 | تحقق من صحة URI للصورة وأن هوية المشروع المدارة تحتوي على قارئ مستودع سجل الحاويات على ACR |
SubscriptionIsNotRegistered |
400 | سجل مزود الاشتراك |
InvalidAcrPullCredentials |
401 | إصلاح RBAC للهوية المدارة أو السجل |
UnauthorizedAcrPull |
403 | قدم الشهادات أو الهوية الصحيحة |
AcrImageNotFound |
404 | تصحيح اسم/وسم الصورة أو نشر الصورة |
RegistryNotFound |
400/404 | إصلاح DNS في السجل أو إمكانية الوصول إلى الشبكة |
للحصول على أخطاء 5xx، تواصل مع دعم Microsoft.
للحصول على متطلبات RBAC التفصيلية واستكشاف أخطاء الأذونات، راجع مرجع صلاحيات الوكيل المستضاف.