Media > AI活用ユースケース > カスタマーサポート > 「使えない」の連絡を、過去の障害と設定変更の履歴に照らして切り分ける

「使えない」の連絡を、過去の障害と設定変更の履歴に照らして切り分ける

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

利用者から届いた「使えない」という連絡を、過去の障害の記録と直近の変更の履歴に照らし、似た事例、関係しそうな変更、次に確かめることを出どころ付きで並べます。原因の断定と復旧作業はさせません。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Amazon Kendra/Azure AI/OpenSearch
連携・自動化
Make/n8n/Power Automate
対象業界
IT・SaaS/その他/教育/自治体/金融
対象部門
カスタマーサポート/情報システム
対象業務
問い合わせ対応/情報検索
主な課題
問い合わせが多い/属人化している/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
属人化解消/工数削減/検索時間短縮
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
必須
現在工数
40h/月
AI導入後
14h/月
想定削減
65%
年間削減
312h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 連絡を受け、ITサービス管理ツールにチケットを作る
  2. 文面を読み、いつから、誰が、どの画面でという情報が足りなければ聞き返す
  3. 過去の障害の記録を、思いついた言葉で検索する。当たらなければ言葉を変えて引き直す
  4. 変更管理の台帳を開き、直近の設定変更とリリースに対象が重なるものが無いかを見る
  5. 該当しそうな外部サービスがあれば、稼働情報のページを開いて現在の状態を読む
  6. 本人だけか、拠点全体か、全社かを決め、担当を割り振るか自分で対応する
  7. 終わったら、切り分けの結果と対処をチケットに書いて閉じる
導入後(After)
  1. 人連絡を受け、ITサービス管理ツールにチケットを作る
  2. 自動直近15分に作られた同種のチケットの件数を数える。利用者で重複を除く
  3. 自動3件以上なら全体の障害を疑う印を立て、当番のリーダーへ承認要求を出す
  4. 自動本文から氏名と端末名を置き換え、署名と定型の挨拶を落とす
  5. 自動過去の障害の記録と、直近72時間の設定変更・リリースの履歴を検索する
  6. 自動引いた記録を渡し、似た事例、関係しそうな変更、次に確かめることを引用付きで出させる
  7. 自動本文だけを別に見て、型の項目のうち足りないものと、聞き返しの下書きを作る
  8. 自動引用の付いていない記述を落とし、記録の番号と日付を付けて1枚にまとめる
  9. 自動関係しそうな外部サービスの稼働情報ページへのリンクを並べる
  10. 人担当者が候補を見て、確かめる順番を決める。稼働情報は自分で開いて読む
  11. 人聞き返しの下書きを直して利用者へ送る
  12. 人切り分けの結果と、役に立った記録の番号をチケットに書く
各工程の詳しい説明を読む
  1. 連絡を受け、ITサービス管理ツールにチケットを作る
  2. 文面を読み、いつから、誰が、どの画面でという情報が足りなければ聞き返す
  3. 過去の障害の記録を、思いついた言葉で検索する。当たらなければ言葉を変えて引き直す
  4. 変更管理の台帳を開き、直近の設定変更とリリースに対象が重なるものが無いかを見る
  5. 該当しそうな外部サービスがあれば、稼働情報のページを開いて現在の状態を読む
  6. 本人だけか、拠点全体か、全社かを決め、担当を割り振るか自分で対応する
  7. 終わったら、切り分けの結果と対処をチケットに書いて閉じる

(a)3番と4番が、毎回の調べ直しになっている。 過去に同じ現象があっても、そのときの記録の言葉と今回の利用者の言葉が違えば当たりません。「印刷できない」と「出力されない」が別の記録として並んでいます。 何度か言葉を変えて探し、見つからなければ無いものとして進みます。

(b)経験の差がそのまま時間の差になる。 経験のある担当者は、文面を見た時点で見に行く先の見当が付きます。不慣れな担当者は3番から順に全部を見て、当たる言葉を知らず空振りが続きます。同じ連絡で5分と30分の差が出ます。

