ai-agents-for-beginners

AI Agent Frameworkide uurimine

(Klõpsa ülaloleval pildil, et vaadata selle õppetunni videot)

AI Agent Frameworkide uurimine

AI agent frameworkid on tarkvaraplatvormid, mis on loodud AI agentide loomise, juurutamise ja haldamise lihtsustamiseks. Need raamistikud pakuvad arendajatele eelvalmistatud komponente, abstraktsioone ja tööriistu, mis kiirendavad keerukate AI süsteemide arendamist.

Need raamistikud aitavad arendajatel keskenduda oma rakenduste unikaalsetele aspektidele, pakkudes standardiseeritud lähenemisviise AI agentide arendamise ühistele väljakutsetele. Need suurendavad AI süsteemide skaleeritavust, juurdepääsetavust ja efektiivsust.

Sissejuhatus

Selles õppetunnis käsitletakse:

Õppeeesmärgid

Selle õppetunni eesmärk on aidata teil mõista:

Mis on AI Agent Frameworkid ja mida need võimaldavad arendajatel teha?

Traditsioonilised AI raamistikud aitavad teil integreerida AI-d oma rakendustesse ja muuta need rakendused paremaks järgmistel viisidel:

Kõik see kõlab suurepäraselt, eks? Miks me siis vajame AI Agent Frameworki?

AI Agent Frameworkid esindavad midagi enamat kui lihtsalt AI raamistikud. Need on loodud intelligentsete agentide loomiseks, mis suudavad suhelda kasutajatega, teiste agentidega ja keskkonnaga, et saavutada konkreetseid eesmärke. Need agendid võivad näidata autonoomset käitumist, teha otsuseid ja kohaneda muutuvate tingimustega. Vaatame mõningaid AI Agent Frameworkide võimaldatud peamisi võimekusi:

Kokkuvõttes võimaldavad agendid teha rohkem, viia automatiseerimine järgmisele tasemele ja luua intelligentsemaid süsteeme, mis suudavad kohaneda ja õppida oma keskkonnast.

Kuidas kiiresti prototüüpida, iteratsioonida ja parandada agentide võimekust?

See on kiiresti arenev valdkond, kuid enamikul AI Agent Frameworkidel on mõned ühised omadused, mis aitavad teil kiiresti prototüüpida ja iteratsioonida, nimelt moodulkomponendid, koostöövahendid ja reaalajas õppimine. Vaatame neid lähemalt:

Kasuta moodulkomponente

SDK-d nagu Microsoft Semantic Kernel ja LangChain pakuvad eelvalmistatud komponente, nagu AI ühendused, mallid ja mäluhaldus.

Kuidas meeskonnad saavad neid kasutada: Meeskonnad saavad kiiresti kokku panna need komponendid, et luua funktsionaalne prototüüp ilma nullist alustamata, võimaldades kiiret katsetamist ja iteratsiooni.

Kuidas see praktikas töötab: Võite kasutada eelvalmistatud parserit, et eraldada teavet kasutaja sisendist, mälumoodulit andmete salvestamiseks ja tagasikutsumiseks ning malligeneraatorit kasutajatega suhtlemiseks, ilma et peaksite neid komponente nullist looma.

Näide koodist. Vaatame näiteid, kuidas kasutada eelvalmistatud AI ühendust Semantic Kernel Pythonis ja .Netis, mis kasutab automaatset funktsioonikutsumist, et mudel vastaks kasutaja sisendile:

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

Sellest näitest näete, kuidas saate kasutada eelvalmistatud parserit, et eraldada kasutaja sisendist olulist teavet, näiteks lennupileti broneerimise päringu lähtekoht, sihtkoht ja kuupäev. See moodulipõhine lähenemine võimaldab teil keskenduda kõrgetasemelisele loogikale.

Kasuta koostöövahendeid

Raamistikud nagu CrewAI, Microsoft AutoGen ja Semantic Kernel hõlbustavad mitme agendi loomist, kes suudavad koos töötada.

