ai-agents-for-beginners

Мулти-Агент Дизајн

(Кликните на слику изнад да бисте погледали видео о овом лекцији)

Мета-метакогниција у AI агената

Увод

Добродошли на лекцију о метакогницији у AI агентима! Овај поглавље је намењено почетницима који су знатижељни како AI агенти могу да размишљају о сопственим процесима размишљања. На крају ове лекције разумећете кључне концепте и бићете опремљени практичним примерима како да примените метакогницију у дизајну AI агената.

Циљеви учења

Након завршетка ове лекције, моћи ћете да:

  1. Разумете импликације петљи резоновања у дефиницијама агената.
  2. Користите технике планирања и евалуације да бисте помогли агентима у само-корекцији.
  3. Креирате своје агенте способне да манипулишу кодом ради обављања задатака.

Увод у метакогницију

Метакогниција се односи на вишу врсту когнитивних процеса који укључују размишљање о сопственом размишљању. За AI агенте, ово значи да могу да евалуирају и прилагођавају своје акције на основу самосвести и претходних искустава. Метакогниција, или “размишљање о размишљању,” је важан концепт у развоју агенцијских AI система. Он подразумева да AI системи буду свесни својих унутрашњих процеса и да могу да надгледају, регулишу и прилагођавају своје понашање у складу са тим. Као што ми радимо када процењујемо ситуацију или приступамо проблему. Ова самосвест може помоћи AI системима да доносе боље одлуке, идентификују грешке и побољшају свој учинак током времена - поново се повезујући са Туринговим тестом и дебатом о томе да ли ће AI преузети контролу.

У контексту агенцијских AI система, метакогниција може помоћи у решавању неколико изазова, као што су:

Шта је метакогниција?

Метакогниција, или “размишљање о размишљању,” је виши когнитивни процес који укључује самосвест и саморегулацију сопствених когнитивних процеса. У области AI, метакогниција омогућава агентима да евалуирају и прилагођавају своје стратегије и акције, што доводи до побољшаних способности решавања проблема и доношења одлука. Разумевањем метакогниције можете дизајнирати AI агенте који нису само интелигентнији већ и прилагодљивији и ефикаснији. У правој метакогницији, AI би јасно резоновао о свом сопственом резоновању.

Пример: „Преферирао сам јефтиније летове јер… можда пропуштам директне летове, па ћу поново проверити.“ Бележење како или зашто је изабрао одређену руту.

Значај метакогниције у AI агентима

Метакогниција игра кључну улогу у дизајну AI агената из више разлога:

Значај метакогниције

Компоненте AI агента

Пре него што зароните у метакогнитивне процесе, важно је разумети основне компоненте AI агента. AI агент обично садржи:

Ове компоненте раде заједно како би креирале „јединицу експертизе“ која може извршавати специфичне задатке.

Пример: Замислите туристичког агента, агента који не само да планира ваше одморе већ и прилагођава своје кораке у складу са подацима у реалном времену и претходним искуствима корисника.

Пример: Метакогниција у услузи туристичког агента

Замислите да дизајнирате услугу туристичког агента покретану AI-јем. Овај агент, „Туристички агент,“ помаже корисницима у планирању одмора. Да би укључио метакогницију, Туристички агент треба да евалуира и прилагођава своје акције на основу самосвести и претходних искустава. Ево како метакогниција може да игра улогу:

Тренутни задатак

Тренутни задатак је да помогне кориснику да испланира путовање у Париз.

Кораци за завршетак задатка

  1. Прикупити корисничке преференције: Питајте корисника о датумима путовања, буџету, интересовањима (нпр. музеји, кухиња, куповина) и конкретним захтевима.
  2. Претражити информације: Тражите опције летења, смештаја, атракција и ресторана који одговарају преференцијама корисника.
  3. Генерисати препоруке: Пружајте персонализовани план путовања са детаљима о летовима, резервацијама хотела и предложеним активностима.
  4. Прилагодити на основу повратних информација: Питајте корисника за мишљење о препорукама и правите потребне измене.

Потребни ресурси

Искуство и само-рефлексија

Туристички агент користи метакогницију за евалуацију свог учинка и учење из претходних искустава. На пример:

  1. Анализа повратних информација корисника: Туристички агент прегледа повратне информације да утврди које су препоруке биле добро прихваћене, а које нису. Он прилагођава будуће предлоге у складу с тим.
  2. Прилагодљивост: Ако је корисник раније изразио нелагодност због гужви, Туристички агент ће у будућности избегавати препоруке за популарне туристичке локације у време максималног прилива.
  3. Корекција грешака: Ако је у прошлој резервацији направљена грешка, као што је предложио хотел који је био препуњен, агент учи да детаљније проверава доступност пре него што предложи.

Практичан пример за програмере

