Media > AI活用ユースケース > カスタマーサポート > ホテルの客室・館内で起きた事故・苦情・設備トラブルの過去の対応記録を検索し、似た事案の対応手順と補償の判断を夜間の当直者に示す

ホテルの客室・館内で起きた事故・苦情・設備トラブルの過去の対応記録を検索し、似た事案の対応手順と補償の判断を夜間の当直者に示す

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

夜間に客室や館内で事故・苦情・設備トラブルが起きたとき、当直者が状況を短く入力すると、過去の対応記録から似た事案を探します。当夜の対応手順、連絡した先、補償の前例とそれを決めた人を、根拠の記録付きで並べて返します。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
宿泊/飲食
対象部門
カスタマーサポート
対象業務
情報検索/記録・議事録作成
主な課題
判断に時間がかかる/引き継ぎができていない/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
判断支援/対応スピード向上/属人化解消
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
RAG・個別開発(大)
人間の確認
必須
現在工数
50h/月
AI導入後
20h/月
想定削減
60%
年間削減
360h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. お客さまからフロントへ電話が入る、または館内の巡回で事案に気づく
  2. 当直者が現場へ行き、状況を確かめる。けががあれば救護と通報を優先する
  3. 共有フォルダの事故報告書や夜間の日報を開き、似た事案が無いかを探す
  4. 見つからなければ、勤続の長い社員や支配人に電話で聞くか、翌朝まで待つ
  5. お客さまに当夜の対応(部屋の移動、清掃、修理の手配)を説明する
  6. 夜間の日報に経過を書き、事故報告書の様式に記入する
  7. 翌朝、支配人とフロントに申し送る
導入後(After)
  1. 人お客さまからの連絡や巡回で事案に気づき、現場で状況を確かめる。けががあれば救護と通報を先に行う
  2. 人当直者が、フロントの端末かタブレットで状況を短く入力する(場所、何が起きたか、お客さまの訴え)
  3. 自動入力から似た事案を、言葉の一致と意味の近さの両方で検索する
  4. 自動検索の結果と社内の補償基準を、生成AIが「当夜の対応手順」「連絡した先」「補償の前例と決裁者」に分けて並べる
  5. 人当直者が前例を読み、当夜の対応とお客さまへの伝え方を決める
  6. 自動当直者が入力した経過から、夜間の日報と事故報告書の下書き、翌朝への申し送りの下書きを作る
  7. 人当直者が下書きを直して確定し、翌朝、支配人とフロントに申し送る
各工程の詳しい説明を読む
  1. お客さまからフロントへ電話が入る、または館内の巡回で事案に気づく
  2. 当直者が現場へ行き、状況を確かめる。けががあれば救護と通報を優先する
  3. 共有フォルダの事故報告書や夜間の日報を開き、似た事案が無いかを探す
  4. 見つからなければ、勤続の長い社員や支配人に電話で聞くか、翌朝まで待つ
  5. お客さまに当夜の対応(部屋の移動、清掃、修理の手配)を説明する
  6. 夜間の日報に経過を書き、事故報告書の様式に記入する
  7. 翌朝、支配人とフロントに申し送る

(a)夜間に前例を確かめられない。 事故報告書は館ごと・年ごとのフォルダに分かれ、名前で検索しても当たりません。探しているあいだ、お客さまを待たせることになります。

(b)補償の約束が当直者ごとに違う。 ある当直者は宿泊料の一部の返金を口にし、別の当直者は「翌朝担当から連絡します」とだけ伝える。同じような事案で、お客さまへの対応が当直者によって変わります。

(c)申し送りが要点を欠く。 夜間の日報は経過を時刻順に書いたもので、翌朝に決める必要のあること(補償の判断、修理の業者への連絡、保険会社への連絡)が埋もれます。