Kuidas meeskonnad saavad neid kasutada: Meeskonnad saavad kujundada agendid konkreetsete rollide ja ülesannetega, võimaldades testida ja täiustada koostöövooge ning parandada süsteemi üldist efektiivsust.

Kuidas see praktikas töötab: Võite luua agentide meeskonna, kus igal agendil on spetsialiseeritud funktsioon, näiteks andmete hankimine, analüüs või otsuste tegemine. Need agendid saavad suhelda ja jagada teavet, et saavutada ühine eesmärk, näiteks vastata kasutaja päringule või täita ülesanne.

Näide koodist (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)

Eelmises koodis näete, kuidas luua ülesanne, mis hõlmab mitut agenti, kes töötavad koos andmete analüüsimiseks. Iga agent täidab konkreetset funktsiooni ja ülesanne täidetakse agentide koordineerimise teel, et saavutada soovitud tulemus. Spetsialiseeritud rollidega agentide loomine aitab parandada ülesannete efektiivsust ja jõudlust.

Õpi reaalajas

Täpsemad raamistikud pakuvad võimalusi reaalajas konteksti mõistmiseks ja kohanemiseks.

Kuidas meeskonnad saavad neid kasutada: Meeskonnad saavad rakendada tagasiside silmuseid, kus agendid õpivad interaktsioonidest ja kohandavad oma käitumist dünaamiliselt, mis viib pideva täiustamise ja võimekuse täpsustamiseni.

Kuidas see praktikas töötab: Agendid saavad analüüsida kasutaja tagasisidet, keskkonnaandmeid ja ülesannete tulemusi, et uuendada oma teadmistebaasi, kohandada otsustusalgoritme ja parandada jõudlust aja jooksul. See iteratiivne õppimisprotsess võimaldab agentidel kohaneda muutuvate tingimuste ja kasutaja eelistustega, parandades süsteemi üldist tõhusust.

Millised on erinevused AutoGeni, Semantic Kernel’i ja Azure AI Agent Service’i raamistikute vahel?

Nende raamistikute võrdlemiseks on palju viise, kuid vaatame mõningaid peamisi erinevusi nende disaini, võimekuse ja sihtkasutuse osas:

AutoGen

AutoGen on avatud lähtekoodiga raamistik, mille on välja töötanud Microsoft Researchi AI Frontiers Lab. See keskendub sündmustepõhistele, hajutatud agentlike rakendustele, võimaldades mitut LLM-i ja SLM-i, tööriistu ning täiustatud mitme agendi disainimustreid.

AutoGen põhineb agentide põhikontseptsioonil, mis on autonoomsed üksused, mis suudavad tajuda oma keskkonda, teha otsuseid ja võtta meetmeid konkreetsete eesmärkide saavutamiseks. Agendid suhtlevad asünkroonsete sõnumite kaudu, mis võimaldab neil töötada iseseisvalt ja paralleelselt, suurendades süsteemi skaleeritavust ja reageerimisvõimet.

Agendid põhinevad näitlejamudelil. Wikipedia järgi on näitleja kaasneva arvutuse põhielement. Vastuseks saadud sõnumile võib näitleja: teha kohalikke otsuseid, luua rohkem näitlejaid, saata rohkem sõnumeid ja määrata, kuidas vastata järgmisele saadud sõnumile.

Kasutusjuhtumid: Koodi genereerimise, andmeanalüüsi ülesannete automatiseerimine ja kohandatud agentide loomine planeerimis- ja uurimisfunktsioonide jaoks.

Siin on mõned AutoGeni olulised põhikontseptsioonid:

Eelmises koodis on loodud MyAgent, mis pärib RoutedAgent klassist. Sellel on sõnumikäsitleja, mis prindib sõnumi sisu ja seejärel saadab vastuse, kasutades AssistantAgent delegaati. Eriti tähelepanuväärne on, kuidas me määrame self._delegate-le AssistantAgent instantsi, mis on eelvalmistatud agent, mis suudab käsitleda vestluse lõpetusi.

