إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يوضح هذا البرنامج التعليمي كيفية دمج عوامل الذكاء الاصطناعي في مهام سير العمل باستخدام إطار عمل العامل. ستتعلم إنشاء مهام سير عمل تستفيد من قوة وكلاء الذكاء الاصطناعي المتخصصين لإنشاء المحتوى والمراجعة والمهام التعاونية الأخرى.
ما ستقوم بإنشاءه
ستقوم بإنشاء سير عمل:
- يستخدم Azure Foundry Agent Service لإنشاء عوامل ذكية
- تنفيذ وكيل الترجمة الفرنسي الذي يترجم الإدخال إلى الفرنسية
- تنفيذ وكيل ترجمة إسباني يترجم الفرنسية إلى الإسبانية
- تنفيذ وكيل الترجمة الإنجليزية الذي يترجم الأسبانية مرة أخرى إلى اللغة الإنجليزية
- توصيل الوكلاء في مسار سير عمل تسلسلي
- دفق التحديثات في الوقت الحقيقي أثناء معالجة الوكلاء لطلبات
- يوضح تنظيف الموارد المناسب لوكلاء Azure Foundry
المفاهيم التي تمت تغطيتها
المتطلبات الأساسية
- .NET 8.0 SDK أو أحدث
- تم تكوين نقطة نهاية مشروع Azure Foundry ونموذجه
- Azure CLI تثبيتهاومصادقتها (لمصادقة بيانات الاعتماد Azure)
- تطبيق وحدة تحكم جديد
الخطوة 1: تثبيت حزم NuGet
أولا، قم بتثبيت الحزم المطلوبة لمشروع .NET الخاص بك:
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
dotnet add package Microsoft.Agents.AI.Workflows --prerelease
الخطوة 2: إعداد Azure Foundry Client
تكوين عميل Azure Foundry مع متغيرات البيئة والمصادقة:
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;
using Microsoft.Agents.AI.Workflows;
using Microsoft.Extensions.AI;
public static class Program
{
private static async Task Main()
{
// Set up the Azure AI Project client
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
var aiProjectClient = new AIProjectClient(new Uri(endpoint), new AzureCliCredential());
الخطوة 3: إنشاء أسلوب مصنع العامل
تنفيذ أسلوب مساعد لإنشاء Azure وكلاء Foundry مع إرشادات محددة:
/// <summary>
/// Creates a translation agent for the specified target language.
/// </summary>
/// <param name="targetLanguage">The target language for translation</param>
/// <param name="aiProjectClient">The AIProjectClient to create the agent</param>
/// <param name="model">The model to use for the agent</param>
/// <returns>A ChatClientAgent configured for the specified language</returns>
private static async Task<ChatClientAgent> GetTranslationAgentAsync(
string targetLanguage,
AIProjectClient aiProjectClient,
string model)
{
string agentName = $"{targetLanguage} Translator";
var version = await aiProjectClient.AgentAdministrationClient.CreateAgentVersionAsync(
agentName,
new ProjectsAgentVersionCreationOptions(
new DeclarativeAgentDefinition(model)
{
Instructions = $"You are a translation assistant that translates the provided text to {targetLanguage}."
}));
return aiProjectClient.AsAIAgent(version);
}
}
الخطوة 4: إنشاء وكلاء متخصصين Azure Foundry
إنشاء ثلاثة وكلاء ترجمة باستخدام أسلوب المساعد:
// Create agents
AIAgent frenchAgent = await GetTranslationAgentAsync("French", aiProjectClient, deploymentName);
AIAgent spanishAgent = await GetTranslationAgentAsync("Spanish", aiProjectClient, deploymentName);
AIAgent englishAgent = await GetTranslationAgentAsync("English", aiProjectClient, deploymentName);
الخطوة 5: إنشاء سير العمل
قم بتوصيل الوكلاء في سير عمل تسلسلي باستخدام WorkflowBuilder:
// Build the workflow by adding executors and connecting them
var workflow = new WorkflowBuilder(frenchAgent)
.AddEdge(frenchAgent, spanishAgent)
.AddEdge(spanishAgent, englishAgent)
.Build();
الخطوة 6: التنفيذ باستخدام الدفق
قم بتشغيل سير العمل مع الدفق لمراقبة التحديثات في الوقت الحقيقي من جميع العوامل:
// Execute the workflow
await using StreamingRun run = await InProcessExecution.RunStreamingAsync(workflow, new ChatMessage(ChatRole.User, "Hello World!"));
// Must send the turn token to trigger the agents.
// The agents are wrapped as executors. When they receive messages,
// they will cache the messages and only start processing when they receive a TurnToken.
await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
await foreach (WorkflowEvent evt in run.WatchStreamAsync())
{
if (evt is AgentResponseUpdateEvent executorComplete)
{
Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}");
}
}
الخطوة 7: تنظيف الموارد
تنظيف عوامل Azure Foundry بشكل صحيح بعد الاستخدام:
// Cleanup the agents created for the sample.
await aiProjectClient.AgentAdministrationClient.DeleteAgentAsync(frenchAgent.Id);
await aiProjectClient.AgentAdministrationClient.DeleteAgentAsync(spanishAgent.Id);
await aiProjectClient.AgentAdministrationClient.DeleteAgentAsync(englishAgent.Id);
}
كيفية عملها
-
إعداد عميل Azure Foundry: يستخدم
AIProjectClientمع بيانات اعتماد Azure CLI للمصادقة - إنشاء عامل: إنشاء وكلاء تم إصدارهم على Azure Foundry مع إرشادات محددة للترجمة
- المعالجة التسلسلية: يترجم العامل الفرنسي الإدخال أولا، ثم العامل الأسباني، ثم الوكيل الإنجليزي
-
تحويل نمط الرمز المميز: يقوم العاملون بتخزين الرسائل مؤقتا ومعالجتها فقط عندما يتلقون
TurnToken -
تحديثات الدفق:
AgentResponseUpdateEventتوفر تحديثات للرمز المميز في الوقت الحقيقي حيث يقوم الوكلاء بإنشاء استجابات - إدارة الموارد: التنظيف المناسب لوكلاء Azure Foundry باستخدام واجهة برمجة تطبيقات الإدارة
المفاهيم الأساسية
- Azure Foundry Agent Service: وكلاء الذكاء الاصطناعي المستندة إلى السحابة مع قدرات التفكير المتقدمة
- AIProjectClient: عميل لإنشاء وإدارة العوامل على Azure Foundry
-
WorkflowEvent: تحتوي أحداث الإخراج (
type="output") على بيانات إخراج العامل (AgentResponseUpdateللتدفق،AgentResponseوعدم البث) - TurnToken: الإشارة التي تقوم بتشغيل معالجة العامل بعد التخزين المؤقت للرسائل
- سير العمل التسلسلي: العوامل المتصلة في مسار حيث يتدفق الإخراج من واحد إلى آخر
التنفيذ الكامل
لتنفيذ العمل الكامل لسير عمل عوامل Azure Foundry هذا، راجع نموذج Program.cs FoundryAgent في مستودع Agent Framework.
ما ستقوم بإنشاءه
ستقوم بإنشاء سير عمل:
- يستخدم
FoundryChatClientلإنشاء عوامل ذكية - تنفيذ عامل Writer الذي ينشئ محتوى استنادا إلى المطالبات
- تنفيذ عامل المراجع الذي يوفر ملاحظات حول المحتوى
- توصيل الوكلاء في مسار سير عمل تسلسلي
- دفق التحديثات في الوقت الحقيقي أثناء معالجة الوكلاء لطلبات
المفاهيم التي تمت تغطيتها
المتطلبات الأساسية
- Python 3.10 أو أحدث
- تم تثبيت إطار عمل العامل:
pip install agent-framework - Azure استجابات OpenAI التي تم تكوينها مع متغيرات البيئة المناسبة
- مصادقة Azure CLI:
az login
الخطوة 1: استيراد التبعيات المطلوبة
ابدأ باستيراد المكونات الضرورية لسير العمل Azure عوامل استجابات OpenAI:
import asyncio
import os
from agent_framework import AgentResponseUpdate, WorkflowBuilder
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
الخطوة 2: إنشاء عميل استجابات openAI Azure
إنشاء عميل مشترك واحد يمكنك استخدامه لإنشاء عوامل متعددة:
async def main() -> None:
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
)
الخطوة 3: إنشاء وكلاء متخصصين
إنشاء وكيلين متخصصين لإنشاء المحتوى ومراجعته:
# Create a Writer agent that generates content
writer_agent = client.as_agent(
name="Writer",
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
)
# Create a Reviewer agent that provides feedback
reviewer_agent = client.as_agent(
name="Reviewer",
instructions=(
"You are an excellent content reviewer. "
"Provide actionable feedback to the writer about the provided content. "
"Provide the feedback in the most concise manner possible."
),
)
الخطوة 4: إنشاء سير العمل
قم بتوصيل العوامل في سير عمل تسلسلي باستخدام المنشئ:
# Build the workflow with agents as executors
workflow = WorkflowBuilder(start_executor=writer_agent).add_edge(writer_agent, reviewer_agent).build()
الخطوة 5: التنفيذ مع الدفق
قم بتشغيل سير العمل مع الدفق لمراقبة التحديثات في الوقت الحقيقي من كلا الوكيلين:
last_author: str | None = None
events = workflow.run("Create a slogan for a new electric SUV that is affordable and fun to drive.", stream=True)
async for event in events:
if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
update = event.data
author = update.author_name
if author != last_author:
if last_author is not None:
print()
print(f"{author}: {update.text}", end="", flush=True)
last_author = author
else:
print(update.text, end="", flush=True)
الخطوة 6: إكمال الدالة الرئيسية
التفاف كل شيء في الدالة الرئيسية مع التنفيذ غير المتزامن المناسب:
if __name__ == "__main__":
asyncio.run(main())
كيفية عملها
-
إعداد العميل: يستخدم واحدا
FoundryChatClientمع بيانات اعتماد Azure CLI للمصادقة. - إنشاء عامل: ينشئ وكلاء Writer و Reviewer من نفس تكوين العميل.
- المعالجة التسلسلية: ينشئ وكيل الكاتب المحتوى أولا، ثم يمرره إلى عامل المراجع.
-
تحديثات الدفق: توفر أحداث الإخراج (
type="output") معAgentResponseUpdateالبيانات تحديثات للرمز المميز في الوقت الحقيقي حيث يقوم العاملون بإنشاء استجابات.
المفاهيم الأساسية
- FoundryChatClient: العميل المشترك المستخدم لإنشاء عوامل سير العمل بتكوين متسق.
-
WorkflowEvent: تحتوي أحداث الإخراج (
type="output") على بيانات إخراج العامل (AgentResponseUpdateللتدفق،AgentResponseلغير البث). - سير العمل التسلسلي: الوكلاء المتصلون في البنية الأساسية لبرنامج ربط العمليات التجارية حيث يتدفق الإخراج من واحد إلى آخر.
التنفيذ الكامل
لتنفيذ العمل الكامل، راجع azure_ai_agents_streaming.py في مستودع إطار عمل العامل.
ما ستقوم بإنشاءه
ستقوم بإنشاء سير عمل:
- يستخدم Azure عوامل OpenAI كمنفذي سير العمل
- تنفيذ وكيل ترجمة فرنسي
- تنفيذ عامل ترجمة إسباني
- تنفيذ وكيل ترجمة باللغة الإنجليزية
- توصيل الوكلاء في مسار سير عمل تسلسلي
- دفق التحديثات في الوقت الحقيقي أثناء معالجة الوكلاء لطلبات
المفاهيم التي تمت تغطيتها
المتطلبات الأساسية
- الانتقال إلى 1.25 أو إصدار أحدث
- Microsoft نقطة نهاية مشروع Foundry ونشر النموذج الذي تم تكوينه
- مصادقة Azure CLI أو مصدر بيانات اعتماد Azure آخر
الخطوة 1: إعداد تكوين Foundry
endpoint := os.Getenv("FOUNDRY_PROJECT_ENDPOINT")
model := cmp.Or(os.Getenv("FOUNDRY_MODEL"), "gpt-4o-mini")
token, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
تحذير
azidentity.NewDefaultAzureCredential مناسب للتنمية ولكنه يتطلب دراسة متأنية في الإنتاج. في الإنتاج، ضع في اعتبارك استخدام بيانات اعتماد معينة، مثل azidentity.NewManagedIdentityCredential، لتجنب مشكلات زمن الانتقال، وبحث بيانات الاعتماد غير المقصودة، والمخاطر الأمنية المحتملة من الآليات الاحتياطية.
الخطوة 2: إنشاء دالة Agent Factory
إنشاء وكلاء مع إرشادات ترجمة محددة:
newTranslationAgent := func(language string) *agent.Agent {
return foundryprovider.NewAgent(endpoint, token, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
Instructions: fmt.Sprintf(
"Translate the user's text to %s. Return only the translation.",
language,
),
Config: agent.Config{Name: language + "Agent"},
})
}
الخطوة 3: إنشاء وكلاء متخصصين
frenchAgent := newTranslationAgent("French")
spanishAgent := newTranslationAgent("Spanish")
englishAgent := newTranslationAgent("English")
الخطوة 4: إنشاء سير العمل
يمكن استخدام الوكلاء كمنفذين لسير العمل، مما يتيح خطوات سير العمل التي تعمل بالذكاء الاصطناعي.
ربط كل عامل كمنفذ سير عمل، ثم توصيل المنفذين بالحواف:
import (
"github.com/microsoft/agent-framework-go/agent"
"github.com/microsoft/agent-framework-go/workflow/agentworkflow"
"github.com/microsoft/agent-framework-go/message"
"github.com/microsoft/agent-framework-go/workflow"
"github.com/microsoft/agent-framework-go/workflow/inproc"
)
cfg := agentworkflow.Config{DisableForwardIncomingMessages: true}
french := agentworkflow.New(frenchAgent, cfg)
spanish := agentworkflow.New(spanishAgent, cfg)
english := agentworkflow.New(englishAgent, cfg)
wf, err := workflow.NewBuilder(french).
AddEdge(french, spanish).
AddEdge(spanish, english).
WithOutputFrom(english).
Build()
if err != nil {
return err
}
الخطوة 5: التنفيذ مع الدفق
قم بتشغيل سير العمل وتمكين أحداث التحديث باستخدام workflow.TurnToken:
run, err := inproc.Default.RunStreaming(ctx, wf, message.NewText("Hello World"))
if err != nil {
return err
}
defer run.Close(ctx)
emitEvents := true
if err := run.SendMessage(ctx, workflow.TurnToken{EmitEvents: &emitEvents}); err != nil {
return err
}
for evt, err := range run.WatchStream(ctx) {
if err != nil {
return err
}
if out, ok := evt.(workflow.OutputEvent); ok {
if update, ok := out.Output.(*agent.ResponseUpdate); ok {
fmt.Printf("%s: %s\n", out.ExecutorID, update.String())
}
}
}
كيفية عملها
- إعداد العميل: يستخدم بيانات اعتماد Azure مع عميل OpenAI.
- إنشاء العامل: إنشاء وكلاء متخصصين مع إرشادات خاصة باللغة.
-
استضافة العامل: يستخدم
agentworkflow.Newلربط كل عامل كمنفذ سير عمل. - المعالجة التسلسلية: يتم تشغيل المنفذ الفرنسي أولا، ثم الأسبانية، ثم الإنجليزية.
-
تحويل نمط الرمز المميز: الرسائل المخزن المؤقت للوكلاء المستضافين وتشغيلها عندما يتلقون
workflow.TurnToken. -
تحديثات الدفق:
workflow.OutputEventيمكن أن تحتوي القيم على*agent.ResponseUpdateمخرجات للتقدم في الوقت الحقيقي.
المفاهيم الأساسية
-
Azure OpenAI Agent: مدعوم
agent.Agentمن قبل Azure OpenAI. - تدفق عمل العامل. جديد: يتكيف مع عامل للاستخدام كمنفذ سير عمل.
- سير العمل. TurnToken: الإشارة التي تقوم بتشغيل عوامل مستضافة لمعالجة الرسائل المخزنة مؤقتا.
- Workflow OutputEvent: يحمل تحديثات استجابة العامل ومخرجات سير العمل النهائية.
- سير العمل التسلسلي: الوكلاء المتصلون في البنية الأساسية لبرنامج ربط العمليات التجارية حيث يتدفق الإخراج من واحد إلى آخر.
التنفيذ الكامل
package main
import (
"cmp"
"context"
"fmt"
"log"
"os"
"github.com/microsoft/agent-framework-go/agent"
"github.com/microsoft/agent-framework-go/workflow/agentworkflow"
"github.com/microsoft/agent-framework-go/message"
"github.com/microsoft/agent-framework-go/workflow"
"github.com/microsoft/agent-framework-go/workflow/inproc"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/microsoft/agent-framework-go/provider/foundryprovider"
)
func main() {
ctx := context.Background()
endpoint := os.Getenv("FOUNDRY_PROJECT_ENDPOINT")
model := cmp.Or(os.Getenv("FOUNDRY_MODEL"), "gpt-4o-mini")
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatal(err)
}
newTranslationAgent := func(language string) *agent.Agent {
return foundryprovider.NewAgent(endpoint, credential, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
Instructions: fmt.Sprintf(
"Translate the user's text to %s. Return only the translation.",
language,
),
Config: agent.Config{Name: language + "Agent"},
})
}
cfg := agentworkflow.Config{DisableForwardIncomingMessages: true}
french := agentworkflow.New(newTranslationAgent("French"), cfg)
spanish := agentworkflow.New(newTranslationAgent("Spanish"), cfg)
english := agentworkflow.New(newTranslationAgent("English"), cfg)
wf, err := workflow.NewBuilder(french).
AddEdge(french, spanish).
AddEdge(spanish, english).
WithOutputFrom(english).
Build()
if err != nil {
log.Fatal(err)
}
run, err := inproc.Default.RunStreaming(ctx, wf, message.NewText("Hello World"))
if err != nil {
log.Fatal(err)
}
defer run.Close(ctx)
emitEvents := true
if err := run.SendMessage(ctx, workflow.TurnToken{EmitEvents: &emitEvents}); err != nil {
log.Fatal(err)
}
for evt, err := range run.WatchStream(ctx) {
if err != nil {
log.Fatal(err)
}
if out, ok := evt.(workflow.OutputEvent); ok {
if update, ok := out.Output.(*agent.ResponseUpdate); ok {
fmt.Printf("%s: %s\n", out.ExecutorID, update.String())
}
}
}
}
تحذير
azidentity.NewDefaultAzureCredential مناسب للتنمية ولكنه يتطلب دراسة متأنية في الإنتاج. في الإنتاج، ضع في اعتبارك استخدام بيانات اعتماد معينة، مثل azidentity.NewManagedIdentityCredential، لتجنب مشكلات زمن الانتقال، وبحث بيانات الاعتماد غير المقصودة، والمخاطر الأمنية المحتملة من الآليات الاحتياطية.
Tip
راجع العوامل في نموذج مهام سير العمل للحصول على مثال كامل.