ai-agents-for-beginners

Çoklu Ajan Tasarımı

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

Yapay Zeka Ajanlarında Metabiliş

Giriş

Yapay zeka ajanlarında metabiliş dersine hoş geldiniz! Bu bölüm, yapay zeka ajanlarının kendi düşünme süreçleri hakkında nasıl düşünebileceğini merak eden yeni başlayanlar için hazırlanmıştır. Bu dersin sonunda, temel kavramları anlayacak ve yapay zeka ajanı tasarımında metabilişi uygulamak için pratik örneklerle donanmış olacaksınız.

Öğrenme Hedefleri

Bu dersi tamamladıktan sonra şunları yapabileceksiniz:

  1. Ajan tanımlarında akıl yürütme döngülerinin etkilerini anlamak.
  2. Kendini düzeltebilen ajanlar için planlama ve değerlendirme tekniklerini kullanmak.
  3. Görevleri yerine getirmek için kodu manipüle edebilen kendi ajanlarınızı oluşturmak.

Metabilişe Giriş

Metabiliş, kişinin kendi düşünme süreci hakkında düşünmesini içeren üst düzey bilişsel süreçlerdir. Yapay zeka ajanları için bu, kendini farkındalık ve geçmiş deneyimlere dayanarak eylemlerini değerlendirebilme ve ayarlayabilme anlamına gelir. Metabiliş veya “düşünme hakkında düşünme”, ajan temelli yapay zeka sistemlerinin geliştirilmesinde önemli bir kavramdır. Bu, yapay zeka sistemlerinin kendi iç süreçlerinin farkında olması ve davranışlarını buna göre izleyip düzenleyip uyarlayabilmesi anlamına gelir. Bizim ortamı okumamız veya bir probleme bakmamız gibi. Bu kendini fark etme, yapay zeka sistemlerinin daha iyi kararlar vermesine, hataları belirlemesine ve performanslarını zaman içinde iyileştirmesine yardımcı olabilir – yine Turing testi ve yapay zekanın kontrolü ele alıp almayacağı tartışmasına geri bağlanmaktadır.

Ajan temelli yapay zeka sistemleri bağlamında, metabiliş aşağıdaki zorlukların ele alınmasına yardımcı olabilir:

Metabiliş Nedir?

Metabiliş veya “düşünme hakkında düşünme”, bilişsel süreçlerin kendi kendini fark etme ve öz-düzenleme süreçlerini içeren üst düzey bir bilişsel süreçtir. Yapay zeka alanında, metabiliş ajanların stratejilerini ve eylemlerini değerlendirmelerine ve uyarlamalarına olanak sağlar, bu da problem çözme ve karar verme yeteneklerinde iyileşmeye yol açar. Metabilişi anlayarak, yalnızca daha zeki değil, aynı zamanda daha uyarlanabilir ve verimli yapay zeka ajanları tasarlayabilirsiniz. Gerçek metabilişte, yapay zekanın kendi akıl yürütmesi hakkında açıkça akıl yürütmesini görürdünüz.

Örnek: “Daha ucuz uçuşlara öncelik verdim çünkü… Direkt uçuşları kaçırıyor olabilirim, o yüzden tekrar kontrol edeyim.” Belirli bir rotayı neden veya nasıl seçtiğinin takibini yapmak.

Yapay Zeka Ajanlarında Metabilşin Önemi

Metabiliş, yapay zeka ajanı tasarımında birkaç nedenle kritik bir rol oynar:

Metabilişin Önemi

Bir Yapay Zeka Ajanının Bileşenleri

Metabiliş süreçlerine dalmadan önce, bir yapay zeka ajanının temel bileşenlerini anlamak önemlidir. Bir yapay zeka ajanı tipik olarak şunlardan oluşur:

Bu bileşenler birlikte belirli görevleri yerine getirebilen bir “uzmanlık birimi” oluşturur.

Örnek: Tatilinizi sadece planlamakla kalmayıp aynı zamanda gerçek zamanlı verilere ve önceki müşteri yolculuğu deneyimlerine dayanarak yolunu ayarlayan bir seyahat acentesini düşünün.

Örnek: Bir Seyahat Acentesi Hizmetinde Metabiliş

Yapay zeka destekli bir seyahat acentesi hizmeti tasarladığınızı hayal edin. Bu ajan, “Seyahat Acentesi”, kullanıcılara tatillerini planlamada yardımcı olur. Metabilişi dahil etmek için Seyahat Acentesi’nin kendi farkındalığına ve geçmiş deneyimlere dayanarak eylemlerini değerlendirmesi ve ayarlaması gerekir. İşte metabilişin rolü:

Mevcut Görev

Mevcut görev, bir kullanıcının Paris’e seyahat planlamasına yardımcı olmaktır.

Görevin Tamamlanma Adımları

  1. Kullanıcı Tercihlerini Topla: Seyahat tarihleri, bütçe, ilgi alanları (örneğin müzeler, mutfak, alışveriş) ve özel gereksinimler hakkında kullanıcıya sor.
  2. Bilgi Getir: Kullanıcının tercihleriyle eşleşen uçuş seçenekleri, konaklamalar, çekim yerleri ve restoranları ara.
  3. Öneriler Oluştur: Uçuş detayları, otel rezervasyonları ve önerilen aktivitelerle kişiselleştirilmiş bir plan sun.
  4. Geri Bildiriye Göre Ayarla: Kullanıcıdan öneriler hakkında geri bildirim iste ve gerekli düzenlemeleri yap.

Gerekli Kaynaklar

Deneyim ve Öz-Değerlendirme

Seyahat Acentesi, performansını değerlendirmek ve geçmiş deneyimlerden öğrenmek için metabilişi kullanır. Örneğin:

  1. Kullanıcı Geri Bildirimlerini Analiz Etme: Seyahat Acentesi, hangi önerilerin olumlu karşılandığını ve hangilerinin karşılanmadığını belirlemek için kullanıcı geri bildirimlerini inceler. Gelecekteki önerilerini buna göre ayarlar.
  2. Uyarlanabilirlik: Eğer kullanıcı daha önce kalabalık yerlerden hoşlanmadığını belirtmişse, Seyahat Acentesi gelecekte yoğun saatlerde popüler turistik yerleri önermekten kaçınır.
  3. Hata Düzeltme: Seyahat Acentesi geçmişte tamamen dolu bir otel önerisi gibi bir hata yaptıysa, gelecekte öneri yapmadan önce müsaitlik kontrolünü daha titiz yapmayı öğrenir.

Pratik Geliştirici Örneği

İşte Seyahat Acentesi kodunun metabiliş içerirken nasıl görünebileceğine dair basitleştirilmiş bir örnek:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        # Tercihlere göre uçuşları, otelleri ve gezilecek yerleri arayın
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        # Geri bildirimi analiz edin ve gelecekteki önerileri ayarlayın
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# Örnek kullanım
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

Metabilişin Önemi

Metabiliş dahil edilerek Seyahat Acentesi, daha kişiselleştirilmiş ve doğru seyahat önerileri sunarak genel kullanıcı deneyimini iyileştirebilir.


2. Ajanlarda Planlama

Planlama, AI ajan davranışının kritik bir bileşenidir. Bir hedefe ulaşmak için gereken adımların ana hatlarını çizmek, mevcut durumu, kaynakları ve olası engelleri dikkate almakla ilgilidir.