Laseme AutoGenil sellest agenditüübist teada saada ja käivitame programmi:

```python

# main.py
runtime = SingleThreadedAgentRuntime()
await MyAgent.register(runtime, "my_agent", lambda: MyAgent())

runtime.start()  # Start processing messages in the background.
await runtime.send_message(MyMessageType("Hello, World!"), AgentId("my_agent", "default"))
```

Eelmises koodis registreeritakse agendid käitusajaga ja seejärel saadetakse agendile sõnum, mis annab järgmise väljundi:

```text
# Output from the console:
my_agent received message: Hello, World!
my_assistant received message: Hello, World!
my_assistant responded: Hello! How can I assist you today?
```

Eelmises koodis on GroupChatManager, mis registreeritakse käitusajaga. See haldur vastutab erinevat tüüpi agentide, nagu kirjanikud, illustraatorid, toimetajad ja kasutajad, interaktsioonide koordineerimise eest.

Semantic Kernel + Agent Framework

Semantic Kernel on ettevõtte tasemel AI orkestreerimise SDK. See koosneb AI ja mäluühendustest ning Agent Frameworkist.

Vaatame esmalt mõningaid põhikomponente:

Siin on lihtne näide, kuidas luua kernel ja lisada vestluse lõpetamise teenus. Semantic Kernel loob ühenduse välise AI teenusega, antud juhul Azure OpenAI Chat Completioniga.

Siin on teil kõigepealt mall skPrompt, mis jätab ruumi kasutaja sisendi jaoks, $userInput. Seejärel loote kerneli funktsiooni SummarizeText ja impordite selle kernelisse pluginana nimega SemanticFunctions. Pange tähele funktsiooni nime, mis aitab Semantic Kernelil mõista, mida funktsioon teeb ja millal seda tuleks kutsuda.

See on Semantic Kernel raamistikust põhiline ülevaade, aga mis on Agent Framework?

Azure AI Agent Service

Azure AI Agent Service on hiljutine täiendus, mis tutvustati Microsoft Ignite 2024 üritusel. See võimaldab arendada ja juurutada AI agente paindlikumate mudelitega, näiteks otse avatud lähtekoodiga LLM-ide nagu Llama 3, Mistral ja Cohere kasutamisega.

Azure AI Agent Service pakub tugevamaid ettevõtte turvamehhanisme ja andmesalvestusmeetodeid, muutes selle sobivaks ettevõtte rakenduste jaoks.

See töötab kohe mitme agendi orkestreerimise raamistikuga nagu AutoGen ja Semantic Kernel.

Teenust pakutakse praegu avalikus eelvaates ja see toetab Pythonit ja C#-i agentide loomiseks.

Semantic Kernel Pythonit kasutades saame luua Azure AI Agendi kasutaja määratud pluginaga:

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

Põhimõisted

Azure AI Agent Service sisaldab järgmisi põhimõisteid:

Kasutusjuhtumid: Azure AI Agent Service on mõeldud ettevõtte rakenduste jaoks, mis vajavad turvalist, skaleeritavat ja paindlikku AI agentide juurutamist.

Mis vahe on nendel raamistikudel?

Tundub, et nendel raamistikudel on palju kattuvusi, kuid nende disaini, võimekuse ja sihtkasutuse osas on mõned olulised erinevused:

Ikka ei tea, millist valida?

Kasutusjuhtumid

Vaatame, kas saame teid aidata, läbides mõned levinud kasutusjuhtumid:

Q: Eksperimenteerin, õpin ja ehitan tõestusliku kontseptsiooniga agentide rakendusi ning tahan kiiresti ehitada ja katsetada.

A: AutoGen oleks hea valik selleks olukorraks, kuna see keskendub sündmustepõhistele, hajutatud agentlikele rakendustele ja toetab arenenud mitme agendi disainimustreid.

Q: Mis teeb AutoGeni paremaks valikuks kui Semantic Kernel ja Azure AI Agent Service selle kasutusjuhtumi jaoks?

