AIエージェントで作る!航空会社の顧客サポートを自動化するマルチエージェントシステム完全ガイド - 生成AIビジネス活用研究所

AIエージェントで作る!航空会社の顧客サポートを自動化するマルチエージェントシステム完全ガイド

AIエージェントで作る!航空会社の顧客サポートを自動化するマルチエージェントシステム完全ガイド

今回は、OpenAI Agents SDKを使って航空会社の顧客サポートを革新するマルチエージェントシステムの構築方法を、初心者の方にも分かりやすく解説していきます。

こんな方におすすめです!
✅ AIを活用した顧客サポート自動化に興味がある開発者
✅ マルチエージェントシステムの実装を学びたい方
✅ 業務効率化のためのAIソリューションを検討している企業担当者

目次


マルチエージェントシステムとは?|複数のAIが連携する仕組み

マルチエージェントシステムとは?|複数のAIが連携する仕組み

マルチエージェントシステムとは、複数の専門特化したAIエージェントが連携して、複雑なタスクを効率的に処理する仕組みのことです。

従来の単一AIチャットボットとの違い

従来のチャットボットマルチエージェントシステム
1つのAIがすべてを処理専門分野ごとに特化したAIが分担
複雑な質問への対応が困難適切なエージェントに自動振り分け
精度にバラつきがある各分野で高い専門性を発揮
質問者

マルチエージェントシステムって言葉だけ聞くと難しそうですが、実際のところどんなイメージで捉えればいいんでしょうか?

回答者

身近な例で言うと「病院の受付システム」のようなものです。患者さんが来院すると、まず受付で症状を聞いて適切な診療科に案内しますよね。マルチエージェントシステムも同じで、「受付係」「内科専門医」「外科専門医」のような役割分担をAIで実現したものです。


実際に構築するシステムの全体像

実際に構築するシステムの全体像

今回作成するシステムは、3つの専門エージェントで構成されています。

システム構成図

お客様の問い合わせ
        ↓
   【トリアージエージェント】
    ↙     ↓     ↘
【FAQ】 【座席変更】【その他】
エージェント エージェント  対応

各エージェントの役割

1. トリアージエージェント(振り分け係)

  • お客様の問い合わせを分析
  • 適切な専門エージェントに自動振り分け
  • 複雑な問い合わせの一次対応

2. FAQエージェント(よくある質問対応)

  • 手荷物、座席、Wi-Fiなどの一般的な質問に即答
  • ナレッジベースから最適な回答を検索・提供

3. 座席変更エージェント(座席予約変更専門)

  • 座席変更リクエストの処理
  • 予約確認番号の照合
  • 座席番号の更新処理


他業界への応用可能性|こんな分野でも活用できます!

他業界への応用可能性|こんな分野でも活用できます!

このマルチエージェントシステムは、航空業界以外でも幅広く応用できます。

🏥 医療・ヘルスケア業界

  • 一般相談エージェント: 症状の初期相談
  • 予約管理エージェント: 診察予約の取得・変更
  • 緊急対応エージェント: 緊急時の適切な医療機関への誘導

🏦 金融・銀行業界

  • FAQ対応エージェント: 口座開設、手数料などの基本情報
  • 残高照会エージェント: 口座残高、取引履歴の確認
  • 不正検知エージェント: 怪しい取引の検出・警告

🛒 ECサイト・小売業界

  • 商品案内エージェント: 商品検索、仕様説明
  • 注文管理エージェント: 配送状況、返品・交換手続き
  • カスタマーサービスエージェント: 苦情対応、トラブルシューティング
質問者

いろんな業界で応用できるって書いてありますが、実際に自分の会社でも活用できるものなんでしょうか?

回答者

はい、ほぼすべての業界で活用可能です!「お客様からの問い合わせがある」「複数の部署や専門分野がある」会社であれば、必ず応用できます。例えば、製造業なら「技術相談」「営業相談」「アフターサービス」の3つのエージェントに分けたり、不動産業なら「物件案内」「契約手続き」「メンテナンス対応」といった具合です。重要なのは自社の業務フローを整理することから始めることですね。