Planlamanın Unsurları

Örnek: Seyahat Acentesi’nin kullanıcıya seyahatini etkili bir şekilde planlamasında yardımcı olmak için atması gereken adımlar şunlardır:

Seyahat Acentesi İçin Adımlar

  1. Kullanıcı Tercihlerini Toplama
    • Kullanıcıdan seyahat tarihleri, bütçe, ilgi alanları ve özel gereksinimler hakkında bilgi isteyin.
    • Örnekler: “Seyahatinizi ne zaman planlıyorsunuz?” “Bütçe aralığınız nedir?” “Tatilde hangi aktiviteleri seviyorsunuz?”
  2. Bilgi Toplama
    • Kullanıcı tercihleri doğrultusunda ilgili seyahat seçeneklerini araştırın.
    • Uçuşlar: Kullanıcının bütçesi ve tercih ettiği seyahat tarihlerine uygun mevcut uçuşları araştırın.
    • Konaklamalar: Kullanıcının tercihleri doğrultusunda konum, fiyat ve olanaklar açısından uygun otel veya kiralık mülkleri bulun.
    • Gezilecek Yerler ve Restoranlar: Kullanıcının ilgi alanlarına uygun popüler gezilecek yerleri, aktiviteleri ve yemek seçeneklerini belirleyin.
  3. Öneriler Oluşturma
    • Toplanan bilgileri kişiselleştirilmiş bir seyahat planına dönüştürün.
    • Uçuş seçenekleri, otel rezervasyonları ve önerilen aktiviteler gibi detayları kullanıcı tercihlerine uygun olarak sunun.
  4. Seyahat Planını Kullanıcıya Sunma
    • Önerilen seyahat planını kullanıcının incelemesi için paylaşın.
    • Örnek: “İşte Paris seyahatiniz için önerilen seyahat planı. Uçuş detayları, otel rezervasyonları ve önerilen aktiviteler ile restoranların listesi dahil. Düşüncelerinizi benimle paylaşın!”
  5. Geri Bildirim Toplama
    • Kullanıcıdan önerilen seyahat planı hakkında geri bildirim isteyin.
    • Örnekler: “Uçuş seçeneklerini beğendiniz mi?” “Otel ihtiyaçlarınıza uygun mu?” “Eklemek veya çıkarmak istediğiniz aktiviteler var mı?”
  6. Geri Bildirime Göre Düzenleme
    • Seyahat planını kullanıcının geri bildirimine göre düzenleyin.
    • Kullanıcının tercihleriyle daha iyi eşleşmesi için uçuş, konaklama ve aktivite önerilerinde gerekli değişiklikleri yapın.
  7. Nihai Onay
    • Güncellenen seyahat planını kullanıcının nihai onayı için sunun.
    • Örnek: “Geri bildiriminiz doğrultusunda düzenlemeleri yaptım. İşte güncellenmiş seyahat planı. Her şey sizin için uygun mu?”
  8. Rezervasyonları Yapma ve Onaylama
    • Kullanıcı seyahat planını onayladıktan sonra uçuşları, konaklamaları ve önceden planlanmış aktiviteleri rezerve edin.
    • Onay detaylarını kullanıcıya gönderin.
  9. Sürekli Destek Sağlama
    • Seyahat öncesinde ve sırasında kullanıcıya herhangi bir değişiklik veya ekstra talepte yardımcı olmak için ulaşılabilir olun.
    • Örnek: “Seyahatiniz sırasında herhangi bir ekstra yardım ihtiyacınız olursa, istediğiniz zaman bana ulaşabilirsiniz!”

Örnek Etkileşim

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# Bir booing isteği içinde örnek kullanım
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

3. Düzeltici RAG Sistemi

Öncelikle, RAG Aracı ile Önleyici Bağlam Yükleme arasındaki farkı anlamaya başlayalım.

RAG vs Context Loading

Retrieval-Augmented Generation (RAG)

RAG, bir geri getirme sistemi ile üretken modeli birleştirir. Sorgu yapıldığında, geri getirme sistemi harici bir kaynaktan ilgili belgeleri veya verileri getirir ve bu alınan bilgi üretken modele verilen girdiyi zenginleştirmek için kullanılır. Bu, modelin daha doğru ve bağlama uygun yanıtlar üretmesine yardımcı olur.

Bir RAG sisteminde, ajan bilgi tabanından ilgili bilgileri alır ve uygun yanıtlar veya eylemler üretmek için kullanır.

Düzeltici RAG Yaklaşımı

Düzeltici RAG yaklaşımı, AI ajanlarının doğruluğunu artırmak ve hataları düzeltmek için RAG tekniklerini kullanmaya odaklanır. Bu şunları içerir:

  1. Yönlendirme Tekniği: Ajanı ilgili bilgileri geri getirmesi için yönlendiren özel istemler kullanma.
  2. Araç: Geri getirilen bilgilerin alaka düzeyini değerlendiren ve doğru yanıtlar üreten algoritmalar ve mekanizmalar uygulama.
  3. Değerlendirme: Ajanın performansını sürekli değerlendirme ve doğruluğunu ve verimliliğini artırmak için ayarlamalar yapma.

Örnek: Arama Ajanında Düzeltici RAG

Web’den bilgi alan bir arama ajanını düşünelim. Düzeltici RAG yaklaşımı şunları içerebilir:

  1. Yönlendirme Tekniği: Kullanıcının girdisine dayalı arama sorguları oluşturma.
  2. Araç: Doğal dil işleme ve makine öğrenmesi algoritmaları kullanarak arama sonuçlarını sıralama ve filtreleme.
  3. Değerlendirme: Kullanıcı geri bildirimlerini analiz ederek geri getirilen bilgilerin doğruluğunu ve kesinliğini belirleme ve düzeltme.

Seyahat Acentesinde Düzeltici RAG

Düzeltici RAG (Retrieval-Augmented Generation), yapay zekanın bilgiyi geri getirme ve üretme yeteneğini geliştirirken yanlışlıkları düzeltmesini sağlar. Seyahat Acentesi’nin daha doğru ve alakalı seyahat önerileri sunmak için Düzeltici RAG yaklaşımını nasıl kullanabileceğine bakalım.

Bu şunları içerir:

Seyahat Acentesinde Düzeltici RAG Uygulama Adımları

  1. İlk Kullanıcı Etkileşimi
    • Seyahat Acentesi, kullanıcıdan hedef, seyahat tarihleri, bütçe ve ilgi alanları gibi başlangıç tercihlerini toplar.
    • Örnek:

      preferences = {
          "destination": "Paris",
          "dates": "2025-04-01 to 2025-04-10",
          "budget": "moderate",
          "interests": ["museums", "cuisine"]
      }
      
  2. Bilgi Alma
    • Seyahat Acentesi, kullanıcı tercihleri doğrultusunda uçuşlar, konaklamalar, gezilecek yerler ve restoranlar hakkında bilgi toplar.
    • Örnek:

      flights = search_flights(preferences)
      hotels = search_hotels(preferences)
      attractions = search_attractions(preferences)
      
  3. İlk Önerilerin Oluşturulması
    • Seyahat Acentesi, toplanan bilgileri kullanarak kişiselleştirilmiş seyahat planı oluşturur.
    • Örnek:

      itinerary = create_itinerary(flights, hotels, attractions)
      print("Suggested Itinerary:", itinerary)
      
  4. Kullanıcı Geri Bildirimi Toplama
    • Seyahat Acentesi, ilk öneriler hakkında kullanıcıdan geri bildirim ister.
    • Örnek:

      feedback = {
          "liked": ["Louvre Museum"],
          "disliked": ["Eiffel Tower (too crowded)"]
      }
      
  5. Düzeltici RAG Süreci
    • Yönlendirme Tekniği: Seyahat Acentesi, kullanıcı geri bildirimine göre yeni arama sorguları oluşturur.
      • Örnek:

        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        
    • Araç: Seyahat Acentesi, kullanıcı geri bildirimine göre yeni arama sonuçlarını sıralamak ve filtrelemek için algoritmalar kullanır.
      • Örnek:

        new_attractions = search_attractions(preferences)
        new_itinerary = create_itinerary(flights, hotels, new_attractions)
        print("Updated Itinerary:", new_itinerary)
        
    • Değerlendirme: Seyahat Acentesi, kullanıcı geri bildirimlerini analiz ederek önerilerinin alaka düzeyini ve doğruluğunu sürekli değerlendirir ve gerekli ayarlamaları yapar.
      • Örnek:

        def adjust_preferences(preferences, feedback):
            if "liked" in feedback:
                preferences["favorites"] = feedback["liked"]
            if "disliked" in feedback:
                preferences["avoid"] = feedback["disliked"]
            return preferences
        
        preferences = adjust_preferences(preferences, feedback)
        

Pratik Örnek

İşte Seyahat Acentesi’nde Düzeltici RAG yaklaşımını içeren basitleştirilmiş bir Python kod örneği:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)
        new_itinerary = self.generate_recommendations()
        return new_itinerary

# Örnek kullanım
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)

Önleyici Bağlam Yükleme

Önceden Bağlam Yükleme, bir sorguyu işlemeye başlamadan önce modele ilgili bağlamın veya arka plan bilgisinin yüklenmesini içerir. Bu, modelin bu bilgilere baştan erişimi olduğu anlamına gelir ve işlem sırasında ek veri getirmeye gerek kalmadan daha bilgili yanıtlar oluşturmasına yardımcı olabilir.

İşte bir seyahat acentesi uygulaması için önceden bağlam yüklemenin Python’da nasıl görünebileceğine dair basitleştirilmiş bir örnek:

class TravelAgent:
    def __init__(self):
        # Popüler destinasyonları ve bilgilerini önceden yükle
        self.context = {
            "Paris": {"country": "France", "currency": "Euro", "language": "French", "attractions": ["Eiffel Tower", "Louvre Museum"]},
            "Tokyo": {"country": "Japan", "currency": "Yen", "language": "Japanese", "attractions": ["Tokyo Tower", "Shibuya Crossing"]},
            "New York": {"country": "USA", "currency": "Dollar", "language": "English", "attractions": ["Statue of Liberty", "Times Square"]},
            "Sydney": {"country": "Australia", "currency": "Dollar", "language": "English", "attractions": ["Sydney Opera House", "Bondi Beach"]}
        }

    def get_destination_info(self, destination):
        # Önceden yüklenmiş bağlamdan destinasyon bilgilerini al
        info = self.context.get(destination)
        if info:
            return f"{destination}:\nCountry: {info['country']}\nCurrency: {info['currency']}\nLanguage: {info['language']}\nAttractions: {', '.join(info['attractions'])}"
        else:
            return f"Sorry, we don't have information on {destination}."

# Örnek kullanım
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))

Açıklama

  1. Başlatma (__init__ yöntemi): TravelAgent sınıfı, Paris, Tokyo, New York ve Sidney gibi popüler destinasyonlara ait bilgileri içeren bir sözlüğü önceden yükler. Bu sözlük, her destinasyon için ülke, para birimi, dil ve başlıca turistik yerler gibi detayları içerir.

  2. Bilgi Erişimi (get_destination_info yöntemi): Kullanıcı belirli bir destinasyon hakkında sorgulama yaptığında, get_destination_info yöntemi, önceden yüklenmiş bağlam sözlüğünden ilgili bilgileri getirir.

Bağlamı önceden yükleyerek, seyahat acentesi uygulaması, bu bilgileri gerçek zamanlı olarak dış bir kaynaktan çekmek zorunda kalmadan hızlı yanıt verebilir. Bu da uygulamayı daha verimli ve yanıtlı hale getirir.

Bir Amacı Olan Planı Döngüye Almadan Önce Başlatmak

Bir planı bir amaçla başlatmak, açık bir hedef veya istenen sonuçla başlamayı içerir. Bu amaç önden tanımlandığında, model bunu yinelemeli süreç boyunca rehber prensip olarak kullanabilir. Bu, her yinelemenin istenen sonuca daha yakın olmasını sağlayarak süreci daha verimli ve odaklı kılar.

İşte bir seyahat acentesi için bir planı bir amaçla başlatıp sonra yinelemek için Python’da nasıl yapılacağına dair bir örnek:

Senaryo

Bir seyahat acentesi, bir müşteri için kişiselleştirilmiş bir tatil planlamak istiyor. Amaç, müşterinin tercihleri ve bütçesine göre tatminini maksimize eden bir seyahat programı oluşturmaktır.

Adımlar

  1. Müşterinin tercihlerini ve bütçesini tanımlayın.
  2. Bu tercihlere dayanarak başlangıç planını başlatın.
  3. Müşterinin tatminini optimize etmek için planı yineleyerek iyileştirin.

Python Kodu

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def bootstrap_plan(self, preferences, budget):
        plan = []
        total_cost = 0

        for destination in self.destinations:
            if total_cost + destination['cost'] <= budget and self.match_preferences(destination, preferences):
                plan.append(destination)
                total_cost += destination['cost']

        return plan

    def match_preferences(self, destination, preferences):
        for key, value in preferences.items():
            if destination.get(key) != value:
                return False
        return True

    def iterate_plan(self, plan, preferences, budget):
        for i in range(len(plan)):
            for destination in self.destinations:
                if destination not in plan and self.match_preferences(destination, preferences) and self.calculate_cost(plan, destination) <= budget:
                    plan[i] = destination
                    break
        return plan

    def calculate_cost(self, plan, new_destination):
        return sum(destination['cost'] for destination in plan) + new_destination['cost']

# Örnek kullanım
destinations = [
    {"name": "Paris", "cost": 1000, "activity": "sightseeing"},
    {"name": "Tokyo", "cost": 1200, "activity": "shopping"},
    {"name": "New York", "cost": 900, "activity": "sightseeing"},
    {"name": "Sydney", "cost": 1100, "activity": "beach"},
]

preferences = {"activity": "sightseeing"}
budget = 2000

travel_agent = TravelAgent(destinations)
initial_plan = travel_agent.bootstrap_plan(preferences, budget)
print("Initial Plan:", initial_plan)

refined_plan = travel_agent.iterate_plan(initial_plan, preferences, budget)
print("Refined Plan:", refined_plan)

