(Kliknij obraz powyżej, aby obejrzeć wideo z tej lekcji)
Ta lekcja obejmie
Po ukończeniu tej lekcji zrozumiesz:

Większość zadań w rzeczywistym świecie jest zbyt złożona, by rozwiązać ją w jednym kroku. Agent AI potrzebuje zwięzłego celu, aby kierować swoim planowaniem i działaniami. Na przykład rozważ cel:
"Wygeneruj 3-dniowy plan podróży."
Chociaż łatwo to sformułować, wciąż wymaga dopracowania. Im jaśniejszy cel, tym lepiej agent (i ewentualni ludzcy współpracownicy) mogą skupić się na osiągnięciu właściwego wyniku, takiego jak stworzenie kompleksowego planu z opcjami lotów, rekomendacjami hoteli i propozycjami aktywności.
Duże lub złożone zadania stają się łatwiejsze do zarządzania, gdy są podzielone na mniejsze, ukierunkowane na cel podzadania. Dla przykładu planu podróży można rozłożyć cel na:
Każde podzadanie można następnie powierzyć wyspecjalizowanym agentom lub procesom. Jeden agent może specjalizować się w wyszukiwaniu najlepszych ofert lotów, inny skupi się na rezerwacjach hoteli itd. Koordynujący lub „downstream” agent może potem skompilować te wyniki w spójny plan podróży dla użytkownika końcowego.
Takie modułowe podejście umożliwia także stopniowe udoskonalenia. Na przykład można dodać wyspecjalizowane agenty do rekomendacji kulinarnych lub sugestii lokalnych atrakcji i z czasem udoskonalać plan podróży.
Duże modele językowe (LLMs) mogą generować ustrukturyzowane wyjście (np. JSON), które jest łatwiejsze do parsowania i przetwarzania przez downstreamowe agenty lub usługi. Jest to szczególnie przydatne w kontekście wieloagentowym, gdzie można wykonać te zadania po otrzymaniu wyniku planowania.
Poniższy fragment Pythona demonstruje prostego agenta planującego, rozkładającego cel na podzadania i generującego ustrukturyzowany 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"
# Model podzadania podróży
class TravelSubTask(BaseModel):
task_details: str
assigned_agent: AgentEnum # chcemy przypisać zadanie agentowi
class TravelPlan(BaseModel):
main_task: str
subtasks: List[TravelSubTask]
is_greeting: bool
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
# Zdefiniuj wiadomość użytkownika
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))
W tym przykładzie Agent Router Semantyczny otrzymuje żądanie użytkownika (np. “Potrzebuję planu hotelowego na moją podróż.”).
Planner następnie:
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"
# Model podzadania podróży
class TravelSubTask(BaseModel):
task_details: str
assigned_agent: AgentEnum # chcemy przypisać zadanie agentowi
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
# Utwórz klienta
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
from pprint import pprint
# Zdefiniuj wiadomość użytkownika
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
# Wyświetl zawartość odpowiedzi po załadowaniu jej jako JSON
pprint(json.loads(response_content))
Poniżej znajduje się wyjście z poprzedniego kodu i możesz następnie użyć tego ustrukturyzowanego wyjścia, aby skierować je do assigned_agent i podsumować plan podróży dla użytkownika końcowego.
{
"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."
}
]
}
Przykładowy notatnik z powyższym przykładem kodu jest dostępny tutaj.
Niektóre zadania wymagają wymiany informacji lub ponownego planowania, gdzie wynik jednego podzadania wpływa na kolejne. Na przykład, jeśli agent odkryje nieoczekiwany format danych podczas rezerwacji lotów, może być konieczne dostosowanie strategii przed przejściem do rezerwacji hoteli.
Dodatkowo opinia użytkownika (np. człowieka decydującego, że woli wcześniejszy lot) może wywołać częściowe ponowne planowanie. Takie dynamiczne, iteracyjne podejście zapewnia, że końcowe rozwiązanie jest zgodne z rzeczywistymi ograniczeniami i zmieniającymi się preferencjami użytkownika.
np. przykładowy kod
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
#.. tak samo jak w poprzednim kodzie i przekaż historię użytkownika oraz aktualny 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}",
)
# .. zaplanuj ponownie i wyślij zadania do odpowiednich agentów
Dla bardziej kompleksowego planowania sprawdź Magnetic One Wpis na blogu dotyczący rozwiązywania złożonych zadań.
W tym artykule przyjrzeliśmy się przykładowi, jak można stworzyć planner, który dynamicznie wybiera dostępnych zdefiniowanych agentów. Wyjście z Plannera dekomponuje zadania i przydziela agentów, aby można je było wykonać. Zakłada się, że agenty mają dostęp do funkcji/narzędzi niezbędnych do wykonania zadania. Oprócz agentów można dodać inne wzorce, takie jak refleksja, narzędzie podsumowujące i czat rotacyjny, aby dodatkowo dostosować działanie.
Magentic One - generalistyczny system wieloagentowy do rozwiązywania złożonych zadań, który osiągnął imponujące wyniki w wielu wymagających benchmarkach agentowych. Odniesienie: Magentic One. W tej implementacji orkiestrator tworzy plany specyficzne dla zadań i deleguje te zadania do dostępnych agentów. Oprócz planowania orkiestrator stosuje również mechanizm śledzenia postępu zadania i ponownego planowania w razie potrzeby.
Dołącz do Microsoft Foundry Discord, aby spotkać się z innymi uczącymi się, uczestniczyć w konsultacjach i uzyskać odpowiedzi na swoje pytania dotyczące agentów AI.
Tworzenie godnych zaufania agentów AI
Zastrzeżenie: Ten dokument został przetłumaczony z użyciem usługi tłumaczeń opartych na sztucznej inteligencji Co-op Translator. Chociaż dokładamy starań, aby tłumaczenie było jak najdokładniejsze, prosimy pamiętać, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym należy uznać za źródło autorytatywne. W przypadku informacji o znaczeniu krytycznym zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za żadne nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.