実装手順|ステップバイステップで構築していこう

実装手順|ステップバイステップで構築していこう

ステップ1|必要なライブラリのインポート

from __future__ import annotations as _annotations

import asyncio
import random
import uuid

from pydantic import BaseModel

各ライブラリの役割

ライブラリ役割
asyncio複数の顧客からの問い合わせを同時に処理するため
random座席変更時のフライト番号生成用
uuid会話セッションの一意識別子作成用
pydantic.BaseModel顧客情報を安全に管理するためのデータモデル

ステップ2|AIエージェントフレームワークの読み込み

from agents import (
    Agent, HandoffOutputItem, ItemHelpers, MessageOutputItem, RunContextWrapper,
    Runner, ToolCallItem, ToolCallOutputItem, TResponseInputItem, function_tool,
    handoff, trace,
)
from agents.extensions.handoff_prompt import RECOMMENDED_PROMPT_PREFIX

主要コンポーネントの説明

コンポーネント機能
Agent各専門エージェントの本体
function_toolエージェントが使用できる機能を定義
handoffエージェント間の処理移管を制御
Runnerエージェントシステム全体の実行管理

ステップ3|顧客情報管理のデータモデル作成

class AirlineAgentContext(BaseModel):
    passenger_name: str | None = None
    confirmation_number: str | None = None
    seat_number: str | None = None
    flight_number: str | None = None


なぜこのデータモデルが重要なのか?

このデータモデルにより、各エージェント間で顧客情報を安全に共有できます。

  • トリアージエージェントが収集した予約確認番号
  • 座席変更エージェントが更新した座席情報
  • 全エージェントで参照可能な統一された顧客データ など

ステップ4|AIツール(機能)の実装

FAQ検索ツール

@function_tool(name_override="faq_lookup_tool", description_override="Lookup frequently asked questions.")
async def faq_lookup_tool(question: str) -> str:
    if "bag" in question or "baggage" in question:
        return "お預けいただける荷物は、お一人様につき1個まで無料です。サイズ制限や重量制限については..."
    elif "seats" in question or "plane" in question:
        return "一般的な中型機では100-200席程度をご用意しており、エコノミークラスとビジネスクラスに分かれています..."
    elif "wifi" in question:
        return "機内では無料Wi-Fiサービスをご提供しております。離陸後、シートベルト着用サインが消えてから..."
    return "申し訳ございませんが、その件についてはカスタマーサービスにお問い合わせください。"

実装のポイント

  • キーワードベースの簡単な分類で高速応答を実現
  • 実際の運用では、より高度な自然言語処理やベクトル検索を活用可能

座席変更ツール

@function_tool
async def update_seat(context: RunContextWrapper[AirlineAgentContext], confirmation_number: str, new_seat: str) -> str:
    context.context.confirmation_number = confirmation_number
    context.context.seat_number = new_seat
    assert context.context.flight_number is not None, "Flight number is required"
    return f"座席を{new_seat}に変更いたしました。予約確認番号:{confirmation_number}"

注意点とベストプラクティス

  • 実際のシステムでは、座席の空き状況確認が必要
  • データベースとの連携により、リアルタイムの座席管理を実装
  • エラーハンドリングの充実(満席、存在しない座席番号など)

ステップ5|エージェント間連携の制御機能

async def on_seat_booking_handoff(context: RunContextWrapper[AirlineAgentContext]) -> None:
    flight_number = f"FLT-{random.randint(100, 999)}"
    context.context.flight_number = flight_number

この機能の効果
座席変更エージェントに処理が移る際に、自動的にフライト番号を割り当てることで、一貫性のある顧客対応を実現します。

ステップ6|各専門エージェントの設定

FAQエージェント