Ево поједностављеног примера кода како Туристички агент може укључити метакогницију:

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)

# Пример употребе
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)

Зашто је метакогниција важна

Укључивањем метакогниције, Туристички агент може дати персонализованије и прецизније препоруке за путовања, побољшавајући укупно корисничко искуство.


2. Планирање у агентима

Планирање је критични део понашања AI агената. Оно подразумева опис корака потребних за постизање циља, узимајући у обзир тренутно стање, ресурсе и могуће препреке.

Елементи планирања

Пример: Ево корака које Туристички агент треба да предузме да би ефикасно помогао кориснику да испланира путовање:

Кораци за Туристичког агента

  1. Прикупити корисничке преференције
    • Питајте корисника за детаље о датумима путовања, буџету, интересовањима и конкретним захтевима.
    • Примери: „Када планирате путовање?“ „Који је ваш распон буџета?“ „Које активности волите на одмору?“
  2. Претражити информације
    • Претражите релевантне опције путовања на основу корисничких преференција.
    • Летови: Претражите доступне летове у оквиру буџета и одабраних датума путовања.
    • Смештај: Пронађите хотеле или некретнине за изнајмљивање које одговарају корисничким преференцама у погледу локације, цене и садржаја.
    • Атракције и ресторани: Идентификујте популарне атракције, активности и ресторане који одговарају интересима корисника.
  3. Генерисати препоруке
    • Саставите прикупљене информације у персонализовани план путовања.
    • Пружите детаље као што су опције летова, резервације хотела и предложене активности, водећи рачуна да препоруке одговарају корисничким преференцијама.
  4. Презентовати план кориснику
    • Поделите предложени план путовања са корисником на разматрање.
    • Пример: „Ево предложеног плана вашег путовања у Париз. Укључује детаље о лету, резервације хотела и списак препоручених активности и ресторана. Јавите ми ваше мишљење!“
  5. Прикупити повратне информације
    • Питајте корисника за повратне информације о предложеном плану.
    • Примери: „Да ли вам се свиђају опције летења?“ „Да ли хотел одговара вашим потребама?“ „Постоје ли активности које бисте желели да додате или уклоните?“
  6. Прилагодити на основу повратних информација
    • Измените план на основу повратних информација корисника.
    • Направите потребне промене у препорукама за лет, смештај и активности да боље одговарају корисничким преференцијама.
  7. Коначна потврда
    • Представите ажурирани план кориснику за коначну потврду.
    • Пример: „Направио сам измене на основу ваших повратних информација. Ево ажурираног плана. Да ли вам све изгледа у реду?“
  8. Резервација и потврда
    • Када корисник одобри план, приступите резервацији летова, смештаја и било којих претходно планираних активности.
    • Пошаљите податке о потврди кориснику.
  9. Пружити континуирану подршку
    • Будите на располагању да помогнете кориснику са променама или додатним захтевима пре и током путовања.
    • Пример: „Ако вам затреба додатна помоћ током путовања, слободно ми се обратите у било које време!“

Пример интеракције

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)

# Пример коришћења унутар захтева за боокинг
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. Корективни RAG систем

Прво хајде да разумемо разлику између RAG алата и превентивног учитавања контекста.

RAG vs учитавање контекста

Retrieval-Augmented Generation (RAG)

RAG комбинује систем за преузимање података са генеративним моделом. Када се постави упит, систем за преузимање дохвата релевантне документе или податке из спољног извора, а ти преузети подаци се користе да обогате улаз генеративном моделу. Ово помаже моделу да генерише прецизније и контекстуално релевантне одговоре.

У RAG систему, агент дохвата релевантне информације из базе знања и користи их за генерисање одговарајућих одговора или акција.

Корективни RAG приступ

Корективни RAG приступ је усредсређен на коришћење RAG техника за исправљање грешака и побољшање тачности AI агената. Ово обухвата:

  1. Техника подстицања (prompting): Коришћење специфичних упита за вођење агента у преузимању релевантних информација.
  2. Алати: Имплементација алгоритама и механизама који агенту омогућавају да евалуира релевантност преузетих информација и генерише прецизне одговоре.
  3. Евалуација: Континуирано оцењивање учинка агента и прављење прилагођавања за побољшање његове тачности и ефикасности.

Пример: Корективни RAG у агента за претрагу

Замислите агента за претрагу који дохвата информације са веба да би одговарао на корисничке упите. Корективни RAG приступ може укључити:

  1. Техника подстицања: Формулисање упита за претрагу на основу уноса корисника.
  2. Алати: Коришћење алгоритама за обраду природног језика и машинског учења за рангирање и филтрирање резултата претраге.
  3. Евалуација: Анализа повратних информација корисника за идентификацију и исправку нетачности у дохваћеним информацијама.

Корективни RAG у туристичком агенту