(c)同じ時間帯の複数件に気づくのが遅い。 チケットは1件ずつ開くので、隣の担当者が別の拠点から似た連絡を受けていても分かりません。全社の障害を、個別の問い合わせとして3件別々に切り分けていたことが起きます。

(d)聞き返しが1往復ずつ増える。 足りない情報を聞き返すと、返事が来るまで止まります。最初に何を聞くかが担当者ごとに違うので、2往復、3往復になります。この待ち時間は工数に出ませんが、利用者から見た復旧までの時間には乗ります。

  1. 【人】 連絡を受け、ITサービス管理ツールにチケットを作る
  2. 【自動】 直近15分に作られた同種のチケットの件数を数える。利用者で重複を除く
  3. 【自動】 3件以上なら全体の障害を疑う印を立て、当番のリーダーへ承認要求を出す
  4. 【自動】 本文から氏名と端末名を置き換え、署名と定型の挨拶を落とす
  5. 【自動】 過去の障害の記録と、直近72時間の設定変更・リリースの履歴を検索する
  6. 【自動】 引いた記録を渡し、似た事例、関係しそうな変更、次に確かめることを引用付きで出させる
  7. 【自動】 本文だけを別に見て、型の項目のうち足りないものと、聞き返しの下書きを作る
  8. 【自動】 引用の付いていない記述を落とし、記録の番号と日付を付けて1枚にまとめる
  9. 【自動】 関係しそうな外部サービスの稼働情報ページへのリンクを並べる
  10. 【人】 担当者が候補を見て、確かめる順番を決める。稼働情報は自分で開いて読む
  11. 【人】 聞き返しの下書きを直して利用者へ送る
  12. 【人】 切り分けの結果と、役に立った記録の番号をチケットに書く

2番と3番を先頭に近い位置に置いたのが、一つ目の要点です。 件数は、AIに考えさせなくても数えれば分かります。同じ時間帯に3件来ているという事実は、どんな候補よりも強い手がかりです。 個別の切り分けの前に一度止めます。

6番と7番を分けているのが二つ目の要点です。 6番は記録を引用付きで読ませる処理、7番は本文だけを決まった形で受け取る処理で、この2つは1回の呼び出しにまとめられません。 理由は第7章に書きます。

02今回想定するシステム構成

構成図
利用者からの連絡(メール/チャット/電話の口頭)
   ▼【トリガー】ITサービス管理ツールにチケットが作られる
Power Automate
   ├──▶ 直近15分の同種チケットの件数を数える(利用者で重複を除く)
   │        └─ 3件以上 ─▶【全体障害の疑い】当番リーダーへ承認要求
   ▼ 氏名・端末名の置き換え/署名の除去/サービス名の統一
   ▼
Azure AI Search ── ハイブリッド検索(フルテキストとベクターを並列、RRFで統合)
   ├─ インデックス① 過去の障害の記録(セマンティックランカーで再ランク)
   └─ インデックス② 設定変更・リリースの履歴(直近72時間で絞り込み)
   ▼
Claude API
   ├─【呼び出しA】記録を引用付きで読む(似た事例/関係しそうな変更/次に確かめること)
   └─【呼び出しB】連絡の本文だけを見る(型の項目/足りない項目/聞き返しの下書き)
   ▼
Power Automate ── 引用の無い記述を落とし、記録番号と日付を付けて1枚にする
   ├──▶ 外部サービスの稼働情報ページへのリンク(対応表から。中身は読まない)
   ▼
【人】候補を見て、確かめる順番を決める
   ├──▶ 聞き返しの下書きを直して利用者へ送る
   └──▶ 切り分けの結果を書き、翌日インデックスに入る
役割想定する製品代替候補
処理Claude APIOpenAI API、Gemini API
検索基盤Azure AI SearchAmazon Kendra、OpenSearch
連携Power AutomateMake、n8n

ITサービス管理ツールと変更管理の台帳は、新しく足すものではありません。 読むだけで、書き込みはしません。