faq_agent = Agent[AirlineAgentContext](
    name="FAQ Agent",
    handoff_description="航空会社に関する質問にお答えする専門エージェント",
    instructions=f"""{RECOMMENDED_PROMPT_PREFIX}
    あなたは航空会社のFAQ担当エージェントです。
    お客様からの一般的な質問に、親切で分かりやすくお答えしてください。
    faq_lookup_toolを使用して適切な回答を検索してください。""",
    tools=[faq_lookup_tool],
)

座席変更エージェント

seat_booking_agent = Agent[AirlineAgentContext](
    name="Seat Booking Agent", 
    handoff_description="フライトの座席変更を専門とするエージェント",
    instructions=f"""{RECOMMENDED_PROMPT_PREFIX}
    あなたは座席変更専門のエージェントです。
    お客様の座席変更リクエストを正確かつ迅速に処理してください。
    update_seatツールを使用して座席情報を更新してください。""",
    tools=[update_seat],
)

トリアージエージェント(メイン振り分け係)

triage_agent = Agent[AirlineAgentContext](
    name="Triage Agent",
    handoff_description="お客様のリクエストを適切なエージェントに振り分ける総合案内",
    instructions=f"{RECOMMENDED_PROMPT_PREFIX} あなたは親切な振り分け担当エージェントです...",
    handoffs=[
        faq_agent,
        handoff(agent=seat_booking_agent, on_handoff=on_seat_booking_handoff),
    ],
)


トリアージエージェントの動作例

シナリオ1: Wi-Fiについての質問

👤 お客様: "機内にWi-Fiはありますか?"
🤖 トリアージ: FAQ関連と判断 → FAQエージェントに移管
📞 FAQエージェント: "機内では無料Wi-Fiサービスをご提供しております..."

シナリオ2: 座席変更リクエスト

👤 お客様: "座席を12Aに変更したいです"  
🤖 トリアージ: 座席変更リクエストと判断 → 座席変更エージェントに移管
✈️ 座席変更エージェント: "座席を12Aに変更いたしました。フライト番号:FLT-321"

ステップ7|システム全体の実行ループ

async def main():
    current_agent: Agent[AirlineAgentContext] = triage_agent
    input_items: list[TResponseInputItem] = []
    context = AirlineAgentContext()
    conversation_id = uuid.uuid4().hex[:16]

    while True:
        user_input = input("ご質問をどうぞ: ")
        with trace("Customer service", group_id=conversation_id):
            input_items.append({"content": user_input, "role": "user"})
            result = await Runner.run(current_agent, input_items, context=context)

            for new_item in result.new_items:
                if isinstance(new_item, MessageOutputItem):
                    print(f"{new_item.agent.name}: {ItemHelpers.text_message_output(new_item)}")
                elif isinstance(new_item, HandoffOutputItem):
                    print(f"✨ {new_item.source_agent.name}から{new_item.target_agent.name}に処理を移管しました")
            
            input_items = result.to_input_list()
            current_agent = result.last_agent

if __name__ == "__main__":
    asyncio.run(main())


システムの処理フロー

  1. 開始: トリアージエージェントから開始
  2. 入力受付: ユーザーからの問い合わせを受信
  3. 処理実行: 適切なエージェントで問い合わせを処理
  4. 結果出力: 回答またはエージェント移管の通知
  5. 継続: 次の問い合わせに備えて待機
質問者

コードがたくさん出てきますが、プログラミング初心者でも実際に作れるものなんでしょうか?

回答者

プログラミング経験が浅い方でも数時間で基本システムを動作させることができています。重要なのは「完璧に理解すること」ではなく「動かしながら学ぶこと」です。不明点は、ChatGPT等にも聞いてみましょう。まずは記事通りに実装してみて、動作を確認してから徐々にカスタマイズしていけば大丈夫です。


実装時の注意点とトラブルシューティング

実装時の注意点とトラブルシューティング

よくあるエラーと対処法

1. フライト番号未設定エラー

# エラー: Flight number is required
# 対処法: on_seat_booking_handoff関数が正しく呼ばれているか確認

2. エージェント間の無限ループ