Корективни RAG (Retrieval-Augmented Generation) побољшава способност AI да дохвата и генерише информације уз исправљање нетачности. Погледајмо како Туристички агент може користити овај приступ да би пружио прецизније и релевантније препоруке за путовања.

Ово обухвата:

Кораци за имплементацију корективног RAG у Туристичком агенту

  1. Почетна корисничка интеракција
    • Туристички агент прикупља почетне преференције корисника, као што су дестинација, дати путовања, буџет и интересовања.
    • Пример:

      preferences = {
          "destination": "Paris",
          "dates": "2025-04-01 to 2025-04-10",
          "budget": "moderate",
          "interests": ["museums", "cuisine"]
      }
      
  2. Дохватање информација
    • Туристички агент дохвата информације о летовима, смештају, атракцијама и ресторанима на основу корисничких преференција.
    • Пример:

      flights = search_flights(preferences)
      hotels = search_hotels(preferences)
      attractions = search_attractions(preferences)
      
  3. Генерисање почетних препорука
    • Туристички агент користи дохваћене информације за креирање персонализованог плана путовања.
    • Пример:

      itinerary = create_itinerary(flights, hotels, attractions)
      print("Suggested Itinerary:", itinerary)
      
  4. Прикупљање повратних информација корисника
    • Туристички агент тражи повратне информације о почетним препорукама.
    • Пример:

      feedback = {
          "liked": ["Louvre Museum"],
          "disliked": ["Eiffel Tower (too crowded)"]
      }
      
  5. Процес корективног RAG
    • Техника подстицања: Туристички агент формулише нове упите за претрагу на основу повратних информација корисника.
      • Пример:

        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        
    • Алати: Туристички агент користи алгоритме за рангирање и филтрирање нових резултата претраге, са нагласком на релевантност на основу повратних информација корисника.
      • Пример:

        new_attractions = search_attractions(preferences)
        new_itinerary = create_itinerary(flights, hotels, new_attractions)
        print("Updated Itinerary:", new_itinerary)
        
    • Евалуација: Туристички агент континуирано процењује релевантност и тачност својих препорука анализом повратних информација и прави неопходне прилагођавања.
      • Пример:

        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)
        

Практичан пример

Ево поједностављеног Python кода који укључује приступ корективног RAG у Туристичком агенту:

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

# Пример употребе
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)

Превентивно учитавање контекста

Преемптивно учитавање контекста подразумева уношење релевантних информација или позадинских података у модел пре обраде упита. То значи да модел од почетка има приступ овим информацијама, што му може помоћи да генерише информисаније одговоре без потребе за додатним преузимањем података током самог процеса.

Ево једног поједностављеног примера како би преемптивно учитавање контекста могло изгледати у апликацији за агента путовања написаној у Пајтону:

class TravelAgent:
    def __init__(self):
        # Унапред учитајте популарне дестинације и њихове информације
        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):
        # Преузмите информације о дестинацији из унапред учитаног контекста
        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}."

# Пример употребе
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))

Објашњење

  1. Иницијализација (__init__ метод): Класа TravelAgent унапред учитава речник који садржи информације о популарним дестинацијама као што су Париз, Токио, Њујорк и Сиднеј. Тај речник укључује детаље као што су држава, валута, језик и главне атракције сваке дестинације.

  2. Добијање информација (get_destination_info метод): Када корисник упути упит о одређеној дестинацији, метод get_destination_info преузима релевантне информације из унапред учитаног речника контекста.

Унапред учитавањем контекста, апликација агента путовања може брзо одговарати на корисничке упите без потребе да у реалном времену преузима ове податке из спољног извора. Ово чини апликацију ефикаснијом и одзивнијом.

Иницијализација плана са циљем пре понављања

Иницијализација плана са одређеним циљем подразумева почетак са јасним циљем или жељеним исходом на уму. Дефинисањем овог циља унапред, модел може користити тај циљ као водиљу током итеративног процеса. Ово помаже да свака итерација буде усмерена ка остварењу жељеног резултата, чинећи процес ефикаснијим и фокусираног.

Ево примера како можете иницијализовати план путовања са циљем пре него што почнете са понављањима, за агента путовања у Пајтону:

Сценарио

Агент путовања жели да испланира прилагођено путовање за клијента. Циљ је креирати план путовања који максимизира задовољство клијента на основу његових преференција и буџета.

Кораци

  1. Дефинишите преференције и буџет клијента.
  2. Иницијализујте почетни план на основу ових преференција.
  3. Итеративно усавршавајте план, оптимизујући задовољство клијента.

Пајтон код

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']

# Пример употребе
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)

