(Faceți clic pe imaginea de mai sus pentru a viziona videoclipul acestei lecții)
Această lecție va acoperi
După parcurgerea acestei lecții, veți înțelege:

Majoritatea sarcinilor din lumea reală sunt prea complexe pentru a fi abordate într-un singur pas. Un agent AI are nevoie de un obiectiv concis pentru a ghida planificarea și acțiunile sale. De exemplu, luați în considerare obiectivul:
"Generează un itinerariu de călătorie de 3 zile."
Deși este simplu de enunțat, acesta necesită în continuare rafinare. Cu cât obiectivul este mai clar, cu atât agentul (și eventualii colaboratori umani) se pot concentra mai bine pe realizarea rezultatului corect, cum ar fi crearea unui itinerar cuprinzător cu opțiuni de zbor, recomandări de hotel și sugestii de activități.
Sarcinile mari sau complexe devin mai ușor de gestionat atunci când sunt împărțite în sub-sarcini mai mici orientate pe obiective. Pentru exemplul itinerariului de călătorie, ați putea descompune obiectivul în:
Fiecare sub-sarcină poate fi apoi abordată de agenți sau procese dedicate. Un agent s-ar putea specializa în căutarea celor mai bune oferte la zboruri, altul se concentrează pe rezervări de hotel și așa mai departe. Un agent coordonator sau „downstream” poate apoi să compileze aceste rezultate într-un itinerar coerent pentru utilizatorul final.
Această abordare modulară permite, de asemenea, îmbunătățiri incrementale. De exemplu, ați putea adăuga agenți specializați pentru Recomandări culinare sau Sugestii de activități locale și să rafinați itinerarul în timp.
Large Language Models (LLMs) pot genera output structurat (de ex. JSON) care este mai ușor pentru agenții sau serviciile downstream de a parsa și procesa. Acest lucru este deosebit de util într-un context multi-agent, unde putem acționa asupra acestor sarcini după ce output-ul planificării este primit.
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"
# Model de sub-sarcină de călătorie
class TravelSubTask(BaseModel):
task_details: str
assigned_agent: AgentEnum # vrem să atribuim sarcina agentului
class TravelPlan(BaseModel):
main_task: str
subtasks: List[TravelSubTask]
is_greeting: bool
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
# Definește mesajul utilizatorului
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))
În acest exemplu, un Semantic Router Agent primește o cerere de la utilizator (de ex., “Am nevoie de un plan pentru hotel pentru călătoria mea.”).
Planificatorul apoi:
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 pentru sub-sarcină de călătorie
class TravelSubTask(BaseModel):
task_details: str
assigned_agent: AgentEnum # dorim să atribuim această sarcină agentului
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
# Creează clientul
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
from pprint import pprint
# Definește mesajul utilizatorului
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
# Afișează conținutul răspunsului după ce îl încarci ca JSON
pprint(json.loads(response_content))
Ce urmează este rezultatul codului anterior și apoi puteți folosi acest rezultat structurat pentru a direcționa către assigned_agent și a rezuma planul de călătorie pentru utilizatorul final.
{
"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."
}
]
}
Un exemplu de notebook cu exemplul de cod anterior este disponibil aici.
Unele sarcini necesită un schimb de informații înainte sau o re-planificare, unde rezultatul unei sub-sarcini influențează pe cea următoare. De exemplu, dacă agentul descoperă un format de date neașteptat în timpul rezervării zborurilor, ar putea fi nevoie să își adapteze strategia înainte de a trece la rezervările de hotel.
În plus, feedback-ul utilizatorului (de ex., un om care decide că preferă un zbor mai devreme) poate declanșa o re-planificare parțială. Această abordare dinamică și iterativă asigură că soluția finală se aliniază cu constrângerile din lumea reală și cu preferințele utilizatorului care evoluează.
de ex., exemplu de cod
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
#.. la fel ca în codul anterior și transmite istoricul utilizatorului, planul curent
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}",
)
# .. replanifică și trimite sarcinile agenților corespunzători
For more comprehensive planning do checkout Magnetic One postare pe blog for solving complex tasks.
În acest articol am analizat un exemplu despre cum putem crea un planificator care poate selecta dinamic agenții disponibili definiți. Output-ul Planner-ului descompune sarcinile și atribuie agenții astfel încât acestea să poată fi executate. Se presupune că agenții au acces la funcțiile/instrumentele necesare pentru a efectua sarcina. Pe lângă agenți, puteți include și alte pattern-uri precum reflecție, sumarizator și chat rotativ pentru a personaliza în continuare.
Magentic One - un sistem multi-agent generalist pentru rezolvarea sarcinilor complexe, care a obținut rezultate impresionante pe multiple benchmark-uri provocatoare pentru agenți. Referință: Magentic One. În această implementare, orchestratorul creează planuri specifice sarcinii și delegă aceste sarcini agenților disponibili. Pe lângă planificare, orchestratorul folosește și un mecanism de urmărire pentru a monitoriza progresul sarcinii și re-planifică după cum este necesar.
Alăturați-vă Microsoft Foundry Discord pentru a întâlni alți cursanți, a participa la ore de consiliere și a primi răspunsuri la întrebările despre agenții AI.
Construirea agenților AI de încredere
Modelul de proiectare multi-agent
Declinare de responsabilitate: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original, în limba sa nativă, trebuie considerat sursa autorizată. Pentru informații critice, se recomandă o traducere profesională realizată de un traducător uman. Nu ne asumăm răspunderea pentru nicio neînțelegere sau interpretare greșită care rezultă din utilizarea acestei traduceri.