ai-agents-for-beginners

Tervezési Minta

(Kattintson fent a képre a lecke videójának megtekintéséhez)

Tervezési minták

Bevezetés

Ez a lecke a következőket fogja tárgyalni

Tanulási célok

A lecke elvégzése után a következőket fogja érteni:

Az átfogó cél meghatározása és a feladat lebontása

Célok és feladatok meghatározása

A legtöbb valós feladat túl összetett ahhoz, hogy egyetlen lépésben lehessen megoldani. Egy AI ügynöknek tömör célkitűzésre van szüksége, hogy irányítsa a tervezést és a követendő lépéseket. Például vegyük a célt:

"Készíts egy 3 napos utazási tervet."

Bár egyszerűen megfogalmazható, finomításra van szükség. Minél világosabb a cél, annál jobban fókuszálhat az ügynök (és az esetleges emberi közreműködők) a kívánt eredmény elérésére, például egy átfogó útiterv létrehozására, benne repülőjárat-opciókkal, szállásajánlásokkal és programjavaslatokkal.

Feladat lebontása

Nagy vagy összetett feladatok kezelhetőbbekké válnak, ha kisebb, célorientált alfeladatokra bontjuk őket. Az utazási terv példájánál a célt a következőkre bonthatjuk:

Minden alfeladattal külön ügynökök vagy folyamatok foglalkozhatnak. Egy ügynök specializálódhat a legjobb repülőjegy ajánlatok keresésére, egy másik a szállásfoglalásra stb. Egy koordináló vagy „leszármazott” ügynök pedig összeállíthatja ezeket az eredményeket egy egységes útitervbe a végfelhasználó számára.

Ez a moduláris megközelítés lehetővé teszi az inkrementális fejlesztést is. Például hozzáadhatunk specializált ügynököket ételajánlásokra vagy helyi programjavaslatokra, és idővel finomíthatjuk az útitervet.

Strukturált kimenet

A Nagy Nyelvi Modellek (LLM-ek) képesek strukturált kimenetet (pl. JSON) generálni, amely könnyebben feldolgozható a leszármazott ügynökök vagy szolgáltatások számára. Ez különösen hasznos többügynökös környezetben, ahol ezeket a feladatokat a tervezési kimenet fogadása után lehet végrehajtani.

A következő Python kódrészlet bemutat egy egyszerű tervező ügynököt, amely lebont egy célt alfeladatokra és strukturált tervet generál:

from pydantic import BaseModel
from enum import Enum
from typing import List, Optional, Union
import json
import os
from typing import Optional
from pprint import pprint
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

class AgentEnum(str, Enum):
    FlightBooking = "flight_booking"
    HotelBooking = "hotel_booking"
    CarRental = "car_rental"
    ActivitiesBooking = "activities_booking"
    DestinationInfo = "destination_info"
    DefaultAgent = "default_agent"
    GroupChatManager = "group_chat_manager"

# Utazási alfeladat modell
class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum  # hozzá akarjuk rendelni a feladatot az ügynökhöz

class TravelPlan(BaseModel):
    main_task: str
    subtasks: List[TravelSubTask]
    is_greeting: bool

provider = FoundryChatClient(
    project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
    model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
    credential=AzureCliCredential(),
)

# Definiáld a felhasználói üzenetet
system_prompt = """You are a planner agent.
    Your job is to decide which agents to run based on the user's request.
    Provide your response in JSON format with the following structure:
{'main_task': 'Plan a family trip from Singapore to Melbourne.',
 'subtasks': [{'assigned_agent': 'flight_booking',
               'task_details': 'Book round-trip flights from Singapore to '
                               'Melbourne.'}
    Below are the available agents specialised in different tasks:
    - FlightBooking: For booking flights and providing flight information
    - HotelBooking: For booking hotels and providing hotel information
    - CarRental: For booking cars and providing car rental information
    - ActivitiesBooking: For booking activities and providing activity information
    - DestinationInfo: For providing information about destinations
    - DefaultAgent: For handling general requests"""

user_message = "Create a travel plan for a family of 2 kids from Singapore to Melbourne"

response = client.create_response(input=user_message, instructions=system_prompt)

response_content = response.output_text
pprint(json.loads(response_content))

Tervező ügynök többügynökös összehangolással

Ebben a példában egy Szemantikus Router ügynök fogadja a felhasználói kérését (pl. “Szállás tervet kérek az utazásomhoz.”).

A tervező ezután:


from pydantic import BaseModel

from enum import Enum
from typing import List, Optional, Union

class AgentEnum(str, Enum):
    FlightBooking = "flight_booking"
    HotelBooking = "hotel_booking"
    CarRental = "car_rental"
    ActivitiesBooking = "activities_booking"
    DestinationInfo = "destination_info"
    DefaultAgent = "default_agent"
    GroupChatManager = "group_chat_manager"

# Utazási alfeladat modell

class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum # hozzá akarjuk rendelni a feladatot az ügynökhöz

class TravelPlan(BaseModel):
    main_task: str
    subtasks: List[TravelSubTask]
    is_greeting: bool
import json
import os
from typing import Optional

from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

# Létrehozni az ügyfelet

