ストーリー
ミッション概要
| 項目 | 内容 |
|---|---|
| 目標 | NetShop社の業務自動化AIエージェントシステムの設計書を作成する |
| 所要時間 | 90分 |
| ミッション数 | 3つ(設計書の3つのセクション) |
| 使用知識 | Month 3で学んだ全知識 |
| 評価観点 | 技術的正確性、設計の網羅性、実現可能性 |
背景
NetShop社では以下の業務課題を抱えています。
| 課題 | 現状 | 目標 |
|---|---|---|
| カスタマーサポート | 対応に平均30分、エスカレーション率40% | 平均5分、エスカレーション率15%以下 |
| 注文管理 | 手動でのステータス確認・更新 | 自動化率80%以上 |
| 配送トラブル | 顧客からの問い合わせで初めて発覚 | プロアクティブな検知・対応 |
| 返金処理 | 承認フローに平均2日 | 少額は即時、高額も1時間以内 |
これらの課題を解決する業務自動化AIエージェントシステムの設計書を作成してください。
Mission 1: システムアーキテクチャ設計
要件
以下の項目を含むシステムアーキテクチャを設計してください。
- エージェント構成: 必要なエージェントの一覧、各エージェントの責務
- マルチエージェントパターン: 選定したパターンとその理由
- ツールセット: 各エージェントが使用するツールの一覧
- 通信設計: エージェント間の通信パターン
- アーキテクチャ図: システム全体のMermaid図
解答例
1. エージェント構成:
| エージェント | 責務 | ツール数 |
|---|---|---|
| Supervisor Agent | 問い合わせの分類、エージェント振り分け、結果統合 | 0(LLMのみ) |
| Order Agent | 注文検索、詳細確認、キャンセル、ステータス更新 | 4 |
| Shipping Agent | 配送追跡、再配達手配、配送日変更、トラブル検知 | 4 |
| Payment Agent | 返金処理、決済確認、クーポン発行 | 3 |
| FAQ Agent | FAQ検索、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のワークフローを詳細設計してください。
- 注文照会フロー: 問い合わせ → 意図分類 → 注文検索 → 配送追跡 → 回答
- 返金フロー: 申請 → 注文確認 → 返金計算 → 【承認】 → 返金実行 → 通知
- 配送トラブルフロー: 異常検知 → 原因調査 → 対応判断 → アクション → 通知
設計要件:
- 各フローの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: 運用・信頼性設計
要件
以下の項目を含む運用設計書を作成してください。
- Guardrailsポリシー: Input/Action/Output各段階の設計
- オブザーバビリティ: ログ項目、メトリクス、アラート条件
- テスト戦略: テストピラミッドの各層の設計
- SLA定義: 各フローのレイテンシ目標、可用性目標
- コスト見積もり: 月間のAPI費用概算
解答例
1. Guardrailsポリシー:
| 段階 | ルール | 具体値 |
|---|---|---|
| Input | プロンプトインジェクション検出 | パターン + LLM分類(二段構え) |
| Input | 入力長制限 | 2,000文字 |
| Input | レート制限 | 10回/分/ユーザー |
| Action | 返金上限(自動) | 50,000円 |
| Action | 返金レート | 3回/時/ユーザー |
| Action | 禁止アクション | データ削除、管理者操作 |
| Output | PII除去 | クレカ、メール、電話、住所詳細 |
| 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+ | 日次 | ワークフロー分岐、ツール連携 |
| E2E | 10+ | 週次 | 主要シナリオ(正常系+異常系+セキュリティ) |
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 |
| LangSmith | 100,000トレース | $39/月(Plus) | $39 |
| ベクトルDB | FAQ/RAG用 | 約$50/月 | $50 |
| 合計 | 約$1,089/月(約16万円) |
達成度チェック
- Mission 1: マルチエージェントのシステムアーキテクチャを設計できた
- Mission 1: 各エージェントの責務とツールセットを定義できた
- Mission 2: 3つの主要ユースケースのワークフローを詳細設計できた
- Mission 2: HITL、条件分岐、エラー処理を含む設計ができた
- Mission 3: Guardrails、オブザーバビリティ、テスト、SLA、コストを含む運用設計ができた
- 設計書全体が技術的に正確で実現可能な内容になっている
推定所要時間: 90分