(Клацніть на зображення вище, щоб переглянути відео цього уроку)
Метакогніція в AI-агентах
Ласкаво просимо до уроку з метакогніції в AI-агентах! Ця глава призначена для початківців, які цікавляться тим, як AI-агенти можуть мислити про власні процеси мислення. До кінця цього уроку ви зрозумієте ключові концепції і отримаєте практичні приклади застосування метакогніції в проєктуванні AI-агентів.
Після завершення цього уроку ви зможете:
Метакогніція стосується вищих когнітивних процесів, що включають мислення про власне мислення. Для AI-агентів це означає здатність оцінювати та коригувати свої дії на основі самоусвідомлення та попереднього досвіду. Метакогніція, або «мислення про мислення», є важливою концепцією в розвитку агентних систем AI. Вона передбачає, що AI-системи усвідомлюють власні внутрішні процеси й можуть контролювати, регулювати та адаптувати свою поведінку відповідно. Подібно до того, як ми оцінюємо атмосферу в кімнаті або розглядаємо проблему. Це самоусвідомлення може допомогти AI-системам приймати кращі рішення, виявляти помилки та покращувати свою продуктивність з часом — що знову повертає нас до тесту Тьюрінга та дебатів про те, чи захопить AI контроль.
У контексті агентних AI-систем метакогніція може допомогти вирішити кілька завдань, таких як:
Метакогніція, або «мислення про мислення», — це вищий когнітивний процес, що включає самоусвідомлення та саморегуляцію власних когнітивних процесів. У сфері AI метакогніція дає агентам змогу оцінювати та адаптувати свої стратегії й дії, що веде до поліпшеного розв’язання проблем і прийняття рішень. Розуміючи метакогніцію, ви можете проєктувати AI-агентів, які не лише розумніші, але й більш гнучкі та ефективні. У справжній метакогніції ви побачите, як AI явно міркує про власне міркування.
Приклад: “Я віддав пріоритет дешевшим рейсам, тому що… Можливо, я втрачаю можливість прямого рейсу, тому перевірю ще раз.”. Відстеження того, як або чому він обрав певний маршрут.
Метакогніція відіграє вирішальну роль у проєктуванні AI-агентів з кількох причин:

Перед тим як заглиблюватися в метакогнітивні процеси, важливо зрозуміти базові компоненти AI-агента. Зазвичай AI-агент складається з:
Ці компоненти працюють разом, створюючи «одиницю експертизи», яка може виконувати певні завдання.
Приклад: Розглянемо туристичного агента, сервіс агента, який не лише планує вашу відпустку, але й коригує свій шлях на основі даних у реальному часі та попереднього досвіду користувацьких подорожей.
Уявіть, що ви проєктуєте сервіс туристичного агента на базі AI. Цей агент, “Travel Agent”, допомагає користувачам планувати їхні відпустки. Щоб інтегрувати метакогніцію, Travel Agent має оцінювати та коригувати свої дії на основі самоусвідомлення та минулого досвіду. Ось як метакогніція може відігравати роль:
Поточне завдання — допомогти користувачеві спланувати поїздку до Парижа.
Travel Agent використовує метакогніцію для оцінки своєї роботи та навчання на попередньому досвіді. Наприклад:
Ось спрощений приклад того, як може виглядати код Travel Agents при інтеграції метакогніції:
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)
Інтегруючи метакогніцію, Travel Agent може надавати більш персоналізовані та точні рекомендації щодо подорожей, покращуючи загальний досвід користувача.
Планування — критичний компонент поведінки AI-агента. Воно включає окреслення кроків, необхідних для досягнення мети, враховуючи поточний стан, ресурси та можливі перешкоди.
Приклад: Ось кроки, які Travel Agent має виконати, щоб ефективно допомогти користувачеві спланувати поїздку:
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)
По-перше, давайте почнемо з розуміння різниці між RAG Tool і попереднім завантаженням контексту