(d)同じトラブルが繰り返される。 同じ客室で同じ設備のトラブルが何度も起きていても、夜間の当直者はそれを知らないまま、その夜だけの対応で終えます。

  1. 【人】 お客さまからの連絡や巡回で事案に気づき、現場で状況を確かめる。けががあれば救護と通報を先に行う
  2. 【人】 当直者が、フロントの端末かタブレットで状況を短く入力する(場所、何が起きたか、お客さまの訴え)
  3. 【自動】 入力から似た事案を、言葉の一致と意味の近さの両方で検索する
  4. 【自動】 検索の結果と社内の補償基準を、生成AIが「当夜の対応手順」「連絡した先」「補償の前例と決裁者」に分けて並べる
  5. 【人】 当直者が前例を読み、当夜の対応とお客さまへの伝え方を決める
  6. 【自動】 当直者が入力した経過から、夜間の日報と事故報告書の下書き、翌朝への申し送りの下書きを作る
  7. 【人】 当直者が下書きを直して確定し、翌朝、支配人とフロントに申し送る

1番目を検索より先に置いているのが、この設計の前提です。 けがや火災・漏水の拡大のおそれがある場面では、検索を待たずに救護・通報・止水を行います。 検索は、その後の対応と説明を決めるためのものです。

5番目で決めるのは当直者です。 検索の結果は前例を並べるだけで、補償を約束してよいかは、社内の補償基準と当直者の権限で決まります。

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

構成図
過去の対応記録(事故報告書・夜間の日報・お客さまとのメール)+ 社内の補償基準
   ▼ 取り込み(事案ごとにまとめ、お客さまの氏名を仮名に置き換える)
Amazon Titan Text Embeddings V2 ── 事案ごとにベクトルを作る
   ▼
Amazon OpenSearch Service(Sudachi で日本語を分かち書き、ベクトルと全文の両方を持つ)
   ▲
   │【トリガー】当直者がフロントの端末から状況を入力
AWS Lambda ── 入力を受け、検索を呼ぶ
   ▼
hybrid クエリ(言葉の一致+意味の近さ)+ 正規化の処理
   │   館・場所の種類・事案の種類で絞り込み
   ▼
Claude API ── 似た事案を観点ごとに並べる
   │   ① 当夜の対応手順   ② 連絡した先   ③ 補償の前例と決裁者   ④ 翌朝に問題になったこと
   ▼
【当直者が前例を読み、当夜の対応を決める】
   ▼
夜間の日報・事故報告書・申し送りの下書き → 当直者が確定
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(hybrid クエリ、normalization-processor、Sudachi)Azure AI Search、Vertex AI Search(Agent Search)
埋め込みAmazon Titan Text Embeddings V2(Amazon Bedrock)Cohere Embed、OpenAI の埋め込みモデル
生成AIClaude API(前例の整理と、日報・申し送りの下書き)Gemini API、OpenAI API
連携AWS Lambda(取り込み、検索の呼び出し、下書きの保存)AWS Step Functions
保管Amazon S3(対応記録の原本、検索と下書きの記録)―

予約・客室管理の仕組みは、そのまま使います。 この構成が持つのは、過去の対応記録と社内の補償基準の写しだけです。最初の準備は、3館の事故報告書・夜間の日報・メールを、1つの事案を1つの記録としてまとめ直すことです。同じ事案が日報とメールに分かれていると、検索の結果に同じ事案が2度出ます。

検索基盤に Amazon OpenSearch Service を選ぶのは、日本語の分かち書きとベクトル検索を同じ所で扱えるからです。 公式の一覧では、Sudachi の分析プラグインが日本語に推奨とされ、OpenSearch 1.3 以上で使えます。ニューラル検索(Neural Search)は 2.9 以上、k-NN は 1.0 以上です。

この題材で効くのは、hybrid クエリです。 夜間の当直者の入力は「302 浴室 転倒 頭」のように短く、言葉が足りません。言葉の一致だけでは「浴槽で足を滑らせた」と書かれた過去の記録に当たらず、意味の近さだけでは「浴室」と「大浴場」の違いを取り違えます。最大5つの検索の点数を正規化して1つの順位にまとめる hybrid クエリで、両方を並べます。

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