Kod Açıklaması

  1. Başlatma (__init__ yöntemi): TravelAgent sınıfı, adı, maliyeti ve aktivite türü gibi özellikleri olan potansiyel destinasyonların bir listesi ile başlatılır.

  2. Planı Başlatma (bootstrap_plan yöntemi): Bu yöntem, müşterinin tercihleri ve bütçesine dayanarak başlangıç seyahat planını oluşturur. Destinasyon listesinden geçerek, müşterinin tercihlerine uyan ve bütçe dahilinde olanları plana ekler.

  3. Tercihleri Eşleştirme (match_preferences yöntemi): Bu yöntem, bir destinasyonun müşterinin tercihleriyle uyup uymadığını kontrol eder.

  4. Planı Yineleme (iterate_plan yöntemi): Bu yöntem, planın her destinasyonunu müşterinin tercihleri ve bütçe kısıtlamaları göz önünde bulundurularak daha iyi bir eşleşme ile değiştirmeyi deneyerek planı iyileştirir.

  5. Maliyet Hesaplama (calculate_cost yöntemi): Bu yöntem, mevcut planın toplam maliyetini ve olası yeni bir destinasyonun maliyetini hesaplar.

Örnek Kullanım

Planı açık bir amaçla başlatıp (örneğin müşteri tatminini maksimize etmek) ve planı iyileştirmek için yineleyerek, seyahat acentesi müşteriye kişiselleştirilmiş ve optimize edilmiş bir seyahat programı oluşturabilir. Bu yaklaşım, seyahat planının baştan itibaren müşterinin tercihleri ve bütçesi ile uyumlu olmasını sağlar ve her yinelemede gelişir.

Yeniden Sıralama ve Puanlama için LLM’den Yararlanma

Büyük Dil Modelleri (LLM’ler), alınan belgelerin veya oluşturulan yanıtların alaka ve kalitesini değerlendirerek yeniden sıralama ve puanlama için kullanılabilir. İşleyiş şekli şöyledir:

Getirme: İlk getirme adımı, sorguya dayanan aday belgeler veya yanıtlar setini alır.

Yeniden Sıralama: LLM, bu adayları değerlendirir ve alaka ve kaliteye göre yeniden sıralar. Bu adım en alakalı ve kaliteli bilgilerin önce sunulmasını sağlar.

Puanlama: LLM, her aday için alaka ve kaliteyi yansıtan puanlar verir. Bu, kullanıcı için en iyi yanıt veya belgeyi seçmeye yardımcı olur.

LLM’lerden yararlanarak, sistem daha doğru ve bağlamsal olarak alakalı bilgi sunabilir, böylece genel kullanıcı deneyimini artırır.

İşte bir seyahat acentesinin kullanıcı tercihleri temelinde seyahat destinasyonlarını yeniden sıralama ve puanlama için Büyük Dil Modeli (LLM) kullanmasına dair bir Python örneği:

Senaryo - Tercihlere Dayalı Seyahat

Bir seyahat acentesi, müşterinin tercihleri temelinde en iyi seyahat destinasyonlarını önermek istiyor. LLM, destinasyonları yeniden sıralayıp puanlayarak en alakalı seçeneklerin sunulmasını sağlar.

Adımlar:

  1. Kullanıcı tercihlerini toplayın.
  2. Potansiyel seyahat destinasyonlarının bir listesini alın.
  3. Kullanıcı tercihleri temelinde destinasyonları yeniden sıralayıp puanlamak için LLM’yi kullanın.

İşte önceki örneği Azure OpenAI Hizmetleri ile güncelleme yolu:

Gereksinimler

  1. Bir Azure aboneliğine sahip olmalısınız.
  2. Azure OpenAI kaynağı oluşturun ve API anahtarınızı alın.

Örnek Python Kodu

import requests
import json

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def get_recommendations(self, preferences, api_key, endpoint):
        # Azure OpenAI için bir istem oluştur
        prompt = self.generate_prompt(preferences)
        
        # İstek için başlıkları ve yükü tanımla
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {api_key}'
        }
        payload = {
            "prompt": prompt,
            "max_tokens": 150,
            "temperature": 0.7
        }
        
        # Yeniden sıralanmış ve puanlanmış destinasyonları almak için Azure OpenAI API'sini çağır
        response = requests.post(endpoint, headers=headers, json=payload)
        response_data = response.json()
        
        # Önerileri çıkar ve döndür
        recommendations = response_data['choices'][0]['text'].strip().split('\n')
        return recommendations

    def generate_prompt(self, preferences):
        prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
        for key, value in preferences.items():
            prompt += f"{key}: {value}\n"
        prompt += "\nDestinations:\n"
        for destination in self.destinations:
            prompt += f"- {destination['name']}: {destination['description']}\n"
        return prompt