検索の中心は、Azure AI Search のハイブリッド検索です。 これは search と vectorQueries の両方のクエリパラメーターを含む1つのクエリ要求で、フルテキスト検索とベクター検索を並列で実行し、逆ランク融合(RRF)で結果をマージします。

ハイブリッドにする理由がはっきりしています。 ベクター検索の利点は、逆インデックスにキーワードの一致が無い場合でも、検索クエリと概念的に似た情報が検索されることです。「印刷できない」と「出力されない」が当たるのはこちらです。 一方、キーワード検索の利点は精度で、製品コード、高度に特殊化された専門用語、日付、人の名前に対するクエリなど、完全一致を識別できる場面で強くなります。

そのうえでセマンティックランカーを重ねます。 queryType=semantic を指定すると呼び出され、機械読解を適用して関連性の高い結果を上に出します。ただし、後段の設計を縛る制約も持ち込みます。

連携は Power Automate です。 件数を数える、検索を呼ぶ、結果を1枚にまとめる、承認を挟む、という役回りで、承認を機能として持つことが選定理由です。

03どうやって実装するのか

Step1

処理の起点を決める

ITサービス管理ツールにチケットが作られたことを起点にします。 定時実行にはしません。切り分けは受けた直後にしか意味がなく、まとめて処理すると、全社の障害に気づくのが夕方になります。

トリガーの直後に置くのが、件数を数える処理です。 チケットが作られるたびに、直近15分の同種のチケットを数えます。この処理だけはAIを通しません。 数えれば分かることに推測を挟みません。

Step2

入力データを集める

データ中身取得元
連絡の本文文面、起票日時、対象サービス名(分かれば)ITサービス管理ツール
過去の障害の記録記録番号、日付、現象、対象サービス、拠点、原因と対処ITサービス管理ツール
設定変更・リリースの履歴変更番号、適用日時、対象、変更の内容変更管理の台帳、作業記録
外部サービスの対応表サービス名と稼働情報ページのURL情報システム部の一覧
直近15分の起票件数件数と内訳(拠点、対象サービス)ITサービス管理ツール

正直に書いておきます。過去の障害の記録が残っていない会社では、この仕組みは動きません。 記録が手元のメモやチャットの流れにしかなければ、検索する先が存在しないからです。先に要るのは、記録番号と日付が付いた記録を1年分ためることで、これはAIではなく運用の話です。 変更の履歴も同じで、メールに散らばっていると72時間で絞れません。

Step3

データの取得方法を決める

インデックスは2つに分けます。 探し方が違うからです。

引くもの引き方絞り込み
過去の障害の記録ハイブリッド検索+セマンティックランカー対象サービス、拠点
設定変更・リリースの履歴ハイブリッド検索。適用日時で絞ってから引く直近72時間、対象サービス

記録側で効くのは、セマンティックランカーの制約です。 これは既定のランク付けアルゴリズムでスコア付けされた上位50件を再ランク付けするもので、50を超える結果が含まれている場合でも、上位50件のみが進みます。

だから、母数を先に絞ります。 対象サービスと拠点で filter をかけてから引けば、50件の枠に近いものが入ります。絞らずに全社1年分から引くと、上位50件が別のサービスの記録で埋まります。 公式の記述にも、セマンティックランカーを使用している場合は k を 50 に設定して入力を最大化する、とあります。

並べ替えは指定しません。 明示的な並べ替え順序は関連性の順位を上書きするとされています。後段で使う値は @search.rerankerScore、範囲は 4 から 0(高から低)です。

Step4

AIへ渡す前に整形する

  1. 氏名の置き換え … 氏名を社員番号に置き換えます。宛名と署名の両方です
  2. 端末名の置き換え … 資産管理番号は下3桁だけを残し、機種名は残します
  3. 署名と定型の挨拶の除去 … 落とさないと検索の言葉がぶれます
  4. サービス名の統一 … 「勤怠」を正式名称に、対応表で寄せます
  5. 件数の集計 … 直近15分の同種のチケットを数えます。同じ利用者の連続は1件です
  6. 記録の分割 … 長い対応記録を、見出しごとに分けて入れます
  7. 変更履歴の絞り込み … 適用日時が直近72時間のものだけにします