Step1

処理の起点を決める

当直者がフロントの端末かタブレットで状況を入力し、検索を押したときに動かします。 夜間の事案は予告なく起きるので、定時の一括処理にはしません。 入力の画面は、場所(客室番号・大浴場・駐車場など)と事案の種類(けが・設備・苦情・紛失・破損)を選び、状況を一言で書くだけにします。長い文章を書かせると、入力に時間がかかってお客さまを待たせます。

検索の結果を見て当夜の対応を終えた後、当直者が経過を入力すると、日報・事故報告書・申し送りの下書きを作る2回目の処理が動きます。

過去の対応記録の取り込みは、これとは別に動かします。毎朝、前夜までに確定した事故報告書と日報をS3の取り込みフォルダに置いたことを起点に、事案ごとのまとめ、仮名への置き換え、ベクトルの作成、索引への登録を行います。

Step2

入力データを集める

データ中身取得元
当直者の入力館、場所、事案の種類、状況の一言フロントの端末の入力の画面
過去の対応記録発生日時、館、場所、事案の種類、経過、当夜の対応、連絡した先、補償の内容、決裁者、その後の経過事故報告書・夜間の日報・メールをまとめ直したもの
社内の補償基準事案の種類ごとに、当直者が約束してよい範囲と、支配人の判断が要る範囲宿泊部が定めた基準
連絡先の一覧設備の業者、保険会社、近くの夜間診療の窓口、館の責任者宿泊部が持つ一覧

質を決めるのは、過去の対応記録の「決裁者」と「その後の経過」の欄です。 決裁者が無ければ、補償の前例が誰の判断だったのかを示せません。その後の経過が無ければ、翌朝に何が問題になったかを申し送りに書けません。 古い記録では空欄が多いため、取り込みのときに空欄のまま残し、空欄であることを検索の結果に出します。

Step3

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

取り込みでは、1つの事案を1つの記録にまとめ、次の項目を持たせます。

持つ項目中身何に使うか
summary_text場所・事案の種類・経過・対応をまとめた本文Sudachi で分かち書きした言葉の一致の検索
embedding本文から作ったベクトル(1,024次元)意味の近さの検索
hotel / location_type / incident_type館、場所の種類、事案の種類絞り込み
actions当夜の対応手順(時刻順)当直者に示す手順
contacts連絡した先当直者に示す連絡先
compensation / approver補償の内容、決裁者補償の前例と、それが誰の判断だったか
aftermathその後の経過(翌朝以降に問題になったこと)申し送りに書く項目
guest_aliasお客さまの仮名同じお客さまの事案のまとめ

ベクトルは Amazon Titan Text Embeddings V2 で作ります。入力は最大8,192トークン・50,000文字で、出力は既定で1,024次元です。公式は、長い文書を段落や節のような論理的な単位に分けることを勧めています。 1つの事案の経過が長いものは、本文を「状況」と「対応」に分けて別のベクトルにします。日本語は多言語対応の言語の一覧に含まれています。

社内の補償基準は、対応記録とは別の索引に置きます。 前例の検索の結果に基準が混ざると、基準の文が「似た事案」として並び、前例と基準の区別がつかなくなります。 補償基準は事案の種類で引き、検索の結果とは別の欄に出します。

検索の絞り込みは、hybrid クエリの filter で行います。filter はすべての検索に同じように効くため、館・場所の種類・事案の種類の条件は1つの bool クエリにまとめます。点数の正規化は normalization-processor を使い、既定の min_max と arithmetic_mean から始めます。当直者の入力は短いので、意味の近さの重みを最初から少し重くします。 重み(weights)は合計が1.0になるように決めます。

検索の形は、おおむね次のとおりです(値は例)。

