(Натисніть на зображення вище, щоб переглянути відео цього уроку)
Метакогніція в AI-агентах
Ласкаво просимо до уроку про метакогніцію в AI-агентах! Цей розділ створений для початківців, які цікавляться тим, як AI-агенти можуть аналізувати власні процеси мислення. До кінця цього уроку ви зрозумієте ключові концепції та отримаєте практичні приклади застосування метакогніції в дизайні AI-агентів.
Після завершення цього уроку ви зможете:
Метакогніція стосується вищих когнітивних процесів, які включають роздуми про власне мислення. Для AI-агентів це означає здатність оцінювати та коригувати свої дії на основі самосвідомості та минулого досвіду. Метакогніція, або “мислення про мислення”, є важливою концепцією у розвитку агентних AI-систем. Вона передбачає, що AI-системи усвідомлюють власні внутрішні процеси та можуть контролювати, регулювати й адаптувати свою поведінку відповідно. Це схоже на те, як ми оцінюємо ситуацію або аналізуємо проблему. Така самосвідомість може допомогти AI-системам приймати кращі рішення, виявляти помилки та покращувати свою продуктивність з часом — знову повертаючись до тесту Тьюрінга та дебатів про те, чи AI може захопити світ.
У контексті агентних AI-систем метакогніція може допомогти вирішити кілька викликів, таких як:
Метакогніція, або “мислення про мислення”, — це вищий когнітивний процес, який включає самосвідомість і саморегуляцію власних когнітивних процесів. У сфері AI метакогніція надає агентам можливість оцінювати та адаптувати свої стратегії й дії, що призводить до покращення здатності вирішувати проблеми та приймати рішення. Розуміння метакогніції дозволяє створювати AI-агентів, які є не лише більш розумними, але й більш адаптивними та ефективними. У справжній метакогніції AI явно розмірковує про власні роздуми.
Приклад: «Я пріоритизував дешевші рейси, тому що… Можливо, я пропустив прямі рейси, тож перевірю ще раз». Відстеження того, як або чому було обрано певний маршрут.
Метакогніція відіграє ключову роль у дизайні AI-агентів з кількох причин:
Перед тим як заглиблюватися в метакогнітивні процеси, важливо зрозуміти основні компоненти AI-агента. AI-агент зазвичай складається з:
Ці компоненти працюють разом, створюючи “одиницю експертизи”, яка може виконувати конкретні завдання.
Приклад: Розглянемо туристичного агента, який не лише планує вашу відпустку, але й коригує свій маршрут на основі даних у реальному часі та минулого досвіду клієнтів.
Уявіть, що ви створюєте сервіс туристичного агента на основі AI. Цей агент, “Туристичний агент”, допомагає користувачам планувати їхні відпустки. Щоб включити метакогніцію, Туристичний агент має оцінювати та коригувати свої дії на основі самосвідомості та минулого досвіду. Ось як метакогніція може відігравати роль:
Поточне завдання — допомогти користувачеві спланувати поїздку до Парижа.
Туристичний агент використовує метакогніцію для оцінки своєї продуктивності та навчання на основі минулого досвіду. Наприклад:
Ось спрощений приклад того, як код Туристичного агента може виглядати з урахуванням метакогніції:
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):
# Search for flights, hotels, and attractions based on preferences
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)
# Analyze feedback and adjust future recommendations
self.user_preferences = adjust_preferences(self.user_preferences, feedback)
# Example usage
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)
Інтегруючи метакогніцію, Туристичний агент може надавати більш персоналізовані та точні рекомендації для подорожей, покращуючи загальний досвід користувача.
Планування є критичним компонентом поведінки AI-агента. Воно включає визначення кроків, необхідних для досягнення мети, враховуючи поточний стан, ресурси та можливі перешкоди.
Приклад: Ось кроки, які Туристичний агент має виконати, щоб ефективно допомогти користувачеві спланувати його подорож:
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)
# Example usage within a booing request
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)
Спочатку давайте зрозуміємо різницю між інструментом RAG та попереднім завантаженням контексту.
RAG поєднує систему пошуку з генеративною моделлю. Коли робиться запит, система пошуку отримує відповідні документи або дані з зовнішнього джерела, і ця отримана інформація використовується для доповнення введення до генеративної моделі. Це допомагає моделі генерувати більш точні та контекстуально релевантні відповіді.
У системі RAG агент отримує відповідну інформацію з бази знань і використовує її для генерації відповідних відповідей або дій.
Коригувальний підхід RAG зосереджується на використанні технік RAG для виправлення помилок і покращення точності AI-агентів. Це включає:
Розглянемо пошукового агента, який отримує інформацію з вебу для відповіді на запити користувачів. Коригувальний підхід RAG може включати:
Коригувальний RAG (Генерація з доповненням пошуку) покращує здатність AI отримувати та генерувати інформацію, одночасно виправляючи будь-які неточності. Давайте подивимося, як Туристичний агент може використовувати коригувальний підхід RAG для надання більш точних і релевантних рекомендацій для подорожей.
Це включає:
Інструмент: Реалізація алгоритмів і механізмів, які дозволяють агенту оцін ```python 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)
### Попереднє завантаження контексту
Попереднє завантаження контексту передбачає завантаження відповідної інформації або фону в модель перед обробкою запиту. Це означає, що модель має доступ до цієї інформації з самого початку, що допомагає їй генерувати більш обґрунтовані відповіді без необхідності отримувати додаткові дані під час процесу.
Ось спрощений приклад того, як може виглядати попереднє завантаження контексту для додатку туристичного агента на Python:
```python
class TravelAgent:
def __init__(self):
# Pre-load popular destinations and their information
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):
# Fetch destination information from pre-loaded context
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}."
# Example usage
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))
Ініціалізація (метод __init__
): Клас TravelAgent
попередньо завантажує словник, що містить інформацію про популярні напрямки, такі як Париж, Токіо, Нью-Йорк і Сідней. Цей словник включає деталі, як-от країна, валюта, мова та основні визначні місця для кожного напрямку.
Отримання інформації (метод get_destination_info
): Коли користувач запитує про конкретний напрямок, метод get_destination_info
отримує відповідну інформацію зі словника попередньо завантаженого контексту.
Завдяки попередньому завантаженню контексту додаток туристичного агента може швидко відповідати на запити користувачів без необхідності отримувати цю інформацію з зовнішнього джерела в реальному часі. Це робить додаток більш ефективним і швидким.
Ініціалізація плану з метою передбачає початок роботи з чітко визначеною ціллю або бажаним результатом. Визначивши цю мету заздалегідь, модель може використовувати її як орієнтир протягом усього ітеративного процесу. Це допомагає забезпечити, що кожна ітерація наближає до досягнення бажаного результату, роблячи процес більш ефективним і цілеспрямованим.
Ось приклад того, як можна ініціалізувати план подорожі з метою перед ітерацією для туристичного агента на Python:
Туристичний агент хоче скласти індивідуальний відпочинок для клієнта. Мета — створити маршрут подорожі, який максимально задовольнить клієнта, враховуючи його вподобання та бюджет.
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']
# Example usage
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)
Ініціалізація (метод __init__
): Клас TravelAgent
ініціалізується списком потенційних напрямків, кожен з яких має атрибути, як-от назва, вартість і тип активності.
Ініціалізація плану (метод bootstrap_plan
): Цей метод створює початковий план подорожі на основі вподобань клієнта та бюджету. Він перебирає список напрямків і додає їх до плану, якщо вони відповідають вподобанням клієнта та вписуються в бюджет.
Відповідність вподобанням (метод match_preferences
): Цей метод перевіряє, чи відповідає напрямок вподобанням клієнта.
Ітерація плану (метод iterate_plan
): Цей метод уточнює початковий план, намагаючись замінити кожен напрямок у плані на кращий варіант, враховуючи вподобання клієнта та бюджетні обмеження.
Розрахунок вартості (метод calculate_cost
): Цей метод розраховує загальну вартість поточного плану, включаючи потенційний новий напрямок.
Ініціалізуючи план з чіткою метою (наприклад, максимізація задоволення клієнта) та ітеруючи для його уточнення, туристичний агент може створити індивідуальний і оптимізований маршрут подорожі для клієнта. Такий підхід забезпечує відповідність плану вподобанням і бюджету клієнта з самого початку та покращує його з кожною ітерацією.
Великі мовні моделі (LLM) можуть використовуватися для повторного ранжування та оцінювання, аналізуючи релевантність і якість отриманих документів або згенерованих відповідей. Ось як це працює:
Отримання: На першому етапі отримується набір кандидатів (документів або відповідей) на основі запиту.
Повторне ранжування: LLM оцінює цих кандидатів і повторно ранжує їх на основі релевантності та якості. Це забезпечує, що найрелевантніша та найякісніша інформація подається першою.
Оцінювання: LLM присвоює кожному кандидату оцінку, яка відображає їхню релевантність і якість. Це допомагає вибрати найкращу відповідь або документ для користувача.
Використовуючи LLM для повторного ранжування та оцінювання, система може надавати більш точну та контекстуально релевантну інформацію, покращуючи загальний досвід користувача.
Ось приклад того, як туристичний агент може використовувати велику мовну модель (LLM) для повторного ранжування та оцінювання напрямків подорожей на основі вподобань користувача на Python:
Туристичний агент хоче рекомендувати найкращі напрямки подорожей клієнту на основі його вподобань. LLM допоможе повторно ранжувати та оцінити напрямки, щоб забезпечити подання найрелевантніших варіантів.
Ось як можна оновити попередній приклад для використання Azure OpenAI Services:
import requests
import json
class TravelAgent:
def __init__(self, destinations):
self.destinations = destinations
def get_recommendations(self, preferences, api_key, endpoint):
# Generate a prompt for the Azure OpenAI
prompt = self.generate_prompt(preferences)
# Define headers and payload for the request
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
payload = {
"prompt": prompt,
"max_tokens": 150,
"temperature": 0.7
}
# Call the Azure OpenAI API to get the re-ranked and scored destinations
response = requests.post(endpoint, headers=headers, json=payload)
response_data = response.json()
# Extract and return the recommendations
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
# Example usage
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)
Ініціалізація: Клас TravelAgent
ініціалізується списком потенційних напрямків подорожей, кожен з яких має атрибути, як-от назва та опис.
Отримання рекомендацій (метод get_recommendations
): Цей метод генерує підказку для сервісу Azure OpenAI на основі вподобань користувача та надсилає HTTP POST-запит до API Azure OpenAI, щоб отримати повторно ранжовані та оцінені напрямки.
Генерація підказки (метод generate_prompt
): Цей метод створює підказку для Azure OpenAI, включаючи вподобання користувача та список напрямків. Підказка спрямовує модель на повторне ранжування та оцінювання напрямків на основі наданих вподобань.
Виклик API: Бібліотека requests
використовується для надсилання HTTP POST-запиту до кінцевої точки API Azure OpenAI. Відповідь містить повторно ранжовані та оцінені напрямки.
Приклад використання: Туристичний агент збирає вподобання користувача (наприклад, інтерес до огляду визначних місць і різноманітної культури) та використовує сервіс Azure OpenAI для отримання повторно ранжованих і оцінених рекомендацій щодо напрямків подорожей.
Не забудьте замінити your_azure_openai_api_key
на ваш фактичний API-ключ Azure OpenAI і https://your-endpoint.com/...
на фактичну URL-адресу кінцевої точки вашого розгортання Azure OpenAI.
Використовуючи LLM для повторного ранжування та оцінювання, туристичний агент може надавати більш персоналізовані та релевантні рекомендації щодо подорожей клієнтам, покращуючи їхній загальний досвід.
Розглянемо Travel Agent як приклад, щоб побачити, як можна реалізувати пошук з наміром.
Збір уподобань користувача
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
def gather_preferences(self, preferences):
self.user_preferences = preferences
Розуміння намірів користувача
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"
Контекстна обізнаність
def analyze_context(query, user_history):
# Combine current query with user history to understand context
context = {
"current_query": query,
"user_history": user_history
}
return context
Пошук і персоналізація результатів
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):
# Example search logic for informational intent
results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
return results
def search_navigation(query):
# Example search logic for navigational intent
results = search_web(query)
return results
def search_transaction(query, preferences):
# Example search logic for transactional intent
results = search_web(f"book {query} to {preferences['destination']}")
return results
def personalize_results(results, user_history):
# Example personalization logic
personalized = [result for result in results if result not in user_history]
return personalized[:10] # Return top 10 personalized results
Приклад використання
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)
Агенти, що генерують код, використовують AI-моделі для написання та виконання коду, вирішення складних задач і автоматизації процесів.
Агенти, що генерують код, застосовують генеративні AI-моделі для написання та виконання коду. Ці агенти можуть вирішувати складні задачі, автоматизувати процеси та надавати цінні інсайти, генеруючи та виконуючи код різними мовами програмування.
Уявіть, що ви створюєте агента, який генерує код. Ось як це може працювати:
У цьому прикладі ми створимо агента, Travel Agent, який допомагає користувачам планувати подорожі, генеруючи та виконуючи код. Цей агент може виконувати такі задачі, як пошук варіантів подорожі, фільтрація результатів і складання маршруту за допомогою генеративного AI.
Збір уподобань користувача
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
def gather_preferences(self, preferences):
self.user_preferences = preferences
Генерація коду для отримання даних
def generate_code_to_fetch_data(preferences):
# Example: Generate code to search for flights based on user 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):
# Example: Generate code to search for hotels
code = f"""
def search_hotels():
import requests
response = requests.get('https://api.example.com/hotels', params={preferences})
return response.json()
"""
return code
Виконання згенерованого коду
def execute_code(code):
# Execute the generated code using 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)
Генерація маршруту
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)
Коригування на основі зворотного зв’язку
def adjust_based_on_feedback(feedback, preferences):
# Adjust preferences based on user feedback
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)
# Regenerate and execute code with updated 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)
Використання схеми таблиці може покращити процес генерації запитів, застосовуючи обізнаність про середовище та логіку.
Ось приклад, як це можна реалізувати:
Ось оновлений приклад коду на Python, який включає ці концепції:
def adjust_based_on_feedback(feedback, preferences, schema):
# Adjust preferences based on user feedback
if "liked" in feedback:
preferences["favorites"] = feedback["liked"]
if "disliked" in feedback:
preferences["avoid"] = feedback["disliked"]
# Reasoning based on schema to adjust other related preferences
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):
# Custom logic to adjust preferences based on schema and feedback
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):
# Generate code to fetch flight data based on updated preferences
return f"fetch_flights(preferences={preferences})"
def generate_code_to_fetch_hotels(preferences):
# Generate code to fetch hotel data based on updated preferences
return f"fetch_hotels(preferences={preferences})"
def execute_code(code):
# Simulate execution of code and return mock data
return {"data": f"Executed: {code}"}
def generate_itinerary(flights, hotels, attractions):
# Generate itinerary based on flights, hotels, and attractions
return {"flights": flights, "hotels": hotels, "attractions": attractions}
# Example schema
schema = {
"favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
"avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}
# Example usage
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)
# Regenerate and execute code with updated 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, feedback["liked"])
print("Updated Itinerary:", updated_itinerary)
schema
визначає, як уподобання повинні коригуватися на основі зворотного зв’язку. Він включає поля, такі як favorites
і avoid
, з відповідними коригуваннями.adjust_based_on_feedback
): Цей метод коригує уподобання на основі зворотного зв’язку користувача та схеми.adjust_based_on_environment
): Цей метод налаштовує коригування на основі схеми та зворотного зв’язку.Завдяки обізнаності про середовище та логіці на основі схеми система може генерувати більш точні та релевантні запити, що призводить до кращих рекомендацій для подорожей і більш персоналізованого досвіду користувача.
SQL (Structured Query Language) — це потужний інструмент для взаємодії з базами даних. Використовуючи SQL як частину підходу Retrieval-Augmented Generation (RAG), можна отримувати релевантні дані з баз даних для інформування та генерації відповідей або дій у AI-агентах. Давайте розглянемо, як SQL може бути використаний як техніка RAG у контексті Travel Agent.
Приклад: Агент для аналізу даних:
Збір уподобань користувача
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
def gather_preferences(self, preferences):
self.user_preferences = preferences
Генерація 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
Виконання 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
Генерація рекомендацій
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)
Запит рейсів
SELECT * FROM flights WHERE destination='Paris' AND dates='2025-04-01 to 2025-04-10' AND budget='moderate';
Запит готелів
SELECT * FROM hotels WHERE destination='Paris' AND budget='moderate';
Запит атракцій
SELECT * FROM attractions WHERE destination='Paris' AND interests='museums, cuisine';
Використовуючи SQL як частину техніки Retrieval-Augmented Generation (RAG), AI-агенти, такі як Travel Agent, можуть динамічно отримувати та використовувати релевантні дані для надання точних і персоналізованих рекомендацій.
Щоб продемонструвати реалізацію метакогніції, створимо простого агента, який аналізує свій процес прийняття рішень під час вирішення задачі. У цьому прикладі ми побудуємо систему, де агент намагається оптимізувати вибір готелю, але потім оцінює своє власне мислення і коригує стратегію, якщо робить помилки або субоптимальні вибори.
Ми симулюємо це за допомогою базового прикладу, де агент обирає готелі на основі комбінації ціни та якості, але “рефлексує” над своїми рішеннями і коригує їх.
Ось приклад:
class HotelRecommendationAgent:
def __init__(self):
self.previous_choices = [] # Stores the hotels chosen previously
self.corrected_choices = [] # Stores the corrected choices
self.recommendation_strategies = ['cheapest', 'highest_quality'] # Available strategies
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]
# Let's assume we have some user feedback that tells us whether the last choice was good or not
user_feedback = self.get_user_feedback(last_choice)
if user_feedback == "bad":
# Adjust strategy if the previous choice was unsatisfactory
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"
# Simulate a list of hotels (price and quality)
hotels = [
{'name': 'Budget Inn', 'price': 80, 'quality': 6},
{'name': 'Comfort Suites', 'price': 120, 'quality': 8},
{'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]
# Create an agent
agent = HotelRecommendationAgent()
# Step 1: The agent recommends a hotel using the "cheapest" strategy
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")
# Step 2: The agent reflects on the choice and adjusts strategy if necessary
reflection_result = agent.reflect_on_choice()
print(reflection_result)
# Step 3: The agent recommends again, this time using the adjusted strategy
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")
Основна ідея полягає в здатності агента:
Це проста форма метакогніції, де система здатна коригувати свій процес мислення на основі внутрішнього зворотного зв’язку.
Метакогніція — це потужний інструмент, який може значно покращити можливості AI-агентів. Інтегруючи метакогнітивні процеси, ви можете створювати агентів, які є більш розумними, адаптивними та ефективними. Використовуйте додаткові ресурси, щоб глибше дослідити захоплюючий світ метакогніції в AI-агентах.
Приєднуйтесь до Azure AI Foundry Discord, щоб зустрітися з іншими учасниками, відвідати години консультацій і отримати відповіді на ваші запитання щодо AI-агентів.
Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.