(點擊上方圖片觀看本課程影片)
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 服務的提示(prompt),並藉由 HTTP POST 請求呼叫 Azure OpenAI API,取得重排與評分的目的地結果。
產生提示(generate_prompt 方法):此方法構建 Azure OpenAI 的提示內容,包括用戶偏好與目的地清單。此提示引導模型根據提供的偏好重排和評分目的地。
API 呼叫:使用 requests 函式庫發送 HTTP POST 請求到 Azure OpenAI API 端點。回應涵蓋重排與評分後的目的地結果。
範例使用:旅行代理收集用戶偏好(例如對觀光和多元文化感興趣),並使用 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):
# 使用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
以下是旅行代理如何評估旅行推薦相關性的實務範例:
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] # 返回前十個相關項目
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 中以 RAG 技術使用 SQL。
範例: 一個數據分析代理:
收集用戶偏好
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()
# 第一步:代理人使用「最便宜」策略推薦酒店
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 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。