(点击上方图片查看本节视频)
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):
# 根据偏好搜索航班、酒店和景点
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)
通过集成元认知,旅行代理可提供更个性化和准确的旅行建议,提升用户体验。
规划是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)
# 在预订请求中的示例用法
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提供更加准确和相关的旅行推荐。
主要包括:
示例:
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)
以下为结合纠正型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 的旅行代理应用中实现预先加载上下文:
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__ 方法):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']
# 示例用法
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):
# 为 Azure OpenAI 生成提示
prompt = self.generate_prompt(preferences)
# 定义请求的头信息和载荷
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
payload = {
"prompt": prompt,
"max_tokens": 150,
"temperature": 0.7
}
# 调用 Azure OpenAI API 获取重新排序和评分的目的地
response = requests.post(endpoint, headers=headers, json=payload)
response_data = response.json()
# 提取并返回推荐结果
recommendations = response_data['choices'][0]['text'].strip().split('\n')
return recommendations
def generate_prompt(self, preferences):
prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
for key, value in preferences.items():
prompt += f"{key}: {value}\n"
prompt += "\nDestinations:\n"
for destination in self.destinations:
prompt += f"- {destination['name']}: {destination['description']}\n"
return prompt
# 示例用法
destinations = [
{"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
{"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
{"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
{"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]
preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'
travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
print(rec)
初始化:TravelAgent 类初始化时载入一系列潜在旅行目的地,每个包含名称和描述等属性。
获取推荐(get_recommendations 方法):该方法基于用户偏好生成发送给 Azure OpenAI 服务的提示,并通过 HTTP POST 请求调用 Azure OpenAI API 来获取重排序和评分后的目的地。
生成提示(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)既可以是一种提示技术,也可以是一种AI代理开发中的工具。理解两者的区别能帮助你更有效地利用 RAG。
什么是?
工作原理:
旅行代理中的示例:
什么是?
工作原理:
旅行代理中的示例:
| 方面 | 提示技术 | 工具 |
|---|---|---|
| 手动 vs 自动 | 每个查询手动构造提示。 | 自动化处理检索和生成。 |
| 控制能力 | 对检索过程有更多控制。 | 简化并自动化检索和生成。 |
| 灵活性 | 允许根据特定需求自定义提示。 | 更适合大规模实施。 |
| 复杂度 | 需要设计和调优提示。 | 更易于集成到 AI 代理架构中。 |
提示技术示例:
def search_museums_in_paris():
prompt = "Find top museums in Paris"
search_results = search_web(prompt)
return search_results
museums = search_museums_in_paris()
print("Top Museums in Paris:", museums)
工具示例:
class Travel_Agent:
def __init__(self):
self.rag_tool = RAGTool()
def get_museums_in_paris(self):
user_input = "I want to visit museums in Paris."
response = self.rag_tool.retrieve_and_generate(user_input)
return response
travel_agent = Travel_Agent()
museums = travel_agent.get_museums_in_paris()
print("Top Museums in Paris:", museums)
评估相关性是 AI 代理性能的关键环节。它确保代理检索和生成的信息适当、准确且对用户有用。下面探讨 AI 代理中如何评估相关性,包括实践示例和技术。
示例:
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):
# 使用自然语言处理从用户的查询中提取关键信息
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] # 返回前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)
目标导向搜索涉及理解和解析用户查询背后的目的或目标,以检索和生成最相关且有用的信息。这一方法超越了简单关键词匹配,更注重把握用户的实际需求和上下文。
以旅行代理为例,看看如何实现目标导向搜索。
收集用户偏好
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 方法):该方法根据用户反馈和架构调整偏好。adjust_based_on_environment 方法):此方法根据架构和反馈定制调整。通过使系统具备环境感知能力并基于架构进行推理,它可以生成更准确和相关的查询,从而提供更好的旅行推荐和更个性化的用户体验。
SQL(结构化查询语言)是与数据库交互的强大工具。作为检索增强生成 (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 作为检索增强生成 (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()
# 第一步:代理使用“最便宜”策略推荐酒店
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")
# 第二步:代理反思选择,并在必要时调整策略
reflection_result = agent.reflect_on_choice()
print(reflection_result)
# 第三步:代理再次推荐,这次使用调整后的策略
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")
关键在于代理具备:
这是一种简单的元认知形式,系统能够基于内部反馈调整推理过程。
元认知是一个强大的工具,能显著增强 AI 代理的能力。通过整合元认知过程,可以设计出更智能、更适应性强且更高效的代理。使用附加资源进一步探索 AI 代理中引人入胜的元认知世界。
加入 Microsoft Foundry Discord,与其他学习者交流,参加办公时间并获得 AI 代理相关问题的解答。
免责声明:
本文档使用 AI 翻译服务 Co-op Translator 进行翻译。虽然我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言版本的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用本翻译而产生的任何误解或误释承担责任。