(上の画像をクリックすると、このレッスンの動画が視聴できます)
AIエージェントにおけるメタ認知
AIエージェントにおけるメタ認知のレッスンへようこそ!この章は、自身の思考プロセスについてAIエージェントがどのように考えられるかに興味のある初心者向けに設計されています。このレッスンの終了時には、重要な概念を理解し、AIエージェント設計にメタ認知を適用する実践的な例を使いこなせるようになります。
このレッスンを終えた後、あなたは以下のことができるようになります:
メタ認知とは、自身の思考について考える高次の認知プロセスを指します。AIエージェントにとっては、自己認識や過去の経験に基づいて行動を評価・調整できることを意味します。「思考について考える」メタ認知は、エージェント型AIシステムの開発において重要な概念です。これは、AIシステムが自らの内部プロセスを認識し、それに基づいて行動を監視・調整・適応させる能力を持つことを含みます。私たちが場の空気を読み取ったり問題を見つめたりするのと同様です。この自己認識は、AIシステムがより良い意思決定を行い、エラーを特定し、時間とともに性能を向上させることに役立ちます—これはチューリングテストやAIが世界を支配するかどうかの議論とも関連しています。
エージェント型AIシステムの文脈では、メタ認知は次のような課題に対応するのに役立ちます:
メタ認知、すなわち「思考について考える」とは、自身の認知プロセスの自己認識と自己調整を含む高次の認知過程です。AIの領域では、メタ認知はエージェントが自身の戦略や行動を評価・適応させることを可能にし、問題解決や意思決定能力の向上につながります。メタ認知を理解することで、より知的で適応性・効率性の高いAIエージェントを設計できます。真のメタ認知では、AIが自分の推論について明示的に考えている様子が見られます。
例:「安いフライトを優先しましたが…直行便を見逃しているかもしれません。再確認します。」 ある経路を選んだ理由を追跡する。
メタ認知はAIエージェント設計において多くの理由で重要な役割を果たします:

メタ認知プロセスに入る前に、AIエージェントの基本的な構成要素を理解しておくことが重要です。AIエージェントは一般的に以下で構成されます:
これらの要素は協力して特定のタスクを実行できる「専門ユニット」を形成します。
例: 旅行代理店を想定してください。リアルタイムデータや過去の顧客体験に基づいて計画を立て、旅程を調整するサービス型エージェントです。
AIによる旅行代理店サービスを設計すると想像してください。このエージェント「Travel Agent」はユーザーの休暇計画を支援します。メタ認知を組み込むには、「Travel Agent」が自己認識や過去の経験に基づき行動を評価・調整する必要があります。次がメタ認知の役割です:
パリへの旅行計画をユーザーのために立てる。
Travel Agentはメタ認知を利用し、自身のパフォーマンスを評価して過去の経験から学習します。例えば:
以下はメタ認知を組み込んだTravel Agentコードの簡略例です:
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)
メタ認知を取り入れることで、Travel Agentはより個別化され正確な旅行提案を提供し、全体のユーザー体験を向上させます。
計画はAIエージェントの行動における重要な要素です。目標達成に必要なステップを、現在の状況やリソース、障害を考慮しながら概要化します。
例: Travel Agentがユーザーの旅行計画支援のために取るべきステップ:
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はエラーを修正し、AIエージェントの精度を向上させるためにRAG技術を活用します。具体的には:
ウェブから情報を取得してユーザーの質問に答える検索エージェントの場合、修正型RAGは以下のように機能します:
修正型RAG(Retrieval-Augmented Generation)は、AIが情報を取得・生成しつつ誤りを修正する能力を強化します。Travel Agentがより正確で関連性の高い旅行提案を行うために修正型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)
以下は、Travel Agentに修正型RAGを組み込んだ簡易的なPythonコード例です:
class Travel_Agent:
def __init__(self):
self.user_preferences = {}
self.experience_data = []
def gather_preferences(self, preferences):
self.user_preferences = preferences
def retrieve_information(self):
flights = search_flights(self.user_preferences)
hotels = search_hotels(self.user_preferences)
attractions = search_attractions(self.user_preferences)
return flights, hotels, attractions
def generate_recommendations(self):
flights, hotels, attractions = self.retrieve_information()
itinerary = create_itinerary(flights, hotels, attractions)
return itinerary
def adjust_based_on_feedback(self, feedback):
self.experience_data.append(feedback)
self.user_preferences = adjust_preferences(self.user_preferences, feedback)
new_itinerary = self.generate_recommendations()
return new_itinerary
# 使用例
travel_agent = Travel_Agent()
preferences = {
"destination": "Paris",
"dates": "2025-04-01 to 2025-04-10",
"budget": "moderate",
"interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)
事前コンテキストロードとは、クエリを処理する前にモデルに関連するコンテキストや背景情報を読み込むことを指します。これにより、モデルは最初からこの情報にアクセスできるため、処理中に追加のデータを取得する必要がなく、より情報に基づいた応答を生成しやすくなります。
以下は、Pythonでの旅行代理店アプリケーションにおける事前コンテキストロードの簡略化された例です。
class TravelAgent:
def __init__(self):
# 人気の目的地及びその情報を事前に読み込む
self.context = {
"Paris": {"country": "France", "currency": "Euro", "language": "French", "attractions": ["Eiffel Tower", "Louvre Museum"]},
"Tokyo": {"country": "Japan", "currency": "Yen", "language": "Japanese", "attractions": ["Tokyo Tower", "Shibuya Crossing"]},
"New York": {"country": "USA", "currency": "Dollar", "language": "English", "attractions": ["Statue of Liberty", "Times Square"]},
"Sydney": {"country": "Australia", "currency": "Dollar", "language": "English", "attractions": ["Sydney Opera House", "Bondi Beach"]}
}
def get_destination_info(self, destination):
# 事前に読み込まれたコンテキストから目的地情報を取得する
info = self.context.get(destination)
if info:
return f"{destination}:\nCountry: {info['country']}\nCurrency: {info['currency']}\nLanguage: {info['language']}\nAttractions: {', '.join(info['attractions'])}"
else:
return f"Sorry, we don't have information on {destination}."
# 使用例
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))
初期化(__init__ メソッド): TravelAgent クラスは、パリ、東京、ニューヨーク、シドニーなどの人気の旅行先に関する情報を含む辞書を事前にロードします。この辞書には、各目的地の国、通貨、言語、主要な観光スポットなどの詳細が含まれます。
情報取得(get_destination_info メソッド): ユーザーが特定の目的地について問い合わせると、get_destination_info メソッドは事前にロードされたコンテキスト辞書から関連情報を取得します。
事前にコンテキストをロードすることで、旅行代理店アプリはリアルタイムに外部ソースから情報を取得することなくユーザーの問い合わせに迅速に対応でき、効率と応答性が向上します。
目標を設定して計画をブートストラップするとは、明確な目的や目標結果を最初に定めることを指します。この目標を前もって定義することで、モデルは反復処理の間ずっとそれを指針として活用できます。これにより、各反復が望ましい結果の達成に近づくようになり、プロセスがより効率的で焦点を絞ったものになります。
以下は、Pythonで旅行代理店向けに目標を設定してから旅行計画をブートストラップし、反復する例です。
旅行代理店が顧客の好みや予算に基づいてカスタマイズされた休暇プランを計画したいと考えています。目標は、顧客満足度を最大化する旅行日程を作成することです。
class TravelAgent:
def __init__(self, destinations):
self.destinations = destinations
def bootstrap_plan(self, preferences, budget):
plan = []
total_cost = 0
for destination in self.destinations:
if total_cost + destination['cost'] <= budget and self.match_preferences(destination, preferences):
plan.append(destination)
total_cost += destination['cost']
return plan
def match_preferences(self, destination, preferences):
for key, value in preferences.items():
if destination.get(key) != value:
return False
return True
def iterate_plan(self, plan, preferences, budget):
for i in range(len(plan)):
for destination in self.destinations:
if destination not in plan and self.match_preferences(destination, preferences) and self.calculate_cost(plan, destination) <= budget:
plan[i] = destination
break
return plan
def calculate_cost(self, plan, new_destination):
return sum(destination['cost'] for destination in plan) + new_destination['cost']
# 使用例
destinations = [
{"name": "Paris", "cost": 1000, "activity": "sightseeing"},
{"name": "Tokyo", "cost": 1200, "activity": "shopping"},
{"name": "New York", "cost": 900, "activity": "sightseeing"},
{"name": "Sydney", "cost": 1100, "activity": "beach"},
]
preferences = {"activity": "sightseeing"}
budget = 2000
travel_agent = TravelAgent(destinations)
initial_plan = travel_agent.bootstrap_plan(preferences, budget)
print("Initial Plan:", initial_plan)
refined_plan = travel_agent.iterate_plan(initial_plan, preferences, budget)
print("Refined Plan:", refined_plan)
初期化(__init__ メソッド): TravelAgent クラスは、名前、費用、アクティビティタイプなどの属性を持つ潜在的な目的地のリストで初期化されます。
計画のブートストラップ(bootstrap_plan メソッド): このメソッドは、顧客の好みと予算に基づいて初期の旅行計画を作成します。目的地リストを反復し、顧客の好みに合致し予算内であれば計画に加えます。
好みのマッチング(match_preferences メソッド): このメソッドは、目的地が顧客の好みに合っているかをチェックします。
計画の反復(iterate_plan メソッド): このメソッドは、計画内の各目的地をより良い選択に置き換えられるか試して計画を洗練し、顧客の好みと予算制約を考慮します。
費用計算(calculate_cost メソッド): このメソッドは、現在の計画と追加の候補地を含めた場合の総費用を計算します。
明確な目標(例:顧客満足度の最大化)を設定し、それに基づき計画をブートストラップして反復することで、旅行代理店は顧客に対してカスタマイズされ、最適化された旅行日程を作成できます。この方法により、旅行計画は最初から顧客の好みと予算に適合し、反復ごとに改善されます。
大規模言語モデル(LLM)は、取得した文書や生成された応答の関連性や品質を評価してリランキングやスコアリングに利用できます。仕組みは以下の通りです。
検索: 最初の検索ステップで、クエリに基づいて候補文書または応答のセットを取得します。
リランキング: LLMがこれらの候補を評価し、関連性と品質に基づいて順位を付け直します。これにより、最も関連性が高く質の良い情報が優先して提示されます。
スコアリング: LLMは各候補に関連性と品質を反映したスコアを割り当て、最適な応答や文書の選択を支援します。
LLMを用いたリランキングやスコアリングにより、システムはより正確で文脈に合った情報を提供し、ユーザー体験を向上させます。
以下は、旅行代理店がユーザーの好みに基づいて大規模言語モデル(LLM)を使い、旅行先のリランキングとスコアリングを行うPythonの例です。
旅行代理店はクライアントの好みに基づき、最適な旅行先を推奨したいと考えています。LLMは目的地のリランキングとスコアリングを支援し、最も関連性の高い選択肢を提示します。
以下は前の例をAzure OpenAIサービスを使うように更新したものです。
import requests
import json
class TravelAgent:
def __init__(self, destinations):
self.destinations = destinations
def get_recommendations(self, preferences, api_key, endpoint):
# Azure OpenAI のプロンプトを生成する
prompt = self.generate_prompt(preferences)
# リクエストのヘッダーとペイロードを定義する
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
payload = {
"prompt": prompt,
"max_tokens": 150,
"temperature": 0.7
}
# 再ランク付けされ、スコア付けされた目的地を取得するために Azure OpenAI API を呼び出す
response = requests.post(endpoint, headers=headers, json=payload)
response_data = response.json()
# 推奨事項を抽出して返す
recommendations = response_data['choices'][0]['text'].strip().split('\n')
return recommendations
def generate_prompt(self, preferences):
prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
for key, value in preferences.items():
prompt += f"{key}: {value}\n"
prompt += "\nDestinations:\n"
for destination in self.destinations:
prompt += f"- {destination['name']}: {destination['description']}\n"
return prompt
# 使用例
destinations = [
{"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
{"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
{"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
{"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]
preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'
travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
print(rec)
初期化: TravelAgent クラスは、名前や説明などの属性を持つ潜在的な旅行先のリストで初期化されます。
推奨の取得(get_recommendations メソッド): このメソッドはユーザーの好みに基づくプロンプトをAzure OpenAIサービスに生成し、HTTP POSTリクエストを介してAzure OpenAI APIに送信し、リランキングおよびスコアリングされた旅行先を取得します。
プロンプトの生成(generate_prompt メソッド): このメソッドはユーザーの好みと旅行先のリストを含むAzure OpenAI用のプロンプトを構築します。このプロンプトにより、モデルは指定された好みに基づいて旅行先をリランキングしスコアリングします。
API呼び出し: requests ライブラリを使ってAzure OpenAI APIエンドポイントにHTTP POSTリクエストを送信します。レスポンスにはリランキング・スコアリングされた旅行先が含まれます。
利用例: 旅行代理店はユーザーの好み(例:観光への興味、多様な文化体験)を収集し、Azure OpenAIサービスを使ってリランキング・スコアリングされた旅行先の推奨を得ます。
your_azure_openai_api_key は実際のAzure OpenAI APIキーに、https://your-endpoint.com/... はAzure OpenAIの実際のエンドポイントURLに置き換えてください。
LLMを活用したリランキング・スコアリングにより、旅行代理店はよりパーソナライズされ関連性の高い旅行の推奨を顧客に提供し、体験の質を高められます。
Retrieval-Augmented Generation(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] # 上位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(Structured Query Language)はデータベースと対話する強力なツールです。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';
RAG技術の一部としてSQLを活用することで、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エージェントの質問を解決しましょう。
免責事項:
本書類はAI翻訳サービス「Co-op Translator」(https://github.com/Azure/co-op-translator)を使用して翻訳されています。正確性の向上に努めておりますが、自動翻訳には誤りや不正確な箇所が含まれる可能性があることをご了承ください。原文の言語による文書が正式な情報源となります。重要な情報については、専門の人間による翻訳を推奨いたします。本翻訳の使用に伴う誤解や誤訳について、当方は一切の責任を負いかねます。