Објашњење кода

  1. Иницијализација (__init__ метод): Класа TravelAgent се иницијализује са списком потенцијалних дестинација, од којих свака има атрибуте као што су назив, цена и тип активности.

  2. Иницијализација плана (bootstrap_plan метод): Овај метод креира почетни план путовања на основу преференција и буџета клијента. Он пролази кроз листу дестинација и додаје их плану ако одговарају преференцијама клијента и уклапају се у буџет.

  3. Усклађивање преференција (match_preferences метод): Овај метод проверава да ли дестинација одговара преференцијама клијента.

  4. Итерација плана (iterate_plan метод): Овај метод усавршава почетни план тако што покушава да замени сваку дестинацију у плану бољим кандидатом, узимајући у обзир преференције и буџет клијента.

  5. Израчун трошкова (calculate_cost метод): Овај метод рачуна укупне трошкове тренутног плана, укључујући потенцијално увођење нове дестинације.

Пример коришћења

Иницијализовањем плана са јасним циљем (нпр. максимизовање задовољства клијента) и понављањем ради усавршавања плана, агент путовања може креирати прилагођени и оптимизовани план путовања за клијента. Овај приступ осигурава да план путовања буде усклађен са преференцијама и буџетом клијента од почетка и да се побољшава сваким циклусом.

Искоришћавање LLM за поновно рангирање и оцењивање

Велики језички модели (LLM) могу се користити за поновно рангирање и оцењивање тако што процењују релевантност и квалитет пронађених докумената или генерисаних одговора. Ево како то функционише:

Претраживање: Почетни корак укључује преузимање скупа кандидата — докумената или одговора — на основу упита.

Поновно рангирање: LLM процењује ове кандидате и рангира их поново на основу њихове релевантности и квалитета. Овај корак гарантује да су најрелевантније и најквалитетније информације приказане прве.

Оцењивање: LLM додељује поене сваком кандидату који одражавају њихову релевантност и квалитет. Ово помаже у избору најбољег одговора или документа за корисника.

Искоришћавањем LLM за поновно рангирање и оцењивање, систем може да пружи прецизније и контекстуално релевантније информације, побољшавајући укупно корисничко искуство.

Ево примера како агент путовања може користити Велики језички модел (LLM) за поновно рангирање и оцењивање дестинација путовања на основу корисничких преференција у Пајтону:

Сценарио - Путовање по преференцијама

Агент путовања жели да препоручи најбоље дестинације клијенту на основу његових преференција. LLM ће помоћи у поновном рангирању и оцењивању дестинација како би били представљени најрелевантнији избори.

Кораци:

  1. Прикупити корисничке преференције.
  2. Преузети листу потенцијалних дестинација путовања.
  3. Користити LLM за поновно рангирање и оцењивање дестинација на основу корисничких преференција.

Ево како можете ажурирати претходни пример да користи Azure OpenAI сервисе:

Захтеви

  1. Потребно је да имате Azure претплату.
  2. Креирајте Azure OpenAI ресурс и набавите ваш API ключ.

Пример Пајтон кода

import requests
import json

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

    def get_recommendations(self, preferences, api_key, endpoint):
        # Генериши промпт за Azure OpenAI
        prompt = self.generate_prompt(preferences)
        
        # Дефиниши заглавља и садржај за захтев
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {api_key}'
        }
        payload = {
            "prompt": prompt,
            "max_tokens": 150,
            "temperature": 0.7
        }
        
        # Позови Azure OpenAI API да добијеш поново рангиране и оцењене дестинације
        response = requests.post(endpoint, headers=headers, json=payload)
        response_data = response.json()
        
        # Извуци и врати препоруке
        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

# Пример коришћења
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)

Објашњење кода - Књига преференција

  1. Иницијализација: Класа TravelAgent се иницијализује са списком потенцијалних дестинација путовања, од којих свака има атрибуте као што су назив и опис.

  2. Добијање препорука (get_recommendations метод): Овај метод генерише упит (prompt) за Azure OpenAI сервис на основу корисничких преференција и шаље HTTP POST захтев ка Azure OpenAI API-ју како би добио поново рангиране и оцењене дестинације.

  3. Генерисање упита (generate_prompt метод): Овај метод конструише упит за Azure OpenAI, укључујући корисничке преференције и листу дестинација. Упит упућује моделу да поново рангира и оцени дестинације на основу датих преференција.

  4. Позив API-ју: Библиотека requests се користи за слање HTTP POST захтева ка крајњој тачки Azure OpenAI API-ја. Одговор садржи поново рангиране и оцењене дестинације.

  5. Пример коришћења: Агент путовања прикупља корисничке преференције (нпр. интерес за разгледање и разнолику културу) и користи Azure OpenAI сервис да добије поново рангиране и оцењене препоруке дестинација путовања.

Обавезно замените your_azure_openai_api_key вашим стварним Azure OpenAI API кључем и https://your-endpoint.com/... стварном URL адресом вашег Azure OpenAI ентитета.