provider = FoundryChatClient(
    project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
    model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
    credential=AzureCliCredential(),
)

from pprint import pprint

# Meghatározni a felhasználói üzenetet

system_prompt = """You are a planner agent.
    Your job is to decide which agents to run based on the user's request.
    Below are the available agents specialized in different tasks:
    - FlightBooking: For booking flights and providing flight information
    - HotelBooking: For booking hotels and providing hotel information
    - CarRental: For booking cars and providing car rental information
    - ActivitiesBooking: For booking activities and providing activity information
    - DestinationInfo: For providing information about destinations
    - DefaultAgent: For handling general requests"""

user_message = "Create a travel plan for a family of 2 kids from Singapore to Melbourne"

response = client.create_response(input=user_message, instructions=system_prompt)

response_content = response.output_text

# Kiírni a választartalmat JSON-ként való betöltés után

pprint(json.loads(response_content))

A következő kimenet az előző kód eredménye, ezt a strukturált kimenetet aztán az assigned_agent felé irányíthatjuk és összefoglalhatjuk az utazási tervet a végfelhasználónak.

{
    "is_greeting": "False",
    "main_task": "Plan a family trip from Singapore to Melbourne.",
    "subtasks": [
        {
            "assigned_agent": "flight_booking",
            "task_details": "Book round-trip flights from Singapore to Melbourne."
        },
        {
            "assigned_agent": "hotel_booking",
            "task_details": "Find family-friendly hotels in Melbourne."
        },
        {
            "assigned_agent": "car_rental",
            "task_details": "Arrange a car rental suitable for a family of four in Melbourne."
        },
        {
            "assigned_agent": "activities_booking",
            "task_details": "List family-friendly activities in Melbourne."
        },
        {
            "assigned_agent": "destination_info",
            "task_details": "Provide information about Melbourne as a travel destination."
        }
    ]
}

Egy példafüzet a fenti kóddal elérhető itt.

Iteratív tervezés

Egyes feladatok visszacsatolást vagy újratervezést igényelnek, ahol egy alfeladat eredménye befolyásolja a következőt. Például, ha az ügynök váratlan adatformátummal találkozik repülőjegy foglalás közben, alkalmazkodnia kell stratégiájához mielőtt tovább lép a szállásfoglalásra.

Ezen felül a felhasználói visszajelzés (pl. ha egy ember korábbi járatot részesít előnyben) részleges újratervezést indíthat el. Ez a dinamikus, iteratív megközelítés biztosítja, hogy a végső megoldás megfeleljen a valós korlátoknak és a változó felhasználói igényeknek.

pl. kódminta

import os
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
#.. ugyanaz, mint az előző kódban, és továbbítja a felhasználó előzményeit, aktuális tervét

system_prompt = """You are a planner agent to optimize the
    Your job is to decide which agents to run based on the user's request.
    Below are the available agents specialized in different tasks:
    - FlightBooking: For booking flights and providing flight information
    - HotelBooking: For booking hotels and providing hotel information
    - CarRental: For booking cars and providing car rental information
    - ActivitiesBooking: For booking activities and providing activity information
    - DestinationInfo: For providing information about destinations
    - DefaultAgent: For handling general requests"""

user_message = "Create a travel plan for a family of 2 kids from Singapore to Melbourne"

response = client.create_response(
    input=user_message,
    instructions=system_prompt,
    context=f"Previous travel plan - {TravelPlan}",
)
# .. újratervez és elküldi a feladatokat a megfelelő ügynököknek

A komplexebb tervezéshez érdemes megnézni a Magnetic One blogbejegyzést, amely összetett feladatok megoldására szolgál.

Összefoglalás

Ebben a cikkben megnéztünk egy példát arra, hogyan hozhatunk létre tervezőt, amely dinamikusan választja ki az elérhető, definiált ügynököket. A tervező kimenete lebontja a feladatokat és hozzárendeli az ügynököket, hogy azok végrehajthatók legyenek. Feltételezzük, hogy az ügynökök hozzáférnek az adott feladat végrehajtásához szükséges funkciókhoz/eszközökhöz. Az ügynökök mellett további mintákat is beemelhetünk, mint reflexió, összefoglaló vagy körkörös chat, hogy testreszabottabbá tegyük a működést.

További források

Magnetic One - Egy generalista többügynökös rendszer összetett feladatok megoldására, amely számos kihívást jelentő ügynöki benchmarkon kiváló eredményeket ért el. Referencia: Magnetic One. Ebben a megvalósításban az összehangoló specifikus tervezési terveket hoz létre és delegálja ezeket az elérhető ügynökök számára. A tervezés mellett az összehangoló követési mechanizmust is alkalmaz a feladat előrehaladásának nyomon követésére és szükség szerinti újratervezésére.

Kérdése van a Tervezési mintákkal kapcsolatban?

Csatlakozzon a Microsoft Foundry Discord közösséghez, hogy más tanulókkal találkozzon, részt vegyen az irodai órákon és választ kapjon AI ügynökökkel kapcsolatos kérdéseire.

Előző lecke

Megbízható AI ügynökök építése

Következő lecke

Többügynökös tervezési minta


Jogi nyilatkozat: Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.