A: AutoGen on spetsiaalselt loodud sündmustepõhisteks, hajutatud agentlike rakendusteks, muutes selle hästi sobivaks koodi genereerimise ja andmeanalüüsi ülesannete automatiseerimiseks. See pakub vajalikke tööriistu ja võimalusi keerukate mitme agendi süsteemide tõhusaks loomiseks.

Q: Tundub, et Azure AI Agent Service võiks siin ka töötada, sellel on tööriistad koodi genereerimiseks ja palju muud?

A: Jah, Azure AI Agent Service on platvormiteenus agentide jaoks ja lisab sisseehitatud võimalusi mitme mudeli, Azure AI Searchi, Bing Searchi ja Azure Functions jaoks. See muudab agentide loomise Foundry portaalis lihtsaks ja võimaldab neid skaleeritult juurutada.

Q: Olen ikka segaduses, lihtsalt andke mulle üks valik.

A: Suurepärane valik on ehitada oma rakendus esmalt Semantic Kernelis ja seejärel kasutada Azure AI Agent Service’i oma agendi juurutamiseks. See lähenemine võimaldab teil oma agente hõlpsalt püsivaks muuta, samal ajal kasutades Semantic Kernelis mitme agendi süsteemide loomise võimsust. Lisaks on Semantic Kernelil AutoGenis ühendus, mis muudab mõlema raamistiku koos kasutamise lihtsaks.

Võtame peamised erinevused kokku tabelis:

Raamistik Fookus Põhimõisted Kasutusjuhtumid
AutoGen Sündmustepõhised, hajutatud agentlikud rakendused Agendid, Isiksused, Funktsioonid, Andmed Koodi genereerimine, andmeanalüüsi ülesanded
Semantic Kernel Inimlikule tekstisisule keskenduv mõistmine ja genereerimine Agendid, Modulaarne Komponendid, Koostöö Loomuliku keele mõistmine, sisuloome
Azure AI Agent Service Paindlikud mudelid, ettevõtte turvalisus, Koodi genereerimine, Tööriistade kasutamine Modulaarne, Koostöö, Protsesside orkestreerimine Turvaline, skaleeritav ja paindlik AI agentide juurutamine

Mis on iga raamistiku ideaalne kasutusjuhtum?

Kas ma saan integreerida oma olemasolevaid Azure’i ökosüsteemi tööriistu otse või vajan eraldiseisvaid lahendusi?

Vastus on jah, saate integreerida oma olemasolevaid Azure’i ökosüsteemi tööriistu otse Azure AI Agent Service’iga, eriti kuna see on loodud töötama sujuvalt teiste Azure’i teenustega. Näiteks võite integreerida Bing, Azure AI Searchi ja Azure Functions. Samuti on sügav integratsioon Azure AI Foundryga.

AutoGeni ja Semantic Kerneliga saate samuti integreerida Azure’i teenustega, kuid see võib nõuda Azure’i teenuste kutsumist teie koodist. Teine viis integreerimiseks on kasutada Azure SDK-sid, et suhelda Azure’i teenustega oma agentidest. Lisaks, nagu mainitud, saate kasutada Azure AI Agent Service’i orkestreerijana oma agentide jaoks, mis on ehitatud AutoGenis või Semantic Kernelis, mis annaks lihtsa juurdepääsu Azure’i ökosüsteemile.

Kas teil on rohkem küsimusi AI Agent Frameworkide kohta?

Liituge Azure AI Foundry Discordiga, et kohtuda teiste õppijatega, osaleda kontoritundides ja saada vastuseid oma AI agentide küsimustele.

Viited

Eelmine õppetund

AI agentide ja agentide kasutusjuhtumite sissejuhatus

Järgmine õppetund

Agentlike disainimustrite mõistmine


Lahtiütlus:
See dokument on tõlgitud, kasutades AI tõlketeenust Co-op Translator. Kuigi püüame tagada täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks lugeda autoriteetseks allikaks. Olulise teabe puhul on soovitatav kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valede tõlgenduste eest.