ai-agents-for-beginners

استكشاف أطر عمل وكلاء الذكاء الاصطناعي

(اضغط على الصورة أعلاه لمشاهدة فيديو الدرس)

استكشاف أطر عمل وكلاء الذكاء الاصطناعي

أطر عمل وكلاء الذكاء الاصطناعي هي منصات برمجية مصممة لتبسيط إنشاء ونشر وإدارة وكلاء الذكاء الاصطناعي. توفر هذه الأطر للمطورين مكونات جاهزة، تجريدات، وأدوات تسهل تطوير أنظمة الذكاء الاصطناعي المعقدة.

تساعد هذه الأطر المطورين على التركيز على الجوانب الفريدة لتطبيقاتهم من خلال توفير نهج موحد للتحديات الشائعة في تطوير وكلاء الذكاء الاصطناعي. كما تعزز قابلية التوسع، سهولة الوصول، والكفاءة في بناء أنظمة الذكاء الاصطناعي.

المقدمة

سيتناول هذا الدرس:

أهداف التعلم

أهداف هذا الدرس هي مساعدتك على فهم:

ما هي أطر عمل وكلاء الذكاء الاصطناعي وما الذي تمكّن المطورين من القيام به؟

يمكن للأطر التقليدية للذكاء الاصطناعي مساعدتك في دمج الذكاء الاصطناعي في تطبيقاتك وتحسينها بالطرق التالية:

يبدو هذا رائعًا، أليس كذلك؟ إذًا لماذا نحتاج إلى أطر عمل وكلاء الذكاء الاصطناعي؟

تمثل أطر عمل وكلاء الذكاء الاصطناعي شيئًا أكثر من مجرد أطر عمل للذكاء الاصطناعي. فهي مصممة لتمكين إنشاء وكلاء ذكيين يمكنهم التفاعل مع المستخدمين، وكلاء آخرين، والبيئة لتحقيق أهداف محددة. يمكن لهؤلاء الوكلاء إظهار سلوك مستقل، اتخاذ قرارات، والتكيف مع الظروف المتغيرة. دعونا نلقي نظرة على بعض القدرات الرئيسية التي توفرها أطر عمل وكلاء الذكاء الاصطناعي:

باختصار، تسمح الوكلاء لك بالقيام بالمزيد، بأخذ الأتمتة إلى المستوى التالي، وإنشاء أنظمة أكثر ذكاءً يمكنها التكيف والتعلم من بيئتها.

كيفية تصميم نماذج أولية بسرعة، التكرار، وتحسين قدرات الوكيل؟

هذا مجال سريع التغير، ولكن هناك بعض الأمور المشتركة عبر معظم أطر عمل وكلاء الذكاء الاصطناعي التي يمكن أن تساعدك في تصميم نماذج أولية والتكرار بسرعة، وهي المكونات المعيارية، الأدوات التعاونية، والتعلم في الوقت الفعلي. دعونا نتعمق في هذه النقاط:

استخدام المكونات المعيارية

تقدم SDKs مثل Microsoft Semantic Kernel وLangChain مكونات جاهزة مثل موصلات الذكاء الاصطناعي، قوالب التعليمات، وإدارة الذاكرة.

كيف يمكن للفرق استخدام هذه المكونات: يمكن للفرق تجميع هذه المكونات بسرعة لإنشاء نموذج أولي وظيفي دون البدء من الصفر، مما يسمح بالتجربة السريعة والتكرار.

كيف يعمل ذلك عمليًا: يمكنك استخدام محلل جاهز لاستخراج المعلومات من إدخال المستخدم، وحدة ذاكرة لتخزين واسترجاع البيانات، ومولد تعليمات للتفاعل مع المستخدمين، كل ذلك دون الحاجة إلى بناء هذه المكونات من الصفر.

مثال على الكود. دعونا نلقي نظرة على أمثلة حول كيفية استخدام موصل ذكاء اصطناعي جاهز مع Semantic Kernel Python و.Net الذي يستخدم استدعاء الوظائف التلقائي لجعل النموذج يستجيب لإدخال المستخدم:

# Semantic Kernel Python Example

import asyncio
from typing import Annotated

from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, AzureChatPromptExecutionSettings
from semantic_kernel.contents import ChatHistory
from semantic_kernel.functions import kernel_function
from semantic_kernel.kernel import Kernel

# Define a ChatHistory object to hold the conversation's context
chat_history = ChatHistory()
chat_history.add_user_message("I'd like to go to New York on January 1, 2025")


