(點擊上方圖片觀看本課程的影片)
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):
# Search for flights, hotels, and attractions based on preferences
flights = search_flights(self.user_preferences)
hotels = search_hotels(self.user_preferences)
attractions = search_attractions(self.user_preferences)
return flights, hotels, attractions
def generate_recommendations(self):
flights, hotels, attractions = self.retrieve_information()
itinerary = create_itinerary(flights, hotels, attractions)
return itinerary
def adjust_based_on_feedback(self, feedback):
self.experience_data.append(feedback)
# Analyze feedback and adjust future recommendations
self.user_preferences = adjust_preferences(self.user_preferences, feedback)
# Example usage
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)
通過融入後設認知,旅遊代理可以提供更個性化且準確的旅遊建議,提升整體用戶體驗。
規劃是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)
# Example usage within a booing request
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)
首先,讓我們了解RAG工具與預先上下文加載的區別。
RAG將檢索系統與生成模型結合。當提出查詢時,檢索系統從外部來源獲取相關文件或數據,這些檢索到的資訊用於增強生成模型的輸入。這有助於模型生成更準確且上下文相關的回應。
在RAG系統中,代理從知識庫中檢索相關資訊,並利用這些資訊生成適當的回應或行動。
修正型RAG方法專注於使用RAG技術來修正錯誤並提升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)
以下是一個簡化的Python程式碼範例,展示如何在旅遊代理中融入修正型RAG方法:
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
self.experience_data = []
def gather_preferences(self, preferences):
self.user_preferences = preferences
def retrieve_information(self):
flights = search_flights(self.user_preferences)
hotels = search_hotels(self.user_preferences)
attractions = search_attractions(self.user_preferences)
return flights, hotels, attractions
def generate_recommendations(self):
flights, hotels, attractions = self.retrieve_information()
itinerary = create_itinerary(flights, hotels, attractions)
return itinerary
def adjust_based_on_feedback(self, feedback):
self.experience_data.append(feedback)
self.user_preferences = adjust_preferences(self.user_preferences, feedback)
new_itinerary = self.generate_recommendations()
return new_itinerary
# Example usage
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)
預先載入上下文指的是在處理查詢之前,先將相關的上下文或背景資訊載入模型。這意味著模型從一開始就能夠存取這些資訊,從而幫助它生成更具資訊性的回應,而無需在過程中額外檢索資料。
以下是一個簡化的範例,展示如何在 Python 中為旅行代理應用程式進行預先載入上下文:
class TravelAgent:
def __init__(self):
# Pre-load popular destinations and their information
self.context = {
"Paris": {"country": "France", "currency": "Euro", "language": "French", "attractions": ["Eiffel Tower", "Louvre Museum"]},
"Tokyo": {"country": "Japan", "currency": "Yen", "language": "Japanese", "attractions": ["Tokyo Tower", "Shibuya Crossing"]},
"New York": {"country": "USA", "currency": "Dollar", "language": "English", "attractions": ["Statue of Liberty", "Times Square"]},
"Sydney": {"country": "Australia", "currency": "Dollar", "language": "English", "attractions": ["Sydney Opera House", "Bondi Beach"]}
}
def get_destination_info(self, destination):
# Fetch destination information from pre-loaded context
info = self.context.get(destination)
if info:
return f"{destination}:\nCountry: {info['country']}\nCurrency: {info['currency']}\nLanguage: {info['language']}\nAttractions: {', '.join(info['attractions'])}"
else:
return f"Sorry, we don't have information on {destination}."
# Example usage
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))
初始化(__init__
方法):TravelAgent
類別預先載入了一個字典,包含有關熱門目的地(如巴黎、東京、紐約和雪梨)的資訊。這個字典包括每個目的地的國家、貨幣、語言以及主要景點等詳細資料。
檢索資訊(get_destination_info
方法):當使用者查詢特定目的地時,get_destination_info
方法會從預載的上下文字典中提取相關資訊。
透過預先載入上下文,旅行代理應用程式可以快速回應使用者查詢,而無需即時從外部來源檢索資訊。這使得應用程式更加高效且反應迅速。
以目標啟動計劃指的是在開始時就設定明確的目標或期望結果。透過事先定義這個目標,模型可以在整個迭代過程中以此作為指導原則。這有助於確保每次迭代都更接近達成期望結果,使過程更加高效且專注。
以下是一個範例,展示如何在 Python 中為旅行代理應用程式在迭代前以目標啟動旅行計劃:
旅行代理希望為客戶規劃一個量身定制的假期。目標是根據客戶的偏好和預算,創建一個能最大化客戶滿意度的旅行行程。
class TravelAgent:
def __init__(self, destinations):
self.destinations = destinations
def bootstrap_plan(self, preferences, budget):
plan = []
total_cost = 0
for destination in self.destinations:
if total_cost + destination['cost'] <= budget and self.match_preferences(destination, preferences):
plan.append(destination)
total_cost += destination['cost']
return plan
def match_preferences(self, destination, preferences):
for key, value in preferences.items():
if destination.get(key) != value:
return False
return True
def iterate_plan(self, plan, preferences, budget):
for i in range(len(plan)):
for destination in self.destinations:
if destination not in plan and self.match_preferences(destination, preferences) and self.calculate_cost(plan, destination) <= budget:
plan[i] = destination
break
return plan
def calculate_cost(self, plan, new_destination):
return sum(destination['cost'] for destination in plan) + new_destination['cost']
# Example usage
destinations = [
{"name": "Paris", "cost": 1000, "activity": "sightseeing"},
{"name": "Tokyo", "cost": 1200, "activity": "shopping"},
{"name": "New York", "cost": 900, "activity": "sightseeing"},
{"name": "Sydney", "cost": 1100, "activity": "beach"},
]
preferences = {"activity": "sightseeing"}
budget = 2000
travel_agent = TravelAgent(destinations)
initial_plan = travel_agent.bootstrap_plan(preferences, budget)
print("Initial Plan:", initial_plan)
refined_plan = travel_agent.iterate_plan(initial_plan, preferences, budget)
print("Refined Plan:", refined_plan)
初始化(__init__
方法):TravelAgent
類別初始化時包含一個潛在目的地的清單,每個目的地都有名稱、成本和活動類型等屬性。
啟動計劃(bootstrap_plan
方法):此方法根據客戶的偏好和預算創建初始旅行計劃。它會遍歷目的地清單,並將符合客戶偏好且在預算範圍內的目的地加入計劃。
匹配偏好(match_preferences
方法):此方法檢查某個目的地是否符合客戶的偏好。
迭代計劃(iterate_plan
方法):此方法透過嘗試用更符合客戶偏好的目的地替換計劃中的每個目的地,來優化初始計劃,同時考慮預算限制。
計算成本(calculate_cost
方法):此方法計算當前計劃的總成本,包括可能新增的目的地。
透過以明確目標(例如最大化客戶滿意度)啟動計劃並迭代以優化計劃,旅行代理可以為客戶創建量身定制且優化的旅行行程。這種方法確保旅行計劃從一開始就符合客戶的偏好和預算,並在每次迭代中持續改進。
大型語言模型(LLM)可以用於重新排序和評分,透過評估檢索到的文件或生成的回應的相關性和品質來實現。以下是其工作原理:
檢索:初始檢索步驟根據查詢獲取一組候選文件或回應。
重新排序:LLM 評估這些候選項,根據其相關性和品質進行重新排序。此步驟確保最相關且高品質的資訊優先呈現。
評分:LLM 為每個候選項分配分數,反映其相關性和品質。這有助於選擇最佳的回應或文件提供給使用者。
透過利用 LLM 進行重新排序和評分,系統可以提供更準確且具上下文相關性的資訊,提升整體使用者體驗。
以下是一個範例,展示旅行代理如何使用大型語言模型(LLM)根據使用者偏好重新排序和評分旅行目的地的 Python 程式碼:
旅行代理希望根據客戶的偏好推薦最佳旅行目的地。LLM 將幫助重新排序和評分目的地,以確保呈現最相關的選項。
以下是如何使用 Azure OpenAI Services 更新前述範例:
import requests
import json
class TravelAgent:
def __init__(self, destinations):
self.destinations = destinations
def get_recommendations(self, preferences, api_key, endpoint):
# Generate a prompt for the Azure OpenAI
prompt = self.generate_prompt(preferences)
# Define headers and payload for the request
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
payload = {
"prompt": prompt,
"max_tokens": 150,
"temperature": 0.7
}
# Call the Azure OpenAI API to get the re-ranked and scored destinations
response = requests.post(endpoint, headers=headers, json=payload)
response_data = response.json()
# Extract and return the recommendations
recommendations = response_data['choices'][0]['text'].strip().split('\n')
return recommendations
def generate_prompt(self, preferences):
prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
for key, value in preferences.items():
prompt += f"{key}: {value}\n"
prompt += "\nDestinations:\n"
for destination in self.destinations:
prompt += f"- {destination['name']}: {destination['description']}\n"
return prompt
# Example usage
destinations = [
{"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
{"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
{"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
{"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]
preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'
travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
print(rec)
初始化:TravelAgent
類別初始化時包含一個潛在旅行目的地的清單,每個目的地都有名稱和描述等屬性。
獲取推薦(get_recommendations
方法):此方法根據使用者偏好生成 Azure OpenAI 服務的提示,並向 Azure OpenAI API 發送 HTTP POST 請求以獲取重新排序和評分的目的地。
生成提示(generate_prompt
方法):此方法構建一個提示,包含使用者偏好和目的地清單。提示引導模型根據提供的偏好重新排序和評分目的地。
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] # Return top 10 relevant items
範例:
def process_query(query):
# Use NLP to extract key information from the user's query
processed_query = nlp(query)
return processed_query
範例:
def adjust_based_on_feedback(feedback, items):
for item in items:
if item['name'] in feedback['liked']:
item['relevance'] += 1
if item['name'] in feedback['disliked']:
item['relevance'] -= 1
return items
以下是一個實際範例,展示旅行代理如何評估旅行推薦的相關性:
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
self.experience_data = []
def gather_preferences(self, preferences):
self.user_preferences = preferences
def retrieve_information(self):
flights = search_flights(self.user_preferences)
hotels = search_hotels(self.user_preferences)
attractions = search_attractions(self.user_preferences)
return flights, hotels, attractions
def generate_recommendations(self):
flights, hotels, attractions = self.retrieve_information()
ranked_hotels = self.filter_and_rank(hotels, self.user_preferences)
itinerary = create_itinerary(flights, ranked_hotels, attractions)
return itinerary
def filter_and_rank(self, items, query):
ranked_items = sorted(items, key=lambda item: self.relevance_score(item, query), reverse=True)
return ranked_items[:10] # Return top 10 relevant items
def relevance_score(self, item, query):
score = 0
if item['category'] in query['interests']:
score += 1
if item['price'] <= query['budget']:
score += 1
if item['location'] == query['destination']:
score += 1
return score
def adjust_based_on_feedback(self, feedback, items):
for item in items:
if item['name'] in feedback['liked']:
item['relevance'] += 1
if item['name'] in feedback['disliked']:
item['relevance'] -= 1
return items
# Example usage
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_items = travel_agent.adjust_based_on_feedback(feedback, itinerary['hotels'])
print("Updated Itinerary with Feedback:", updated_items)
意圖導向的搜尋涉及理解和解釋使用者查詢背後的目的或目標,以檢索和生成最相關且有用的資訊。這種方法超越了簡單的關鍵字匹配,專注於掌握使用者的實際需求和上下文。
讓我們以旅遊代理為例,看看如何實現基於意圖的搜尋。
收集使用者偏好
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
def gather_preferences(self, preferences):
self.user_preferences = preferences
理解使用者意圖
def identify_intent(query):
if "book" in query or "purchase" in query:
return "transactional"
elif "website" in query or "official" in query:
return "navigational"
else:
return "informational"
情境感知
def analyze_context(query, user_history):
# Combine current query with user history to understand context
context = {
"current_query": query,
"user_history": user_history
}
return context
搜尋並個性化結果
def search_with_intent(query, preferences, user_history):
intent = identify_intent(query)
context = analyze_context(query, user_history)
if intent == "informational":
search_results = search_information(query, preferences)
elif intent == "navigational":
search_results = search_navigation(query)
elif intent == "transactional":
search_results = search_transaction(query, preferences)
personalized_results = personalize_results(search_results, user_history)
return personalized_results
def search_information(query, preferences):
# Example search logic for informational intent
results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
return results
def search_navigation(query):
# Example search logic for navigational intent
results = search_web(query)
return results
def search_transaction(query, preferences):
# Example search logic for transactional intent
results = search_web(f"book {query} to {preferences['destination']}")
return results
def personalize_results(results, user_history):
# Example personalization logic
personalized = [result for result in results if result not in user_history]
return personalized[:10] # Return top 10 personalized results
範例使用
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
user_history = ["Louvre Museum website", "Book flight to Paris"]
query = "best museums in Paris"
results = search_with_intent(query, preferences, user_history)
print("Search Results:", results)
程式碼生成代理使用 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):
# Example: Generate code to search for flights based on user preferences
code = f"""
def search_flights():
import requests
response = requests.get('https://api.example.com/flights', params={preferences})
return response.json()
"""
return code
def generate_code_to_fetch_hotels(preferences):
# Example: Generate code to search for hotels
code = f"""
def search_hotels():
import requests
response = requests.get('https://api.example.com/hotels', params={preferences})
return response.json()
"""
return code
執行生成的程式碼
def execute_code(code):
# Execute the generated code using exec
exec(code)
result = locals()
return result
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
flight_code = generate_code_to_fetch_data(preferences)
hotel_code = generate_code_to_fetch_hotels(preferences)
flights = execute_code(flight_code)
hotels = execute_code(hotel_code)
print("Flight Options:", flights)
print("Hotel Options:", hotels)
生成行程
def generate_itinerary(flights, hotels, attractions):
itinerary = {
"flights": flights,
"hotels": hotels,
"attractions": attractions
}
return itinerary
attractions = search_attractions(preferences)
itinerary = generate_itinerary(flights, hotels, attractions)
print("Suggested Itinerary:", itinerary)
根據反饋進行調整
def adjust_based_on_feedback(feedback, preferences):
# Adjust preferences based on user feedback
if "liked" in feedback:
preferences["favorites"] = feedback["liked"]
if "disliked" in feedback:
preferences["avoid"] = feedback["disliked"]
return preferences
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences)
# Regenerate and execute code with updated preferences
updated_flight_code = generate_code_to_fetch_data(updated_preferences)
updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)
updated_flights = execute_code(updated_flight_code)
updated_hotels = execute_code(updated_hotel_code)
updated_itinerary = generate_itinerary(updated_flights, updated_hotels, attractions)
print("Updated Itinerary:", updated_itinerary)
基於表格的結構可以通過利用環境感知和推理來增強查詢生成過程。
以下是一個範例:
以下是一個包含這些概念的更新 Python 程式碼範例:
def adjust_based_on_feedback(feedback, preferences, schema):
# Adjust preferences based on user feedback
if "liked" in feedback:
preferences["favorites"] = feedback["liked"]
if "disliked" in feedback:
preferences["avoid"] = feedback["disliked"]
# Reasoning based on schema to adjust other related preferences
for field in schema:
if field in preferences:
preferences[field] = adjust_based_on_environment(feedback, field, schema)
return preferences
def adjust_based_on_environment(feedback, field, schema):
# Custom logic to adjust preferences based on schema and feedback
if field in feedback["liked"]:
return schema[field]["positive_adjustment"]
elif field in feedback["disliked"]:
return schema[field]["negative_adjustment"]
return schema[field]["default"]
def generate_code_to_fetch_data(preferences):
# Generate code to fetch flight data based on updated preferences
return f"fetch_flights(preferences={preferences})"
def generate_code_to_fetch_hotels(preferences):
# Generate code to fetch hotel data based on updated preferences
return f"fetch_hotels(preferences={preferences})"
def execute_code(code):
# Simulate execution of code and return mock data
return {"data": f"Executed: {code}"}
def generate_itinerary(flights, hotels, attractions):
# Generate itinerary based on flights, hotels, and attractions
return {"flights": flights, "hotels": hotels, "attractions": attractions}
# Example schema
schema = {
"favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
"avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}
# Example usage
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)
# Regenerate and execute code with updated preferences
updated_flight_code = generate_code_to_fetch_data(updated_preferences)
updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)
updated_flights = execute_code(updated_flight_code)
updated_hotels = execute_code(updated_hotel_code)
updated_itinerary = generate_itinerary(updated_flights, updated_hotels, feedback["liked"])
print("Updated Itinerary:", updated_itinerary)
schema
字典定義了如何根據反饋調整偏好。它包括如 favorites
和 avoid
等字段及其對應的調整。adjust_based_on_feedback
方法):此方法根據使用者反饋和結構調整偏好。adjust_based_on_environment
方法):此方法根據結構和反饋自定義調整。通過使系統具備環境感知能力並基於結構進行推理,它可以生成更準確和相關的查詢,從而提供更好的旅行建議和更個性化的使用者體驗。
SQL(結構化查詢語言)是一種與資料庫交互的強大工具。當作為檢索增強生成(RAG)方法的一部分使用時,SQL 可以從資料庫中檢索相關數據,以在 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 = [] # Stores the hotels chosen previously
self.corrected_choices = [] # Stores the corrected choices
self.recommendation_strategies = ['cheapest', 'highest_quality'] # Available strategies
def recommend_hotel(self, hotels, strategy):
"""
Recommend a hotel based on the chosen strategy.
The strategy can either be 'cheapest' or 'highest_quality'.
"""
if strategy == 'cheapest':
recommended = min(hotels, key=lambda x: x['price'])
elif strategy == 'highest_quality':
recommended = max(hotels, key=lambda x: x['quality'])
else:
recommended = None
self.previous_choices.append((strategy, recommended))
return recommended
def reflect_on_choice(self):
"""
Reflect on the last choice made and decide if the agent should adjust its strategy.
The agent considers if the previous choice led to a poor outcome.
"""
if not self.previous_choices:
return "No choices made yet."
last_choice_strategy, last_choice = self.previous_choices[-1]
# Let's assume we have some user feedback that tells us whether the last choice was good or not
user_feedback = self.get_user_feedback(last_choice)
if user_feedback == "bad":
# Adjust strategy if the previous choice was unsatisfactory
new_strategy = 'highest_quality' if last_choice_strategy == 'cheapest' else 'cheapest'
self.corrected_choices.append((new_strategy, last_choice))
return f"Reflecting on choice. Adjusting strategy to {new_strategy}."
else:
return "The choice was good. No need to adjust."
def get_user_feedback(self, hotel):
"""
Simulate user feedback based on hotel attributes.
For simplicity, assume if the hotel is too cheap, the feedback is "bad".
If the hotel has quality less than 7, feedback is "bad".
"""
if hotel['price'] < 100 or hotel['quality'] < 7:
return "bad"
return "good"
# Simulate a list of hotels (price and quality)
hotels = [
{'name': 'Budget Inn', 'price': 80, 'quality': 6},
{'name': 'Comfort Suites', 'price': 120, 'quality': 8},
{'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]
# Create an agent
agent = HotelRecommendationAgent()
# Step 1: The agent recommends a hotel using the "cheapest" strategy
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")
# Step 2: The agent reflects on the choice and adjusts strategy if necessary
reflection_result = agent.reflect_on_choice()
print(reflection_result)
# Step 3: The agent recommends again, this time using the adjusted strategy
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")
關鍵在於代理能夠:
這是一種簡單的元認知形式,系統能夠根據內部反饋調整其推理過程。
元認知是一種強大的工具,可以顯著提升 AI 代理的能力。通過整合元認知過程,您可以設計出更智能、更具適應性和更高效的代理。利用額外的資源進一步探索 AI 代理中元認知的迷人世界。
加入 Azure AI Foundry Discord,與其他學習者交流,參加辦公時間並解答您的 AI 代理問題。
免責聲明:
本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。