RAG поєднує систему витягування з генеративною моделлю. Коли надходить запит, система витягування знаходить релевантні документи або дані з зовнішнього джерела, і ця отримана інформація використовується для розширення вхідних даних для генеративної моделі. Це допомагає моделі генерувати більш точні та контекстуально релевантні відповіді.
У системі RAG агент отримує релевантну інформацію з бази знань і використовує її для генерації відповідних відповідей або дій.
Корекційний підхід RAG зосереджений на використанні технік RAG для виправлення помилок і підвищення точності AI-агентів. Це включає:
Розглянемо пошукового агента, який отримує інформацію з вебу для відповіді на запити користувачів. Корекційний підхід RAG може включати:
Корекційний RAG (Retrieval-Augmented Generation) підвищує здатність AI отримувати й генерувати інформацію, одночасно виправляючи будь-які неточності. Подивімося, як Travel Agent може використовувати корекційний підхід RAG для надання більш точних і релевантних рекомендацій щодо подорожей.
Це включає:
Приклад:
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
Приклад:
flights = search_flights(preferences)
hotels = search_hotels(preferences)
attractions = search_attractions(preferences)
Приклад:
itinerary = create_itinerary(flights, hotels, attractions)
print("Suggested Itinerary:", itinerary)
Приклад:
feedback = {
"liked": ["Louvre Museum"],
"disliked": ["Eiffel Tower (too crowded)"]
}
Приклад:
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 у Travel Agent:
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)
Попереднє завантаження контексту (Pre-emptive Context Load) полягає в завантаженні релевантного контексту або фонового матеріалу в модель до обробки запиту. Це означає, що модель має доступ до цієї інформації від самого початку, що допомагає їй генерувати більш обґрунтовані відповіді без необхідності додаткового витягання даних під час процесу.
Ось спрощений приклад того, як може виглядати попереднє завантаження контексту для програми турагента на Python:
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"))
Ініціалізація (__init__ method): Клас TravelAgent попередньо завантажує словник з інформацією про популярні напрямки, такі як Paris, Tokyo, New York, and Sydney. Цей словник містить деталі, як-от країну, валюту, мову та основні пам’ятки для кожного напрямку.
Отримання інформації (get_destination_info method): Коли користувач запитує про конкретний напрямок, метод 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']
# Приклад використання
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__ method): Клас TravelAgent ініціалізується зі списком потенційних напрямків, кожен із яких має атрибути, як-от назва, вартість і тип активності.
Ініціалізація плану (bootstrap_plan method): Цей метод створює початковий план подорожі на основі вподобань і бюджету клієнта. Він проходить список напрямків і додає їх до плану, якщо вони відповідають вподобанням клієнта і вкладаються в бюджет.
Підбір вподобань (match_preferences method): Цей метод перевіряє, чи відповідає напрямок вподобанням клієнта.
Ітерація плану (iterate_plan method): Цей метод уточнює початковий план, намагаючись замінити кожен напрямок у плані на кращий варіант з урахуванням вподобань та бюджетних обмежень клієнта.
Розрахунок вартості (calculate_cost method): Цей метод обчислює загальну вартість поточного плану, враховуючи потенційно новий напрямок.
Завдяки ініціалізації плану з чіткою метою (наприклад, максимізація задоволення клієнта) і ітераціям для його уточнення, турагент може створити індивідуальний та оптимізований маршрут подорожі для клієнта. Такий підхід гарантує, що план подорожі з початку відповідає вподобанням і бюджету клієнта та покращується з кожною ітерацією.
Великі мовні моделі (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):
# Згенерувати підказку для 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
}
# Викликати API Azure OpenAI, щоб отримати переранжовані та оцінені пункти призначення
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)
Ініціалізація: Клас TravelAgent ініціалізується зі списком потенційних напрямків подорожі, кожен із яких має атрибути, як-от назва та опис.
Отримання рекомендацій (get_recommendations method): Цей метод генерує промпт для служби Azure OpenAI на основі вподобань користувача і робить HTTP POST-запит до API Azure OpenAI, щоб отримати перевпорядковані та оцінені напрямки.
Генерація промпту (generate_prompt method): Цей метод будує промпт для 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 для перевпорядкування та оцінювання турагент може надавати більш персоналізовані та релевантні рекомендації щодо подорожей клієнтам, покращуючи їхній загальний досвід.
Retrieval-Augmented Generation (RAG) може виступати як технікою промптингу, так і інструментом у розробці AI-агентів. Розуміння різниці між ними допоможе ефективніше використовувати RAG у ваших проєктах.
Що це?
Як це працює:
Приклад у Travel Agent:
Що це?
Як це працює:
Приклад у Travel Agent:
| Aspect | Prompting Technique | Tool |
|---|---|---|
| Manual vs Automatic | Ручне формування підказок для кожного запиту. | Автоматизований процес отримання та генерації. |
| Control | Надає більше контролю над процесом отримання інформації. | Оптимізує та автоматизує процес отримання й генерації. |
| Flexibility | Дозволяє налаштовувати промпти відповідно до конкретних потреб. | Більш ефективний для масштабних впроваджень. |
| Complexity | Вимагає створення та підлаштування промптів. | Легше інтегрується в архітектуру 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-агентах, включаючи практичні приклади та методики.
Приклад:
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
Приклад:
def filter_and_rank(items, query):
ranked_items = sorted(items, key=lambda item: relevance_score(item, query), reverse=True)
return ranked_items[:10] # Повернути 10 найбільш релевантних елементів
Приклад:
def process_query(query):
# Використовуйте NLP, щоб витягти ключову інформацію з запиту користувача
processed_query = nlp(query)
return processed_query
Приклад:
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
Ось практичний приклад того, як Travel Agent може оцінювати релевантність рекомендацій подорожей:
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)
Пошук з урахуванням наміру включає розуміння та інтерпретацію підґрунтя або мети запиту користувача, щоб витягнути та згенерувати найбільш релевантну та корисну інформацію. Такий підхід виходить за межі простого співпадіння ключових слів і зосереджується на розумінні реальних потреб та контексту користувача.
Візьмемо 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):
# Поєднати поточний запит з історією користувача, щоб зрозуміти контекст
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):
# Приклад логіки пошуку для інформаційного наміру
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 персоналізованих результатів
Приклад використання
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-моделі для написання та виконання коду. Такі агенти можуть вирішувати складні задачі, автоматизувати процеси та надавати цінні інсайти шляхом генерації та запуску коду різними мовами програмування.
Уявіть, що ви проєктуєте агента, який генерує код. Ось як це може працювати:
У цьому прикладі ми проєктуємо агента, що генерує код, — Агент подорожей, який допомагає користувачам планувати подорожі шляхом генерації та виконання коду. Цей агент може виконувати завдання, такі як отримання варіантів подорожей, фільтрація результатів та складання маршруту, використовуючи генеративний 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):
# Приклад: Згенерувати код для пошуку рейсів на основі уподобань користувача
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
Виконання згенерованого коду
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)
Генерація маршруту
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):
# Налаштувати параметри на основі відгуків користувача
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)
Урахування схеми таблиці дійсно може покращити процес генерації запитів, використовуючи усвідомлення середовища та міркування.
Ось приклад того, як це можна зробити:
Ось оновлений приклад коду на 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)
schema визначає, як вподобання слід коригувати на основі відгуків. Він містить поля, такі як favorites та avoid, з відповідними коригуваннями.adjust_based_on_feedback method): Цей метод коригує вподобання на основі відгуків користувача та схеми.adjust_based_on_environment method): Цей метод налаштовує коригування залежно від схеми та відгуків.Зробивши систему усвідомленою щодо середовища та застосувавши міркування на основі схеми, вона може генерувати більш точні та релевантні запити, що призводить до кращих рекомендацій щодо подорожей і персоналізованого досвіду користувача.
SQL (Structured Query Language) — потужний інструмент для взаємодії з базами даних. Коли його використовують як частину підходу Retrieval-Augmented Generation (RAG), SQL може витягувати релевантні дані з баз даних, щоб інформувати та генерувати відповіді або дії в AI-агентах. Розглянемо, як SQL можна використовувати як техніку RAG у контексті Агента подорожей.
Приклад: Агент з аналізу даних:
Збирання вподобань користувача
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-агенти, такі як Агент подорожей, можуть динамічно отримувати та використовувати релевантні дані для надання точних і персоналізованих рекомендацій.
Щоб продемонструвати реалізацію метакогніції, створимо простого агента, який відображає свій процес прийняття рішень під час вирішення задачі. У цьому прикладі ми побудуємо систему, де агент намагається оптимізувати вибір готелю, а потім оцінює власне міркування й коригує стратегію, коли робить помилки або приймає субоптимальні рішення.
Ми симулюватимемо це на базовому прикладі, де агент обирає готелі на основі поєднання ціни та якості, але потім «рефлексує» над своїми рішеннями та коригує їх відповідно.
Ось приклад:
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-агентах.
Приєднуйтесь до Discord спільноти Microsoft Foundry, щоб зустрітися з іншими учнями, відвідати години консультацій і отримати відповіді на свої питання щодо AI-агентів.
Шаблон мультиагентного проєктування
Відмова від відповідальності: Цей документ було перекладено з використанням сервісу перекладу на базі ШІ Co-op Translator. Хоча ми прагнемо до точності, просимо врахувати, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується звертатися до професійного перекладу, виконаного людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.