# Define a sample plugin that contains the function to book travel
class BookTravelPlugin:
    """A Sample Book Travel Plugin"""

    @kernel_function(name="book_flight", description="Book travel given location and date")
    async def book_flight(
        self, date: Annotated[str, "The date of travel"], location: Annotated[str, "The location to travel to"]
    ) -> str:
        return f"Travel was booked to {location} on {date}"

# Create the Kernel
kernel = Kernel()

# Add the sample plugin to the Kernel object
kernel.add_plugin(BookTravelPlugin(), plugin_name="book_travel")

# Define the Azure OpenAI AI Connector
chat_service = AzureChatCompletion(
    deployment_name="YOUR_DEPLOYMENT_NAME", 
    api_key="YOUR_API_KEY", 
    endpoint="https://<your-resource>.azure.openai.com/",
)

# Define the request settings to configure the model with auto-function calling
request_settings = AzureChatPromptExecutionSettings(function_choice_behavior=FunctionChoiceBehavior.Auto())


async def main():
    # Make the request to the model for the given chat history and request settings
    # The Kernel contains the sample that the model will request to invoke
    response = await chat_service.get_chat_message_content(
        chat_history=chat_history, settings=request_settings, kernel=kernel
    )
    assert response is not None

    """
    Note: In the auto function calling process, the model determines it can invoke the 
    `BookTravelPlugin` using the `book_flight` function, supplying the necessary arguments. 
    
    For example:

    "tool_calls": [
        {
            "id": "call_abc123",
            "type": "function",
            "function": {
                "name": "BookTravelPlugin-book_flight",
                "arguments": "{'location': 'New York', 'date': '2025-01-01'}"
            }
        }
    ]

    Since the location and date arguments are required (as defined by the kernel function), if the 
    model lacks either, it will prompt the user to provide them. For instance:

    User: Book me a flight to New York.
    Model: Sure, I'd love to help you book a flight. Could you please specify the date?
    User: I want to travel on January 1, 2025.
    Model: Your flight to New York on January 1, 2025, has been successfully booked. Safe travels!
    """

    print(f"`{response}`")
    # Example AI Model Response: `Your flight to New York on January 1, 2025, has been successfully booked. Safe travels! ✈️🗽`

    # Add the model's response to our chat history context
    chat_history.add_assistant_message(response.content)


if __name__ == "__main__":
    asyncio.run(main())
// Semantic Kernel C# example

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using System.ComponentModel;
using Microsoft.SemanticKernel.Connectors.AzureOpenAI;

ChatHistory chatHistory = [];
chatHistory.AddUserMessage("I'd like to go to New York on January 1, 2025");

var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAIChatCompletion(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
    apiKey: "YOUR_API_KEY",
    endpoint: "YOUR_AZURE_ENDPOINT"
);
kernelBuilder.Plugins.AddFromType<BookTravelPlugin>("BookTravel"); 
var kernel = kernelBuilder.Build();

var settings = new AzureOpenAIPromptExecutionSettings()
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};

var chatCompletion = kernel.GetRequiredService<IChatCompletionService>();

var response = await chatCompletion.GetChatMessageContentAsync(chatHistory, settings, kernel);

/*
Behind the scenes, the model recognizes the tool to call, what arguments it already has (location) and (date)
{

"tool_calls": [
    {
        "id": "call_abc123",
        "type": "function",
        "function": {
            "name": "BookTravelPlugin-book_flight",
            "arguments": "{'location': 'New York', 'date': '2025-01-01'}"
        }
    }
]
*/

Console.WriteLine(response.Content);
chatHistory.AddMessage(response!.Role, response!.Content!);

// Example AI Model Response: Your flight to New York on January 1, 2025, has been successfully booked. Safe travels! ✈️🗽

// Define a plugin that contains the function to book travel
public class BookTravelPlugin
{
    [KernelFunction("book_flight")]
    [Description("Book travel given location and date")]
    public async Task<string> BookFlight(DateTime date, string location)
    {
        return await Task.FromResult( $"Travel was booked to {location} on {date}");
    }
}

ما يمكنك رؤيته من هذا المثال هو كيفية الاستفادة من محلل جاهز لاستخراج المعلومات الرئيسية من إدخال المستخدم، مثل الأصل، الوجهة، وتاريخ طلب حجز الرحلة. يتيح هذا النهج المعياري التركيز على المنطق عالي المستوى.

الاستفادة من الأدوات التعاونية

تسهل أطر العمل مثل CrewAI، Microsoft AutoGen، وSemantic Kernel إنشاء وكلاء متعددين يمكنهم العمل معًا.

