(点击上方图片观看本课程视频)
人工智能代理中的元认知
欢迎学习人工智能代理中的元认知课程!本章专为那些对人工智能代理如何思考其自身思维过程感到好奇的初学者设计。学完本课程后,您将理解核心概念,并掌握实际示例,以便在人工智能代理设计中应用元认知。
完成本课程后,您将能够:
元认知指的是涉及思考自身思维的更高阶认知过程。对于人工智能代理而言,这意味着能够根据自我意识和过往经验评估和调整其行动。元认知,或“思考关于思考”,是代理式人工智能系统发展中的一个重要概念。它涉及人工智能系统意识到其自身的内部过程,并能够相应地监控、调节和调整其行为。就像我们审时度势或解决问题时所做的那样。这种自我意识可以帮助人工智能系统做出更好的决策,识别错误,并随着时间的推移提高其性能——这又回到了图灵测试以及关于人工智能是否会取代人类的争论。
在代理式人工智能系统的背景下,元认知可以帮助解决以下几个挑战:
元认知,或“思考关于思考”,是一种更高阶的认知过程,涉及对自身认知过程的自我意识和自我调节。在人工智能领域,元认知使代理能够评估和调整其策略和行动,从而提高解决问题和决策的能力。通过理解元认知,您可以设计出不仅更智能,而且更具适应性和效率的人工智能代理。在真正的元认知中,您会看到人工智能明确地推理其自身的推理过程。
示例:“我优先选择了更便宜的航班,因为……我可能错过了直飞航班,所以让我重新检查一下。” 跟踪它选择某个路线的方式或原因。
元认知在人工智能代理设计中扮演着至关重要的角色,原因如下:
在深入了解元认知过程之前,了解人工智能代理的基本组成部分至关重要。人工智能代理通常由以下部分组成:
这些组件协同工作,创建一个可以执行特定任务的“专业单元”。
示例:考虑一个旅行代理服务,它不仅规划您的假期,还根据实时数据和过往客户旅程经验调整其路径。
想象一下您正在设计一个由人工智能驱动的旅行代理服务。这个代理,“旅行代理”,协助用户规划他们的假期。为了整合元认知,“旅行代理”需要根据自我意识和过往经验评估和调整其行动。以下是元认知可能发挥作用的方式:
当前任务是帮助用户规划一次巴黎之旅。
“旅行代理”使用元认知来评估其表现并从过往经验中学习。例如:
以下是“旅行代理”代码在结合元认知时可能呈现的简化示例:
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)
通过整合元认知,“旅行代理”可以提供更个性化和准确的旅行推荐,从而提升整体用户体验。
规划是人工智能代理行为的关键组成部分。它涉及勾勒实现目标所需的步骤,考虑当前状态、资源和可能的障碍。
示例:以下是“旅行代理”需要采取的步骤,以有效地协助用户规划旅行:
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 技术来纠正错误并提高人工智能代理的准确性。这涉及:
考虑一个从网络检索信息以回答用户查询的搜索代理。纠正性 RAG 方法可能涉及:
纠正性 RAG(检索增强生成)增强了人工智能检索和生成信息并纠正任何不准确之处的能力。让我们看看“旅行代理”如何使用纠正性 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 方法:
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
# 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)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)
预加载上下文涉及在处理查询之前将相关上下文或背景信息加载到模型中。这意味着模型从一开始就可以访问这些信息,这有助于它生成更明智的响应,而无需在过程中检索额外数据。
以下是一个简化的示例,说明旅行代理应用程序在 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 服务的方法:
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 服务生成提示,并向 Azure OpenAI API 发出 HTTP POST 请求以获取重新排名和评分的目的地。
生成提示(generate_prompt
方法):此方法构建 Azure OpenAI 的提示,包括用户偏好和目的地列表。提示指导模型根据提供的偏好重新排名和评分目的地。
API 调用:requests
库用于向 Azure OpenAI API 端点发出 HTTP POST 请求。响应包含重新排名和评分的目的地。
使用示例:旅行代理收集用户偏好(例如,对观光和多元文化的兴趣),并使用 Azure OpenAI 服务获取旅行目的地的重新排名和评分推荐。
请务必将 your_azure_openai_api_key
替换为您的实际 Azure OpenAI API 密钥,并将 https://your-endpoint.com/...
替换为您的 Azure OpenAI 部署的实际端点 URL。
通过利用 LLM 进行重新排名和评分,旅行代理可以为客户提供更个性化和相关的旅行推荐,从而提升他们的整体体验。
检索增强生成(RAG)在人工智能代理的开发中既可以作为一种提示技术,也可以作为一种工具。理解两者之间的区别可以帮助您在项目中更有效地利用 RAG。
它是什么?
工作原理
旅行代理中的示例:
它是什么?
工作原理
旅行代理中的示例:
方面 | 提示技术 | 工具 |
---|---|---|
手动 vs 自动 | 为每个查询手动制定提示。 | 检索和生成的自动化过程。 |
控制 | 对检索过程提供更多控制。 | 简化并自动化检索和生成。 |
灵活性 | 允许根据特定需求定制提示。 | 对于大规模实施更高效。 |
复杂性 | 需要编写和调整提示。 | 更容易集成到人工智能代理的架构中。 |
提示技术示例
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)
评估相关性是人工智能代理性能的一个关键方面。它确保代理检索和生成的信息对用户来说是适当、准确和有用的。让我们探讨如何在人工智能代理中评估相关性,包括实际示例和技术。
示例
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] # Return top 10 relevant items
示例
def process_query(query):
# Use NLP to extract key information from the user's query
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
以下是“旅行代理”如何评估旅行推荐相关性的实用示例:
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] # Return top 10 relevant items
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
# 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)"]}
updated_items = travel_agent.adjust_based_on_feedback(feedback, itinerary['hotels'])
print("Updated Itinerary with Feedback:", updated_items)
意图搜索涉及理解和解释用户查询背后的潜在目的或目标,以检索和生成最相关和有用的信息。这种方法超越了简单的关键词匹配,专注于掌握用户的实际需求和上下文。
让我们以“旅行代理”为例,看看如何实现意图搜索。
收集用户偏好
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)
代码生成代理使用人工智能模型编写和执行代码,解决复杂问题并自动化任务。
代码生成代理使用生成式人工智能模型来编写和执行代码。这些代理可以通过生成和运行各种编程语言的代码来解决复杂问题、自动化任务并提供有价值的见解。
想象一下您正在设计一个代码生成代理。以下是它可能的工作方式:
在此示例中,我们将设计一个代码生成代理“旅行代理”,通过生成和执行代码来协助用户规划旅行。该代理可以处理诸如获取旅行选项、过滤结果和使用生成式人工智能编译行程等任务。
收集用户偏好
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(结构化查询语言)是与数据库交互的强大工具。当作为检索增强生成(RAG)方法的一部分使用时,SQL 可以从数据库中检索相关数据,以为人工智能代理提供信息并生成响应或操作。让我们探讨如何在旅行代理的背景下将 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 作为检索增强生成(RAG)技术的一部分,像“旅行代理”这样的人工智能代理可以动态检索和利用相关数据,以提供准确和个性化的推荐。
为了展示元认知的实现,让我们创建一个简单的代理,它在解决问题时会反思其决策过程。对于这个例子,我们将构建一个系统,其中代理尝试优化酒店选择,然后评估其自身的推理,并在犯错或做出次优选择时调整其策略。
我们将使用一个基本示例来模拟这一点,其中代理根据价格和质量的组合选择酒店,但它会“反思”其决策并相应地进行调整。
以下是一个例子:
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']}")
这里的关键是代理能够:
这是一种简单的元认知形式,其中系统能够根据内部反馈调整其推理过程。
元认知是一个强大的工具,可以显著增强人工智能代理的能力。通过整合元认知过程,您可以设计出更智能、适应性更强、效率更高的代理。使用额外资源进一步探索人工智能代理中元认知迷人的世界。
加入 Azure AI Foundry Discord,与其他学习者交流,参加办公时间,并获得您的 AI Agent 问题解答。