الخطوة 7: استضافة وكيلك

بمجرد إنشاء وكيلك، تحتاج إلى استضافته حتى يتمكن المستخدمون والوكلاء الآخرون من التفاعل معه.

خيارات الاستضافة

خيار Description أفضل ل
بروتوكول A2A كشف العوامل عبر بروتوكول عامل إلى عامل أنظمة متعددة العوامل
نقاط النهايةOpenAI-Compatible كشف الوكلاء عبر واجهات برمجة تطبيقات إكمال الدردشة أو الاستجابات عملاء متوافقون مع OpenAI
ملحق دائم جعل C# ووكلاء Python ومهام سير العمل دائمة على حساب دالات Azure أو مستضاف ذاتيا أحمال العمل الموثوقة طويلة الأمد
بروتوكولAG-UI إنشاء تطبيقات عامل الذكاء الاصطناعي المستندة إلى الويب واجهات ويب الأمامية

الاستضافة في ASP.NET Core

يوفر إطار عمل العامل مكتبات استضافة تمكنك من دمج وكلاء الذكاء الاصطناعي في تطبيقات ASP.NET Core. تبسط هذه المكتبات تسجيل العوامل وتكوينها وكشفها من خلال بروتوكولات مختلفة.

كما هو موضح في العوامل، AIAgent هو تجريد العامل الأساسي في إطار عمل العامل. وهو يعرف "برنامج تضمين LLM" الذي يعالج مدخلات المستخدم، ويتخذ القرارات، ويستدعي الأدوات، وينفذ عملا إضافيا لتنفيذ الإجراءات وإنشاء الاستجابات. الكشف عن وكلاء الذكاء الاصطناعي من تطبيق ASP.NET Core الخاص بك ليس أمرا تافها. تحل مكتبات الاستضافة هذا عن طريق تسجيل وكلاء الذكاء الاصطناعي في حاوية حقن التبعية، ما يسمح لك بحلها واستخدامها في خدمات التطبيق الخاصة بك. كما أنها تمكنك من إدارة تبعيات العامل، مثل الأدوات وتخزين الجلسة، من نفس الحاوية. يمكن استضافة الوكلاء جنبا إلى جنب مع البنية الأساسية للتطبيق الخاص بك، بغض النظر عن البروتوكولات التي يستخدمونها. وبالمثل، يمكن استضافة مهام سير العمل والاستفادة من البنية الأساسية الشائعة لتطبيقك.

مكتبة الاستضافة الأساسية

Microsoft.Agents.AI.Hosting المكتبة هي الأساس لاستضافة وكلاء الذكاء الاصطناعي في ASP.NET Core. يوفر ملحقات IHostApplicationBuilder لتسجيل وتكوين عوامل الذكاء الاصطناعي ومهام سير العمل. في ASP.NET Core، IHostApplicationBuilder هو النوع الأساسي الذي يمثل المنشئ للتطبيقات والخدمات المستضافة وإدارة التكوين والتسجيل ومدة البقاء والمزيد.

قبل تكوين العوامل أو مهام سير العمل، قم بتسجيل IChatClient في حاوية إدخال التبعية. في الأمثلة أدناه، يتم تسجيله كقاعدة بيانات مفردة ذات مفتاح تحت الاسم chat-model:

// endpoint is your Microsoft Foundry project endpoint
// deploymentName is 'gpt-4o-mini' for example

IChatClient chatClient = new AIProjectClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetProjectOpenAIClient()
    .GetProjectResponsesClient()
    .AsIChatClient(deploymentName);
builder.Services.AddSingleton(chatClient);

تحذير

DefaultAzureCredential مناسب للتنمية ولكنه يتطلب دراسة متأنية في الإنتاج. في الإنتاج، ضع في اعتبارك استخدام بيانات اعتماد محددة (على سبيل المثال، ManagedIdentityCredential) لتجنب مشكلات زمن الانتقال، وبحث بيانات الاعتماد غير المقصودة، والمخاطر الأمنية المحتملة من الآليات الاحتياطية.

AddAIAgent

تسجيل عامل الذكاء الاصطناعي مع حقن التبعية:

var pirateAgent = builder.AddAIAgent(
    "pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.",
    chatClientServiceKey: "chat-model");

يقوم AddAIAgent() الأسلوب بإرجاع IHostedAgentBuilder، والذي يوفر أساليب ملحق لتكوين العامل. على سبيل المثال، يمكنك إضافة أدوات إلى العامل:

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithAITool(new MyTool()); // MyTool is a custom type derived from AITool

يمكنك أيضا تكوين مخزن الجلسة (تخزين بيانات المحادثة):

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithInMemorySessionStore();

AddWorkflow

تسجيل مهام سير العمل التي تنسق عوامل متعددة. سير العمل هو في الأساس "رسم بياني" حيث تكون كل عقدة AIAgent، ويتواصل الوكلاء مع بعضهم البعض.

في هذا المثال، يعمل عاملان بشكل تسلسلي. يتم إرسال إدخال المستخدم أولا إلى agent-1، والذي ينتج استجابة ويرسلها إلى agent-2. ثم يقوم سير العمل إخراج الاستجابة النهائية. هناك أيضا BuildConcurrent أسلوب يقوم بإنشاء سير عمل عامل متزامن.

builder.AddAIAgent("agent-1", instructions: "you are agent 1!");
builder.AddAIAgent("agent-2", instructions: "you are agent 2!");

