ai-agents-for-beginners

Planning Design Pattern

(Bu dersin videosunu izlemek için yukarıdaki resme tıklayın)

Planlama Tasarımı

Giriş

Bu ders şunları kapsayacaktır

Öğrenme Hedefleri

Bu dersi tamamladıktan sonra şunları anlayabileceksiniz:

Genel Hedefin Tanımlanması ve Görevin Parçalanması

Defining Goals and Tasks

Çoğu gerçek dünya görevi tek adımda ele alınamayacak kadar karmaşıktır. Bir AI ajanının planlamasını ve eylemlerini yönlendirmek için özlü bir hedefe ihtiyacı vardır. Örneğin, şu hedefi ele alalım:

"3 günlük bir seyahat programı oluştur."

Basitçe ifade edilse de, hâlâ detaylandırılması gerekir. Hedef ne kadar net olursa, ajan (ve herhangi bir insan işbirlikçisi) doğru sonuca odaklanabilir, örneğin uçuş seçenekleri, otel önerileri ve etkinlik tavsiyeleri içeren kapsamlı bir program hazırlamak.

Görev Parçalama

Büyük veya karmaşık görevler, daha küçük, hedefe yönelik alt görevlere bölündüğünde daha yönetilebilir hale gelir. Seyahat programı örneğinde, hedefi şu alt görevlere ayırabilirsiniz:

Her alt görev sonrasında ilgili ajanlar veya süreçler tarafından ele alınabilir. Bir ajan en iyi uçuş fırsatlarını aramakta uzmanlaşırken, diğeri otel rezervasyonlarına odaklanabilir. Koordine eden veya “aşağı yönlü” bir ajan ise bu sonuçları kullanıcıya sunulacak tutarlı bir programa dönüştürebilir.

Bu modüler yaklaşım, kademeli iyileştirmelere de olanak sağlar. Örneğin, Yemek Önerileri veya Yerel Aktivite Tavsiyeleri gibi özel ajanlar ekleyebilir ve programı zamanla geliştirebilirsiniz.

Yapılandırılmış Çıktı

Büyük Dil Modelleri (LLM’ler), aşağı akış ajanları veya servislerin daha kolay çözümleyip işleyebileceği yapılandırılmış çıktılar (ör. JSON) üretebilir. Bu, özellikle planlama çıktısı alındıktan sonra görevlerin eyleme dönüştürüldüğü çok ajanlı bağlamlarda faydalıdır.

Aşağıdaki Python örneği, basit bir planlama ajanının bir hedefi alt görevlere bölerek yapılandırılmış bir plan oluşturmasını göstermektedir:

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"

# Seyahat AltGörev Modeli
class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum  # Görevi ajana atamak istiyoruz

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

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# Kullanıcı mesajını tanımla
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))

Çok Ajanlı Orkestrasyonlu Planlama Ajanı

Bu örnekte, bir Semantik Yönlendirici Ajan kullanıcıdan gelen isteği alır (örneğin, “Seyahatim için otel planına ihtiyacım var.”).

Planlayıcı ise:


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"

# Seyahat Alt Görev Modeli

class TravelSubTask(BaseModel):
    task_details: str
    assigned_agent: AgentEnum # Görevi ajan'a atamak istiyoruz

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

# İstemciyi oluştur

provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

from pprint import pprint

# Kullanıcı mesajını tanımla

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

# Yanıt içeriğini JSON olarak yükledikten sonra yazdır

pprint(json.loads(response_content))

Sonraki çıktı önceki koddan gelir ve bu yapılandırılmış çıktıyı assigned_agent‘a yönlendirip seyahat planını son kullanıcıya özetlemek için kullanabilirsiniz.

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

Önceki kod örneğiyle ilgili örnek defter burada mevcuttur.

Yinelemeli Planlama

Bazı görevler, bir alt görevin sonucu diğerini etkilediğinde ileri geri veya yeniden planlama gerektirir. Örneğin, ajan uçuş rezervasyonu sırasında beklenmeyen bir veri formatı tespit ederse, otel rezervasyonuna geçmeden önce stratejisini uyarlaması gerekebilir.

Ek olarak, kullanıcı geri bildirimi (örneğin, bir insanın daha erken bir uçuş tercih etmesi) kısmi bir yeniden planlamayı tetikleyebilir. Bu dinamik ve yinelemeli yaklaşım, nihai çözümün gerçek dünya kısıtlamalarına ve gelişen kullanıcı tercihleriyle uyumlu olmasını sağlar.

örnek kod

from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
#.. önceki kodla aynı ve kullanıcı geçmişini, mevcut planı iletin

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}",
)
# .. yeniden plan yap ve görevleri ilgili ajanlara gönder

Daha kapsamlı planlama için karmaşık görevleri çözmek üzere Magnetic One Blog yazısını inceleyebilirsiniz.

Özet

Bu makalede, tanımlanan mevcut ajanları dinamik olarak seçebilen bir planlayıcı oluşturma örneğine baktık. Planlayıcının çıktısı görevleri parçalayarak ajanlara atar ve bunların yürütülmesini sağlar. Ajanların, görevi yerine getirmek için gereken fonksiyon/araçlara erişimi olduğu varsayılır. Ajanlara ek olarak, yansıma, özetleyici ve round robin sohbet gibi diğer desenler de özelleştirme için eklenebilir.

Ek Kaynaklar

Magentic One - Karmaşık görevleri çözmek için genel amaçlı çok ajanlı sistemdir ve pek çok zorlu ajan benchmark’ında etkileyici sonuçlar elde etmiştir. Referans: Magentic One. Bu uygulamada orkestratör görev bazlı planlar oluşturur ve bu görevleri kullanılabilir ajanlara devreder. Planlamanın yanı sıra, orkestratör görev ilerlemesini izlemek ve gerektiğinde yeniden planlamak için bir takip mekanizması kullanır.

Planlama Tasarım Deseni ile İlgili Daha Fazla Sorunuz mu Var?

Diğer öğrenenlerle tanışmak, ofis saatlerine katılmak ve AI Ajanları ile ilgili sorularınızı cevaplamak için Microsoft Foundry Discord topluluğuna katılın.

Önceki Ders

Güvenilir AI Ajanları Oluşturmak

Sonraki Ders

Çok Ajanlı Tasarım Deseni


Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hatalar veya yanlışlıklar içerebileceğini lütfen unutmayın. Orijinal belge, ana dilindeki haliyle yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucunda ortaya çıkabilecek yanlış anlamalar veya yorumlar nedeniyle sorumluluk kabul edilmemektedir.