ai-agents-for-beginners

Menjelajahi Kerangka Kerja Agen AI

(Klik gambar di atas untuk menonton video pelajaran ini)

Menjelajahi Kerangka Kerja Agen AI

Kerangka kerja agen AI adalah platform perangkat lunak yang dirancang untuk mempermudah pembuatan, penerapan, dan pengelolaan agen AI. Kerangka kerja ini menyediakan komponen, abstraksi, dan alat yang sudah dibuat sebelumnya untuk menyederhanakan pengembangan sistem AI yang kompleks.

Kerangka kerja ini membantu pengembang fokus pada aspek unik aplikasi mereka dengan menyediakan pendekatan standar untuk tantangan umum dalam pengembangan agen AI. Mereka meningkatkan skalabilitas, aksesibilitas, dan efisiensi dalam membangun sistem AI.

Pendahuluan

Pelajaran ini akan membahas:

Tujuan Pembelajaran

Tujuan dari pelajaran ini adalah untuk membantu Anda memahami:

Apa itu Kerangka Kerja Agen AI dan apa yang dapat dicapai oleh pengembang dengan menggunakannya?

Kerangka kerja AI tradisional dapat membantu Anda mengintegrasikan AI ke dalam aplikasi Anda dan membuat aplikasi tersebut lebih baik dalam cara berikut:

Kedengarannya bagus, bukan? Jadi mengapa kita membutuhkan Kerangka Kerja Agen AI?

Kerangka kerja agen AI mewakili sesuatu yang lebih dari sekadar kerangka kerja AI. Mereka dirancang untuk memungkinkan pembuatan agen cerdas yang dapat berinteraksi dengan pengguna, agen lain, dan lingkungan untuk mencapai tujuan tertentu. Agen ini dapat menunjukkan perilaku otonom, membuat keputusan, dan beradaptasi dengan kondisi yang berubah. Mari kita lihat beberapa kemampuan utama yang diaktifkan oleh Kerangka Kerja Agen AI:

Jadi, secara ringkas, agen memungkinkan Anda melakukan lebih banyak hal, membawa otomasi ke tingkat berikutnya, menciptakan sistem yang lebih cerdas yang dapat beradaptasi dan belajar dari lingkungannya.

Bagaimana cara membuat prototipe, iterasi, dan meningkatkan kemampuan agen dengan cepat?

Ini adalah lanskap yang bergerak cepat, tetapi ada beberapa hal yang umum di sebagian besar Kerangka Kerja Agen AI yang dapat membantu Anda membuat prototipe dan iterasi dengan cepat, yaitu komponen modular, alat kolaboratif, dan pembelajaran waktu nyata. Mari kita bahas lebih dalam:

Gunakan Komponen Modular

SDK seperti Microsoft Semantic Kernel dan LangChain menawarkan komponen yang sudah dibuat sebelumnya seperti konektor AI, template prompt, dan manajemen memori.

Bagaimana tim dapat menggunakan ini: Tim dapat dengan cepat merakit komponen ini untuk membuat prototipe fungsional tanpa memulai dari awal, memungkinkan eksperimen dan iterasi yang cepat.

Bagaimana cara kerjanya dalam praktik: Anda dapat menggunakan parser yang sudah dibuat sebelumnya untuk mengekstrak informasi dari input pengguna, modul memori untuk menyimpan dan mengambil data, dan generator prompt untuk berinteraksi dengan pengguna, semuanya tanpa harus membangun komponen ini dari awal.

Contoh kode. Mari kita lihat contoh bagaimana Anda dapat menggunakan Konektor AI yang sudah dibuat sebelumnya dengan Semantic Kernel Python dan .Net yang menggunakan pemanggilan fungsi otomatis untuk membuat model merespons input pengguna:

# 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}");
    }
}

Apa yang dapat Anda lihat dari contoh ini adalah bagaimana Anda dapat memanfaatkan parser yang sudah dibuat sebelumnya untuk mengekstrak informasi penting dari input pengguna, seperti asal, tujuan, dan tanggal permintaan pemesanan penerbangan. Pendekatan modular ini memungkinkan Anda fokus pada logika tingkat tinggi.

Manfaatkan Alat Kolaboratif

Kerangka kerja seperti CrewAI, Microsoft AutoGen, dan Semantic Kernel memfasilitasi pembuatan beberapa agen yang dapat bekerja sama.

Bagaimana tim dapat menggunakan ini: Tim dapat merancang agen dengan peran dan tugas spesifik, memungkinkan mereka untuk menguji dan menyempurnakan alur kerja kolaboratif serta meningkatkan efisiensi sistem secara keseluruhan.

