こんにちは!DXソリューション営業本部の大和矢です。
今回はマルチエージェントを実装して、AIエージェントに旅行の計画を議論させてみます。
AIエージェントとは、自然言語での指示を理解し、外部ツールやデータベースと連携して複雑な処理をこなす画期的な仕組みです。
マルチエージェントとは、複数のAIエージェントが協調して動作する仕組みです。
マルチエージェントのフレームワークとしては、Microsoftが開発した「AutoGen」を利用します。
前回ブログでは、LangChainを使って単体のAIエージェントとグラフデータベースを連携させるという検証を紹介しておりますので、ぜひご覧ください。
AIマルチエージェント実装
私事ではございますが、近々プライベートで3泊5日ベトナム(ホーチミン・ハノイ)旅行に行くので、AutoGenマルチエージェントにベトナムの旅行計画を議論してもらいます。
この旅行計画を成功させるため、以下のような専門的な役割を持つ5体のAIエージェントを設定しました。
AIエージェント名 |
役割 |
moderator |
議論の司会進行担当。 議論の流れを管理し、各エージェントに発言を促し、全体のまとめを行う。 |
cost_manager |
コスト管理担当。 コストや予算、節約ポイントなど独自の視点で意見を出す。 |
sightseeing |
観光スポット担当。 観光地やモデルコース、現地ならではの体験など独自の視点で意見を出す。 |
food |
食事担当。 食事やレストラン、現地グルメ体験など独自の視点で意見を出す。 |
transport |
移動担当。 空港から市内、都市間の移動手段や効率的なルートなど独自の視点で意見を出す。 |
以上のAIエージェントがグループチャット形式で議論し、ベトナム旅行計画を練り上げていきます。
autogen_trip_planner.py
それでは実装したコードを紹介します。
import os
import asyncio
from autogen_ext.models.openai import AzureOpenAIChatCompletionClient
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination
# Azure OpenAI 情報取得
AZURE_OPENAI_DEPLOYMENT = os.environ.get("MYAZURE_OPENAI_DEPLOYMENT", "gpt-4.1")
AZURE_OPENAI_API_KEY = os.environ.get("MYAZURE_OPENAI_API_KEY")
AZURE_OPENAI_ENDPOINT = os.environ.get("MYAZURE_OPENAI_ENDPOINT")
AZURE_OPENAI_API_VERSION = os.environ.get("MYAZURE_OPENAI_API_VERSION", "2023-05-15")
AZURE_OPENAI_MODEL = os.environ.get("MYAZURE_OPENAI_MODEL", "gpt-4.1")
async def main():
# AzureOpenAIChatCompletionClient
model_client = AzureOpenAIChatCompletionClient(
azure_deployment=AZURE_OPENAI_DEPLOYMENT,
api_key=AZURE_OPENAI_API_KEY,
api_version=AZURE_OPENAI_API_VERSION,
azure_endpoint=AZURE_OPENAI_ENDPOINT,
model=AZURE_OPENAI_MODEL,
)
# AssistantAgentの定義
# 司会進行役
moderator = AssistantAgent(
name="moderator",
model_client=model_client,
system_message=(
"あなたは司会進行役(英語名: moderator)です。必ず日本語で出力してください。"
"発言は2~4文程度に簡潔にまとめてください。"
"この議論にはcost_manager(コスト管理)、sightseeing(観光)、food(食事)、transport(移動)が参加しています。"
"議論の流れを管理し、各エージェントに順番に発言を促し、全体のまとめや次の議題の提示も行ってください。"
"各エージェントの発言が長くなりすぎないように、簡潔に要点を述べるよう促してください。"
"また、各エージェントの発言内容が重複しないように、前の発言をよく聞き、異なる視点や新しい情報を引き出すようにしてください。"
"各発言の冒頭で必ず【司会進行】と明記してください。"
"1回ずつ発言しただけで終わらず、議論が深まるように、他のエージェントの意見への質問や追加の意見交換を積極的に促してください。"
"最終的なプランを箇条書きでまとめたあとに、TERMINATEと出力してください。"
)
)
# コスト管理担当
cost_manager = AssistantAgent(
name="cost_manager",
model_client=model_client,
system_message=(
"あなたはコスト管理担当(英語名: cost_manager)です。必ず日本語で出力してください。"
"発言は2~4文程度に簡潔にまとめてください。"
"他のエージェントと内容が重複しないよう、コストや予算、節約ポイントなど独自の視点で述べてください。"
"発言の冒頭に必ず【コスト管理】と明記してください。"
)
)
# 観光スポット担当
sightseeing = AssistantAgent(
name="sightseeing",
model_client=model_client,
system_message=(
"あなたは観光スポット提案担当(英語名: sightseeing)です。必ず日本語で出力してください。"
"発言は2~4文程度に簡潔にまとめてください。"
"他のエージェントと内容が重複しないよう、観光地やモデルコース、現地ならではの体験など独自の視点で述べてください。"
"発言の冒頭に必ず【観光】と明記してください。"
)
)
# 食事担当
food = AssistantAgent(
name="food",
model_client=model_client,
system_message=(
"あなたは食事担当(英語名: food)です。必ず日本語で出力してください。"
"発言は2~4文程度に簡潔にまとめてください。"
"他のエージェントと内容が重複しないよう、食事やレストラン、現地グルメ体験など独自の視点で述べてください。"
"発言の冒頭に必ず【食事】と明記してください。"
)
)
# 移動担当
transport = AssistantAgent(
name="transport",
model_client=model_client,
system_message=(
"あなたは移動担当(英語名: transport)です。必ず日本語で出力してください。"
"発言は2~4文程度に簡潔にまとめてください。"
"他のエージェントと内容が重複しないよう、空港から市内、都市間の移動手段や効率的なルートなど独自の視点で述べてください。"
"発言の冒頭に必ず【移動】と明記してください。"
)
)
# グループチャットと終了条件の設定
termination = TextMentionTermination("TERMINATE")
team = RoundRobinGroupChat([
moderator, cost_manager, sightseeing, food, transport
], termination_condition=termination)
agent_name_map = {
"moderator": "司会進行",
"cost_manager": "コスト管理",
"sightseeing": "観光",
"food": "食事",
"transport": "移動"
}
MAX_TURNS = 30
print("\n==== AIによる議論の場 ====")
print("終了したい場合は 'exit' と入力してください。\n")
while True:
user_input = input("議論のテーマ: ")
if user_input.strip().lower() == "exit":
print("終了します。次のコマンド入力に戻ります。")
break
print("[Agent] 議論を開始します...\n")
turn_count = 0
async_gen = team.run_stream(task=user_input)
async for message in async_gen:
turn_count += 1
if hasattr(message, "content"):
print(f"{message.content}")
print("-----")
if turn_count >= MAX_TURNS:
print(f"[Agent] 最大やり取り回数({MAX_TURNS})に到達したため自動終了します。")
break
if __name__ == "__main__":
try:
asyncio.run(main())
except (SystemExit, KeyboardInterrupt):
pass
コード全体の流れ
このプログラムは、まずAzure OpenAIのモデルを使うための接続設定を行います。
次にそれぞれ異なる役割を持つ5体のAIエージェント(司会進行、コスト管理、観光、食事、移動)を定義します。
そして、これらのエージェントが順番に発言するグループチャットの場を設定し、ユーザーが「議論のテーマ」を入力すると、そのテーマに沿ってAIたちが議論を開始します。
議論は、司会進行役が「TERMINATE」という言葉を発するか、最大ターン数に達するまで続きます。
AzureOpenAIChatCompletionClient
async def main():
# Azure OpenAIクライアント
model_client = AzureOpenAIChatCompletionClient(
azure_deployment=AZURE_OPENAI_DEPLOYMENT,
# (以下、APIキーなどの設定が続く)
)
プログラムの中心となる非同期関数mainを定義しています。
最初に、取得した接続情報を使ってAzureOpenAIChatCompletionClientのインスタンス(model_client)を作成します。
これ以降、AIエージェントはすべてこのmodel_clientを通じてAzure OpenAIと通信します。
AssistantAgentの定義
# 司会進行役
moderator = AssistantAgent(
name="moderator",
model_client=model_client,
system_message=(
"あなたは司会進行役(英語名: moderator)です。必ず日本語で出力してください。"
# (以下、役割を詳細に指示するプロンプトが続く)
)
)
# (コスト管理、観光、食事、移動担当のエージェント定義が続く)
各役割を持つAIエージェントをAssistantAgentとして作成しています。
name |
エージェントの内部的な名前です。 |
model_client |
このエージェントが使用するAIモデルのクライアントを指定します。 |
system_message |
エージェントの振る舞いを決定する最も重要な部分です。 ここに「あなたは〇〇です」「〇〇について話してください」「【〇〇】と付けて発言してください」といった詳細な指示(プロンプト)を与えることで、各エージェントに固有の役割と人格を持たせています。 |
グループチャットと終了条件の設定
termination = TextMentionTermination("TERMINATE")
team = RoundRobinGroupChat(
[moderator, cost_manager, sightseeing, food, transport],
termination_condition=termination
)
TextMentionTermination("TERMINATE") |
moderatorエージェントが会話の最後に「TERMINATE」という単語を含んだメッセージを生成すると、それを検知して議論を終了させるためのオブジェクトを作成します。 |
RoundRobinGroupChat(...) |
作成した5体のエージェントをメンバーとするグループチャット(team)を定義します。 エージェントはリストに登録された順番(司会→コスト→観光→食事→移動)で発言します。 termination_conditionに先ほどのterminationオブジェクトを指定することで、チャットの終了条件を設定しています。 |
議論の実行ループ
# ユーザーが「exit」と入力するまで、議論の受付を繰り返す
print("\n==== AIによる議論の場 ====")
print("終了したい場合は 'exit' と入力してください。\n")
# ユーザーが'exit'と入力するまで、繰り返し議論の場を提供する
while True:
# 1. ユーザーから議論のテーマを受け取る
user_input = input("議論のテーマ: ")
if user_input.strip().lower() == "exit":
break
print("[Agent] 議論を開始します...\n")
turn_count = 0
# 2. AIエージェントたちの議論を開始
async_gen = team.run_stream(task=user_input)
# 3. 議論の内容をリアルタイムで表示
async for message in async_gen:
turn_count += 1
if hasattr(message, "content"):
print(f"{message.content}")
print("-----")
# 4. 安全装置として、最大ターン数に達したら終了
if turn_count >= MAX_TURNS:
print(f"[Agent] 最大やり取り回数({MAX_TURNS})に到達したため自動終了します。")
break
このループは、ユーザーのお題を元にAIの議論を開始し、会話をリアルタイムで表示、そして適切なタイミングで終了させる心臓部です。
user_input |
ユーザーが入力した「議論のテーマ」(例:「3泊4日のベトナム旅行」)がAIたちへの最初の指示となります。 |
team.run_stream(task=user_input) |
この一行で、設定したteam(グループチャット)が議論を開始します。 run_streamを使うことで、エージェントの発言が生成されるたびに一つずつメッセージ(message)を受け取ることができます。 |
async for message in async_gen |
AIの発言を一つずつリアルタイムに受け取り、print() で画面に表示します。 |
if turn_count >= MAX_TURNS |
最大ターン数に達した場合に議論が終了します。 TextMentionTerminationがチームに設定されているため、エージェントが「TERMINATE」と発言すると議論は終わりますが、議論が長引いた際はこちらが安全装置として機能します。 |
AIマルチエージェントによる議論開始
それでは、このスクリプトを実行してみましょう。
以下のプロンプトをAIエージェントたちに投げかけてみます。
3泊5日のベトナム旅行のプランを立ててください。
1日目の昼にホーチミンからスタートし、4日目の深夜にハノイから帰りの飛行機に乗ります。
ホーチミンとハノイ間の移動はLCCを利用して、3日目の正午にハノイに到着します。
エージェントたちがどのような議論を交わし、旅行プランを作り上げていくのか見ていきましょう。
==== AIによる議論の場 ====
終了したい場合は 'exit' と入力してください。
議論のテーマ: 3泊5日のベトナム旅行のプランを立ててください。1日目の昼にホーチミンからスタートし、4日目の深夜にハノイから帰りの飛行機に乗ります。ホーチミンとハノ
イ間の移動はLCCを利用して、3日目の正午にハノイに到着します。
[Agent] 議論を開始します...
3泊5日のベトナム旅行のプランを立ててください。1日目の昼にホーチミンからスタートし、4日目の深夜にハノイから帰りの飛行機に乗ります。ホーチミンとハノイ間の移動はLCCを利用して、3日目の正午にハノイに到着します。
-----
【司会進行】ありがとうございます。それでは、まずコスト管理の観点から、予算やコスト配分について簡潔にコメントをお願いします。その後、観光、食事、移動の順でご意見を伺いますので、ご準備ください。コスト管理の方、どうぞ。
【司会進行】※追加で、他の方が発言する際も、前の方の発言が重複しないよう、別の視点や補足情報をコメントできるようご注意ください。
-----
【コスト管理】ベトナム国内のLCC利用やホテルを事前予約することで、移動費・宿泊費ともに割安に抑えられます。現地での食事や観光も、ローカルレストランや公共交通機関を積極的に利用することでコストダウンが可能です。現金とクレジットカードの使い分けにより、両替手数料や海外利用手数料の無駄な出費も防げます。全体の予算は事前に項目ごとに上限を設定しておくことをおすすめします。
-----
【観光】ホーチミン滞在中は、市内のサイゴン中央郵便局やベンタイン市場など歴史的建造物の見学がおすすめです。2日目には、クチトンネルやメコン川クルーズで郊外の体験型
観光も楽しめます。ハノイ到着後は、ホアンキエム湖周辺の旧市街散策やタンロン遺跡への訪問がおすすめです。最終日は時間があれば、ローカルマーケットや水上人形劇の観賞でベトナムならではの文化に触れてみてください。
-----
【食事】ホーチミンでは、バインミーやフォー・サイゴンなど屋台グルメをぜひ味わってください。ベンタイン市場内や周辺では、生春巻き(ゴイ・クオン)やベトナムコーヒーも手軽に楽しめます。ハノイに移動した際には、ハノイ名物のフォー・ガーやブンチャー、旧市街のローカル食堂で現地の味を堪能してください。夜、市場の屋台でビアホイ(生ビール)を飲みながら、にぎやかな雰囲気も体験できます。
-----
【移動】ホーチミン市内の移動は、グラブ(配車アプリ)やタクシーが便利ですが、市バスを利用すれば格安で主要名所を回れます。空港から市内中心部へのアクセスは、タクシーや空港バス(109番、49番)が一般的で、所要時間は30〜60分ほどです。ホーチミン〜ハノイ間のLCCフライト利用時は、各空港で事前チェックイン・時間に余裕を持ちましょう。ハノイでは空港から市内中心部までエアポートバス86番やミニバンが利用でき、渋滞を考慮して1時間以上みておくのが安心です。
-----
【司会進行】皆さん、簡潔かつ具体的なご提案ありがとうございました。ここで少し議論を深めたいと思います。sightseeingさん、2日目の観光について郊外の提案がありましたが、cost_managerさんのコスト面と合わせて、現地ツアーの予約や個人手配、どちらが効率的かお考えはありますか?ご意見をお願いします。その後、他の方も関連して追加の補足があればご発言ください。
-----
【コスト管理】2日目の郊外観光については、現地ツアーの利用は移動や入場料がセットになって手間が省けますが、やや割高になる傾向があります。一方、個人手配では公共交通機関や現地バスを使えば大幅な節約が可能ですが、英語や現地語でのコミュニケーションや移動時間には注意が必要です。費用と効率のバランスを考えると、数名のグループであれば現地オプションツアーの早割やプロモーションを活用し、個人なら余裕があれば自力手配を選ぶのが良いでしょう。
-----
【観光】2日目の郊外観光でクチトンネルやメコン川を楽しむ場合、現地ツアーは時間配分が明確で主要スポットを効率良く巡れるため、短期滞在には特におすすめです。費用を抑えたい場合は、バスや路線車での個人手配も可能ですが、乗り継ぎや現地での案内を調べる必要があります。ツアーでは日本語や英語ガイド付きも選べるので、初めての方や効率重視の方には現地ツアーが無難と言えるでしょう。
-----
【食事】現地ツアーに参加すると、昼食がツアー代金に含まれている場合が多いので、郊外でも安心して郷土料理を味わえます。クチトンネルツアーでは、タピオカなど地元の軽食が振舞われることもありますし、メコン川クルーズなら川魚や揚げ春巻きなどベトナム南部の名物料理が提供されることもあります。個人手配の場合は、現地の食堂や市場で自由に好きなものを選べるので、一層ローカルなグルメ体験を楽しめます。どちらを選ぶかによって、食事体験も大きく異なるのが特徴です。
-----
【移動】2日目に郊外観光を個人手配で行う場合、ホーチミン市内からクチトンネルまでは市バス(13・79番)や長距離バスを乗り継いで2時間弱かかります。メコン川方面の場合も、ミニバンやツアーバス利用が一般的ですが、路線バスだと本数や停留所に注意が必要です。現地ツアーなら専用車や送迎付きで移動がスムーズなので、移動ストレスを減らし時間効率を最優先したい場合はツアー利用が安心です。
-----
【司会進行】皆さんから、コスト・観光・食事・移動の各観点で現地ツアーと個人手配のメリット・デメリットについて詳しく意見をいただきました。ホーチミン滞在が短いため、観光や移動の効率を考えると、郊外ツアーは事前予約の利用が無難なようですね。3日目のハノイへのLCC移動後、到着日午後~夜のモデルプランについてもアイデアがあれば、sightseeingさん、簡潔に提案をお願いします。その後、食事・移動の方も追加コメントをお願いします。
-----
【コスト管理】ハノイ到着後の午後から夜にかけての観光では、無料や低料金で楽しめる旧市街散策やホアンキエム湖周辺の観光を中心に計画すると、コストを抑えつつ充実した時間を過ごせます。有料施設を訪れる場合は入場料の有無を事前に調べ、夜市やローカルマーケットも現金の小額単位で計画的に利用しましょう。夜の移動はタクシーや配車アプリを使って安全性も考慮しつつ、無駄な出費を防ぐのがポイントです。
-----
【観光】ハノイに到着したら、まずホアンキエム湖を中心に旧市街を徒歩で巡るのがおすすめです。歴史的な寺院「玉山祠」や、夜にはライトアップされた湖周辺の散策で雰囲気を満喫できます。その後、ドンスアン市場でローカルのにぎわいやショッピングを体験し、時間があれば伝統芸能の水上人形劇も観賞してみてください。短時間でもハノイの街並みや文化を存分に感じられるコースです。
-----
【食事】ハノイでは、旧市街の屋台やローカル食堂でブンチャーやフォー・ガーといった北部ならではの名物をぜひ味わってください。夜市の屋台では揚げ春巻きやローカルスイーツ、ベトナムコーヒーも堪能できます。ドンスアン市場付近なら立ち食いスタイルで手軽に楽しめるので、食べ歩きもおすすめです。夜はBia Hoi(生ビール)を片手に、地元の人と一緒に活気ある雰囲気を味わってみてください。
-----
【移動】ハノイ到着後の市内移動は、空港から市中心部まではエアポートバス86番やタクシー、配車アプリ(Grab)が使え、特に荷物が多い場合や時間を優先したいならタクシー
やGrabが便利です。旧市街エリア内の観光は徒歩が基本ですが、夜間や遠い場所に移動する場合はサイクリク(自転車タクシー)やバイクタクシーを選ぶと効率的です。渋滞を考慮して、夜遅い時間の移動はなるべく安全な公共交通や配車アプリを利用し、無理のない行程にしましょう。
-----
【司会進行】ここまでで、ハノイ到着後の充実した過ごし方と安全・コスト面での配慮についても完結にまとめていただきました。最後に、4日目の夜に出発するまでのおすすめの過ごし方や「これだけは外せない」というポイントがあれば、各観点から一言ずつ提案をしてください。その上で最終プランを箇条書きでまとめます。
まずsightseeingさんからお願いします。他の方も続けてご発言ください。
-----
【コスト管理】4日目は入場料が無料や安価な場所を中心に観光するのがおすすめです。空港への移動時間・交通費も逆算して余裕を持たせることで、タクシーの急な利用など追加
コストやストレスを回避できます。最後の食事やお土産購入も、予算内を指南しつつ現金決済の残額調整に活用しましょう。時間と費用の両方にゆとりを持つことが、旅の満足度や無駄な出費防止につながります。
-----
【観光】4日目は、朝早くからハノイ大教会や文廟(ベトナム最古の大学跡)など建築美も楽しめる歴史スポットを巡るのがおすすめです。時間に余裕があれば、ホーチミン廟や西湖周辺の散策も加えるとハノイの多彩な表情を感じられます。帰路前に旧市街のカフェでベトナムコーヒーを味わい、最後のひとときをゆったり過ごしてください。「ハノイの歴史と現代の融合」を実感できる体験が外せないポイントです。
-----
【食事】4日目の午前は、旧市街または文廟近くのカフェでベトナムコーヒーとバインミーの朝食を楽しむのがベストです。昼食には、ハノイらしい蒸し餃子(バインクオン)や、
地元レストランでのブン・タンなど軽食セットがおすすめです。西湖周辺のローカルカフェなら湖畔の景色も堪能でき、最後のグルメ体験として満足度が高いでしょう。帰国前はお土産にベトナムコーヒーやローカルスイーツを買うのもお忘れなく。
-----
【移動】4日目は観光スポットが市内中心部にまとまっているため、徒歩や配車アプリ(Grab)を活用して効率的に回るのが良いでしょう。深夜便での帰国の場合、市内からノイバ
イ空港へは夜間でも運行している空港バス(86番)やGrabタクシーが安全・便利です。渋滞やチェックイン時間を考慮し、フライト出発の2.5~3時間前には市内を出発する計画を立ててください。最後の観光や食事の後、余裕を持った空港移動を心がけましょう。
-----
【司会進行】皆さんのご意見をふまえ、3泊5日ベトナム旅行プランを以下の通りまとめます。
■最終プラン
- 1日目(ホーチミン昼到着):サイゴン中央郵便局、ベンタイン市場、屋台でバインミーやフォーを食べる。ホテル周辺の散策。
- 2日目(ホーチミン郊外観光):現地ツアーでクチトンネルまたはメコン川クルーズに参加、ツアーなら昼食付で効率良く観光。夜は市内に戻りローカル市場や屋台グルメも体験
。
- 3日目(午前ホーチミン→LCCでハノイ正午到着):空港・市内間はバスやタクシー利用。午後からホアンキエム湖・玉山祠・ドンスアン市場など旧市街を徒歩で巡り、水上人形劇
やナイトマーケットを満喫。
- 4日目(ハノイ観光→深夜便で帰国):早朝からハノイ大教会や文廟、ホーチミン廟など市内観光。カフェでベトナムコーヒーや朝食、昼食はローカルレストランでハノイ名物を
堪能。お土産購入も忘れずに。夜はゆとりを持って空港バスやGrabでノイバイ空港へ移動。
■コスト管理・移動のポイント
- 宿泊・航空券・現地ツアーは早割・プロモーション利用で予算を抑える
- 市内移動はバス・配車アプリ活用でコスト・効率・安全を両立
- 現金の小額利用とカードの併用、現地通貨の使い切りに注意
■食事のポイント
- ホーチミンは屋台・ローカル市場、ハノイは旧市街・カフェ・市場で多彩なベトナムグルメを堪能
■観光のポイント
- 都市ごとの名所・歴史・文化・グルメをバランスよく盛り込む
- 短期間で効率的に移動しつつ、現地ならではの体験を重視
TERMINATE
-----
議論の解説:AIマルチエージェントはどのように協力したか
今回のシミュレーションでは、AIエージェントが見事に連携し、一つの旅行プランを練り上げていく過程を見ることができました。
1. 役割分担と多角的な視点
まず【司会進行】が議論の口火を切り、各専門エージェント(コスト管理、観光、食事、移動)に順番に意見を求めます。
これにより、最初の段階で「予算」「見どころ」「グルメ」「交通手段」という4つの異なる視点から、網羅的にアイデアが出揃いました。
2. 論点の深化と具体的な比較検討
次に注目すべきは、【司会進行】が「2日目の郊外観光は、現地ツアーと個人手配のどちらが良いか?」という具体的な論点を提示した点です。
これに対し、各エージェントは自身の専門分野からメリット・デメリットを提示しました。
- 【コスト管理】: 「ツアーは割高だが手間いらず、個人手配は安いが手間がかかる」
- 【観光】: 「短期滞在なら効率の良いツアーがおすすめ」
- 【食事】: 「ツアーなら昼食付き、個人なら自由な店選びが楽しめる」
- 【移動】: 「個人手配はバスの乗り継ぎが大変、ツアーなら移動が楽」
このように、一つのテーマに対して多角的な分析が行われることで、単一のAIでは得られない深い考察が可能になります。
ユーザーはこれらの情報を基に、自身の価値観(コスト重視か、時間効率重視か)に合わせて最適な選択ができます。
3. 合意形成と最終プランの策定
議論を経て、「短期滞在なので郊外観光はツアーが無難」という一つの結論に至ります。
その後もハノイ到着後のプラン、最終日の過ごし方と議論を進め、最終的に【司会進行】がすべての意見を統合し、具体的な旅程としてまとめ上げました。
最終的に完成した旅行プラン
そして、こちらがAIエージェントたちが導き出した「3泊5日ベトナム縦断 よくばりプラン」です。
✈️ 1日目:ホーチミン到着日
- 午後:
ホーチミン到着後、サイゴン中央郵便局やベンタイン市場など、フランス植民地時代の面影が残る市街中心部を散策。
- 夜:
屋台やローカルレストランで、本場のバインミーやフォー・サイゴンを堪能。
🏞️ 2日目:ホーチミン郊外を満喫
- 終日:
クチトンネルまたはメコン川クルーズの現地ツアーに参加。
戦争の歴史に触れたり、雄大な自然を体験したりと、ホーチミンの異なる側面に触れる。
- 夜:
市内に戻り、活気あふれるナイトマーケットで夕食やショッピングを楽しむ。
✈️ 3日目:ハノイへ移動&旧市街散策
- 午前:
ホーチミンからLCCでハノイへ移動。
- 午後:
正午にハノイ到着後、ホアンキエム湖と玉山祠を訪れる。その後、ドンスアン市場まで旧市街をぶらぶら歩き。
- 夜:
タンロン水上人形劇を鑑賞し、ハノイ名物のブンチャーやビアホイ(生ビール)で乾杯。
🌃 4日目:ハノイの歴史探訪と帰国
- 午前:
ハノイ大教会、文廟(ベトナム最古の大学)など、ハノイの歴史的建造物を巡る。
- 午後:
おしゃれなカフェでベトナムコーヒーを飲みながら一休み。お土産探しもこの時間に。
- 夜:
余裕をもってノイバイ国際空港へ移動。深夜便で帰国の途へ。
まとめ
今回は、AutoGenを使い、複数のAIエージェントに旅行プランを議論させてみました。
専門分野を持つエージェントたちがそれぞれの視点で意見を出し合い、それを司会進行役がまとめて議論を深めていくことで、非常に具体的で、かつ多角的に検討された質の高い旅行プランが完成しました。
特に、「現地ツアーか個人手配か」という誰もが悩むであろうポイントに対し、コスト・時間・食事・移動というそれぞれの観点からメリット・デメリットが提示されたのは、マルチエージェントならではの強みと言えるでしょう。
AIエージェントの検証は引き続き進めていきますので、今後も検証ブログをお届けできるかもしれません。
どうぞご期待ください。
QUICK E-Solutionsでは、各AIサービスを利用したシステム導入のお手伝いをしております。
それ以外でも QESでは様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。
※このブログで参照されている、Microsoft、AutoGen、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。