var workflow = builder.AddWorkflow("my-workflow", (sp, key) =>
{
    var agent1 = sp.GetRequiredKeyedService<AIAgent>("agent-1");
    var agent2 = sp.GetRequiredKeyedService<AIAgent>("agent-2");
    return AgentWorkflowBuilder.BuildSequential(key, [agent1, agent2]);
});

كشف سير العمل ك AIAgent

لاستخدام تكاملات البروتوكول (مثل A2A أو OpenAI) مع سير عمل، قم بتحويله إلى عامل مستقل. حاليا، لا توفر مهام سير العمل قدرات تكامل مماثلة من تلقاء نفسها، لذا فإن خطوة التحويل هذه مطلوبة:

var workflowAsAgent = builder
    .AddWorkflow("science-workflow", (sp, key) => { ... })
    .AddAsAIAgent();  // Now the workflow can be used as an agent

تفاصيل التنفيذ

تعمل مكتبات الاستضافة كمحولات بروتوكول تقوم بوصل بروتوكولات الاتصال الخارجية والتنفيذ الداخلي AIAgent لإطار عمل العامل. عند استخدام مكتبة تكامل استضافة، تسترد المكتبة المسجلة AIAgent من حقن التبعية، وتغلفها مع برنامج وسيط خاص بالبروتوكول لترجمة الطلبات الواردة والاستجابات الصادرة، وتستدعي AIAgent لمعالجة الطلبات. تحافظ هذه البنية على بروتوكول تنفيذ العامل الخاص بك غير محدد.

على سبيل المثال، استخدام مكتبة استضافة ASP.NET Core مع محول بروتوكول A2A:

// Register the agent
var pirateAgent = builder.AddAIAgent("pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.");

// Expose via a protocol (e.g. A2A)
builder.Services.AddA2AServer();
var app = builder.Build();
app.MapA2AServer();
app.Run();

Tip

راجع نماذج Durable Agents للحصول على أمثلة دالات Azure والمستضافة ذاتيا.

دالات Azure هو خيار استضافة مدار ذاتيا. للمقارنة بين عوامل Foundry المستضافة المدارة Microsoft، والاستضافة الذاتية، وأحمال عمل دالات Azure الدائمة، راجع تطبيقات إطار عمل عامل الاستضافة.

تثبيت حزمة استضافة دالات Azure وعميل Foundry وحزمة مصادقة Azure:

pip install agent-framework-azurefunctions agent-framework-foundry azure-identity

إنشاء عامل:

# 1. Instantiate the agent with the chosen deployment and instructions.
def _create_agent() -> Any:
    """Create the Joker agent."""
    return Agent(
        client=FoundryChatClient(
            project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
            model=os.environ["FOUNDRY_MODEL"],
            credential=AzureCliCredential(),
        ),
        name="Joker",
        instructions="You are good at telling jokes.",
    )

تسجيل العامل مع AgentFunctionApp:

# 2. Register the agent with AgentFunctionApp so Azure Functions exposes the required triggers.
app = AgentFunctionApp(agents=[_create_agent()], enable_health_check=True, max_poll_retries=50)

تشغيل محليا باستخدام دالات Azure Core Tools:

az login
pip install -r requirements.txt
# Start Azurite and copy local.settings.json.template to local.settings.json first.
func start

ثم استدع:

curl -X POST http://localhost:7071/api/agents/Joker/run \
  -H "Content-Type: text/plain" \
  -d "Tell me a short joke about cloud computing."

Tip

راجع العينة الكاملة للملف الكامل القابل للتشغيل، وعينات استضافة دالات Azure لمزيد من الأنماط.

الاستضافة باستخدام بروتوكول A2A

يوفر منفذ Go استضافة A2A من خلال a2aprovider، والذي يلتف عامل في معالج HTTP متوافق مع بروتوكول عامل إلى عامل.

Note

استضافة Durable Extension غير متوفرة حاليا ل Go. للحصول على أحدث حالة Go SDK، راجع مستودع Agent Framework Go.

إنشاء عامل:

import (
    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/provider/a2aprovider"
    "github.com/microsoft/agent-framework-go/provider/foundryprovider"

    "github.com/a2aproject/a2a-go/v2/a2a"
    "github.com/a2aproject/a2a-go/v2/a2asrv"
)

a := foundryprovider.NewAgent(endpoint, token, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
    Instructions: "You are a helpful assistant.",
    Config: agent.Config{
    },
})

كشف العامل عبر A2A:

url := "http://localhost:5000"
card := &a2a.AgentCard{
    Name:               "MyAgent",
    Description:        "A helpful assistant.",
    Version:            "1.0.0",
    DefaultInputModes:  []string{"text"},
    DefaultOutputModes: []string{"text"},
    Capabilities:       a2a.AgentCapabilities{Streaming: false},
    SupportedInterfaces: []*a2a.AgentInterface{
        a2a.NewAgentInterface(url, a2a.TransportProtocolJSONRPC),
    },
}

mux := http.NewServeMux()
requestHandler := a2asrv.NewHandler(
    a2aprovider.NewExecutor(a, a2aprovider.ExecutorConfig{}),
    a2asrv.WithExtendedAgentCard(card),
)
mux.Handle("/", a2asrv.NewJSONRPCHandler(requestHandler))
mux.Handle(a2asrv.WellKnownAgentCardPath, a2asrv.NewStaticAgentCardHandler(card))

log.Println("A2A server listening on :5000")
http.ListenAndServe(":5000", mux)

Tip

راجع نموذج خادم عميل A2A الكامل للحصول على مثال كامل قابل للتشغيل.

الخطوات التالية

انتقل إلى أبعد من ذلك:

(راجع أيضًا)