6番目に理由があります。 セマンティックランク付けでは、ドキュメントごとに要約モデルが最大2,000個のトークンを受け入れ、トークンは約10文字とされ、入力は「title」「keywords」「content」から組み立てられます(タイトル128、キーワード128、コンテンツが残り)。長すぎる文字列はトリミングされ、上限を超える内容は無視されます。 何時間も続いた対応記録を丸ごと入れると、末尾の「原因はこれだった」が捨てられます。

1番目と2番目は、第13章につながります。 外部のAPIへ渡すのは置き換えのあとの文面で、前処理に置かないと、渡す直前に確かめることになって漏れます。

Step5

AIに処理させる

呼び出しを2つに分けます。 渡すものと受け取る形が違うからです。

呼び出しA呼び出しB
渡すもの検索で引いた記録(上位5件ずつ)連絡の本文だけ
させること似た事例/関係しそうな変更/次に確かめること型の項目/足りない項目/聞き返しの下書き
受け取る形テキストと引用構造化出力(決めたJSONスキーマ)

分けているのは、好みの問題ではありません。併用できないからです。 Claude の引用(citations)と構造化出力は併用できず、渡したドキュメントで引用を有効にしたうえで output_config.format パラメーター(および非推奨の output_format)を含めると、APIは400エラーを返します。 引用はテキスト出力に引用ブロックを差し込む必要があり、構造化出力の厳格なJSONスキーマの制約と両立しないためとされています。

呼び出しAで引用を使うのは、出どころを人に書かせないためです。 応答は複数のテキストブロックに分かれ、各ブロックが主張と、それを支える引用を持ちます。

させないこと理由
原因の断定候補までにする。断定されると確かめる手順が飛ばされる
復旧の操作再起動、設定の戻し、権限の付け直しは人が決めて人が行う
外部サービスの稼働情報の解釈ページを渡さない。読むのは担当者
全体の障害かどうかの宣言件数は数えれば分かる。推測を挟まない
記録番号や日付を本文に書くこと引用から機械で付ける。書かせると番号がずれる
記録に無い事例の提示該当が無ければ「該当なし」と言わせる

下から2行目が、いちばん起きやすい失敗です。 記録番号を本文に書かせると、「INC-2416の事例では」と書きながら、引用は別の記録を指すことが起こります。

Step6

指示内容を固定する

呼び出しA(記録を引用付きで読ませる)

あなたは情報システム部門で、利用者からの「使えない」という連絡の切り分けを
手伝う立場です。渡した記録に書かれていることだけを使ってください。

【出すもの】次の3つを、この見出しのまま順に書いてください。
1. 似た過去の事例
2. 直近の変更で関係しそうなもの
3. 次に確かめること

【厳守事項】
- 1と2は、渡した記録のどれかを根拠にしてください。根拠にできる記録が
  無ければ「該当なし」と書き、なぜ該当しないかを1文で書いてください。
  それらしい事例を思い出して書かないでください。
- 記録の番号と日付を本文に書かないでください。番号はこちらで付けます。
- 原因を断定しないでください。「〜が原因です」と書かず、「〜の事例では
  〜だった」「〜の変更が同じ対象に当たっている」と書いてください。
- 再起動する、設定を戻すといった復旧の操作を書かないでください。
- 外部のサービスが止まっているかどうかを書かないでください。
- 3は確かめる順に3つまで。結果で次にやることが変わる順に並べてください。
- 利用者の氏名を、文面に残っていても書き写さないでください。

【利用者からの連絡】{ticket_body}
【同じ時間帯の連絡件数】直近15分に {concurrent_count} 件
【過去の障害の記録/設定変更・リリースの履歴】
  documentブロックで渡す(引用を有効にする)

「それらしい事例を思い出して書かない」を書かないと、書きます。 記録に近いものが無いとき、よくある障害の話を、記録から読んだ体裁で並べます。