# Örnek kullanım
destinations = [
    {"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
    {"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
    {"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
    {"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]

preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'

travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
    print(rec)

Kod Açıklaması - Tercih Rezervasyonu

  1. Başlatma: TravelAgent sınıfı, adı ve açıklaması gibi özelliklere sahip potansiyel seyahat destinasyonlarının bir listesi ile başlatılır.

  2. Öneri Alma (get_recommendations yöntemi): Bu yöntem, kullanıcı tercihlerine dayalı olarak Azure OpenAI servisi için bir prompt oluşturur ve yeniden sıralanmış ve puanlanmış destinasyonları almak için Azure OpenAI API’ye HTTP POST isteği yapar.

  3. Prompt Oluşturma (generate_prompt yöntemi): Bu yöntem, Azure OpenAI için kullanıcı tercihleri ve destinasyon listesini içeren bir prompt oluşturur. Prompt, modele verilen tercihlere göre destinasyonları yeniden sıralayıp puanlama talimatı verir.

  4. API Çağrısı: requests kütüphanesi, Azure OpenAI API uç noktasına HTTP POST isteği yapmak için kullanılır. Yanıt, yeniden sıralanmış ve puanlanmış destinasyonları içerir.

  5. Örnek Kullanım: Seyahat acentesi, kullanıcı tercihlerini (örneğin şehir gezisi ve çeşitli kültür ilgisi) toplar ve Azure OpenAI servisini kullanarak seyahat destinasyonları için yeniden sıralanmış ve puanlanmış öneriler alır.

your_azure_openai_api_key yerini gerçek Azure OpenAI API anahtarınızla ve https://your-endpoint.com/... adresini Azure OpenAI dağıtımınızın gerçek uç nokta URL’si ile değiştirmeyi unutmayın.

LLM’den yeniden sıralama ve puanlama için yararlanarak, seyahat acentesi müşterilerine daha kişiselleştirilmiş ve alakalı seyahat önerileri sunarak genel deneyimlerini iyileştirebilir.

RAG: Prompt Tekniği vs Araç

Getirme Destekli Üretim (RAG), AI ajanları geliştirmede hem bir prompt tekniği hem de bir araç olabilir. İkisi arasındaki farkı anlamak, RAG’i projelerinizde daha etkili kullanmanızı sağlar.

Prompt Tekniği Olarak RAG

Nedir?

Nasıl çalışır:

  1. Promptlar Oluşturma: Görev veya kullanıcının girdisine göre iyi yapılandırılmış promptlar veya sorgular oluşturun.
  2. Bilgi Getirme: Promptları kullanarak mevcut bir bilgi tabanı veya veri setinden ilgili verileri arayın.
  3. Yanıt Üretme: Getirilen bilgiyi üretken AI modelleri ile birleştirip kapsamlı ve tutarlı bir yanıt oluşturun.

Seyahat Acentesi Örneği:

Araç Olarak RAG

Nedir?

Nasıl çalışır:

  1. Entegrasyon: RAG, AI ajanının mimarisi içine gömülür, böylece getirme ve üretim görevlerini otomatik olarak yönetir.
  2. Otomasyon: Araç, kullanıcı girdisini alıp nihai yanıtı üretmek için tüm süreci, her adımda açık prompt gerektirmeden yönetir.
  3. Verimlilik: Getirme ve üretim sürecini hızlandırır ve iyileştirir, böylelikle ajan daha hızlı ve daha doğru yanıtlar sunar.

Seyahat Acentesi Örneği:

Karşılaştırma

Özellik Prompt Tekniği Araç
Manuel vs Otomatik Her sorgu için manuel prompt oluşturma. Getirme ve üretim için otomatik süreç.
Kontrol Getirme süreci üzerinde daha fazla kontrol sağlar. Getirme ve üretimi otomatikleştirir ve düzenler.
Esneklik Belirli ihtiyaçlara göre özelleştirilmiş promptlara izin verir. Büyük ölçekli uygulamalar için daha verimli.
Karmaşıklık Promptların oluşturulması ve ayarlanması gerekir. AI ajan mimarisine kolay entegrasyon.

Pratik Örnekler

Prompt Tekniği Örneği:

def search_museums_in_paris():
    prompt = "Find top museums in Paris"
    search_results = search_web(prompt)
    return search_results

museums = search_museums_in_paris()
print("Top Museums in Paris:", museums)

Araç Örneği:

class Travel_Agent:
    def __init__(self):
        self.rag_tool = RAGTool()

    def get_museums_in_paris(self):
        user_input = "I want to visit museums in Paris."
        response = self.rag_tool.retrieve_and_generate(user_input)
        return response

travel_agent = Travel_Agent()
museums = travel_agent.get_museums_in_paris()
print("Top Museums in Paris:", museums)

Alaka Değerlendirmesi

Alaka değerlendirmesi, AI ajan performansının kritik bir yönüdür. Bu, ajan tarafından getirilen ve oluşturulan bilgilerin kullanıcı için uygun, doğru ve faydalı olmasını sağlar. AI ajanlarda alakayı değerlendirmek için pratik örnekleri ve teknikleri inceleyelim.

Alaka Değerlendirmede Ana Kavramlar

  1. Bağlam Farkındalığı:
    • Ajan, kullanıcının sorgusunun bağlamını anlamalı ve ilgili bilgileri getirmeli ve üretmelidir.
    • Örnek: Kullanıcı “Paris’teki en iyi restoranlar” dediğinde, ajanın kullanıcı tercihlerine (mutfak türü, bütçe vb.) dikkat etmesi gerekir.
  2. Doğruluk:
    • Ajanın sağladığı bilgi doğru ve güncel olmalıdır.
    • Örnek: Mevcut açık olan ve iyi yorumları olan restoranları önerip eski veya kapalı mekanları önermemek.
  3. Kullanıcı Niyeti:
    • Ajan, kullanıcının sorgusunun arkasındaki niyeti çıkararak en alakalı bilgiyi sunmalıdır.
    • Örnek: Kullanıcı “bütçe dostu oteller” dediğinde ajanın uygun fiyatlı seçenekleri önceliklendirmesi.
  4. Geri Bildirim Döngüsü:
    • Sürekli kullanıcı geri bildirimlerini toplamak ve analiz etmek ajanın alaka değerlendirmesini geliştirmesine yardımcı olur.
    • Örnek: Önceki önerilere verilen kullanıcı puanlarını ve geri bildirimlerini dahil ederek gelecekteki yanıtları iyileştirmek.

Alaka Değerlendirme İçin Pratik Teknikler

  1. Alaka Puanlama:
    • Getirilen her öğeye kullanıcının sorgusu ve tercihlerine uygunluk derecesine göre bir alaka puanı verin.
    • Örnek:

      def relevance_score(item, query):
          score = 0
          if item['category'] in query['interests']:
              score += 1
          if item['price'] <= query['budget']:
              score += 1
          if item['location'] == query['destination']:
              score += 1
          return score
      
  2. Filtreleme ve Sıralama:
    • İlgisiz öğeleri süzün ve kalanları alaka puanlarına göre sıralayın.
    • Örnek:

      def filter_and_rank(items, query):
          ranked_items = sorted(items, key=lambda item: relevance_score(item, query), reverse=True)
          return ranked_items[:10]  # En alakalı ilk 10 öğeyi döndür
      
  3. Doğal Dil İşleme (NLP):
    • Kullanıcının sorgusunu anlamak ve ilgili bilgi getirmek için NLP tekniklerini kullanın.
    • Örnek:

      def process_query(query):
          # Kullanıcının sorgusundan anahtar bilgileri çıkarmak için NLP kullanın
          processed_query = nlp(query)
          return processed_query
      
  4. Kullanıcı Geri Bildirim Entegrasyonu:
    • Sağlanan öneriler hakkındaki kullanıcı geri bildirimini toplayın ve gelecekteki alaka değerlendirmelerini ayarlamak için kullanın.
    • Örnek:

      def adjust_based_on_feedback(feedback, items):
          for item in items:
              if item['name'] in feedback['liked']:
                  item['relevance'] += 1
              if item['name'] in feedback['disliked']:
                  item['relevance'] -= 1
          return items
      

Örnek: Seyahat Acentesinde Alaka Değerlendirmesi

İşte Travel Agent’ın seyahat önerilerinin alakasını nasıl değerlendirebileceğine dair pratik bir örnek:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        ranked_hotels = self.filter_and_rank(hotels, self.user_preferences)
        itinerary = create_itinerary(flights, ranked_hotels, attractions)
        return itinerary

    def filter_and_rank(self, items, query):
        ranked_items = sorted(items, key=lambda item: self.relevance_score(item, query), reverse=True)
        return ranked_items[:10]  # En alakalı ilk 10 öğeyi döndür

    def relevance_score(self, item, query):
        score = 0
        if item['category'] in query['interests']:
            score += 1
        if item['price'] <= query['budget']:
            score += 1
        if item['location'] == query['destination']:
            score += 1
        return score

    def adjust_based_on_feedback(self, feedback, items):
        for item in items:
            if item['name'] in feedback['liked']:
                item['relevance'] += 1
            if item['name'] in feedback['disliked']:
                item['relevance'] -= 1
        return items

# Örnek kullanım
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_items = travel_agent.adjust_based_on_feedback(feedback, itinerary['hotels'])
print("Updated Itinerary with Feedback:", updated_items)

Niyetle Arama

Niyetle arama, kullanıcının sorgusunun altında yatan amaç veya hedefi anlamak ve yorumlamak suretiyle en alakalı ve faydalı bilgiyi getirmeyi ve oluşturmayı içerir. Bu yaklaşım, sadece anahtar kelimeleri eşlemenin ötesine geçer ve kullanıcının gerçek ihtiyaçlarını ve bağlamını kavramaya odaklanır.

Niyetle Aramada Ana Kavramlar

  1. Kullanıcı Niyetini Anlama:
    • Kullanıcı niyeti üç ana türe ayrılabilir: bilgi edinme, gezinme ve işlem.
      • Bilgi Edinme Niyeti: Kullanıcı bir konu hakkında bilgi arıyor (örn. “Paris’teki en iyi müzeler nelerdir?”).
      • Gezinme Niyeti: Kullanıcı belirli bir site veya sayfaya gitmek istiyor (örn. “Louvre Müzesi resmi sitesi”).
      • İşlem Niyeti: Kullanıcı bir işlem yapmak istiyor, örneğin uçak bileti rezervasyonu veya satın alma (örn. “Paris için uçak bileti rezervasyonu yap”).
  2. Bağlam Farkındalığı:
    • Kullanıcının önceki etkileşimleri, tercihleri ve mevcut sorgunun özel detayları dikkate alınarak bağlam analiz edilir ve niyet doğru tespit edilir.
  3. Doğal Dil İşleme (NLP):
    • Kullanıcıların verdiği doğal dil sorgularını anlamak ve yorumlamak için NLP teknikleri kullanılır. Bu, varlık tanıma, duygu analizi ve sorgu çözümleme gibi görevleri içerir.
  4. Kişiselleştirme:
    • Kullanıcının geçmişi, tercihleri ve geri bildirimlerine dayanarak arama sonuçlarının kişiselleştirilmesi, getirilen bilginin alakasını artırır.

Pratik Örnek: Seyahat Acentede Niyetle Arama

Seyahat Acenti örneğine bakalım ve niyetle aramanın nasıl uygulanabileceğini gösterelim.

  1. Kullanıcı Tercihlerini Toplama

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Kullanıcı Niyetini Anlama

    def identify_intent(query):
        if "book" in query or "purchase" in query:
            return "transactional"
        elif "website" in query or "official" in query:
            return "navigational"
        else:
            return "informational"
    
  3. Bağlam Farkındalığı

    def analyze_context(query, user_history):
        # Bağlamı anlamak için mevcut sorguyu kullanıcı geçmişi ile birleştir
        context = {
            "current_query": query,
            "user_history": user_history
        }
        return context
    
  4. Arama ve Sonuçları Kişiselleştirme

    def search_with_intent(query, preferences, user_history):
        intent = identify_intent(query)
        context = analyze_context(query, user_history)
        if intent == "informational":
            search_results = search_information(query, preferences)
        elif intent == "navigational":
            search_results = search_navigation(query)
        elif intent == "transactional":
            search_results = search_transaction(query, preferences)
        personalized_results = personalize_results(search_results, user_history)
        return personalized_results
    
    def search_information(query, preferences):
        # Bilgi amaçlı niyet için örnek arama mantığı
        results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
        return results
    
    def search_navigation(query):
        # Navigasyon amaçlı niyet için örnek arama mantığı
        results = search_web(query)
        return results
    
    def search_transaction(query, preferences):
        # İşlemsel niyet için örnek arama mantığı
        results = search_web(f"book {query} to {preferences['destination']}")
        return results
    
    def personalize_results(results, user_history):
        # Örnek kişiselleştirme mantığı
        personalized = [result for result in results if result not in user_history]
        return personalized[:10]  # En iyi 10 kişiselleştirilmiş sonucu döndür
    
  5. Örnek Kullanım

    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    user_history = ["Louvre Museum website", "Book flight to Paris"]
    query = "best museums in Paris"
    results = search_with_intent(query, preferences, user_history)
    print("Search Results:", results)
    

4. Araç Olarak Kod Üretme

Kod üreten ajanlar, karmaşık problemleri çözen ve görevleri otomatikleştiren kod yazmak ve yürütmek için yapay zeka modelleri kullanır.

Kod Üreten Ajanlar

Kod üreten ajanlar, kod yazmak ve yürütmek için üretken yapay zeka modelleri kullanır. Bu ajanlar, çeşitli programlama dillerinde kod üreterek ve çalıştırarak karmaşık problemleri çözebilir, görevleri otomatikleştirebilir ve değerli içgörüler sağlayabilir.

Pratik Uygulamalar

  1. Otomatik Kod Üretimi: Veri analizi, web kazıma veya makine öğrenimi gibi belirli görevler için kod parçacıkları üretmek.
  2. RAG Olarak SQL: Veritabanlarından veri almak ve manipüle etmek için SQL sorguları kullanmak.
  3. Problem Çözme: Algoritmaları optimize etmek veya veri analiz etmek gibi belirli problemleri çözmek için kod oluşturup çalıştırmak.

Örnek: Veri Analizi için Kod Üreten Ajan

Bir kod üreten ajan tasarladığınızı düşünün. İşte nasıl çalışabileceği:

  1. Görev: Verisetini analiz ederek eğilimleri ve desenleri belirlemek.
  2. Adımlar:
    • Verisetini bir veri analiz aracına yükle.
    • Veriyi filtrelemek ve toplamak için SQL sorguları oluştur.
    • Sorguları çalıştır ve sonuçları al.
    • Sonuçları kullanarak görselleştirmeler ve içgörüler oluştur.
  3. Gerekli Kaynaklar: Verisetine erişim, veri analiz araçları ve SQL yetenekleri.
  4. Deneyim: Geçmiş analiz sonuçlarını kullanarak gelecekteki analizlerin doğruluğunu ve ilgililiğini artır.

Örnek: Seyahat Acentası için Kod Üreten Ajan

Bu örnekte, seyahat planlama için yardımcı olacak ve kodu üreterek çalıştıracak bir kod üreten ajan, Seyahat Acentası tasarlayacağız. Bu ajan, seyahat seçeneklerini getirme, sonuçları filtreleme ve üretken yapay zeka ile bir güzergah derleme gibi görevleri yapabilir.

Kod Üreten Ajanın Genel Bakışı

  1. Kullanıcı Tercihlerini Toplama: Varış noktası, seyahat tarihleri, bütçe ve ilgi alanları gibi kullanıcı girdilerini toplar.
  2. Veri Getirmek için Kod Oluşturma: Uçuşlar, oteller ve gezilecek yerler hakkında veri getirmek için kod parçacıkları oluşturur.
  3. Oluşturulan Kodu Çalıştırma: Gerçek zamanlı bilgi getirmek için kodu çalıştırır.
  4. Güzergah Oluşturma: Getirilen verilerden kişiselleştirilmiş bir seyahat planı oluşturur.
  5. Geri Bildirime Göre Ayarlama: Kullanıcı geri bildirimi alır ve gerekirse sonuçları iyileştirmek için kodu yeniden oluşturur.

Adım Adım Uygulama

  1. Kullanıcı Tercihlerini Toplama

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Veri Getirmek için Kod Üretme

    def generate_code_to_fetch_data(preferences):
        # Örnek: Kullanıcı tercihlerine göre uçuşları aramak için kod oluştur
        code = f"""
        def search_flights():
            import requests
            response = requests.get('https://api.example.com/flights', params={preferences})
            return response.json()
        """
        return code
    
    def generate_code_to_fetch_hotels(preferences):
        # Örnek: Otelleri aramak için kod oluştur
        code = f"""
        def search_hotels():
            import requests
            response = requests.get('https://api.example.com/hotels', params={preferences})
            return response.json()
        """
        return code
    
  3. Oluşturulan Kodu Çalıştırma

    def execute_code(code):
        # Üretilen kodu exec kullanarak çalıştırın
        exec(code)
        result = locals()
        return result
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
       
    flight_code = generate_code_to_fetch_data(preferences)
    hotel_code = generate_code_to_fetch_hotels(preferences)
       
    flights = execute_code(flight_code)
    hotels = execute_code(hotel_code)
    
    print("Flight Options:", flights)
    print("Hotel Options:", hotels)
    
  4. Güzergah Oluşturma

    def generate_itinerary(flights, hotels, attractions):
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    attractions = search_attractions(preferences)
    itinerary = generate_itinerary(flights, hotels, attractions)
    print("Suggested Itinerary:", itinerary)
    
  5. Geri Bildirime Göre Ayarlama

    def adjust_based_on_feedback(feedback, preferences):
        # Kullanıcı geri bildirimlerine göre tercihleri ayarla
        if "liked" in feedback:
            preferences["favorites"] = feedback["liked"]
        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        return preferences
    
    feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
    updated_preferences = adjust_based_on_feedback(feedback, preferences)
       
    # Güncellenmiş tercihlerle kodu yeniden oluştur ve çalıştır
    updated_flight_code = generate_code_to_fetch_data(updated_preferences)
    updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)
       
    updated_flights = execute_code(updated_flight_code)
    updated_hotels = execute_code(updated_hotel_code)
       
    updated_itinerary = generate_itinerary(updated_flights, updated_hotels, attractions)
    print("Updated Itinerary:", updated_itinerary)
    

Çevresel farkındalık ve akıl yürütmeden yararlanma

Tablo şemasına dayalı olarak sorgu oluşturma süreci, çevresel farkındalık ve akıl yürütmeden yararlanarak geliştirilebilir.

İşte bunun nasıl yapılabileceğine dair bir örnek:

  1. Şemayı Anlama: Sistem, tablonun şemasını anlayacak ve bu bilgiyi sorgu üretimini temellendirmek için kullanacak.
  2. Geri Bildirime Göre Ayarlama: Sistem, kullanıcı tercihlerine göre geri bildirimi değerlendirir ve şemada hangi alanların güncellenmesi gerektiği konusunda akıl yürütecek.
  3. Sorgu Üretimi ve Çalıştırma: Sistem, yeni tercihlere göre güncel uçuş ve otel verilerini getirmek için sorgular oluşturup çalıştıracak.

İşte bu kavramları içeren güncellenmiş bir Python kod örneği:

def adjust_based_on_feedback(feedback, preferences, schema):
    # Kullanıcı geri bildirimlerine göre tercihleri ayarla
    if "liked" in feedback:
        preferences["favorites"] = feedback["liked"]
    if "disliked" in feedback:
        preferences["avoid"] = feedback["disliked"]
    # Diğer ilgili tercihleri ayarlamak için şemaya dayalı muhakeme
    for field in schema:
        if field in preferences:
            preferences[field] = adjust_based_on_environment(feedback, field, schema)
    return preferences

def adjust_based_on_environment(feedback, field, schema):
    # Şema ve geri bildirime göre tercihleri ayarlamak için özel mantık
    if field in feedback["liked"]:
        return schema[field]["positive_adjustment"]
    elif field in feedback["disliked"]:
        return schema[field]["negative_adjustment"]
    return schema[field]["default"]

def generate_code_to_fetch_data(preferences):
    # Güncellenen tercihlere göre uçuş verilerini getiren kodu oluştur
    return f"fetch_flights(preferences={preferences})"

def generate_code_to_fetch_hotels(preferences):
    # Güncellenen tercihlere göre otel verilerini getiren kodu oluştur
    return f"fetch_hotels(preferences={preferences})"

def execute_code(code):
    # Kodun yürütülmesini simüle et ve sahte veri döndür
    return {"data": f"Executed: {code}"}

def generate_itinerary(flights, hotels, attractions):
    # Uçuşlar, oteller ve gezilecek yerler temelinde gezi programı oluştur
    return {"flights": flights, "hotels": hotels, "attractions": attractions}

# Örnek şema
schema = {
    "favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
    "avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}

# Örnek kullanım
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)

# Güncellenen tercihlerle kodu yeniden oluştur ve çalıştır
updated_flight_code = generate_code_to_fetch_data(updated_preferences)
updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)

updated_flights = execute_code(updated_flight_code)
updated_hotels = execute_code(updated_hotel_code)

updated_itinerary = generate_itinerary(updated_flights, updated_hotels, feedback["liked"])
print("Updated Itinerary:", updated_itinerary)

Açıklama - Geri Bildirime Dayalı Rezervasyon

  1. Şema Farkındalığı: schema sözlüğü, geri bildiriye göre tercihlerin nasıl ayarlanacağını tanımlar. favorites ve avoid gibi alanlar ve ilgili ayarlamalar içerir.
  2. Tercihleri Ayarlama (adjust_based_on_feedback metodu): Bu metod, kullanıcı geri bildirimlerine ve şemaya göre tercihleri ayarlar.
  3. Çevreye Dayalı Ayarlamalar (adjust_based_on_environment metodu): Bu metod, şema ve geri bildirimlere göre ayarlamaları özelleştirir.
  4. Sorgu Üretimi ve Çalıştırma: Sistem, ayarlanmış tercihlere göre güncel uçuş ve otel verilerini getirmek için sorgular üretir ve bu sorguların yürütülmesini simüle eder.
  5. Güzergah Oluşturma: Sistem, yeni uçuş, otel ve gezilecek yer verilerine dayalı yeni bir güzergah oluşturur.

Sistemi çevreye duyarlı ve şemaya dayalı akıl yürüten hale getirerek, daha doğru ve ilgili sorgular üretebilir, böylece daha iyi seyahat önerileri ve daha kişiselleştirilmiş kullanıcı deneyimi sağlanabilir.

SQL’in Retrieval-Augmented Generation (RAG) Tekniği olarak Kullanımı

SQL (Yapılandırılmış Sorgu Dili), veritabanlarıyla etkileşim için güçlü bir araçtır. Retrieval-Augmented Generation (RAG) yaklaşımının bir parçası olarak kullanıldığında, SQL veritabanlarından ilgili verileri alarak yapay zeka ajanlarının yanıtlar veya eylemler üretmesini sağlar. Seyahat Acentası bağlamında SQL’in RAG tekniği olarak nasıl kullanılabileceğini inceleyelim.

Ana Kavramlar

  1. Veritabanı Etkileşimi:
    • SQL, veritabanlarını sorgulamak, ilgili bilgileri almak ve verileri işlemek için kullanılır.
    • Örnek: Seyahat veritabanından uçuş detayları, otel bilgileri ve gezilecek yerlerin getirilmesi.
  2. RAG ile Entegrasyon:
    • SQL sorguları, kullanıcı girdileri ve tercihlerine göre oluşturulur.
    • Alınan veriler, kişiselleştirilmiş öneriler veya eylemler üretmek için kullanılır.
  3. Dinamik Sorgu Üretimi:
    • Yapay zeka ajanı, bağlama ve kullanıcı ihtiyaçlarına göre dinamik SQL sorguları oluşturur.
    • Örnek: Bütçe, tarihler ve ilgi alanlarına göre sonuçları filtreleyecek SQL sorguları özelleştirmek.

Uygulamalar

Örnek: Bir veri analiz ajanı:

  1. Görev: Eğilimleri bulmak için verisetini analiz etmek.
  2. Adımlar:
    • Verisetini yüklemek.
    • Veriyi filtrelemek için SQL sorguları oluşturmak.
    • Sorguları çalıştırmak ve sonuçları almak.
    • Görselleştirmeler ve içgörüler oluşturmak.
  3. Kaynaklar: Veriseti erişimi, SQL yetenekleri.
  4. Deneyim: Geçmiş sonuçları kullanarak gelecek analizleri geliştirmek.

Pratik Örnek: Seyahat Acentasında SQL Kullanımı

  1. Kullanıcı Tercihlerini Toplama

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. SQL Sorguları Üretme

    def generate_sql_query(table, preferences):
        query = f"SELECT * FROM {table} WHERE "
        conditions = []
        for key, value in preferences.items():
            conditions.append(f"{key}='{value}'")
        query += " AND ".join(conditions)
        return query
    
  3. SQL Sorgularını Çalıştırma

    import sqlite3
    
    def execute_sql_query(query, database="travel.db"):
        connection = sqlite3.connect(database)
        cursor = connection.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        connection.close()
        return results
    
  4. Öneriler Üretme

    def generate_recommendations(preferences):
        flight_query = generate_sql_query("flights", preferences)
        hotel_query = generate_sql_query("hotels", preferences)
        attraction_query = generate_sql_query("attractions", preferences)
           
        flights = execute_sql_query(flight_query)
        hotels = execute_sql_query(hotel_query)
        attractions = execute_sql_query(attraction_query)
           
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    itinerary = generate_recommendations(preferences)
    print("Suggested Itinerary:", itinerary)
    

Örnek SQL Sorguları

  1. Uçuş Sorgusu

    SELECT * FROM flights WHERE destination='Paris' AND dates='2025-04-01 to 2025-04-10' AND budget='moderate';
    
  2. Otel Sorgusu

    SELECT * FROM hotels WHERE destination='Paris' AND budget='moderate';
    
  3. Gezilecek Yer Sorgusu

    SELECT * FROM attractions WHERE destination='Paris' AND interests='museums, cuisine';
    

Retrieval-Augmented Generation (RAG) tekniğinin bir parçası olarak SQL’i kullanarak, Seyahat Acentası gibi yapay zeka ajanları, ilgili verileri dinamik olarak alabilir ve kullanabilir, böylece doğru ve kişiselleştirilmiş öneriler sunabilir.

Metakognisyon Örneği

Metakognisyon uygulamasını göstermek için, bir problemi çözerken kendi karar verme sürecini gözden geçiren basit bir ajan oluşturalım. Bu örnekte, bir otel seçimini optimize etmeye çalışan, ancak hatalar veya suboptimal seçimler yaptığında kendi akıl yürütmesini değerlendiren ve stratejisini ayarlayan bir sistem kuracağız.

Bu durumu, ajan fiyat ve kalite kombinasyonuna göre otelleri seçerken kararlarını “yansıtacak” şekilde basit bir örnekle simüle edeceğiz.

Bu metakognisyonu nasıl gösterir:

  1. İlk Karar: Ajan kalite etkisini anlamadan en ucuz oteli seçer.
  2. Yansıtma ve Değerlendirme: İlk seçimden sonra ajan, kullanıcı geri bildirimi ile otelin “kötü” seçim olup olmadığını kontrol eder. Otelin kalitesi çok düşükse, kararını gözden geçirir.
  3. Strateji Ayarlama: Ajan, yansıtmasına dayanarak stratejisini ayarlar ve “en ucuz” yerine “en yüksek kalite” seçimine geçer, böylece sonraki seçimlerde karar alma sürecini geliştirir.

İşte bir örnek:

class HotelRecommendationAgent:
    def __init__(self):
        self.previous_choices = []  # Daha önce seçilen otelleri saklar
        self.corrected_choices = []  # Düzeltildi seçenekleri saklar
        self.recommendation_strategies = ['cheapest', 'highest_quality']  # Mevcut stratejiler

    def recommend_hotel(self, hotels, strategy):
        """
        Recommend a hotel based on the chosen strategy.
        The strategy can either be 'cheapest' or 'highest_quality'.
        """
        if strategy == 'cheapest':
            recommended = min(hotels, key=lambda x: x['price'])
        elif strategy == 'highest_quality':
            recommended = max(hotels, key=lambda x: x['quality'])
        else:
            recommended = None
        self.previous_choices.append((strategy, recommended))
        return recommended

    def reflect_on_choice(self):
        """
        Reflect on the last choice made and decide if the agent should adjust its strategy.
        The agent considers if the previous choice led to a poor outcome.
        """
        if not self.previous_choices:
            return "No choices made yet."

        last_choice_strategy, last_choice = self.previous_choices[-1]
        # Son seçimin iyi olup olmadığını söyleyen kullanıcı geri bildirimi olduğunu varsayalım
        user_feedback = self.get_user_feedback(last_choice)

        if user_feedback == "bad":
            # Önceki seçim tatmin edici değilse stratejiyi ayarla
            new_strategy = 'highest_quality' if last_choice_strategy == 'cheapest' else 'cheapest'
            self.corrected_choices.append((new_strategy, last_choice))
            return f"Reflecting on choice. Adjusting strategy to {new_strategy}."
        else:
            return "The choice was good. No need to adjust."

    def get_user_feedback(self, hotel):
        """
        Simulate user feedback based on hotel attributes.
        For simplicity, assume if the hotel is too cheap, the feedback is "bad".
        If the hotel has quality less than 7, feedback is "bad".
        """
        if hotel['price'] < 100 or hotel['quality'] < 7:
            return "bad"
        return "good"

# Otellerin bir listesini simüle et (fiyat ve kalite)
hotels = [
    {'name': 'Budget Inn', 'price': 80, 'quality': 6},
    {'name': 'Comfort Suites', 'price': 120, 'quality': 8},
    {'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]

# Bir ajan oluştur
agent = HotelRecommendationAgent()

# Adım 1: Ajan "en ucuz" stratejisini kullanarak bir otel önerir
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")

# Adım 2: Ajan seçimi değerlendirir ve gerekiyorsa stratejiyi ayarlar
reflection_result = agent.reflect_on_choice()
print(reflection_result)

# Adım 3: Ajan ayarlanmış stratejiyi kullanarak tekrar öneride bulunur
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")

Ajanların Metakognisyon Yetileri

Burada önemli olan, ajanın:

Bu, sistemin içsel geri bildirime dayanarak akıl yürütme sürecini ayarlayabildiği basit bir metakognisyon biçimidir.

Sonuç

Metakognisyon, yapay zeka ajanlarının yeteneklerini önemli ölçüde geliştirebilen güçlü bir araçtır. Metakognitif süreçleri dahil ederek, daha zeki, uyarlanabilir ve verimli ajanlar tasarlayabilirsiniz. Ek kaynakları kullanarak yapay zeka ajanlarındaki metakognisyon dünyasını daha derinlemesine keşfedebilirsiniz.

Metakognisyon Tasarım Deseni hakkında Daha Fazla Sorunuz mu Var?

Diğer öğrenenlerle buluşmak, ofis saatlerine katılmak ve Yapay Zeka Ajanlarıyla ilgili sorularınızı yanıtlamak için Microsoft Foundry Discord topluluğuna katılın.

Önceki Ders

Çoklu Ajan Tasarım Deseni

Sonraki Ders

Üretimde Yapay Zeka Ajanları


Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.