Искоришћавањем LLM за поновно рангирање и оцењивање, агент путовања може пружити персонализованије и релевантније препоруке дестинација својим клијентима, побољшавајући њихово укупно искуство.

RAG: Техника заупитања против алата

Ретрајвал-Аугментед Генератион (RAG) може бити и техника за постављање упита и алат у развоју AI агената. Разумевање разлике између ова два може вам помоћи да ефикасније користите RAG у вашим пројектима.

RAG као техника заупитања

Шта је то?

Како ради:

  1. Формулисање промптова: Креирајте добро структуриране упите или промптове на основу задатка или корисничког уноса.
  2. Претраживање информација: Користите промптове да тражите релевантне податке из постојеће базе знања или скупa података.
  3. Генерисање одговора: Комбинујте преузете информације са генеративним AI моделима како бисте произвели свеобухватан и кохерентан одговор.

Пример у агента путовања:

RAG као алат

Шта је то?

Како ради:

  1. Интеграција: Уграђује RAG у архитектуру AI агента, омогућавајући му да аутоматски обрађује задатке претраживања и генерисања.
  2. Аутоматизација: Алат управља целим процесом, од пријема корисничког уноса до генерисања коначног одговора, без потребе за експлицитним промптовима у сваком кораку.
  3. Ефикасност: Побољшава перформансе агента убрзавајући и поједностављујући процес претраживања и генерисања, омогућавајући брже и прецизније одговоре.

Пример у агента путовања:

Поређење

Аспект Техника заупитања Алат
Ручно vs Аутоматско Ручно формулисање промптова за сваки упит. Аутоматизовани процес претраживања и генерисања.
Контрола Омогућава већу контролу над процесом претраживања. Поједностављује и аутоматизује претраживање и генерисање.
Флексибилност Дозвољава прилагођене промптове на основу специфичних потреба. Ефикасније за имплементације на великој скали.
Комплексност Захтева креирање и прилагођавање промптова. Лакше за интеграцију у архитектуру AI агента.

Практични примери

Пример технике заупитања:

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)

Пример алата:

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)

Евалуација релевантности

Евалуација релевантности је кључан аспект у перформансама AI агената. Она осигурава да су информације које агент преузима и генерише прикладне, тачне и корисне за корисника. Погледајмо како да евалуирамо релевантност у AI агентима, укључујући практичне примере и технике.

Кључни појмови у евалуацији релевантности

  1. Свесност о контексту:
    • Агент мора разумети контекст корисничког упита како би преузео и генерисао релевантне информације.
    • Пример: Ако корисник тражи “најбољи ресторани у Паризу”, агент треба да узме у обзир корисничке преференције као што су тип кухиње и буџет.
  2. Тачност:
    • Информације које агент пружа треба да буду чињенично исправне и актуелне.
    • Пример: Препоручивање ресторана који су тренутно отворени и имају добре критике, а не застареле или затворене.
  3. Намера корисника:
    • Агент треба да закључи шта је корисникова намера иза упита како би пружио најрелевантније информације.
    • Пример: Ако корисник тражи “повољни хотели”, агент треба да приоритетно третира приступачне опције.
  4. Повратна информација:
    • Континуирано прикупљање и анализа повратних информација корисника помаже агенту да усаврши процес евалуације релевантности.
    • Пример: Укључивање оцена и повратних информација о претходним препорукама ради побољшања будућих одговора.

Практичне технике за евалуацију релевантности

  1. Оцењивање релевантности:
    • Доделити поен релевантности сваком преузетом ставци на основу тога колико одговара корисничком упиту и преференцијама.
    • Пример:

      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. Филтрирање и рангирање:
    • Филтрирати нерелевантне ставке и рангирати преостале по њиховим поенима релевантности.
    • Пример:

      def filter_and_rank(items, query):
          ranked_items = sorted(items, key=lambda item: relevance_score(item, query), reverse=True)
          return ranked_items[:10]  # Вратити 10 најрелевантнијих ставки
      
  3. Обрада природног језика (NLP):
    • Користити NLP технике за разумевање корисничког упита и преузимање релевантних информација.
    • Пример:

      def process_query(query):
          # Користите НЛП за извлачење кључних информација из упита корисника
          processed_query = nlp(query)
          return processed_query
      
  4. Интеграција повратних информација корисника:
    • Прикупљати повратне информације корисника о пруженим препорукама и користити их за прилагођавање будућих евалуација релевантности.
    • Пример:

      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
      

Пример: Евалуација релевантности у агента путовања

Ево практичног примера како агент путовања може евалуирати релевантност препорука за путовања:

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]  # Вратити топ 10 релевантних ставки

    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

# Пример употребе
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)

Претраживање са намерама