呼び出しB(連絡の本文だけを決まった形で受け取る)

あなたは情報システム部門の受付です。利用者からの連絡の本文だけを見て、
切り分けに必要な項目が書かれているかを確かめ、足りない項目を聞き返す文を作ります。

【型の項目】
- since ... いつから  - who_scope ... 本人だけか周りにもか
- screen ... どの画面・操作で  - device ... 端末の種類
- error_text ... 画面に出ている文言  - service_name ... どのシステムか

【厳守事項】
- 書かれていない項目は空のままにし、missing に入れてください。
  文面から推測して埋めないでください。
- 「たぶん全社」のような書き方をせず、本人が書いた範囲だけを読んでください。
- ask_back_draft は、missing に入れた項目だけを尋ねる文にしてください。
  200文字以内、箇条書きで、謝罪や前置きを入れないでください。
- 原因、対処、復旧の見込みと、利用者の氏名を出力に含めないでください。

【連絡の本文】{ticket_body}

「200文字以内」をプロンプトに書くのは、スキーマで縛れないからです。 構造化出力のJSONスキーマでは、minLength と maxLength といった文字列の制約がサポートされていません。

Step7

出力形式を固定する

呼び出しAは、テキストと引用で返ります。 引用を有効にするには各ドキュメントに citations.enabled=true を設定します。 現時点では、1つのリクエスト内のすべてのドキュメントで有効にするか、すべてで無効にするかのどちらかにする必要があります。

{
  "type": "text",
  "text": "同じ拠点の利用者から、同じ画面で同じ文言が出た事例がある",
  "citations": [
    { "type": "char_location",
      "cited_text": "(記録から引かれた文がそのまま入る)",
      "document_index": 2,
      "document_title": "INC-2416 / 2026-06-11 / 申請画面が開かない",
      "start_char_index": 0, "end_char_index": 128 }
  ]
}

記録番号と日付は document_title から取ります。 タイトルは長さに制限があるため、メタデータをテキストまたは文字列化したJSONとして保存するには context フィールドが役に立つとされています。拠点や対象サービスはそちらへ入れます。

引用の付いていない記述は、ここで落とします。 citations が空のテキストブロックを捨てます。禁じたうえで、機械でも落とします。

呼び出しBは、次のスキーマで受け取ります。 8項目すべてを required に入れます。

{
  "type": "object",
  "properties": {
    "since":        { "type": "string" },
    "who_scope":    { "type": "string", "enum": ["self_only", "others_too", "unknown"] },
    "screen":       { "type": "string" },
    "device":       { "type": "string" },
    "error_text":   { "type": "string" },
    "service_name": { "type": "string" },
    "missing":      { "type": "array",
                      "items": { "type": "string",
                                 "enum": ["since", "who_scope", "screen",
                                          "device", "error_text", "service_name"] } },
    "ask_back_draft": { "type": "string" }
  },
  "additionalProperties": false
}

オブジェクトの additionalProperties は false に設定する必要があります。 決めた項目以外が混ざらず、後段の分岐が書きやすくなります。

2つの結果は、ワークフローが1枚にまとめます。 similar_incidents と recent_changes には引用から取った記録番号・日付・cited_text を、asked_back には呼び出しBの missing と下書きを入れます。その先頭に、数えた結果である concurrent_count と「全体障害の疑い」を置きます。 AIの出力ではありませんが、担当者が最初に見る場所をそろえるために同じ1枚に載せます。

Step8

システムへ連携する

つなぎ先方式内容
ITサービス管理ツールPower Automate のトリガーチケットの作成を検知し、本文を取る
ITサービス管理ツール検索直近15分の同種チケットの件数を数える
Azure AI SearchAPI呼び出し記録と変更履歴をハイブリッド検索で引く
Claude APIAPI呼び出し(2回)引用付きの候補提示と、型の項目の抜き出し
外部サービスの対応表表の参照サービス名からURLを引く。ページは開かない
当番リーダーPower Automate の承認全体障害の疑いが立ったときの周知可否