{
  "query": {
    "hybrid": {
      "queries": [
        { "match": { "summary_text": "客室 浴室 転倒 頭" } },
        { "knn": { "embedding": { "vector": [0.021, -0.008], "k": 30 } } }
      ],
      "filter": {
        "bool": {
          "filter": [
            { "term": { "location_type": "客室" } },
            { "term": { "incident_type": "けが" } }
          ]
        }
      }
    }
  },
  "size": 5
}

館の絞り込みは、最初は入れません。 3館で設備も客層も違いますが、浴室での転倒のような事案は館をまたいで参考になります。結果に館の名前を出し、当直者が自分の館の前例かどうかを見分けられるようにします。 館ごとの設備のトラブル(特定の型の給湯器など)を探すときだけ、館で絞ります。

Step4

AIへ渡す前に整形する

  1. お客さまの氏名を仮名に置き換える … 取り込みのときに、氏名・電話番号・メールアドレスを仮名に置き換えます
  2. けがや体調の記述を分ける … 病院名・診断の内容など体調に関わる記述は、別の項目に分けて検索の本文から外します
  3. 同じ事案をまとめる … 日報とメールと事故報告書で、館・客室・日時が同じものを1つの事案にまとめます
  4. 事案の種類を付け直す … 古い記録の分類の名前がばらばらなら、今の分類に読み替えます
  5. 当直者の入力の客室番号を場所の種類に変える … 「302」は「客室」、「B1」は「駐車場」のように、館ごとの対応表で変えます
  6. 補償基準の版を確かめる … 基準を改めたら、古い版を索引から外し、新しい版だけを引くようにします

1番目と2番目を省かないでください。 夜間の検索の結果は、フロントの画面に出ます。ほかのお客さまの氏名や、けがの内容が画面に出る設計にしてはいけません。 仮名で検索しても、前例として必要な情報は失われません。

Step5

AIに処理させる

させるのは、検索で見つかった事案を、決まった観点ごとに並べて書き出すことだけです。

観点何を書くか書かれていないときの扱い
当夜の対応手順過去の事案で当直者がとった対応を、順にnot_recorded
連絡した先業者・保険会社・館の責任者などnot_recorded
補償の前例補償の内容と、決裁者決裁者が無ければ approver_unknown
翌朝に問題になったことその後の経過から、申し送りで落としやすいことnot_recorded
社内の補償基準当直者が約束してよい範囲(基準の索引から引いた文)基準が無い種類なら no_rule

補償の前例には、必ず決裁者と事情を並べさせます。 「宿泊料の半額を返金」だけが当直者の目に入ると、それが当直者の権限で約束できることのように見えてしまいます。

させないこと理由
補償をするか・いくらかの判断補償の可否と金額は社内の基準と責任者が決める
自社に責任があるかの判断責任の有無は、調べたうえで責任者と保険会社が判断する
けがの程度や受診の要否の判断医療の判断は人と医療機関が行う
宿泊を拒むかの判断旅館業法の定める事由に当たるかを、当直者と責任者が客観的な事実から判断する
検索結果に無い前例の補足「一般的には」のような書き方は、根拠の無い対応を勧めることになる

1行目がいちばん起きやすい失敗です。 前例に返金の事案が並ぶと、AIは「今回も同様に宿泊料の一部返金が考えられます」とまとめがちです。その一文が、当直者の口からお客さまへの約束として出ていきます。 前例は前例として並べさせ、勧めの形で書かせません。

4行目は法律の定めに関わります。 旅館業法第5条は、営業者は定められた事由に当たる場合を除いて宿泊を拒んではならないとし、宿泊を拒む場合には、該当するかどうかを客観的な事実に基づいて判断し、求めに応じて理由を丁寧に説明できるようにするものとしています。過剰な要求を繰り返すお客さまの事案でも、AIはその判断に踏み込ませません。

Step6

指示内容を固定する

あなたはホテルの夜間の当直者を手伝う係です。
渡された【当直者の入力】【検索で見つかった事案】【社内の補償基準】だけを見て、
似た事案を観点ごとに並べてください。推測で埋めないでください。