Претраживање са намерама подразумева разумевање и тумачење правог циља или намере иза корисничког упита како би се пронашле и генерисале најрелевантније и најкорисније информације. Овај приступ превазилази само подударање кључних речи и фокусира се на схватање стварних потреба и контекста корисника.

Кључни појмови у претраживању са намерама

  1. Разумевање намера корисника:
    • Намера корисника може се класификовати у три главне категорије: информативна, навигациона и трансакциона.
      • Информативна намера: Корисник тражи информације о одређеној теми (нпр. “Који су најбољи музеји у Паризу?”).
      • Навигациона намера: Корисник жели да оде на одређени сајт или страницу (нпр. “Службени сајт Лувра”).
      • Трансакциона намера: Корисник жели да изврши трансакцију, као што је резервација лета или куповина (нпр. “Резервиши лет за Париз”).
  2. Свесност о контексту:
    • Анализа контекста корисничког упита помаже у прецизном препознавању њихове намере. Ово обухвата претходне интеракције, преференције корисника и специфичне детаље текућег упита.
  3. Обрада природног језика (NLP):
    • NLP технике се користе за разумевање и тумачење природних језичких упита које дају корисници. Обухватају задатке као што су препознавање ентитета, анализа сентимената и парсирање упита.
  4. Персонализација:
    • Персонализација резултата претраге на основу корисничке историје, преференција и повратних информација унапређује релевантност пронађених информација.

Практичан пример: Претраживање са намерама у агента путовања

Узмимо агента путовања као пример да видимо како се претраживање са намерама може имплементирати.

  1. Прикупљање корисничких преференција

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Разумевање намера корисника

    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. Свесност о контексту

    def analyze_context(query, user_history):
        # Комбинујте тренутни упит са корисничком историјом ради бољег разумевања контекста
        context = {
            "current_query": query,
            "user_history": user_history
        }
        return context
    
  4. Претрага и персонализација резултата

    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):
        # Пример логике претраге за информативну намеру
        results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
        return results
    
    def search_navigation(query):
        # Пример логике претраге за навигациону намеру
        results = search_web(query)
        return results
    
    def search_transaction(query, preferences):
        # Пример логике претраге за трансакциону намеру
        results = search_web(f"book {query} to {preferences['destination']}")
        return results
    
    def personalize_results(results, user_history):
        # Пример логике персонализације
        personalized = [result for result in results if result not in user_history]
        return personalized[:10]  # Врати топ 10 персонализованих резултата
    
  5. Пример коришћења

    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. Генерисање кода као алат

Агенти за генерисање кода користе AI моделе за писање и извршавање кода, решавајући сложене проблеме и аутоматизујући задатке.

Агенти за генерисање кода

Агенти за генерисање кода користе генеративне AI моделе за писање и извршавање кода. Ови агенти могу решавати сложене проблеме, аутоматизовати задатке и пружати вредне увидe генеришући и извршавајући код на различитим програмским језицима.

Практичне примене

  1. Аутоматизовано генерисање кода: Генерисање код примера за специфичне задатке, као што су анализа података, web scraping или машинско учење.
  2. SQL као RAG: Коришћење SQL упита за проналажење и манипулацију подацима из база.
  3. Решавање проблема: Креирање и извршавање кода за решавање специфичних проблема, као што су оптимизација алгоритама или анализа података.

Пример: Агенат за генерисање кода за анализу података

Замислите да дизајнирате агента за генерисање кода. Ево како би то могло да функционише:

  1. Задатак: Анализирати скуп података да би се идентификовали трендови и обрасци.
  2. Кораци:
    • Учитајте скуп података у алат за анализу података.
    • Генеришите SQL упите за филтрирање и агрегирање података.
    • Извршите упите и преузмите резултате.
    • Користите резултате за генерисање визуализација и увида.
  3. Потребни ресурси: Приступ скупу података, алати за анализу и SQL могућности.
  4. Искуство: Користите претходне резултате анализа да побољшате тачност и релевантност будућих анализа.

Пример: Агенат за генерисање кода за туристичку агенцију

У овом примеру дизајнираћемо агента за генерисање кода, Туристичка агенција, који помаже корисницима у планирању путовања генеришући и извршавајући код. Овај агент може да обработи задатке као што су претрага опција путовања, филтрирање резултата и састављање итинерера користећи генеративни AI.

Преглед агента за генерисање кода

  1. Прикупљање корисничких преференција: Сакупља унос корисника као што су дестинација, датуми путовања, буџет и интересовања.
  2. Генерисање кода за преузимање података: Генерише код примере за преузимање података о летовима, хотелима и атракцијама.
  3. Извршавање генерисаног кода: Покреће генерисани код да би преузео информације у реалном времену.
  4. Генерисање итинерера: Саставља преузете податке у персонализовани план путовања.
  5. Прилагођавање на основу повратних информација: Прима повратне информације корисника и ако је потребно, поново генерише код да унапређује резултате.