チケットへは書き込みません。 出すのは担当者が見る1枚までで、結果を書くのは人です。 書き込みを足すと、候補が事実として記録に残り、次の検索で引かれます。

承認は、全社周知を出すかどうかにだけ使います。 Power Automate では「承認 - 開始して承認を待機」アクションを任意のフローに追加することで承認を管理でき、承認者は承認センターまたはメールから返信できます。「詳細」フィールドは Markdown で書式を設定できるので、件数と時間帯と拠点の内訳を並べます。

Step9

人が確認する

人が見るのは全件です。 減らすのは1件あたりの調べ物の時間です。

  1. 全体障害の疑いを先に見る … concurrent_count と内訳を見ます。3件以上なら、個別の端末を見に行く前に止まります
  2. 候補の出どころを確かめる … 記録番号と日付から元の記録を開き、cited_text を読んで今回の連絡と本当に近いかを見ます
  3. 外部サービスの稼働情報は自分で読む … リンクを開いて現在の状態を読みます。AIの出力を経由しません
  4. 確かめる順番を決める … 「次に確かめること」は候補です。並べ替えても、捨ててもかまいません

2番目を省かないでください。 引用が付いていても、その記録が今回と似ているかの判断は人の仕事です。 同じ文言のエラーでも、原因が違うことはいくらでもあります。

Step10

例外に対処する

起きること対応
似た記録が1件も無い「該当なし」と理由を返す。無理に候補を出させない
rerankerScore が低い参考として出し、順位を下げる
記録が50件の枠に入らない対象サービスと拠点で絞ってから引き直す
引用の無い記述が混ざるワークフローで落とし、落とした件数を記録する
構造化出力と引用を同時に指定した400エラーになる。 呼び出しを2つに分ける
連絡の本文が1文しかないmissing が埋まる。聞き返しの下書きを出す
同じ利用者が5分おきに連絡する件数の集計から重複を除き、1件として数える
稼働情報のページが読めないリンクだけ出して人へ。中身をAIに渡さない
変更の履歴が台帳に入っていない「該当なし」と出る。台帳側の未整備をまず疑う
検索や呼び出しが失敗する従来どおりの画面を出す

外部サービスの稼働情報を渡さないのは、書式が一定でないからです。 ページには現在の状態と過去の障害の記載が並び、過去の記載を現在の状態として読まれると、対応の方向が丸ごと変わります。

しきい値を細かく決めないのにも根拠があります。 公式の記述では@search.rerankerScore の分布はインフラストラクチャレベルの条件により若干の変動を示す可能性があるとされ、最小しきい値のカスタムコードを書くときは限度を細かくしすぎないようにとあります。

Step11

記録を残す

  • 連絡の本文(置き換え後)と、置き換える前との対応表(社内にだけ置く)
  • 検索に投げたクエリと、返ってきた記録の番号・@search.rerankerScore
  • 呼び出しAの応答全文と、引用が無くて落とした記述の件数
  • 呼び出しBのJSONと、聞き返しを送ったかどうか
  • 担当者が実際に確かめた順番と、候補のうち役に立ったもの
  • 切り分けの結果(範囲と出どころ)と、最終的な原因
  • 全体障害の疑いが立った回数と、そのうち実際に全体障害だった回数

5番目と6番目が、翌日の検索の材料になります。 どの候補が当たったかを残さないと、検索が良くなっているのか誰も言えません。

最後の行は、件数のしきい値を直すための数字です。 疑いが外れることが多ければ、15分か3件のどちらかが合っていません。

04実装レベルの3段階

最小構成:記録と連絡文を、手でAIの画面に貼る / 1件ごとの候補出し
半自動化:上記+検索基盤に記録を入れ、チケット作成を起点に候補を出す / 検索と候補提示、下書き、件数の集計
本格構成:上記+承認を挟んだ全社周知、切り分け結果の書き戻し、当たり外れの集計 / 切り分けの前後を含む全体