【並べる観点】
1. actions ....... 当夜の対応手順(過去の事案で当直者がとった対応を順に)
2. contacts ...... 連絡した先
3. compensation .. 補償の内容と、それを決めた人(決裁者)
4. aftermath ..... 翌朝以降に問題になったこと
5. rule .......... 社内の補償基準のうち、この事案の種類に当てはまる文(そのまま写す)

【厳守事項】
- 事案ごとに、記録の番号(case_id)を必ず付けてください。
- 記録に書かれていない観点は "not_recorded" としてください。
- 補償の前例には、必ず決裁者(approver)を書いてください。
  決裁者が記録に無ければ "approver_unknown" としてください。
- 今回、補償をすべきか、いくら補償すべきかを書かないでください。
  「今回も同様に」「〜が考えられます」のような勧めの書き方をしないでください。
- 自社に責任があるかどうかを書かないでください。
- けがの程度や、受診が必要かどうかを書かないでください。
- 宿泊を断るべきかどうかを書かないでください。
- 検索で見つかった事案に無い対応を書き足さないでください。
- お客さまの氏名や体調の内容を書かないでください。仮名と事案の番号だけを使ってください。
- 社内の補償基準は、言い換えずにそのまま写してください。

【当直者の入力】{night_input}
【検索で見つかった事案】{cases}
【社内の補償基準】{rules}

「勧めの書き方をしない」に具体的な言い回しを2つ挙げているのには理由があります。 「判断しないでください」とだけ書くと、AIは判断の言葉を避けつつ「〜が考えられます」と書いて、実質的に勧めの文を作ります。 禁じる言い回しを名指しします。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とスキーマを指定)を使い、形の崩れた応答を当直者の画面に出さないようにします。

{
  "query_id": "",
  "rule": { "text": "", "status": "found | no_rule" },
  "cases": [
    {
      "case_id": "",
      "hotel": "",
      "occurred_at": "",
      "similarity_note": "",
      "actions": ["", ""],
      "contacts": [""],
      "compensation": { "content": "", "approver": "", "status": "recorded | not_recorded | approver_unknown" },
      "aftermath": ""
    }
  ],
  "handover_items": [""]
}

1つ目の理由は、補償の前例と補償基準を別の欄に置けることです。 当直者の画面では、rule を上に、cases の補償の前例をその下に出します。約束してよい範囲が先に目に入る並びにします。

2つ目は、case_id で原本に戻れることです。 当直者は気になった前例を、その番号で事故報告書の原本から開けます。検索の結果が原本と違っていれば、原本を正とします。

3つ目は、handover_items を申し送りの下書きに使えることです。 似た事案の aftermath から、翌朝に決める必要のあることを拾って並べます。

Step8

システムへ連携する

つなぎ先方式内容
フロントの端末の入力の画面社内のWeb画面から AWS Lambda を呼ぶ当直者の入力を受け、結果を返す
Amazon BedrockAPI呼び出し入力と事案のベクトルを作る
Amazon OpenSearch Servicehybrid クエリと検索パイプライン似た事案と補償基準を探す
Claude APIAPI呼び出し観点ごとの整理と、日報・申し送りの下書き
Amazon S3保存対応記録の原本、検索と下書きの記録
予約・客室管理の仕組み書き込まない客室の移動などは当直者が既存の手順で行う

予約・客室管理の仕組みへは書き込みません。 部屋の移動や返金の処理は、当直者が既存の手順で行います。検索の結果から直接、返金や割引が処理される経路を作りません。

OpenSearch の権限は、細かいアクセス制御で絞ります。 細かいアクセス制御(fine-grained access control)は、索引・文書・項目の単位で見せる範囲を決められ、特定の項目を消さずに匿名化する項目のマスキングも使えます。当直者の役割には、仮名と体調の項目を見せない設定にします。有効にするには、HTTPS・保存データの暗号化・ノード間の暗号化が要り、一度有効にすると無効に戻せません。

Step9

人が確認する

