ai-agents-for-beginners

Planning Design Pattern

(Кликнете върху горното изображение, за да гледате видеото на този урок)

Planning Design

Въведение

Този урок ще покрие

Цели за учене

След завършване на този урок, ще имате разбиране за:

Дефиниране на общата цел и разбиване на задача

Defining Goals and Tasks

Повечето реални задачи са твърде сложни, за да се решат с един единствен ход. AI агентът се нуждае от сбита цел, която да насочва планирането и действията му. Например, разгледайте целта:

"Създай 3-дневен пътешественически план."

Въпреки че е лесно да се заяви, тя все още се нуждае от доуточняване. Колкото по-ясна е целта, толкова по-добре агентът (и всички човешки колеги) могат да се фокусират върху постигането на правилния резултат, като създаване на подробен план с опции за полети, препоръки за хотели и предложения за дейности.

Декомпозиране на задачата

Големите или сложни задачи стават по-управляеми, когато се разделят на по-малки, целево насочени подзадачи. За примера с план за пътуване, можете да декомпозирате целта на:

Всяка подзадача може да бъде решена от отделни агенти или процеси. Един агент може да се специализира в търсене на най-добрите оферти за полети, друг да се фокусира върху резервации на хотели и т.н. Координиращият или „последващ“ агент може да комбинира тези резултати в един цялостен маршрут за крайния потребител.

Този модулен подход позволява също инкрементални подобрения. Например, може да добавите специализирани агенти за препоръки на храна или предложения за местни дейности и да усъвършенствате маршрута с времето.

Структуриран резултат

Големите езикови модели (LLMs) могат да генерират структуриран изход (напр. JSON), който е по-лесен за обработка и парсване от последващи агенти или услуги. Това е особено полезно в многoагентен контекст, където можем да изпълняваме задачи след получаването на плана от планирания модул.

Следният пример на Python демонстрира прост планиращ агент, който декомпозира целта на подзадачи и създава структуриран план:

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"

# Модел за подзадача за пътуване
class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum  # искаме да възложим задачата на агента

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

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# Дефинирайте съобщението на потребителя
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))

Планиращ агент с координация на множество агенти

В този пример, Семантичен Роутер Агент получава потребителска заявка (например, “Имам нужда от план за хотел за пътуването си.”).

Планиращият модул след това:


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"

# Модел за подвъзлаза на пътуване

class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum # искаме да възложим задачата на агента

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

# Създайте клиента

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

from pprint import pprint

# Определете потребителското съобщение

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

# Отпечатайте съдържанието на отговора след зареждането му като JSON

pprint(json.loads(response_content))

По-долу е изходът от предходния код и можете след това да използвате този структуриран резултат, за да насочите към assigned_agent и да обобщите плана за пътуване за крайния потребител.

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

Примерен тетрадка с предходния примерен код е налична тук.

Итеративно планиране

Някои задачи изискват двупосочна комуникация или повторно планиране, където резултатът от една подзадача влияе на следващата. Например, ако агентът открие неочакван формат на данни при резервацията на полети, може да се наложи да адаптира своята стратегия, преди да премине към резервации на хотели.

Освен това, обратната връзка от потребителя (например ако човек прецени, че предпочита по-ранен полет) може да задейства частично ново планиране. Този динамичен, итеративен подход гарантира, че крайното решение съответства на реалните ограничения и променящите се предпочитания на потребителите.

примерен код

from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
#.. същото като предишния код и предавайте историята на потребителя, текущия план

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}",
)
# .. пренасрочете и изпратете задачите до съответните агенти

За по-пълноценно планиране, разгледайте Magnetic One Блогпост за решаване на сложни задачи.

Обобщение

В тази статия разгледахме пример за това как можем да създадем планировчик, който динамично избира наличните агенти, които са дефинирани. Изходът на Планировчика декомпозира задачите и назначава агентите, за да могат те да бъдат изпълнени. Предполага се, че агентите имат достъп до функциите/инструментите, необходими за изпълнение на задачата. Освен агенти можете да включите и други модели като рефлексия, обобщител и round robin чат за допълнително персонализиране.

Допълнителни ресурси

Magentic One - Общ многоагентен система за решаване на сложни задачи и е постигнала впечатляващи резултати по множество предизвикателни агенционни показатели. Референция: Magentic One. В тази имплементация оркестраторът създава планове, специфични за задачи, и делегира тези задачи на наличните агенти. Освен планирането, оркестраторът използва и механизъм за проследяване на напредъка на задачата и пре-планира при необходимост.

Имате още въпроси относно модела за планиране?

Присъединете се към Microsoft Foundry Discord, за да се срещнете с други обучаващи се, да посещавате часове за консултации и да получите отговори на въпросите си за AI агенти.

Предишен урок

Изграждане на надеждни AI агенти

Следващ урок

Модел за многoагентен дизайн


Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия първоначален език трябва да се счита за авторитетен източник. За важна информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни тълкувания, произтичащи от използването на този превод.