(Натисніть на зображення вище, щоб переглянути відео цього уроку)
This lesson will cover
After completing this lesson, you will have an understanding about:

Більшість реальних завдань занадто складні, щоб вирішувати їх одним кроком. Агенту ШІ потрібна стисло сформульована мета, яка направляє його планування та дії. Наприклад, розглянемо мету:
"Згенеруйте 3-денний маршрут подорожі."
Хоча її просто сформулювати, її все одно потрібно уточнити. Чим ясніша мета, тим краще агент (та будь-які люди-співпрацівники) можуть зосередитися на досягненні потрібного результату, наприклад на створенні вичерпного маршруту з варіантами перельотів, рекомендаціями готелів та пропозиціями активностей.
Великі або складні завдання стають керованішими, коли їх розбивають на менші, орієнтовані на мету підзавдання. Для прикладу з маршрутом подорожі ви можете розбити мету на:
Кожне підзавдання можна виконувати спеціалізованими агентами або процесами. Один агент може спеціалізуватися на пошуку найкращих пропозицій на рейси, інший зосереджується на бронюванні готелів тощо. Координуючий або «downstream» агент потім може скомпілювати ці результати в один цілісний маршрут для кінцевого користувача.
Такий модульний підхід також дозволяє поступово вносити поліпшення. Наприклад, ви можете додати спеціалізованих агентів для рекомендацій щодо їжі або пропозицій місцевих заходів і з часом уточнювати маршрут.
Large Language Models (LLMs) can generate structured output (e.g. JSON) that is easier for downstream agents or services to parse and process. This is especially useful in a multi-agent context, where we can action these tasks after the planning output is received.
The following Python snippet demonstrates a simple planning agent decomposing a goal into subtasks and generating a structured 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"
# Модель підзадачі подорожі
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))
In this example, a Semantic Router Agent receives a user request (наприклад, “Мені потрібен план готелю для моєї поїздки.”).
The planner then:
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))
What follows is the output from the previous code and you can then use this structured output to route to assigned_agent and summarize the travel plan to the end user.
{
"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."
}
]
}
An example notebook with the previous code sample is available here.
Деякі завдання вимагають обміну інформацією або повторного планування, коли результат одного підзавдання впливає на наступне. Наприклад, якщо агент виявляє неочікуваний формат даних під час бронювання рейсів, йому може знадобитися адаптувати свою стратегію перед переходом до бронювання готелів.
Крім того, відгуки користувача (наприклад, коли людина вирішує, що віддає перевагу більш ранньому рейсу) можуть запустити часткове повторне планування. Такий динамічний, ітеративний підхід гарантує, що кінцеве рішення відповідає реальним обмеженням і змінюваним уподобанням користувача.
наприклад приклад коду
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 публікацію в блозі щодо вирішення складних завдань.
У цій статті ми розглянули приклад того, як можна створити планувальника, який динамічно обирає доступних визначених агентів. Вивід планувальника розбиває завдання і призначає агентів для їх виконання. Припускається, що агенти мають доступ до функцій/інструментів, необхідних для виконання завдання. Окрім агентів ви можете включити інші патерни, такі як рефлексія, підсумовувач і почерговий чат для подальшого налаштування.
Magentic One - A Generalist multi-agent system for solving complex tasks and has achieved impressive results on multiple challenging agentic benchmarks. Reference: Magentic One. In this implementation the orchestrator creates task specific plans and delegates these tasks to the available agents. In addition to planning the orchestrator also employs a tracking mechanism to monitor the progress of the task and re-plans as required.
Приєднуйтесь до Microsoft Foundry Discord, щоб зустрітися з іншими учнями, відвідати години консультацій та отримати відповіді на свої питання щодо агентів ШІ.
Патерн багатоагентної архітектури
Відмова від відповідальності: Цей документ було перекладено за допомогою сервісу перекладу на основі штучного інтелекту Co‑op Translator (https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, зверніть увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ у його рідній мові слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад, виконаний людиною. Ми не несемо відповідальності за будь‑які непорозуміння чи хибні тлумачення, що виникли внаслідок використання цього перекладу.