当直者は、検索の結果をすべて読みます。 結果は1回の検索で5件ほどに絞って出すので、全件を読めます。

  1. 補償基準(rule)を先に読む … 当直者が約束してよい範囲を確かめます
  2. 前例の決裁者を見る … 支配人の判断だった補償を、当直者が約束しないようにします
  3. 当夜の対応手順と連絡先を、今夜の状況に合わせて選ぶ … 前例の手順をそのまま使わず、現場の状況と照らします
  4. 日報・事故報告書・申し送りの下書きを直して確定する … 下書きは当直者の入力から作るので、事実と違うところは当直者が直します
  5. 翌朝、支配人が前例と当夜の対応を見比べる … 前例と違う対応をした理由を、申し送りで確かめます

2番目を省かないでください。 決裁者が支配人だった前例を当直者が約束すると、翌朝、支配人がその約束を覆すか、基準を超えた補償を追認するかの二択になります。 どちらもお客さまとの関係を損ねます。

Step10

例外に対処する

起きること対応
けが・火災・漏水の拡大のおそれ検索を使わず、救護・通報・止水を先に行う
検索結果が0件「前例なし」と返し、補償基準と連絡先の一覧だけを出す
前例の決裁者が記録に無いapprover_unknown として出し、当直者には約束させない
補償基準に当てはまる種類が無いno_rule として出し、補償は翌朝の判断に回す
同じお客さまの過去の事案が見つかる仮名で並べ、過去の経緯を申し送りに入れる
過剰な要求が繰り返される事案前例と基準を出すだけにし、宿泊を拒むかは責任者が判断する
生成AIが応答しない検索の結果だけを一覧で出し、観点の整理を省く
検索基盤が応答しない紙の夜間の対応の手引きと連絡先の一覧で対応する

上から1行目が、この構成のいちばん大事な例外です。 検索は、命と建物を守る行動の後に使うものです。入力の画面の最初に「救護・通報が要る場合は先に行う」の表示を出し、検索のボタンより上に置きます。

Step11

記録を残す

  • 当直者の入力と、検索の日時・館
  • hybrid クエリの結果(事案ごとの点数と順位)と、そのときの重み
  • 生成AIの整理の結果(rule、cases、handover_items)
  • 当直者が実際にとった対応と、お客さまに伝えた内容
  • 日報・事故報告書・申し送りの下書きと、当直者が確定した版
  • 翌朝の支配人の判断と、前例と違う対応をした理由

4つ目と最後の行は、次の事案の検索の対象になります。 確定した事故報告書を毎朝取り込むので、今夜の対応が、次の夜の当直者の前例になります。 決裁者とその後の経過の欄を空けたまま確定させないことが、検索の質を保つ条件です。

04実装レベルの3段階

最小構成:まとめ直した事案を手でAIの画面に貼り、似た事案を並べさせる / 前例の整理
半自動化:上記+事案を索引にし、当直者の入力で言葉の一致の検索をかける / 前例を探す作業の一部と整理
本格構成:上記+意味の近さの検索、補償基準の別索引、日報・申し送りの下書き / 前例を探す作業、整理、記録の下書き

最小構成では、夜間には使えません。 貼る事案を人が選ぶので、確かめるための段階です。 半自動化で、1件25分が16分程度になります。 言葉の一致の検索で多くの前例が出ますが、短い入力では当たりにくく、記録の書き方は手作業のままです。本格構成で10分になり、この段階が本記事の想定です。 差が大きいのは、短い入力でも意味の近い前例が出ることと、日報と申し送りの下書きが出ることの2つです。 段階を飛ばさないでください。 半自動化を1か月使うと、当直者がどんな言葉で入力するかが分かります。その言葉を Sudachi の辞書と入力の画面の選択肢に反映してから本格構成に進むほうが、検索の当たり方が安定します。

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

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

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

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

AI活用について相談する

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