Имплементација корак по корак

  1. Прикупљање корисничких преференција

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Генерисање кода за преузимање података

    def generate_code_to_fetch_data(preferences):
        # Пример: Генериши код за претрагу летова на основу корисничких преференција
        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):
        # Пример: Генериши код за претрагу хотела
        code = f"""
        def search_hotels():
            import requests
            response = requests.get('https://api.example.com/hotels', params={preferences})
            return response.json()
        """
        return code
    
  3. Извршавање генерисаног кода

    def execute_code(code):
        # Покрените генерисани код користећи exec
        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. Генерисање итинерера

    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. Прилагођавање на основу повратних информација

    def adjust_based_on_feedback(feedback, preferences):
        # Подесите преференције на основу повратних информација корисника
        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)
       
    # Поново генеришите и извршите код са ажурираном конфигурацијом
    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)
    

Користећи свест о окружењу и разумевање

Коришћење шеме табеле за побољшање процеса генерисања упита уз примену свести о окружењу и размишљања.

Ево примера како се то може реализовати:

  1. Разумевање шеме: Систем разуме шему табеле и користи те информације како би основао генерисање упита.
  2. Прилагођавање на основу повратних информација: Систем прилагођава корисничке преференције на основу повратних информација и разматра која поља у шеми треба ажурирати.
  3. Генерисање и извршавање упита: Систем генерише и извршава упите за преузимање ажурираних података о летовима и хотелима на основу нових преференција.

Ево ажурираног примера Python кода који обухвата ове концепте:

def adjust_based_on_feedback(feedback, preferences, schema):
    # Прилагодити поставке на основу повратних информација корисника
    if "liked" in feedback:
        preferences["favorites"] = feedback["liked"]
    if "disliked" in feedback:
        preferences["avoid"] = feedback["disliked"]
    # Закључивање засновано на шеми за прилагођавање других релевантних поставки
    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):
    # Прилагођена логика за прилагођавање поставки на основу шеме и повратних информација
    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):
    # Генерисати код за преузимање података о летовима на основу ажурираног преференције
    return f"fetch_flights(preferences={preferences})"

def generate_code_to_fetch_hotels(preferences):
    # Генерисати код за преузимање података о хотелима на основу ажурираног преференције
    return f"fetch_hotels(preferences={preferences})"

def execute_code(code):
    # Симулирати извршавање кода и вратити лажне податке
    return {"data": f"Executed: {code}"}

def generate_itinerary(flights, hotels, attractions):
    # Генерисати итинерар на основу летова, хотела и атракција
    return {"flights": flights, "hotels": hotels, "attractions": attractions}

# Пример шеме
schema = {
    "favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
    "avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}

# Пример коришћења
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)

# Поново генерисати и извршити код са ажурираном преференцијом
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)

Објашњење - Резервација на основу повратних информација

  1. Свест о шеми: Речник schema дефинише како треба прилагодити преференције на основу повратних информација. Укључује поља као што су favorites и avoid са одговарајућим прилагођавањима.
  2. Прилагођавање преференција (adjust_based_on_feedback метода): Ова метода прилагођава преференције на основу корисничких повратних информација и шеме.
  3. Прилагођавања заснована на окружењу (adjust_based_on_environment метода): Ова метода прилагођава прилагођавања на основу шеме и повратних информација.
  4. Генерисање и извршавање упита: Систем генерише код за преузимање ажурираних података о летовима и хотелима на основу прилагођених преференција и симулира извршавање тих упита.
  5. Генерисање итинерера: Систем креира ажурирани итинерер на основу нових података о летовима, хотелима и атракцијама.

Учинивши систем свесним свог окружења и размишљајући у складу са шемом, могуће је генерисати прецизније и релевантније упите, што води ка бољим препорукама за путовања и персонализованијем искуству корисника.

Коришћење SQL као технике Retrieval-Augmented Generation (RAG)

SQL (Структурирани упитни језик) је моћан алат за интеракцију са базама података. Када се користи као део приступа Retrieval-Augmented Generation (RAG), SQL може преузимати релевантне податке из база како би информисао и генерисао одговоре или радње у AI агентима. Погледајмо како се SQL може користити као RAG техника у контексту Туристичке агенције.

Кључни концепти

  1. Интеракција са базом података:
    • SQL се користи за упите на базама, преузимање релевантних информација и манипулацију подацима.
    • Пример: Преузимање детаља о летовима, хотелима и атракцијама из туристичке базе.
  2. Интеграција са RAG:
    • SQL упити се генеришу на основу корисничког уноса и преференција.
    • Преузети подаци се користе за генерисање персонализованих препорука или акција.
  3. Динамично генерисање упита:
    • AI агент генерише динамичке SQL упите на основу контекста и потреба корисника.
    • Пример: Прилагођавање SQL упита за филтрирање резултата по буџету, датумима и интересовањима.