Bagaimana cara kerjanya dalam praktik: Anda dapat membuat tim agen di mana setiap agen memiliki fungsi khusus, seperti pengambilan data, analisis, atau pengambilan keputusan. Agen-agen ini dapat berkomunikasi dan berbagi informasi untuk mencapai tujuan bersama, seperti menjawab pertanyaan pengguna atau menyelesaikan tugas.

Contoh kode (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)

Apa yang Anda lihat dalam kode sebelumnya adalah bagaimana Anda dapat membuat tugas yang melibatkan beberapa agen yang bekerja sama untuk menganalisis data. Setiap agen melakukan fungsi tertentu, dan tugas dieksekusi dengan mengoordinasikan agen-agen untuk mencapai hasil yang diinginkan. Dengan menciptakan agen khusus dengan peran yang spesifik, Anda dapat meningkatkan efisiensi dan kinerja tugas.

Belajar dalam Waktu Nyata

Kerangka kerja canggih menyediakan kemampuan untuk memahami konteks dan beradaptasi secara waktu nyata.

Bagaimana tim dapat menggunakan ini: Tim dapat menerapkan loop umpan balik di mana agen belajar dari interaksi dan menyesuaikan perilaku mereka secara dinamis, yang mengarah pada peningkatan dan penyempurnaan kemampuan secara berkelanjutan.

Bagaimana cara kerjanya dalam praktik: Agen dapat menganalisis umpan balik pengguna, data lingkungan, dan hasil tugas untuk memperbarui basis pengetahuan mereka, menyesuaikan algoritma pengambilan keputusan, dan meningkatkan kinerja dari waktu ke waktu. Proses pembelajaran iteratif ini memungkinkan agen untuk beradaptasi dengan kondisi yang berubah dan preferensi pengguna, meningkatkan efektivitas sistem secara keseluruhan.

Apa perbedaan antara kerangka kerja AutoGen, Semantic Kernel, dan Azure AI Agent Service?

Ada banyak cara untuk membandingkan kerangka kerja ini, tetapi mari kita lihat beberapa perbedaan utama dalam hal desain, kemampuan, dan kasus penggunaan yang ditargetkan:

AutoGen

AutoGen adalah kerangka kerja sumber terbuka yang dikembangkan oleh Microsoft Research’s AI Frontiers Lab. Kerangka ini berfokus pada aplikasi agentic yang berbasis peristiwa dan terdistribusi, memungkinkan beberapa LLM dan SLM, alat, serta pola desain multi-agen yang canggih.

AutoGen dibangun di sekitar konsep inti agen, yaitu entitas otonom yang dapat memahami lingkungannya, membuat keputusan, dan mengambil tindakan untuk mencapai tujuan tertentu. Agen berkomunikasi melalui pesan asinkron, memungkinkan mereka bekerja secara independen dan paralel, meningkatkan skalabilitas dan responsivitas sistem.

Menurut Wikipedia, aktor adalah blok bangunan dasar dari komputasi konkuren. Dalam menanggapi pesan yang diterima, aktor dapat: membuat keputusan lokal, menciptakan lebih banyak aktor, mengirim lebih banyak pesan, dan menentukan bagaimana merespons pesan berikutnya yang diterima.

Kasus Penggunaan: Mengotomatisasi pembuatan kode, tugas analisis data, dan membangun agen khusus untuk fungsi perencanaan dan penelitian.

Berikut adalah beberapa konsep inti penting dari AutoGen:

Semantic Kernel + Kerangka Kerja Agen

Semantic Kernel adalah SDK Orkestrasi AI yang siap untuk perusahaan. SDK ini terdiri dari konektor AI dan memori, bersama dengan Kerangka Kerja Agen.

Mari kita bahas beberapa komponen inti:

Layanan Azure AI Agent

Layanan Azure AI Agent adalah tambahan yang lebih baru, diperkenalkan di Microsoft Ignite 2024. Layanan ini memungkinkan pengembangan dan penerapan agen AI dengan model yang lebih fleksibel, seperti langsung memanggil LLM open-source seperti Llama 3, Mistral, dan Cohere.

Layanan Azure AI Agent menyediakan mekanisme keamanan perusahaan yang lebih kuat dan metode penyimpanan data, sehingga cocok untuk aplikasi perusahaan.

Layanan ini bekerja langsung dengan kerangka orkestrasi multi-agen seperti AutoGen dan Semantic Kernel.

Layanan ini saat ini dalam Public Preview dan mendukung Python serta C# untuk membangun agen.

Menggunakan Semantic Kernel Python, kita dapat membuat Azure AI Agent dengan plugin yang didefinisikan pengguna:

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())

Konsep Inti

Layanan Azure AI Agent memiliki konsep inti berikut:

Kasus Penggunaan: Layanan Azure AI Agent dirancang untuk aplikasi perusahaan yang memerlukan penerapan agen AI yang aman, skalabel, dan fleksibel.

Apa perbedaan antara kerangka kerja ini?