向いている
  1. 客室数の多いホテルや複数の館を持つホテル・旅館で、夜間は少人数の当直者が客室・館内の事故・苦情・設備トラブルに対応しており、過去の対応記録が日報・事故報告書・メールに分かれて数年分たまっている場合。夜間に「前に同じことがあったときどうしたか」を確かめられず、翌朝の支配人の判断を待つか、当直者の判断で補償を約束してしまうことがある場合。AWS を使っており、検索基盤と生成AIを同じ環境で動かせる場合。
向いていない
  1. 客室数が少なく、夜間も支配人や経験の長い社員が常に館内にいる場合。過去の対応記録がほとんど残っておらず、検索の対象になる記録が無い場合。なお、けが人の救護、警察や消防への通報、宿泊を拒むかの判断、補償の可否と金額の決定は、当直者と支配人・責任者が行うもので、この構成では代替できません。救急の場面では検索より先に通報と救護を行います。

07最小構成で試す方法

  1. 過去1年の事故報告書から、よく起きる種類(設備・騒音・けが・破損)の事案を各10件、計40件選ぶ
  2. その40件を、場所・事案の種類・経過・対応・補償・決裁者・その後の経過の形にまとめ直す
  3. 最近の事案を5件選び、その状況を一言で書き、まとめ直した40件とあわせて手元のAIサービスに貼る
  4. 「似た事案を観点ごとに並べてください。補償をすべきかは書かないでください」と指示する
  5. 出てきた前例を、実際にその5件を担当した当直者に見てもらう

40件のまとめ直しは必ずやってください。 検索基盤を組む前に、「決裁者とその後の経過の欄が、過去の記録から埋められるのか」を確かめます。

出てきた内容判断
担当した当直者が「これがあれば早かった」と言う前例が出た検索基盤を組み、記録の取り込みに進む
「今回も返金が考えられます」と勧めの文を書いた指示の書き方で直る。構成は有効
決裁者とその後の経過がほとんど埋まらない記録の様式の見直しが先。 事故報告書に欄を足す

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

問題対策
AIが「今回も返金が考えられます」と書く勧めの言い回しを名指しで禁じる
支配人の判断だった補償を当直者が約束する決裁者を必ず並べ、補償基準を前例より上に出す
補償基準の文が「似た事案」に混ざる基準を別の索引に置く
短い入力で前例が当たらない意味の近さの重みを上げ、入力の画面に選択肢を足す
ほかのお客さまの氏名や体調が画面に出る取り込みで仮名に置き換え、項目のマスキングで見せない
同じ事案が日報とメールで2度出る取り込みで館・客室・日時が同じものをまとめる
救護より先に検索を始める入力の画面の最初に救護・通報の表示を置く
hybrid クエリを別のクエリで包む最上位に置かないと、正規化が効かないことがある

上の2行が、この構成の失敗のほとんどです。 どちらも「前例」が「指示」に化ける誤りです。補償の約束は、一度口にすると取り消しにくいものです。

下から1行目は、公式の注意に沿っています。 hybrid クエリは最上位のクエリとして使う必要があり、function_score などで包むと、実行時のエラーになるか、正規化のパイプラインが黙って飛ばされることがあるとされています。

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

この構成で扱うデータ: お客さまの氏名・連絡先・宿泊の情報、けがや体調に関する記述、補償の内容と金額、そして従業員の対応の記録です。体調に関する記述は、とくに慎重な扱いが要る情報です。

  1. お客さまの氏名と体調の記述を、検索の本文と生成AIに渡さない … 取り込みのときに仮名に置き換え、体調の記述は別の項目に分けます
  2. 細かいアクセス制御で見せる範囲を絞る … 当直者の役割には、仮名と体調の項目を見せません
  3. 補償の判断をAIに置かない … 前例は前例として示し、約束してよい範囲は社内の補償基準で決めます
  4. 宿泊を拒む判断をAIに置かない … 旅館業法第5条は、宿泊を拒む場合に客観的な事実に基づいて判断し、理由を丁寧に説明できるようにするものとしています。判断は当直者と責任者が行います
  5. 検索の記録を外へ出さない … どの客室で、いつ、何が起きたかの記録は、お客さまの滞在の記録そのものです
  6. 救護・通報を検索の後に置かない … 入力の画面の設計で、検索より先に行う行動を示します

