(點擊上方圖片觀看本課程視頻)
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 進行重新排序與評分,系統能提供更準確、具上下文相關性的資訊,提升整體用戶體驗。
以下展示如何在 Python 中讓旅遊代理利用大型語言模型(LLM)依照使用者偏好重新排序並評分旅遊地點的範例:
旅遊代理想根據客戶偏好推薦最佳旅遊地點。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 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)既可視為提示技術,也可視為 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 模型撰寫和執行程式碼。這些代理人可透過在各種程式語言中生成並運行程式碼來解決複雜問題、自動化任務,並提供寶貴的見解。
假設你正在設計一個程式碼生成代理人。其運作方式如下:
此示例中,我們將設計一個名為 Travel Agent 的程式碼生成代理人,協助使用者透過生成並執行程式碼來計劃旅程。此代理人能處理如取得旅遊選項、篩選結果及使用生成式 AI 編輯行程等任務。
收集使用者偏好
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
def gather_preferences(self, preferences):
self.user_preferences = preferences
生成獲取資料的程式碼
def generate_code_to_fetch_data(preferences):
# 例子:產生代碼以根據用戶偏好搜尋航班
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 代理生成回答或執行動作。讓我們探討在 Travel Agent 案例中如何利用 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)技術,像 Travel Agent 這類 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 代理中的元認知精彩世界。
加入 Microsoft Foundry Discord,與其他學習者交流、參加辦公時間並獲得 AI 代理相關問題的解答。
免責聲明:
本文件已使用人工智能翻譯服務 Co-op Translator 進行翻譯。儘管我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用此翻譯而引起的任何誤解或誤釋負責。