# 問題: エージェント同士が永続的に処理を回し合う
# 解決策: 明確な終了条件と最大ハンドオフ回数の設定

3. コンテキスト情報の消失

# 問題: エージェント移管時に顧客情報が失われる
# 解決策: RunContextWrapperの適切な利用とデータ永続化


本格運用に向けた拡張ポイント

本格運用に向けた拡張ポイント

パフォーマンス向上施策

1. データベース連携

  • 顧客情報の永続化
  • 座席在庫のリアルタイム管理
  • 過去の問い合わせ履歴の活用

2. 高度なNLP機能

  • 感情分析による優先度判定
  • 多言語対応の実装
  • 音声認識・合成の統合

3. 運用監視とメトリクス

  • 応答時間の監視
  • 顧客満足度の測定
  • エージェント別パフォーマンス分析

ビジネス効果の測定指標

指標測定方法
応答時間初回応答までの平均時間
解決率人間エージェント移管率の削減
顧客満足度NPS(Net Promoter Score)
運用コスト人件費とシステム運用費の比較

注意点: 実際の改善効果は導入環境や条件によって異なりますが、一般的に大幅な応答時間短縮、顧客満足度の向上、運用コストの削減が報告されています。多くの事例では30-80%の応答時間短縮が確認されており、導入企業の多くで良好な結果が得られています。


まとめ|次のステップへ

まとめ|次のステップへ

今回のマルチエージェントシステムの構築を通じて、以下のスキルを習得できました。

OpenAI Agents SDKの基本操作
マルチエージェント設計の基礎
業務プロセスの自動化手法
エラーハンドリングとデバッグ技術

今後の学習におすすめのテーマ

  1. より高度なAgent間通信
    • 並列処理の実装
    • 状態管理の最適化
  2. エンタープライズ向け機能
    • セキュリティ強化
    • スケーラビリティの向上
  3. 他業界への応用
    • 医療、金融、教育分野での実装
    • 業界特有の要件への対応

今すぐ始めてみましょう!

この記事で紹介したコードをベースに、ぜひあなた自身のマルチエージェントシステムを構築してみてください。まずは小さな機能から始めて、徐々に拡張していけば、必ず実用的なシステムが完成するはずです。

この記事の著者

Md Amanatullahのプロフィール写真

Md Amanatullah

生成AI、LLM、NLPを専門とするAI/ML開発者兼MLOpsエンジニア。

生成AI、大規模言語モデル(LLM)、自然言語処理(NLP)を専門とするAI/ML開発者兼MLOpsエンジニアで、5年以上の実務経験を有している。クラウドプラットフォームや最先端のフレームワークを活用し、実運用レベルのAIアプリケーションの構築とデプロイに精通している。AI技術の発展と、グローバルなコミュニティへの知識共有に情熱を注いでいる。

この記事は著者の許可を得て公開しています。

元記事:Flight Assistance with OpenAI Agent SDK

この記事の監修・コメント

池田朋弘のプロフィール写真

池田朋弘(監修)

Workstyle Evolution代表。18万人超YouTuber&著書『ChatGPT最強の仕事術』は4万部突破。

株式会社Workstyle Evolution代表取締役。YouTubeチャンネル「いけともch(チャンネル)」では、 AIエージェント時代の必須ノウハウ・スキルや、最新AIツールの活用法を独自のビジネス視点から解説し、 チャンネル登録数は18万人超(2025年7月時点)。

主な著書:ChatGPT最強の仕事術』、 『Perplexity 最強のAI検索術』、 『Mapify 最強のAI理解術

合わせて読みたい
関連記事

公式LINEで最新ニュースをゲット

LINE登録の無料特典
LINE登録の無料特典
icon

最新のAIニュース
毎週お届け

icon

生成AIの業務別の
ビジネス活用シーン

がわかるAIチャット

icon

過去のAIニュースから
事実を確認できる
何でもAI相談チャット

icon

ニュース動画
アーカイブ

ページトップへ