最小構成では件数がさばけません。 記録を毎回貼るので、月120件には使えません。確かめるための段階です。 半自動化で、1件20分が7分程度になります。この段階が本記事の想定です。 調べ物の②と③がほぼ無くなり、残るのは候補を読んで順番を決める時間です。本格構成に進んでも、1件あたりの時間はこれ以上あまり下がりません。 下がるのは全社周知までの時間と、記録が次の検索に戻るまでの時間です。 段階を飛ばさないでください。 半自動化を1か月動かすと、どの言葉が当たらないか、どの記録が使えないかが先に分かります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
4 名
月間件数
120 件
1件あたり現在時間
20 分
1件あたり導入後時間
7 分
現在  120件 × 20分 ÷ 60 = 40 時間/月
導入後 120件 × 7分 ÷ 60 = 14 時間/月
月間削減時間
26h
削減率
65%
年間削減時間
312h
年間金額換算(時間単価3,500円)
109万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 過去1年分の障害の記録と、設定変更・リリースの履歴が記録として残っており、記録番号と日付で引ける企業。情報システム部門が数名で、利用者からの「使えない」という連絡を月100件以上受けている場合。経験のある担当者と不慣れな担当者で切り分けにかかる時間が5分と30分ほど開いており、経験の差がそのまま対応時間の差になっている場合。
向いていない
  1. 障害の記録が担当者の手元のメモやチャットの流れにしか残っていない場合。この構成は過去の記録を引くことが土台なので、引ける記録が無ければ何も出ません。利用者が数十名で、連絡が月に数件しかない場合。外部のサービスをほとんど使わず、社内の機器だけで完結していて、変更の履歴を1人が把握できている場合。

07最小構成で試す方法

  1. 先月の連絡から30件を選ぶ(うち数件は、全体障害だったものを入れる)
  2. その30件について、当時かかった時間と、誰が対応したかを記録から拾う
  3. 関係しそうな過去の記録を20件ほどと、直近の変更の履歴をまとめる
  4. 手元のAIサービスに、その記録と1件の連絡文を貼り付ける
  5. 「この連絡に似た過去の事例、関係しそうな直近の変更、次に確かめることを出してください。渡した記録に無いことを書かず、該当が無ければ該当なしと書いてください。原因の断定と復旧の手順は書かないでください」と指示する

見るのは、渡した記録の中から出しているかどうかです。 30件のうち何件で「該当なし」と正しく言えたかを数えてください。

出てきた内容判断
当時の担当者が見た記録と同じものが出た検索基盤の構築に進む
記録に無い一般的な障害の話が混ざった指示の書き方で直る。構成は有効
そもそも渡せる記録が20件も集まらない記録を残すところから。 AIの問題ではない

3行目が出たら、この構成には進まないでください。 失敗ではなく、順番が違うということです。 記録の書き方を決めて半年ためてから試し直します。

08実装時につまずきやすいポイント

問題対策
過去の障害の記録が残っていないこの構成は動きません。 記録の書き方を決めるのが先
記録に対象サービスが書かれていないセマンティック構成の keywords に入れる項目を決める
変更の履歴が台帳とメールに分かれている日付と対象で引ける1つの場所に寄せる
引用と構造化出力を同時に使う400エラーになる。 呼び出しを2つに分ける
セマンティックランカーが効かない上位50件しか再ランクされない。 filterで母数を絞る
対応記録の末尾が捨てられる要約モデルは最大2,000トークン。見出しごとに分ける
記録の番号をAIが本文に書く番号は引用から機械で付ける。本文に書かせない
出どころの無い候補が出る禁止を書き、引用の無い記述を機械でも落とす
全社周知が自動で飛ぶ承認を挟む。 送信は人が行う
件数の窓が合っていない15分・3件で始め、疑いが外れた回数を見て動かす

上から3行が、着手前に決まる勝負です。 どれもAIの話ではなく、記録の残り方の話です。 整わないまま作ると、動くけれど毎回「該当なし」しか返らない仕組みになります。

