EXERCISE 90分

ストーリー

田中VPoE
Month 3の総仕上げだ。これまで学んだすべてを統合して、NetShop社の業務自動化AIエージェントの設計書を作成してもらう
あなた
エージェントパターン、ツール設計、LangGraph、マルチエージェント、信頼性の全部を使う総合演習ですね
田中VPoE
その通り。実際のプロジェクトでは、こうした設計書を作成してからチームで実装に入る。設計の質が実装の効率と品質を左右する
あなた
全力で取り組みます。設計書として上司に提出できるレベルを目指します
田中VPoE
いいぞ。技術的な正確さだけでなく、ビジネス要件との整合性、運用面の考慮も含めた包括的な設計書を期待している

ミッション概要

項目内容
目標NetShop社の業務自動化AIエージェントシステムの設計書を作成する
所要時間90分
ミッション数3つ(設計書の3つのセクション)
使用知識Month 3で学んだ全知識
評価観点技術的正確性、設計の網羅性、実現可能性

背景

NetShop社では以下の業務課題を抱えています。

課題現状目標
カスタマーサポート対応に平均30分、エスカレーション率40%平均5分、エスカレーション率15%以下
注文管理手動でのステータス確認・更新自動化率80%以上
配送トラブル顧客からの問い合わせで初めて発覚プロアクティブな検知・対応
返金処理承認フローに平均2日少額は即時、高額も1時間以内

これらの課題を解決する業務自動化AIエージェントシステムの設計書を作成してください。


Mission 1: システムアーキテクチャ設計

要件

以下の項目を含むシステムアーキテクチャを設計してください。

  1. エージェント構成: 必要なエージェントの一覧、各エージェントの責務
  2. マルチエージェントパターン: 選定したパターンとその理由
  3. ツールセット: 各エージェントが使用するツールの一覧
  4. 通信設計: エージェント間の通信パターン
  5. アーキテクチャ図: システム全体のMermaid図
解答例

1. エージェント構成:

エージェント責務ツール数
Supervisor Agent問い合わせの分類、エージェント振り分け、結果統合0(LLMのみ)
Order Agent注文検索、詳細確認、キャンセル、ステータス更新4
Shipping Agent配送追跡、再配達手配、配送日変更、トラブル検知4
Payment Agent返金処理、決済確認、クーポン発行3
FAQ AgentFAQ検索、RAG検索、一般質問対応2
Notification Agentメール送信、Slack通知、プッシュ通知3

2. マルチエージェントパターン: Supervisor + サブグラフ

理由:

  • エージェント数が6体で、Supervisorパターンが最適な規模
  • 各エージェントの責務が明確に分離できる
  • Supervisorが全体のフロー制御を持つことでデバッグが容易
  • サブグラフで返金フロー(承認付き)を独立管理

3. ツールセット:

Order Agent:
  - search_orders: 注文検索(顧客ID/日付/ステータス)
  - get_order_details: 注文詳細取得
  - cancel_order: 注文キャンセル
  - update_order_status: ステータス更新

Shipping Agent:
  - track_shipment: 配送追跡
  - arrange_redelivery: 再配達手配
  - change_delivery_date: 配送日変更
  - detect_delivery_anomaly: 配送異常検知

Payment Agent:
  - process_refund: 返金処理
  - check_payment_status: 決済状況確認
  - issue_coupon: クーポン発行

FAQ Agent:
  - search_faq: FAQキーワード検索
  - rag_search: RAGベクトル検索(Month 2で構築)

Notification Agent:
  - send_email: メール送信
  - send_slack: Slack通知
  - send_push: プッシュ通知

4. 通信設計:

  • Supervisor ↔ 各Agent: 共有Stateパターン(LangGraph)
  • 返金フロー: メッセージパッシング + HITL(中断/再開)
  • 通知トリガー: イベントドリブン(返金完了、配送トラブル検知時)

5. アーキテクチャ図:

graph TD
    User["顧客"] --> API["API Gateway"]
    API --> Supervisor["Supervisor Agent"]

    Supervisor --> Order["Order Agent"]
    Supervisor --> Shipping["Shipping Agent"]
    Supervisor --> Payment["Payment Agent"]
    Supervisor --> FAQ["FAQ Agent"]

    Order --> OrderDB["注文DB"]
    Shipping --> CarrierAPI["配送業者API"]
    Payment --> PaymentGW["決済Gateway"]
    FAQ --> VectorDB["ベクトルDB"]

    Payment --> |HITL| HumanApproval["人間承認"]
    HumanApproval --> Payment

    Order --> EventBus["Event Bus"]
    Shipping --> EventBus
    Payment --> EventBus
    EventBus --> Notification["Notification Agent"]

    Notification --> Email["メール"]
    Notification --> Slack["Slack"]

Mission 2: ワークフロー詳細設計

要件

主要な3つのユースケースについて、LangGraphのワークフローを詳細設計してください。

  1. 注文照会フロー: 問い合わせ → 意図分類 → 注文検索 → 配送追跡 → 回答
  2. 返金フロー: 申請 → 注文確認 → 返金計算 → 【承認】 → 返金実行 → 通知
  3. 配送トラブルフロー: 異常検知 → 原因調査 → 対応判断 → アクション → 通知

設計要件:

  • 各フローのState定義
  • ノード一覧と処理内容
  • 条件分岐の設計
  • Human-in-the-Loopのポイント
  • エラー処理方針
解答例

1. 注文照会フロー:

class OrderInquiryState(TypedDict):
    messages: Annotated[list, add_messages]
    customer_id: str | None
    order_id: str | None
    order_data: dict | None
    shipping_data: dict | None
    needs_shipping_info: bool
    final_response: str | None

# ノード一覧
# classify_intent → extract_order_info → search_order
#   → [needs_shipping?] → track_shipment → generate_response → END
#                        ↘ generate_response → END

# 条件分岐: 配送追跡が必要かどうか
def needs_tracking(state):
    order = state.get("order_data", {})
    if order.get("status") in ["shipped", "in_transit"]:
        return "track_shipment"
    return "generate_response"

2. 返金フロー:

class RefundFlowState(TypedDict):
    messages: Annotated[list, add_messages]
    order_id: str
    order_data: dict | None
    refund_amount: int | None
    refund_reason: str | None
    risk_level: str  # "low" | "medium" | "high"
    human_approved: bool | None
    refund_result: dict | None
    notification_sent: bool

# ノード一覧
# verify_order → calculate_refund → assess_risk
#   → [low_risk] → auto_approve → execute_refund → notify → END
#   → [high_risk] → [HITL: human_approval] → execute_or_reject → notify → END

# リスク判定
def assess_risk(state):
    amount = state.get("refund_amount", 0)
    if amount <= 5000:
        return "auto_approve"    # 5000円以下は自動承認
    elif amount <= 50000:
        return "auto_approve"    # 5万円以下も自動承認(ポリシーによる)
    else:
        return "human_approval"  # 5万円超は人間承認

# HITL: human_approval ノードの前で中断
# interrupt_before=["human_approval"]

3. 配送トラブルフロー:

class DeliveryTroubleState(TypedDict):
    messages: Annotated[list, add_messages]
    order_id: str
    anomaly_type: str  # "delayed" | "lost" | "damaged" | "wrong_address"
    investigation_result: dict | None
    proposed_action: str  # "resend" | "refund" | "contact_carrier" | "escalate"
    action_result: dict | None
    customer_notified: bool

# ノード一覧
# detect_anomaly → investigate_cause → decide_action
#   → [resend] → create_replacement → notify_customer → END
#   → [refund] → (返金フローに委任) → notify_customer → END
#   → [contact_carrier] → contact_carrier_api → notify_customer → END
#   → [escalate] → escalate_to_human → END

# エラー処理方針
# - 配送業者APIタイムアウト: 3回リトライ → 手動対応にエスカレーション
# - 在庫切れで再送不可: 返金フローにフォールバック
# - 原因不明の異常: 人間に即座にエスカレーション

Mission 3: 運用・信頼性設計

要件

以下の項目を含む運用設計書を作成してください。

  1. Guardrailsポリシー: Input/Action/Output各段階の設計
  2. オブザーバビリティ: ログ項目、メトリクス、アラート条件
  3. テスト戦略: テストピラミッドの各層の設計
  4. SLA定義: 各フローのレイテンシ目標、可用性目標
  5. コスト見積もり: 月間のAPI費用概算
解答例

1. Guardrailsポリシー:

段階ルール具体値
Inputプロンプトインジェクション検出パターン + LLM分類(二段構え)
Input入力長制限2,000文字
Inputレート制限10回/分/ユーザー
Action返金上限(自動)50,000円
Action返金レート3回/時/ユーザー
Action禁止アクションデータ削除、管理者操作
OutputPII除去クレカ、メール、電話、住所詳細
Outputスコープ制限NetShop社業務に関連する話題のみ

2. オブザーバビリティ:

メトリクス目標値アラート閾値
平均レイテンシ5秒以下15秒超で Warning
エラー率5%以下10%超で Critical
エスカレーション率15%以下30%超で Warning
ツール成功率95%以上90%未満で Warning
ガードレール発動率5%以下20%超で Info

ツール: LangSmith(トレース)+ Grafana(ダッシュボード)+ PagerDuty(アラート)

3. テスト戦略:

テスト数実行頻度対象
ユニット50+CI/CD毎回ツール関数、バリデーション、ガードレール
統合20+日次ワークフロー分岐、ツール連携
E2E10+週次主要シナリオ(正常系+異常系+セキュリティ)

4. SLA定義:

フローレイテンシ目標可用性目標
注文照会P95 < 5秒99.9%
返金処理(自動)P95 < 10秒99.5%
返金処理(承認付き)承認後 < 30秒99.5%
配送トラブル対応P95 < 15秒99.0%

5. コスト見積もり:

項目月間想定単価月額
LLM API(GPT-4o)100,000リクエスト x 2,000トークン/回$2.50/1Mトークン(入力)約$500
LLM API(出力)100,000リクエスト x 500トークン/回$10/1Mトークン(出力)約$500
LangSmith100,000トレース$39/月(Plus)$39
ベクトルDBFAQ/RAG用約$50/月$50
合計約$1,089/月(約16万円)

達成度チェック

  • Mission 1: マルチエージェントのシステムアーキテクチャを設計できた
  • Mission 1: 各エージェントの責務とツールセットを定義できた
  • Mission 2: 3つの主要ユースケースのワークフローを詳細設計できた
  • Mission 2: HITL、条件分岐、エラー処理を含む設計ができた
  • Mission 3: Guardrails、オブザーバビリティ、テスト、SLA、コストを含む運用設計ができた
  • 設計書全体が技術的に正確で実現可能な内容になっている

推定所要時間: 90分