ai-agents-for-beginners

Planning Design Pattern

(Spustelėkite aukščiau esantį paveikslėlį, kad peržiūrėtumėte šios pamokos vaizdo įrašą)

Planavimo modelis

Įvadas

Šioje pamokoje aptarsime

Mokymosi tikslai

Pabaigę šią pamoką, suprasite:

Bendro tikslo apibrėžimas ir užduoties suskaidymas

Defining Goals and Tasks

Dauguma realaus pasaulio užduočių yra pernelyg sudėtingos, kad jas būtų galima įvykdyti vienu žingsniu. AI agentui reikia glausto tikslo, kuris nukreiptų jo planavimą ir veiksmus. Pavyzdžiui, apgalvokite tikslą:

„Sukurkite 3 dienų kelionės maršrutą.“

Nors tai paprasta išsakyti, reikia jį patikslinti. Kuo aiškesnis tikslas, tuo geriau agentas (ir jo bendradarbiai) gali susikoncentruoti į tinkamo rezultato pasiekimą, pvz., sukurti išsamų maršrutą su skrydžių pasirinkimais, viešbučių rekomendacijomis ir veiklų pasiūlymais.

Užduoties suskaidymas

Didelės ar sudėtingos užduotys tampa valdomesnės, kai jos suskaidomos į mažesnes, tikslingas pogrupes. Kelionės maršruto pavyzdyje tikslą galite suskaidyti į:

Kiekvieną pogrupį gali vykdyti specializuoti agentai arba procesai. Vienas agentas gali specializuotis paieškoje geriausių skrydžių pasiūlymų, kitas – viešbučių užsakymuose ir t. t. Koordinuojantis ar „žemesnio lygio“ agentas gali sujungti šiuos rezultatus į vientisą maršrutą galutiniam vartotojui.

Šis modulinis požiūris leidžia palaipsniui tobulinti sistemą. Pavyzdžiui, galite pridėti specializuotus agentus maisto rekomendacijoms ar vietinėms veikloms ir pamažu patobulinti maršrutą.

Struktūruotas atsakymas

Dideli kalbos modeliai (LLM) gali generuoti struktūruotą atsakymą (pvz., JSON), kurį lengviau analizuoja ir apdoroja vėlesni agentai ar paslaugos. Tai ypač naudinga daugiagentėje aplinkoje, kur užduotys gali būti vykdomos gavus planavimo rezultatą.

Žemiau pateiktas Python kodo fragmentas demonstruoja, kaip paprastas planavimo agentas suskaido tikslą į pogrupes ir generuoja struktūruotą planą:

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.azure import AzureAIProjectAgentProvider
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"

# Kelionės použduoties modelis
class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum  # norime priskirti užduotį agentui

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

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# Apibrėžti naudotojo žinutę
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))

Planavimo agentas su daugiagentine orkestracija

Šiame pavyzdyje Semantinis maršrutizavimo agentas gauna naudotojo užklausą (pvz., „Man reikia viešbučio plano mano kelionei.“).

Planavimo agentas tada:


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"

# Kelionės posužduoties modelis

class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum # norime priskirti užduotį agentui

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

from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential

# Sukurti klientą

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

from pprint import pprint

# Apibrėžti vartotojo žinutę

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

# Išvesti atsakymo turinį po jo užkėlimo kaip JSON

pprint(json.loads(response_content))

Toliau pateiktas rezultatas iš ankstesnio kodo, kurį galite naudoti perduoti struktūruotą atsakymą agentui assigned_agent ir santraukoti kelionės planą galutiniam naudotojui.

{
    "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."
        }
    ]
}

Pavyzdinį užrašų knygelės failą su aukščiau pateiktu kodo pavyzdžiu galite rasti čia.

Iteratyvus planavimas

Kai kurios užduotys reikalauja derybų ar perplanavimo, kai vieno pogrupio rezultatas veikia kitą. Pavyzdžiui, jei agentas aptinka netikėtą duomenų formatą rezervuojant skrydžius, gali tekti keisti strategiją prieš pereinant prie viešbučių užsakymų.

Be to, naudotojo atsiliepimai (pvz., žmogus pasirenka ankstesnį skrydį) gali inicijuoti dalinį perplanavimą. Šis dinamiškas, iteratyvus požiūris užtikrina, kad galutinis sprendimas atitiktų realaus pasaulio ribojimus ir kintančius vartotojų pageidavimus.

pavyzdinis kodas

from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
#.. tas pats kaip ankstesniame kode ir perduoti vartotojo istoriją, dabartinį planą

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}",
)
# .. perdaryti planą ir siųsti užduotis atitinkamiems agentams

Išsamesniam planavimui peržiūrėkite Magnetic One Įrašą tinklaraštyje apie sudėtingų užduočių sprendimą.

Santrauka

Šiame straipsnyje apžvelgėme, kaip sukurti planuotoją, galintį dinamiškai pasirinkti apibrėžtus prieinamus agentus. Planuotojo išvestis suskaido užduotis ir paskiria agentus, kad jos būtų įvykdytos. Manoma, kad agentai turi prieigą prie funkcijų/įrankių, reikalingų užduočiai įvykdyti. Be agentų, galima naudoti kitus modelius, tokius kaip refleksija, santraukų kūrėjas ir rotacinis pokalbis, siekiant toliau pritaikyti sistemą.

Papildomi ištekliai

Magentic One – universali daugiagentė sistema sudėtingoms užduotims spręsti, kuri pasiekė įspūdingus rezultatus įvairiuose sudėtinguose agentų vertinimuose. Nuoroda: Magentic One. Šioje įgyvendinimo versijoje orkestratorius kuria užduotims specifinius planus ir deleguoja užduotis prieinamiesiems agentams. Be planavimo, orkestratorius taip pat naudoja stebėjimo mechanizmą, kad sektų užduoties eigą ir prireikus pertvarkytų planus.

Turite daugiau klausimų apie Planavimo modelį?

Prisijunkite prie Microsoft Foundry Discord, susitikite su kitais mokiniais, dalyvaukite konsultacijose ir gaukite atsakymus į savo AI agentų klausimus.

Ankstesnė pamoka

Patikimų AI agentų kūrimas

Kitoji pamoka

Daugiagentės sistemos modelis


Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatizuoti vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojamas profesionalus žmogaus vertimas. Mes neatsakome už jokius nesusipratimus ar klaidingą aiškinimą, kilusius dėl šio vertimo naudojimo.