ankuro.dev
← ブログ一覧に戻る
【CCA Foundations対策 / Claude API編 #13】エスカレーションと反復改善——自律解決の判断設計
2026-04-03#Claude#API#Python#生成AI#エージェント#Claude Certified Architect

【CCA Foundations対策 / Claude API編 #13】エスカレーションと反復改善——自律解決の判断設計

Anthropic Academyの「Agents and Workflows」コースおよびCCA Foundations試験ガイドをもとに解説しています。

エージェントを本番運用すると「なぜここでエスカレーションした?」「なぜここで止まらなかった?」という問題が必ず出てくる。今回は自律解決とエスカレーションの判断設計、そして出力品質を上げる反復改善パターンを整理する。

この記事でわかること:

  • エスカレーションすべき唯一の確実な基準(ポリシーギャップ)
  • エスカレーションしなくていいケースの判断
  • declarativeルールよりfew-shot examplesが有効な理由
  • evaluator-optimizerパターンによる自己評価
  • 複数懸念事項を並列処理して統合する設計

エスカレーションの判断基準

エージェントが「escalate_to_human」を呼ぶタイミングを設計するとき、最も重要な原則は一つ。

エージェントが答えを作れない状況のみエスカレーションする。

確実にエスカレーションすべきケース:ポリシーギャップ

方針が存在しない、またはその場面をカバーしていない——これがエスカレーションの唯一の確実な基準。

例:
顧客が競合他社との価格マッチを要求してきた。
自社のポリシーには「自社サイトでの値下げから14日以内なら対応する」と書いてある。
競合との価格差については方針が存在しない。

→ エスカレーション。ポリシーが存在しないケースに答えを創作してはいけない。

エージェントはポリシーを解釈する存在ではなく、ポリシーに従う存在。方針が沈黙している問題は、人間の判断に委ねる。

エスカレーションしなくていいケース

これが設計で判断を誤りやすい部分。

矛盾する情報がある場合

顧客が「商品が届いていない」と言っているが、
配送追跡では3日前に署名で受け取ったと記録されている。

→ エスカレーション不要。
エージェントはトラッキング情報を顧客に提示できる。
感情的な摩擦を避けたいという理由はエスカレーション基準にならない。

複数の懸念事項が混在する場合

顧客が「返金と配送先住所の変更を同時にお願いしたい」と言っている。

→ エスカレーション不要。
懸念事項を分解して、それぞれに対応すればよい。
「複数あるから人間に任せる」は誤った判断。

顧客が気が変わるかもしれない場合

昨日出荷した商品のキャンセルを求めている。
「届いたら気が変わるかもしれない」

→ エスカレーション不要。
推測に基づくエスカレーションはアンチパターン。
現在の要求を処理すればよい。

エスカレーション基準の伝え方

「複雑なケースはエスカレーションしてください」というシステムプロンプトでは機能しない。

declarativeルールの限界

# NG
- 複雑なリクエストはエスカレーションする
- ポリシーが不明確な場合はエスカレーションする
- 顧客が不満そうな場合はエスカレーションする

Claudeはルールを読んでも「このケースが複雑かどうか」の判断がつかない。境界が曖昧なルールは機能しない。

few-shot examplesが有効な理由

# OK:境界ケースを例示する
例1:顧客が写真付きで破損品の交換を求めている
→ 自律解決。標準手順に従って交換処理する。

例2:顧客が競合他社の価格でマッチを求めている
→ エスカレーション。自社ポリシーは自社サイトの値下げのみカバー。
  競合との価格差については方針が存在しない。

例3:注文が届いていないと言っているが追跡では配達済み
→ 自律解決。トラッキング情報を顧客に提示して確認を求める。

examplesは「どちらになるか曖昧なケース」に対して機能する。典型的なケースではなく、境界線上のケースを選ぶことがポイント。

📋 試験ガイドより
公式試験ガイドのIn-Scope Topicsに「Escalation decision-making: Explicit criteria, honoring customer preferences, policy gap identification」が明記されている。エスカレーション基準はdeclarativeルールではなくfew-shot examplesで伝える。ポリシーギャップ(方針が存在しないケース)が唯一の確実なエスカレーション基準であり、矛盾情報や複数懸念事項は自律解決できる。


evaluator-optimizer:出力前に自己評価させる