كيف يمكن للفرق استخدام هذه الأدوات: يمكن للفرق تصميم وكلاء بأدوار ومهام محددة، مما يمكنهم من اختبار وتحسين سير العمل التعاوني وتحسين كفاءة النظام بشكل عام.

كيف يعمل ذلك عمليًا: يمكنك إنشاء فريق من الوكلاء حيث يكون لكل وكيل وظيفة متخصصة، مثل استرجاع البيانات، التحليل، أو اتخاذ القرارات. يمكن لهؤلاء الوكلاء التواصل ومشاركة المعلومات لتحقيق هدف مشترك، مثل الإجابة على استفسار المستخدم أو إكمال مهمة.

مثال على الكود (AutoGen):

# creating agents, then create a round robin schedule where they can work together, in this case in order

# Data Retrieval Agent
# Data Analysis Agent
# Decision Making Agent

agent_retrieve = AssistantAgent(
    name="dataretrieval",
    model_client=model_client,
    tools=[retrieve_tool],
    system_message="Use tools to solve tasks."
)

agent_analyze = AssistantAgent(
    name="dataanalysis",
    model_client=model_client,
    tools=[analyze_tool],
    system_message="Use tools to solve tasks."
)

# conversation ends when user says "APPROVE"
termination = TextMentionTermination("APPROVE")

user_proxy = UserProxyAgent("user_proxy", input_func=input)

team = RoundRobinGroupChat([agent_retrieve, agent_analyze, user_proxy], termination_condition=termination)

stream = team.run_stream(task="Analyze data", max_turns=10)
# Use asyncio.run(...) when running in a script.
await Console(stream)

ما تراه في الكود السابق هو كيفية إنشاء مهمة تتضمن وكلاء متعددين يعملون معًا لتحليل البيانات. يقوم كل وكيل بوظيفة محددة، ويتم تنفيذ المهمة من خلال تنسيق الوكلاء لتحقيق النتيجة المرجوة. من خلال إنشاء وكلاء مخصصين بأدوار متخصصة، يمكنك تحسين كفاءة المهمة وأدائها.

التعلم في الوقت الفعلي

توفر الأطر المتقدمة قدرات لفهم السياق والتكيف في الوقت الفعلي.

كيف يمكن للفرق استخدام هذه القدرات: يمكن للفرق تنفيذ حلقات التغذية الراجعة حيث يتعلم الوكلاء من التفاعلات ويعدلون سلوكهم ديناميكيًا، مما يؤدي إلى تحسين مستمر وتطوير القدرات.

كيف يعمل ذلك عمليًا: يمكن للوكلاء تحليل ملاحظات المستخدم، بيانات البيئة، ونتائج المهام لتحديث قاعدة معرفتهم، تعديل خوارزميات اتخاذ القرار، وتحسين الأداء بمرور الوقت. يتيح هذا التعلم التكراري للوكلاء التكيف مع الظروف المتغيرة وتفضيلات المستخدم، مما يعزز فعالية النظام بشكل عام.

ما هي الفروقات بين الأطر AutoGen، Semantic Kernel وAzure AI Agent Service؟

هناك العديد من الطرق لمقارنة هذه الأطر، ولكن دعونا نلقي نظرة على بعض الفروقات الرئيسية من حيث التصميم، القدرات، وحالات الاستخدام المستهدفة:

AutoGen

AutoGen هو إطار عمل مفتوح المصدر تم تطويره بواسطة مختبر AI Frontiers التابع لـ Microsoft Research. يركز على التطبيقات الموزعة المدفوعة بالأحداث، مما يتيح تصميمات متعددة الوكلاء باستخدام LLMs وSLMs، الأدوات، وأنماط تصميم متقدمة.

AutoGen مبني حول مفهوم الوكلاء، وهم كيانات مستقلة يمكنها إدراك بيئتها، اتخاذ قرارات، واتخاذ إجراءات لتحقيق أهداف محددة. يتواصل الوكلاء من خلال رسائل غير متزامنة، مما يسمح لهم بالعمل بشكل مستقل وبالتوازي، مما يعزز قابلية التوسع واستجابة النظام.

الوكلاء يعتمدون على نموذج الممثل. وفقًا لويكيبيديا، الممثل هو الوحدة الأساسية للحساب المتزامن. استجابةً للرسالة التي يتلقاها، يمكن للممثل: اتخاذ قرارات محلية، إنشاء المزيد من الممثلين، إرسال المزيد من الرسائل، وتحديد كيفية الرد على الرسالة التالية التي يتلقاها.

حالات الاستخدام: أتمتة إنشاء الكود، مهام تحليل البيانات، وبناء وكلاء مخصصين لوظائف التخطيط والبحث.

إليك بعض المفاهيم الأساسية لـ AutoGen:

Semantic Kernel + إطار عمل الوكلاء

Semantic Kernel هو SDK جاهز للمؤسسات لتنظيم الذكاء الاصطناعي. يتكون من موصلات الذكاء الاصطناعي والذاكرة، إلى جانب إطار عمل الوكلاء.

دعونا نغطي بعض المكونات الأساسية:

يتم تخزين هذه الحقائق بعد ذلك في مجموعة الذاكرة SummarizedAzureDocs. هذا مثال مبسط للغاية، ولكن يمكنك أن ترى كيف يمكن تخزين المعلومات في الذاكرة لاستخدامها من قبل LLM.

إذن، هذه هي أساسيات إطار عمل Semantic Kernel، ماذا عن إطار عمل الوكيل؟

خدمة Azure AI Agent

خدمة Azure AI Agent هي إضافة حديثة تم تقديمها في Microsoft Ignite 2024. تتيح تطوير ونشر وكلاء الذكاء الاصطناعي باستخدام نماذج أكثر مرونة، مثل استدعاء نماذج LLM مفتوحة المصدر مباشرةً مثل Llama 3 وMistral وCohere.

توفر خدمة Azure AI Agent آليات أمان أقوى للمؤسسات وطرق تخزين بيانات، مما يجعلها مناسبة لتطبيقات المؤسسات.

تعمل هذه الخدمة مباشرة مع أطر تنسيق الوكلاء المتعددة مثل AutoGen وSemantic Kernel.

هذه الخدمة حاليًا في العرض العام التجريبي وتدعم Python وC# لبناء الوكلاء.

باستخدام Semantic Kernel Python، يمكننا إنشاء وكيل Azure AI مع مكون إضافي يحدده المستخدم:

import asyncio
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent
from semantic_kernel.contents import AuthorRole
from semantic_kernel.functions import kernel_function


# Define a sample plugin for the sample
class MenuPlugin:
    """A sample Menu Plugin used for the concept sample."""

    @kernel_function(description="Provides a list of specials from the menu.")
    def get_specials(self) -> Annotated[str, "Returns the specials from the menu."]:
        return """
        Special Soup: Clam Chowder
        Special Salad: Cobb Salad
        Special Drink: Chai Tea
        """

    @kernel_function(description="Provides the price of the requested menu item.")
    def get_item_price(
        self, menu_item: Annotated[str, "The name of the menu item."]
    ) -> Annotated[str, "Returns the price of the menu item."]:
        return "$9.99"


async def main() -> None:
    ai_agent_settings = AzureAIAgentSettings.create()

    async with (
        DefaultAzureCredential() as creds,
        AzureAIAgent.create_client(
            credential=creds,
            conn_str=ai_agent_settings.project_connection_string.get_secret_value(),
        ) as client,
    ):
        # Create agent definition
        agent_definition = await client.agents.create_agent(
            model=ai_agent_settings.model_deployment_name,
            name="Host",
            instructions="Answer questions about the menu.",
        )

        # Create the AzureAI Agent using the defined client and agent definition
        agent = AzureAIAgent(
            client=client,
            definition=agent_definition,
            plugins=[MenuPlugin()],
        )

        # Create a thread to hold the conversation
        # If no thread is provided, a new thread will be
        # created and returned with the initial response
        thread: AzureAIAgentThread | None = None

        user_inputs = [
            "Hello",
            "What is the special soup?",
            "How much does that cost?",
            "Thank you",
        ]

        try:
            for user_input in user_inputs:
                print(f"# User: '{user_input}'")
                # Invoke the agent for the specified thread
                response = await agent.get_response(
                    messages=user_input,
                    thread_id=thread,
                )
                print(f"# {response.name}: {response.content}")
                thread = response.thread
        finally:
            await thread.delete() if thread else None
            await client.agents.delete_agent(agent.id)


if __name__ == "__main__":
    asyncio.run(main())

المفاهيم الأساسية

تتضمن خدمة Azure AI Agent المفاهيم الأساسية التالية:

حالات الاستخدام: تم تصميم خدمة Azure AI Agent لتطبيقات المؤسسات التي تتطلب نشر وكلاء ذكاء اصطناعي آمن وقابل للتوسع ومرن.

ما الفرق بين هذه الأطر؟

قد يبدو أن هناك الكثير من التداخل بين هذه الأطر، ولكن هناك بعض الاختلافات الرئيسية من حيث التصميم والقدرات وحالات الاستخدام المستهدفة:

ما زلت غير متأكد أيهما تختار؟

حالات الاستخدام