Примене

Пример: Агент за анализу података:

  1. Задатак: Анализирати скуп података да би се пронашли трендови.
  2. Кораци:
    • Учитајте скуп података.
    • Генеришите SQL упите за филтрирање података.
    • Извршите упите и преузмите резултате.
    • Генеришите визуализације и увиде.
  3. Ресурси: Приступ скупу података, SQL могућности.
  4. Искуство: Користите претходне резултате за побољшање будућих анализа.

Практичан пример: Коришћење SQL у Туристичкој агенцији

  1. Прикупљање корисничких преференција

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Генерисање SQL упита

    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 упита

    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. Генерисање препорука

    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)
    

Пример SQL упита

  1. Упит за летове

    SELECT * FROM flights WHERE destination='Paris' AND dates='2025-04-01 to 2025-04-10' AND budget='moderate';
    
  2. Упит за хотел

    SELECT * FROM hotels WHERE destination='Paris' AND budget='moderate';
    
  3. Упит за атракције

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

Коришћењем SQL као дела технике Retrieval-Augmented Generation (RAG), AI агенти као што је Туристичка агенција могу динамички преузимати и користити релевантне податке да пруже прецизне и персонализоване препоруке.

Пример метакогниције

Да бисмо демонстрирали имплементацију метакогниције, направимо једноставног агента који размишља о свом процесу доношења одлука док решава проблем. За овај пример направићемо систем у коме агент покушава да оптимизује избор хотела, али затим процењује своје разлоге и прилагођава стратегију када направи грешке или субоптималне изборе.

Ово ћемо симулирати помоћу једноставног примера где агент бира хотеле на основу комбинације цене и квалитета, али ће „размишљати“ о својим одлукама и прилагођавати се у складу са тим.

Како ово илуструје метакогницију:

  1. Почетна одлука: Агент ће изабрати најјефтинији хотел, без разумевања утицаја квалитета.
  2. Рефлексија и процена: Након првог избора, агент ће проверити да ли је хотел „лош“ избор користећи повратне информације корисника. Ако установи да је квалитет хотела превише низак, разматра своје разлоге.
  3. Прилагођавање стратегије: Агент прилагођава стратегију на основу своје рефлексије и преусмерава се са „најефтинијег“ на „најквалитетнији“, чиме унапређује свој процес доношења одлука у будућим итерацијама.

Ево примера:

class HotelRecommendationAgent:
    def __init__(self):
        self.previous_choices = []  # Чува изабране хотеле претходно
        self.corrected_choices = []  # Чува исправљене изборе
        self.recommendation_strategies = ['cheapest', 'highest_quality']  # Расположиве стратегије

    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]
        # Хајде да претпоставимо да имамо повратне информације корисника које нам говоре да ли је последњи избор био добар или не
        user_feedback = self.get_user_feedback(last_choice)

        if user_feedback == "bad":
            # Прилагоди стратегију ако је претходни избор био незадовољавајући
            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"

# Симулира листу хотела (цена и квалитет)
hotels = [
    {'name': 'Budget Inn', 'price': 80, 'quality': 6},
    {'name': 'Comfort Suites', 'price': 120, 'quality': 8},
    {'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]

# Креира агента
agent = HotelRecommendationAgent()

# Корак 1: Агент препоручује хотел користећи стратегију "најјефтиније"
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")

# Корак 2: Агент разматра избор и по потреби прилагођава стратегију
reflection_result = agent.reflect_on_choice()
print(reflection_result)

# Корак 3: Агент поново препоручује, овога пута користећи прилагођену стратегију
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")

Метакогнитивне способности агената

Кључно овде је способност агента да:

Ово је једноставан облик метакогниције где систем може прилагођавати свој процес разматрања на основу интерне повратне информације.

Закључак

Метакогниција је моћан алат који може значајно побољшати способности AI агената. Уводањем метакогнитивних процеса, можете дизајнирати агенте који су интелигентнији, прилагодљивији и ефикаснији. Користите додатне ресурсе за даље истраживање фасцинантног света метакогниције у AI агентима.

Имате ли још питања о дизајн патерну метакогниције?

Придружите се Microsoft Foundry Discord да упознате друге учеснике, присуствујете офис сати и добијете одговоре на питања о AI агенатима.

Претходна лекција

Multi-Agent Design Pattern

Следећа лекција

AI Agents in Production


Изјава о одрицању одговорности: Овај документ је преведен коришћењем услуге за аутоматски превод Co-op Translator. Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било каква неспоразума или погрешна тумачења која произилазе из коришћења овог превода.