誤りが起きた場合のリスクは、権限を超えた補償を約束することと、ほかのお客さまの情報が画面に出ることの2つです。 前者は決裁者と補償基準の並べ方で、後者は仮名への置き換えと項目のマスキングで守ります。

10まず何から始めるか

1週目:事故報告書の様式に2つの欄を足す

事故報告書に「決裁者」と「その後の経過(翌朝以降に問題になったこと)」の欄を足し、今夜から記入を始めます。過去の記録を埋めるより先に、新しい記録を検索に使える形で残し始めます。

2週目:40件で試す

過去1年の事故報告書から40件をまとめ直し、最近の5件で似た事案を並べさせます。勧めの文を書いていないか、決裁者を落としていないかを最優先で見ます。

3週目:補償基準を文にする

事案の種類ごとに、当直者が約束してよい範囲と、支配人の判断が要る範囲を文に整えます。基準が無い種類があれば、この時点で宿泊部の責任者と決めます。

4週目:言葉の一致の検索を作る

Amazon OpenSearch Service に Sudachi を関連付け、まとめ直した事案と補償基準をそれぞれ別の索引に入れ、言葉の一致の検索を試します。当直者が使う短い言葉で当たるかを見ます。

2か月目: 意味の近さの検索を足して hybrid クエリにし、仮名への置き換えと細かいアクセス制御を組み込みます。3か月目以降: 日報・事故報告書・申し送りの下書きを足し、1件25分が何分になったかを実測します。新しい事故報告書の決裁者とその後の経過の欄が毎回埋まり、6名の当直者が同じ前例を引けるようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
旅館業法第5条が、営業者は特定感染症の患者等であるとき、違法行為等のおそれがあるとき、負担が過重で他の宿泊者へのサービスの提供を著しく阻害するおそれのある要求として厚生労働省令で定めるものを繰り返したとき等を除いて宿泊を拒んではならないとし、宿泊を拒む場合には客観的な事実に基づいて判断し、求めに応じて理由を丁寧に説明できるようにするものとしていることe-Gov 法令API: 旅館業法2026-10-08
Sudachi の分析プラグインが日本語に推奨とされ OpenSearch 1.3 以上で使えること。Neural Search が 2.9 以上、k-NN が 1.0 以上AWS: Plugins by engine version in Amazon OpenSearch Service2026-10-08
細かいアクセス制御が索引・文書・項目の単位の制御と項目のマスキングを提供すること。HTTPS・保存データの暗号化・ノード間の暗号化が必要で、有効にした後は無効にできないことAWS: Fine-grained access control in Amazon OpenSearch Service2026-10-08
hybrid クエリが最大5つの検索を組み合わせ、検索パイプラインで点数をまとめること。filter がすべての検索に効くこと。最上位のクエリとして使う必要があり、function_score などで包むとエラーになるか正規化が飛ばされうることOpenSearch Documentation: Hybrid query2026-10-08
正規化の手法(min_max が既定ほか)と組み合わせの手法(arithmetic_mean が既定ほか)。weights の合計が1.0であることOpenSearch Documentation: Normalization processor2026-10-08
Titan Text Embeddings V2 の入力が最大8,192トークン・50,000文字、出力が既定1,024次元であること。長い文書は論理的な単位に分けることが勧められていること。多言語対応の一覧に日本語が含まれることAWS: Amazon Titan Text Embeddings models2026-10-08
構造化出力を output_config.format(type: "json_schema")で指定することClaude: Structured outputs2026-10-08

補償の可否と金額、宿泊を拒むかの判断は、社内の基準と責任者の判断で行ってください。 本記事は公開仕様と旅館業法の条文で確認できた範囲だけを扱っています。

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

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

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

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