Memang terdengar seperti ada banyak tumpang tindih antara kerangka kerja ini, tetapi ada beberapa perbedaan utama dalam hal desain, kemampuan, dan kasus penggunaan yang ditargetkan:

Masih bingung memilih yang mana?

Kasus Penggunaan

Mari kita coba membantu Anda dengan melalui beberapa kasus penggunaan umum:

Q: Saya sedang bereksperimen, belajar, dan membangun aplikasi agen proof-of-concept, dan saya ingin dapat membangun dan bereksperimen dengan cepat

A: AutoGen akan menjadi pilihan yang baik untuk skenario ini, karena berfokus pada aplikasi agenik berbasis peristiwa yang terdistribusi dan mendukung pola desain multi-agen yang canggih.

Q: Apa yang membuat AutoGen menjadi pilihan yang lebih baik daripada Semantic Kernel dan Azure AI Agent Service untuk kasus penggunaan ini?

A: AutoGen dirancang khusus untuk aplikasi agenik berbasis peristiwa yang terdistribusi, sehingga sangat cocok untuk mengotomatisasi tugas pembuatan kode dan analisis data. Ini menyediakan alat dan kemampuan yang diperlukan untuk membangun sistem multi-agen yang kompleks secara efisien.

Q: Sepertinya Azure AI Agent Service juga bisa digunakan di sini, karena memiliki alat untuk pembuatan kode dan lainnya?

A: Ya, Azure AI Agent Service adalah layanan platform untuk agen dan menambahkan kemampuan bawaan untuk beberapa model, Azure AI Search, Bing Search, dan Azure Functions. Ini memudahkan untuk membangun agen Anda di Foundry Portal dan menerapkannya dalam skala besar.

Q: Saya masih bingung, beri saya satu opsi saja

A: Pilihan yang bagus adalah membangun aplikasi Anda di Semantic Kernel terlebih dahulu dan kemudian menggunakan Azure AI Agent Service untuk menerapkan agen Anda. Pendekatan ini memungkinkan Anda dengan mudah mempertahankan agen Anda sambil memanfaatkan kekuatan untuk membangun sistem multi-agen di Semantic Kernel. Selain itu, Semantic Kernel memiliki konektor di AutoGen, sehingga mudah untuk menggunakan kedua kerangka kerja tersebut bersama-sama.

Mari kita rangkum perbedaan utama dalam tabel:

Kerangka Kerja Fokus Konsep Inti Kasus Penggunaan
AutoGen Aplikasi agenik berbasis peristiwa yang terdistribusi Agen, Persona, Fungsi, Data Pembuatan kode, tugas analisis data
Semantic Kernel Memahami dan menghasilkan konten teks seperti manusia Agen, Komponen Modular, Kolaborasi Pemahaman bahasa alami, pembuatan konten
Azure AI Agent Service Model fleksibel, keamanan perusahaan, Pembuatan kode, Pemanggilan alat Modularitas, Kolaborasi, Orkestrasi Proses Penerapan agen AI yang aman, skalabel, dan fleksibel

Apa kasus penggunaan ideal untuk masing-masing kerangka kerja ini?

Bisakah saya mengintegrasikan alat ekosistem Azure yang sudah ada secara langsung, atau saya memerlukan solusi mandiri?

Jawabannya adalah ya, Anda dapat mengintegrasikan alat ekosistem Azure yang sudah ada secara langsung dengan Azure AI Agent Service, terutama karena layanan ini dibangun untuk bekerja secara mulus dengan layanan Azure lainnya. Anda dapat, misalnya, mengintegrasikan Bing, Azure AI Search, dan Azure Functions. Ada juga integrasi mendalam dengan Azure AI Foundry.

Untuk AutoGen dan Semantic Kernel, Anda juga dapat mengintegrasikan dengan layanan Azure, tetapi mungkin memerlukan Anda untuk memanggil layanan Azure dari kode Anda. Cara lain untuk mengintegrasikan adalah dengan menggunakan Azure SDK untuk berinteraksi dengan layanan Azure dari agen Anda. Selain itu, seperti yang disebutkan, Anda dapat menggunakan Azure AI Agent Service sebagai orkestrator untuk agen Anda yang dibangun di AutoGen atau Semantic Kernel, yang akan memberikan akses mudah ke ekosistem Azure.

Punya Pertanyaan Lebih Lanjut tentang Kerangka Kerja Agen AI?

Bergabunglah dengan Azure AI Foundry Discord untuk bertemu dengan pembelajar lainnya, menghadiri jam kantor, dan mendapatkan jawaban atas pertanyaan Anda tentang Agen AI.

Referensi

Pelajaran Sebelumnya

Pengenalan Agen AI dan Kasus Penggunaannya

Pelajaran Selanjutnya

Memahami Pola Desain Agenik


Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.