エージェントが回答を出す前に、別のClaudeインスタンス(または同じClaudeの追加ステップ)が品質を評価する。

# 1. 初回の回答を生成
draft_response = generate_draft(customer_request, context)

# 2. 評価ステップ
evaluation_prompt = f"""
以下の回答案を評価して:

顧客の問い合わせ:{customer_request}
回答案:{draft_response}

確認項目:
- すべての懸念事項に対応しているか
- 関連する背景情報(ポリシー・期限)が含まれているか
- 次のアクションが明確か

不足があれば具体的に指摘して。
"""

evaluation = claude.call(evaluation_prompt)

# 3. 不足があれば改善
if evaluation.has_gaps:
    final_response = improve_draft(draft_response, evaluation.feedback)
else:
    final_response = draft_response

このパターンをevaluator-optimizerと呼ぶ。#11のワークフロー設計でも触れたが、カスタマーサポートでは特に有効——ケースごとに必要な情報が異なり、一律のチェックリストでは対応できないため、Claudeに評価基準を判断させる。

大事な点:評価ステップは追加の確認を顧客に求めるのではなく、回答を顧客に送る前に内部で行う。顧客への余計なやり取りを増やさずに品質を上げる。


複数懸念事項の並列処理

顧客が1つのメッセージに複数の問題を含める場合(「返金して、かつ住所も変えたい」)、順番に処理すると:

  • 共通する顧客情報(アカウント・注文)を複数回取得する無駄
  • 処理が遅くなる
  • 一方の問題が解決しても他方を忘れることがある

並列処理の設計:

# 懸念事項を分解
concerns = decompose_request(customer_message)
# → ["注文1234の返金", "注文5678の住所変更"]

# 共通コンテキストを一度取得
customer_context = get_customer(customer_id)

# 各懸念事項を並列で処理
results = await asyncio.gather(*[
    handle_concern(concern, customer_context)
    for concern in concerns
])

# 結果を統合して1つの回答を生成
final_response = synthesize_results(results)

懸念事項ごとに独立して処理し、最後に統合する。共通コンテキスト(顧客情報)は一度だけ取得して再利用する。ツール呼び出し回数が減り、レスポンスが速くなる。


よくある誤解まとめ

誤解 実際
複数の問題が来たらエスカレーションすべき 分解して並列に処理すればよい。複数あることはエスカレーション理由にならない
矛盾する情報があれば人間に任せる エージェントがデータを提示して確認を求めればよい
エスカレーション基準はルールで書ける 境界ケースの判断はfew-shot examplesでしか伝わらない
evaluator-optimizerは顧客に追加質問する 内部の自己評価ステップ。顧客への余計なやり取りを増やさない
感情的な摩擦を避けるためにエスカレーションする エスカレーション基準は業務上の必要性に基づく。感情的理由は基準にならない

設計の判断基準

場面 やりがちな選択 正しい選択 判断の根拠
エスカレーション基準を設定したい 「複雑なケースはエスカレーション」とルールで書く 境界線上のケースをfew-shot examplesで示す Claudeは境界が曖昧なルールを正しく適用できない。例で示すほうが効果的
ポリシーに書いていないケースが来た エージェントが推測して回答する escalate_to_humanを呼ぶ ポリシーが存在しない問題に答えを創作してはいけない
顧客が複数の問題を1メッセージで送ってきた 1つずつ順番に解決する 分解して並列に処理して統合する 並列処理で共通情報の重複取得をなくし、処理を効率化できる
回答の完全性にばらつきがある 顧客に「他に何かありますか?」と確認する evaluator-optimizerで送信前に自己評価する 顧客の負担を増やさずに品質を上げられる

まとめ

  • エスカレーションの唯一の確実な基準はポリシーギャップ——方針が存在しないケース
  • 矛盾情報・複数懸念事項・推測はエスカレーション理由にならない
  • エスカレーション基準はdeclarativeルールではなく境界ケースのfew-shot examplesで伝える
  • evaluator-optimizerは回答を顧客に送る前に内部で品質を評価するパターン
  • 複数懸念事項は分解→並列処理→統合の設計で効率化する

次回(#14)はコンテキスト最適化とprovenance管理——マルチエージェントシステムの信頼性設計を解説する。


#12:エージェントの設計#14:コンテキスト最適化とprovenance管理