دعنا نحاول مساعدتك من خلال استعراض بعض حالات الاستخدام الشائعة:

س: أنا أجرب وأتعلم وأبني تطبيقات وكلاء كدليل على المفهوم، وأريد أن أتمكن من البناء والتجربة بسرعة

ج: سيكون AutoGen خيارًا جيدًا لهذا السيناريو، حيث يركز على التطبيقات الوكيلية الموزعة والموجهة بالأحداث ويدعم أنماط تصميم وكلاء متعددة متقدمة.

س: ما الذي يجعل AutoGen خيارًا أفضل من Semantic Kernel وAzure AI Agent Service لهذا الاستخدام؟

ج: تم تصميم AutoGen خصيصًا للتطبيقات الوكيلية الموزعة والموجهة بالأحداث، مما يجعله مناسبًا لأتمتة مهام توليد الكود وتحليل البيانات. يوفر الأدوات والقدرات اللازمة لبناء أنظمة وكلاء متعددة معقدة بكفاءة.

س: يبدو أن Azure AI Agent Service يمكن أن يعمل هنا أيضًا، فهو يحتوي على أدوات لتوليد الكود والمزيد؟

ج: نعم، خدمة Azure AI Agent هي منصة للوكلاء وتضيف قدرات مدمجة لنماذج متعددة، وAzure AI Search، وBing Search، وAzure Functions. يجعل ذلك من السهل بناء وكلائك في بوابة Foundry ونشرهم على نطاق واسع.

س: ما زلت مرتبكًا، فقط أعطني خيارًا واحدًا

ج: خيار رائع هو بناء تطبيقك في Semantic Kernel أولاً ثم استخدام Azure AI Agent Service لنشر وكيلك. يتيح لك هذا النهج الاحتفاظ بوكلائك بسهولة مع الاستفادة من قوة بناء أنظمة وكلاء متعددة في Semantic Kernel. بالإضافة إلى ذلك، يحتوي Semantic Kernel على موصل في AutoGen، مما يجعل من السهل استخدام كلا الإطارين معًا.

دعنا نلخص الاختلافات الرئيسية في جدول:

الإطار التركيز المفاهيم الأساسية حالات الاستخدام
AutoGen التطبيقات الوكيلية الموزعة والموجهة بالأحداث الوكلاء، الشخصيات، الوظائف، البيانات توليد الكود، مهام تحليل البيانات
Semantic Kernel فهم وتوليد محتوى يشبه النصوص البشرية الوكلاء، المكونات المعيارية، التعاون فهم اللغة الطبيعية، توليد المحتوى
Azure AI Agent Service نماذج مرنة، أمان المؤسسات، توليد الكود، استدعاء الأدوات التشكيل، التعاون، تنسيق العمليات نشر وكلاء ذكاء اصطناعي آمن وقابل للتوسع ومرن

ما هو الاستخدام المثالي لكل من هذه الأطر؟

هل يمكنني دمج أدوات نظام Azure البيئي الحالية مباشرةً، أم أحتاج إلى حلول مستقلة؟

الإجابة هي نعم، يمكنك دمج أدوات نظام Azure البيئي الحالية مباشرةً مع خدمة Azure AI Agent، خاصةً لأنها تم تصميمها للعمل بسلاسة مع خدمات Azure الأخرى. يمكنك على سبيل المثال دمج Bing وAzure AI Search وAzure Functions. هناك أيضًا تكامل عميق مع Azure AI Foundry.

بالنسبة لـ AutoGen وSemantic Kernel، يمكنك أيضًا دمجها مع خدمات Azure، ولكن قد يتطلب ذلك استدعاء خدمات Azure من الكود الخاص بك. طريقة أخرى للتكامل هي استخدام SDKs الخاصة بـ Azure للتفاعل مع خدمات Azure من وكلائك. بالإضافة إلى ذلك، كما ذكرنا، يمكنك استخدام خدمة Azure AI Agent كمنسق لوكلائك المبنيين في AutoGen أو Semantic Kernel، مما يوفر وصولاً سهلاً إلى نظام Azure البيئي.

أكواد أمثلة

هل لديك المزيد من الأسئلة حول أطر عمل وكلاء الذكاء الاصطناعي؟

انضم إلى Discord الخاص بـ Azure AI Foundry للتواصل مع متعلمين آخرين، وحضور ساعات العمل، والحصول على إجابات لأسئلتك حول وكلاء الذكاء الاصطناعي.

المراجع

الدرس السابق

مقدمة إلى وكلاء الذكاء الاصطناعي وحالات الاستخدام

الدرس التالي

فهم أنماط تصميم الوكلاء


إخلاء المسؤولية:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.