fallback-gracefully について
入力の誤解、システムエラー、コンテキスト喪失に対応する、販売チャットボット向けの設計ガイダンススキルです。段階的なフォールバック、人への引き継ぎ、失敗から改善する方法を扱います。
主な機能
- 01段階的な確認とフォールバック戦略
- 02人への引き継ぎと穏やかな終了の指針
- 03入力・システム・コンテキスト障害への対応
- 04フォールバックの記録と分析
- 05指標と改善サイクル
活用シーン
- 01販売ボットが入力を理解できない場合の応答設計
- 02技術障害や連携失敗時の会話設計
- 03失敗が続いた場合のエスカレーション経路の設定
- 04記録を分析してボットを改善
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ louisblythe/ sales-skills --skill fallback-gracefullyインストール後、Claude Code で/fallback-gracefullyを入力して読み込まれたか確認します。
詳細
セールスボットで適切にフォールバックする
あなたは、レジリエントなセールスボットの構築に精通しています。予期しない入力、エラー、エッジケースが発生しても、会話が中断されたりユーザーを苛立たせたりしないシステムの設計を支援することが目標です。
初期評価
ガイダンスを提供する前に、次の点を把握してください。
-
コンテキスト
- ボットでは、どのような種類の会話を行いますか?
- どのような予期しない入力に遭遇しますか?
- ボットは現在、エラーにどのように対処していますか?
-
現状
- ボットはどこで問題が発生しますか?
- 理解できない場合、どうなりますか?
- フォールバックはどのくらいの頻度で発生しますか?
-
目標
- エラーハンドリングを改善すると、何が実現できますか?
- 問題が起きたとき、ユーザーにどのような体験を提供したいですか?
基本原則
1. 行き止まりを作らない
- 常に応答を返す
- 常に次に進む方法を示す
- 相手を放置しない
2. 目立たない形で適切に失敗する
- システムエラーを見せない
- 相手に嫌な思いをさせない
- 混乱の責任を相手に負わせない
3. 適切な場合はエスカレーションする
- 自分の限界を把握する
- 人間の担当者への引き継ぎも有効な対応です
- 相手を苛立たせるより、エスカレーションするほうが適切です
4. 失敗から学ぶ
- 失敗はすべてフィードバックです
- 追跡して分析する
- 継続的に改善する
失敗の種類
入力に関する失敗
入力を理解できない:
- 意味不明な内容や誤字
- 想定外の言語
- 不明確な意図
想定外の入力:
- 話題から外れた質問
- 複雑なリクエスト
- エッジケース
曖昧な入力:
- 複数の意味に解釈できる
- コンテキストが不足している
- 曖昧な回答
システムに関する失敗
技術的なエラー:
- API のタイムアウト
- サービスを利用できない
- データ取得の失敗
連携の失敗:
- CRM に接続できない
- カレンダー API が停止している
- 決済システムのエラー
処理の失敗:
- モデルのエラー
- 解析の失敗
- ロジックのバグ
コンテキストに関する失敗
コンテキストの喪失:
- セッションの有効期限切れ
- 履歴を利用できない
- 情報の欠落
誤ったコンテキスト:
- ID の取り違え
- 誤った会話スレッド
- 古いデータ
フォールバック戦略
フォールバックの階層
Attempt 1: Try to understand
↓ (fail)
Attempt 2: Ask for clarification
↓ (fail)
Attempt 3: Offer alternatives
↓ (fail)
Attempt 4: Graceful handoff
段階的なフォールバック応答
ティア 1 - 確認: 「確実に理解したいので、もう一度言い換えていただけますか?」 「うまく理解できなかったようです。[option A] と [option B] のどちらについてお尋ねですか?」
ティア 2 - 代替の選択肢: 「その件への対応に少し苦労しています。次のようなことならお手伝いできます。
- [Option 1]
- [Option 2]
- [Something else]」
ティア 3 - 人間の担当者へのエスカレーション: 「適切なサポートを確実に受けていただきたいので、チームの担当者におつなぎします。」
ティア 4 - 丁寧に終了: 「申し訳ありませんが、現在その件についてはお手伝いできません。こちらからお問い合わせください。[contact info]」
フォールバック応答のテンプレート
入力を理解できない場合
1 回目: 「確実に理解したいので、お探しのものについてもう少し詳しく教えていただけますか?」
2 回目: 「うーん、まだ少し理解できていないようです。次のどれをお探しですか? A) [Common option 1] B) [Common option 2] C) その他」
3 回目: 「申し訳ありませんが、内容を理解するのが難しいようです。直接対応できる担当者につなぎます。ご連絡先として最適な方法を教えていただけますか?」
話題から外れた入力の場合
丁寧に話題を戻す: 「いい質問ですね!その件は私がお手伝いできる範囲から少し外れていますが、[your domain] についてなら得意です。その分野で何かお手伝いできることはありますか?」
(適切な場合は)ユーモアを交えて: 「あはは!それは私も知っていたらよかったのですが。私は主に [your domain] のお手伝いをしています。その関連で何かお手伝いできることはありますか?」
技術的なエラーの場合
ユーザーへのメッセージ: 「少々お待ちください。ちょっとした技術的な問題が発生しています。もう一度試してみます……」
問題が続く場合: 「申し訳ありませんが、技術的な問題が発生しています。担当者から直接ご連絡するよう手配します。メールアドレスを教えていただけますか?」
曖昧な入力の場合
確認を求める: 「念のため確認させてください。[their term] とは、[interpretation A] と [interpretation B] のどちらを指していますか?」
推測して確認する: 「[best guess] についてお尋ねのようです。合っていますか?それとも別のことを指していますか?」
実装
基本的なフォールバックシステム
function handleMessage(message, context) {
try {
// Attempt to understand and respond
intent = detectIntent(message)
if (intent.confidence < CONFIDENCE_THRESHOLD) {
return handleLowConfidence(message, context)
}
response = generateResponse(intent, context)
return response
} catch (error) {
return handleError(error, context)
}
}
function handleLowConfidence(message, context) {
attempts = context.clarification_attempts || 0
if (attempts == 0) {
context.clarification_attempts = 1
return clarifyIntent(message)
}
if (attempts == 1) {
context.clarification_attempts = 2
return offerAlternatives(context)
}
return escalateToHuman(context)
}
function handleError(error, context) {
logError(error, context)
if (isRetryable(error)) {
return retryWithBackoff(context)
}
return gracefulFallback(context)
}
信頼度に基づくルーティング
function routeByConfidence(intent, context) {
if (intent.confidence > 0.85) {
// High confidence: proceed normally
return processIntent(intent, context)
}
if (intent.confidence > 0.6) {
// Medium confidence: confirm before proceeding
return confirmIntent(intent, context)
}
if (intent.confidence > 0.3) {
// Low confidence: ask clarifying question
return clarifyIntent(context)
}
// Very low confidence: offer alternatives or escalate
return offerAlternatives(context)
}
エラーからの復旧
function retryWithBackoff(context, max_retries=3) {
for (attempt = 1; attempt <= max_retries; attempt++) {
try {
wait(exponentialBackoff(attempt))
return processMessage(context)
} catch (error) {
if (attempt == max_retries) {
return gracefulFallback(context)
}
}
}
}
function exponentialBackoff(attempt) {
base_delay = 1000 // 1 second
return base_delay * Math.pow(2, attempt - 1)
}
コンテキストの復旧
コンテキストを失った場合の対応
認識して立て直す: 「申し訳ありません。会話の流れを見失ってしまったようです。何をお探しだったか、もう一度教えていただけますか?」
自然に仕切り直す: 「正確にお手伝いできるよう、最初からやり直させてください。今日はどのようなご質問がありますか?」
セッション管理
function ensureContext(session_id) {
context = loadContext(session_id)
if (!context || isExpired(context)) {
// Context lost or expired
return {
is_new: true,
message: "Welcome back! How can I help you today?"
}
}
if (isStale(context)) {
// Context exists but may be outdated
return {
is_stale: true,
context: context,
message: "Hi again! Were you still looking into [last topic]?"
}
}
return { context: context }
}
具体的な失敗シナリオ
意味不明な入力
検出条件:
- 非常に短い(1~2文字)
- 認識できる単語がない
- ランダムな文字
応答: 「よく聞き取れませんでした。何をお探しですか?」
複数の質問
検出条件:
- 疑問符が複数ある
- 「そして」で話題がつながっている
- 長く続く文
応答: 「いくつかご質問がありますね。一つずつお答えします。まず、[最初の質問への回答]。もう一つ知りたいことは何でしたか?」
感情的な発言
検出条件:
- すべて大文字
- 罵り言葉
- いら立ちの兆候
応答: 「いら立っていらっしゃることが伝わってきます。申し訳ありません。適切に対応できる担当者におつなぎします。ご連絡先として最適な方法を教えていただけますか?」
対応範囲外のリクエスト
検出条件:
- 明らかに話題から外れている
- 無関係な分野
- 個人的な質問
応答: 「それは少し専門外です。私は[あなたの分野]に関するお手伝いを得意としています。その範囲で何かお手伝いできることはありますか?」
システムの停止
応答: 「現在、技術的な問題が発生しています。担当者から折り返しご連絡してもよろしいでしょうか?メールアドレスまたは電話番号を教えていただけますか?」
フォールバックから学ぶ
追跡する内容
フォールバックごとに:
- 元の入力
- 発動したフォールバックの段階
- ユーザーの次のメッセージ
- 最終的な結果
- チャネルとコンテキスト
分析のための質問
- どのような入力が最も頻繁にフォールバックを引き起こしますか?
- 誤解にはパターンがありますか?
- どのフォールバック応答が最も効果的ですか?
- ボットにどのような対応を学習させるべきですか?
改善サイクル
- フォールバックデータを収集する
- パターンを特定する
- よくあるケースに対応できるよう学習させる
- フォールバック応答を改善する
- 監視して繰り返す
フォールバックのパフォーマンス測定
主な指標
フォールバック率: フォールバックが発動したメッセージの割合
復旧率: フォールバック後に復旧する割合と、エスカレーションされる割合
ユーザー満足度: フォールバック後の感情とエンゲージメント
目標値
| 指標 | 目標 |
|---|---|
| フォールバック率 | <10% |
| 復旧率(Tier 1) | >70% |
| エスカレーション率 | <5% |
| フォールバック後の離脱率 | <15% |
よくある間違い
1. 技術的なエラーをそのまま見せる
悪い例: 「エラー 500:データベースへの接続に失敗しました」 良い例: 「技術的な問題が少し発生しています。しばらくお待ちください……」
2. ユーザーのせいにする
悪い例: 「質問がわかりにくくて理解できません。」 良い例: 「正しく理解できているか確認させてください。言い換えていただけますか?」
3. 延々と繰り返す
悪い例: 5回にわたって説明を求める 良い例: 2~3回試した後にエスカレーションする
4. 次の手段を示さない
悪い例: 「それについてはお手伝いできません。」 良い例: 「直接お手伝いすることはできませんが、こちらからサポートを受けられます:[選択肢]」
5. 学習しない
悪い例: 同じ失敗が何度も起きる 良い例: フォールバックを分析し、改善のための学習を行う
確認する質問
より詳しい状況を把握する必要がある場合:
- ボットが最も頻繁に失敗する原因は何ですか?
- ボットが理解できないとき、ユーザーはどのように反応しますか?
- 現在のフォールバック体験はどのようなものですか?
- エスカレーション先として、どのような人的サポートを利用できますか?
- フォールバックのパターンに関するデータはありますか?
関連スキル
- intent-detection:理解を改善してフォールバックを減らす
- handoff-detection:エスカレーションするタイミング
- conversational-flow-management:復旧と誘導
- sentiment-analysis:いら立ちを検出する