(點擊上方圖片觀看本課程影片)
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 服務的提示詞,並向 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 的重排與評分,旅遊代理能提供更個人化且符合需求的旅遊推薦,提升整體服務體驗。
檢索增強生成(Retrieval-Augmented Generation,RAG)既可視為一種提示技術,也可視為工具,用於 AI 代理開發。理解兩者差異,有助您更有效利用 RAG。
定義
流程
旅遊代理範例:
定義
流程
旅遊代理範例:
| 項目 | 提示技術 | 工具 |
|---|---|---|
| 手動與自動 | 需為每個查詢手動制定提示詞。 | 全自動化檢索與生成流程。 |
| 控制力 | 對檢索流程有較高控制權。 | 簡化並自動化檢索生成過程。 |
| 彈性 | 可根據特定需求自訂提示詞。 | 適合大規模實作,更具效率。 |
| 複雜度 | 需要撰寫及調整提示詞。 | 易於整合於 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)
基於表格結構 (schema) 的了解,確實能提升查詢生成過程,藉由環境感知與推理來進行。
以下示範如何執行:
下面是一個結合這些概念的 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()
# 步驟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 代理相關問題的解答。
免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們盡力確保準確性,請注意自動翻譯可能包含錯誤或不準確之處。原始文件以其母語版本為權威依據。對於重要資訊,建議採用專業人工翻譯。我們不對使用本翻譯所產生之任何誤解或誤譯承擔責任。