続く3行は、作っている最中に必ず当たります。 400エラーは呼び出しを分ければ済みますが、上位50件と2,000トークンの制約は、動いているのに当たらないという形で出ます。 検索の結果を一度そのまま目で見る工程を、構築中に入れてください。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 利用者の氏名、所属拠点、端末の資産管理番号、どの画面で何をしていたかという業務の内容、エラーの文面です。過去の記録には当時の対応の経緯と、社内システムの構成も含まれます。

  1. 外部のAPIへ渡す範囲を、前処理で決める … 呼び出しBに渡すのは置き換え後の本文だけ、呼び出しAに渡すのは上位に来た記録の本文だけです。氏名は社員番号に、資産管理番号は下3桁に置き換えてから渡します
  2. 記録の側にも、顧客の情報を書かない運用にする … 引かれた記録はそのまま外部へ渡ります。障害の記録に顧客名や口座番号を書く習慣があると、置き換えの対象外から出ていきます
  3. 画面の写真を渡さない … スクリーンショットには業務画面が写ります。引用の機能も、現時点では画像の引用に対応していません
  4. 渡す件数を絞る … 入力の量が増えるほど、外に出る記録の量が増えます。外部サービスの稼働情報も渡しません
  5. 人が決めることを固定する … 原因の断定、復旧の操作、全社周知の可否の3つです。全社周知は承認を挟み、送信は人が行います
  6. ログに、渡した本文そのものを残す … 何を渡した結果かを後から見られるようにします。置き換え前の対応表は社内にだけ置きます

誤りが起きた場合のリスクは、出どころの無い候補を信じて違う方向へ進むことと、全体の障害を個別の問い合わせとして扱い続けることの2つです。 前者は引用で、後者は件数で止めます。AIの精度ではなく、設計で止める失敗です。

10まず何から始めるか

1週目:引ける記録がどれだけあるかを数える

過去1年分の障害の記録を開き、記録番号と日付が付いていて、対象サービスが分かるものが何件あるかを数えます。あわせて、直近3か月の設定変更とリリースが日付と対象で引けるかを見ます。数十件しか無ければ、記録の書き方を決める作業に切り替えます。

2週目:30件で試す

先月の連絡から30件を選び、記録をまとめて手元のAIサービスに貼ります。渡した記録の中から出しているか、該当が無いときに「該当なし」と言えるかだけを見ます。

3週目:聞き返しの型を決める

いつから、誰が、どの画面で、どの端末で、どんな文言が出ているか、どのシステムの話か。この6つを、部署の全員が同じ順番で聞くと決めます。 型が無いと、下書きが担当者ごとに書き換えられます。

4週目:検索だけを作る

記録をインデックスに入れ、ハイブリッド検索とセマンティックランカーで引けるところまで作ります。この時点ではAIを通しません。 30件の連絡文をクエリにして、当時の担当者が見た記録が上位に来るかを確かめます。

2か月目: 呼び出しAとBをつなぎ、1枚にまとめて出します。件数の集計と承認も足します。3か月目以降: 切り分けの結果を書き戻す動線を作り、1件20分が何分になったかを実測します。経験のある担当者と不慣れな担当者の差が何分まで縮まったかを見た時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-09-28/最終更新:2026-09-28
確認した内容情報源確認日
引用の有効化の単位、document_title と context。構造化出力との併用が400エラーになることClaude Docs: Citations2026-09-28
additionalProperties を false にする必要。文字列の長さの制約が無いことClaude Docs: Structured outputs2026-09-28
並列実行とRRF。ベクターとキーワードの得意な場面Microsoft Learn: ハイブリッド検索の概要2026-09-28
上位50件のみの再ランク。最大2,000トークンと配分。k は50。rerankerScore の範囲と変動。課金の条件Microsoft Learn: セマンティックランキングの概要2026-09-28
「承認 - 開始して承認を待機」、承認センターとメールからの返信、MarkdownMicrosoft Learn: Power Automate での承認ワークフロー2026-09-28

どの記録を残し、どこまでを情報システム部門の判断とするかは、自社の運用ルールとして決めてください。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0272)についてのご相談はこちらから。

AI活用について相談する
目次