グランピング施設が宿泊中の客の設備・食事・周辺の質問に、施設の案内と決まりのカードから多言語で答えるチャットの窓口を置き、答えられないものをスタッフへ回す
宿泊中の客がテントのQRコードから開くチャットに、設備・食事・周辺の質問を自分の言葉で書くと、施設の案内と決まりのカードから同じ言葉で答えます。カードに無い質問と、アレルギーやけがの質問はスタッフへ回します。
- 生成AI
- Azure OpenAI Service/Claude
- 連携・自動化
- Power Automate
- 対象業界
- その他/宿泊
- 対象部門
- カスタマーサポート
- 対象業務
- 問い合わせ対応
- 主な課題
- 人手が足りない/問い合わせが多い/情報が見つからない
- AIで行う処理
- 対話
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 客がテントから電話をかけるか、管理棟まで来て質問する
- スタッフが質問を聞き取る。外国語の質問は、翻訳のアプリに打ち込んで意味を確かめる
- 案内の冊子か利用の決まりの紙を開くか、覚えている範囲で答えを考える
- その日の掲示(焚き火の可否・売店の時間・天候)をホワイトボードで確かめる
- 答えを伝える。外国語は翻訳のアプリの訳を見せるか、読み上げる
- 設備の不具合なら、スタッフがテントまで行く
- アレルギーや体調の相談は、責任者に回す
- 人客がテントに置いたQRコードを読み、チャットの画面で言語を選んで質問を書く
- 自動Azure Functions が、テントの番号から今夜の宿泊かを予約の書き出しで確かめる
- 自動Functions が、まず決めた言葉の一覧で「アレルギー」「けが」「火事」などを見つけ、見つかればすぐスタッフへ回す
- 自動Azure OpenAI が、案内と決まりのカードとその日の掲示だけを根拠に、客の言葉で答えを作り、使ったカードの番号を返す
- 自動Functions が、答えに出した時刻と金額を取り出し、使ったカードの数字と照らす
- 自動合っていれば客に返し、日本語の訳を付けて記録する。合わなければ返さず、スタッフへ回す
- 自動カードに無い質問と、答えてはいけない質問は、「スタッフに確認します」と返してスタッフの端末へ回す
- 人スタッフが回ってきた質問に、チャットか電話で答える。必要ならテントへ行く
- 人責任者が毎朝、前日の記録を見て、カードに足すものと直すものを決める
各工程の詳しい説明を読む
- 客がテントから電話をかけるか、管理棟まで来て質問する
- スタッフが質問を聞き取る。外国語の質問は、翻訳のアプリに打ち込んで意味を確かめる
- 案内の冊子か利用の決まりの紙を開くか、覚えている範囲で答えを考える
- その日の掲示(焚き火の可否・売店の時間・天候)をホワイトボードで確かめる
- 答えを伝える。外国語は翻訳のアプリの訳を見せるか、読み上げる
- 設備の不具合なら、スタッフがテントまで行く
- アレルギーや体調の相談は、責任者に回す
(a)夕方に電話が重なる。 チェックインの受付と夕食の準備の時間に、同じ質問の電話が続けて鳴ります。 「シャワーは何時まで」「BBQの炭はいつ持ってくるか」。1件は短くても、そのたびに手が止まります。
(b)外国語の質問に時間がかかる。 2番目と5番目で翻訳のアプリを往復し、1件の質問に10分以上かかることがあります。 訳の数字が合っているかは、スタッフには確かめようがありません。
(c)その日の掲示が伝わらない。 強風で焚き火を止めたことが、交代したスタッフに伝わらず、「焚き火は22時まで大丈夫です」と答えてしまうことがあります。
(d)答えが人で違う。 薪の追加の料金や、ペットの決まりを、スタッフが覚えている範囲で答えると、客ごとに違う答えになります。 翌朝、別の客から「昨日は無料と言われた」と言われます。
- 【人】 客がテントに置いたQRコードを読み、チャットの画面で言語を選んで質問を書く
- 【自動】 Azure Functions が、テントの番号から今夜の宿泊かを予約の書き出しで確かめる
- 【自動】 Functions が、まず決めた言葉の一覧で「アレルギー」「けが」「火事」などを見つけ、見つかればすぐスタッフへ回す
- 【自動】 Azure OpenAI が、案内と決まりのカードとその日の掲示だけを根拠に、客の言葉で答えを作り、使ったカードの番号を返す
- 【自動】 Functions が、答えに出した時刻と金額を取り出し、使ったカードの数字と照らす
- 【自動】 合っていれば客に返し、日本語の訳を付けて記録する。合わなければ返さず、スタッフへ回す
- 【自動】 カードに無い質問と、答えてはいけない質問は、「スタッフに確認します」と返してスタッフの端末へ回す
- 【人】 スタッフが回ってきた質問に、チャットか電話で答える。必要ならテントへ行く
- 【人】 責任者が毎朝、前日の記録を見て、カードに足すものと直すものを決める
3番目をAIの前に置くのは、急ぐ質問をAIの判断に任せないためです。 「子どもがやけどした」「火が燃え広がった」は、言葉の一覧で拾って、AIの答えを待たずに回します。拾いすぎてもかまいません。 スタッフが見て、急がないものなら答えればよいからです。
9番目が、この構成を育てます。 カードに無い質問が毎日何件あったかを見て、よく聞かれるものからカードに足します。
02今回想定するシステム構成
テントのQRコード(テントの番号入り) ▼【トリガー】客がチャットの画面で質問を送る Azure Functions ├──▶ 予約の書き出し ── 今夜の宿泊か ├──▶ 言葉の一覧 ── アレルギー・けが・火事・体調・返金 → すぐスタッフへ ├──▶ カードの表 ── 案内と決まりのカード(日本語) ├──▶ その日の掲示 ── 焚き火の可否・売店の時間・天候 ▼ Azure OpenAI(Responses API、構造化出力、store=false) │ 客の言葉の答え/使ったカードの番号/答えに出した時刻と金額/回すかどうか ▼ Azure Functions ── 時刻と金額をカードと照らす ├──▶ 合う → 客に返す(日本語の訳を記録) └──▶ 合わない・カードに無い・答えてはいけない → スタッフの端末(Teams) ▼ 【人】スタッフが答える/責任者が毎朝カードを直す
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry) | Claude API |
| 連携 | Azure Functions(受信、予約の照会、言葉の一覧、カードの読み込み、数字の照合、返信) | Power Automate |
| カード | SharePoint のリスト(案内と決まりのカード、その日の掲示) | Azure Table Storage |
| 窓口 | 施設のWebのチャットの画面(テントのQRコードから開く) | LINE 公式アカウント |
| 通知 | Microsoft Teams(スタッフのチャネル) | スタッフの連絡用の端末のメール |
| 記録 | Azure Table Storage(質問・答え・日本語の訳・回した記録) | SharePoint のリスト |
予約の仕組みには、この構成から書き込みません。 今夜の宿泊かを確かめるために、毎日の宿泊者の書き出しを読むだけです。予約の変更や追加の注文は、チャットでは受けずにスタッフへ回します。
チャットの画面は、ログインを求めません。 テントのQRコードにテントの番号を入れ、今夜の宿泊のテントからの質問だけを受けます。客の名前も電話番号も聞きません。
03どうやって実装するのか
処理の起点を決める
起点は、客がチャットの画面で質問を送ったときです。 画面はテントのQRコードから開き、URLにテントの番号が入っています。最初に言語(日本語・English・中文・한국어)を選んでもらい、以後はその言語で答えます。
今夜の宿泊でないテントの番号からは、質問を受けません。 チェックアウトの後にQRコードを撮っておいて、後から質問してくる使い方を防ぎます。毎日15時に予約の仕組みから今夜の宿泊者の書き出しを取り、テントの番号の一覧を作ります。 翌日の11時(チェックアウト)で、その一覧を消します。
その日の掲示は、スタッフが変えたときに読み直します。 焚き火の可否は、管理棟の端末で SharePoint のリストの1行を変えれば、次の質問から反映されます。ホワイトボードはこれまでどおり書き、リストと両方を変えるのを交代の引き継ぎの項目に入れます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 質問 | 客が書いた文、選んだ言語、テントの番号、送った時刻 | チャットの画面 |
| 直近のやり取り | 同じテントの直近5往復の質問と答え | 記録 |
| 案内と決まりのカード | カードの番号、項目(シャワー・焚き火・夕食・売店・ペット・周辺など)、本文(日本語)、時刻、金額、更新日 | SharePoint のリスト |
| その日の掲示 | 焚き火の可否、売店の時間、天候の注意、夕食の時間の変更 | SharePoint のリスト |
| 言葉の一覧 | すぐスタッフへ回す言葉(4言語) | Functions の設定 |
| 今夜の宿泊者 | テントの番号の一覧 | 予約の書き出し |
質を決めるのは、カードの書き方です。 1枚のカードには1つのことだけを書き、時刻と金額は本文とは別の項目にも入れます(第7章「前処理」)。「シャワー棟は15時から23時まで。シャンプーとボディソープあり。タオルはテントに2枚」のように、客が聞きそうなことを短く書きます。
カードの表は、たとえば次のような行になります。
| 番号 | 項目 | 本文(日本語) | 時刻 | 金額 | 確かめた日 |
|---|---|---|---|---|---|
| C-012 | シャワー | シャワー棟は15時から23時まで使えます。シャンプーとボディソープがあります。タオルはテントに2枚あります | 15:00, 23:00 | - | 2026-10-01 |
| C-031 | 薪 | 薪は1束目がプランに含まれます。2束目からは管理棟の売店で1束500円です | - | 500 | 2026-10-01 |
| C-033 | 焚き火 | 焚き火は各テントの焚き火台でのみ、22時までです。強風の日は中止します(その日の掲示をご覧ください) | 22:00 | - | 2026-10-01 |
| C-071 | 周辺 | 車で10分の日帰り温泉は、施設が確かめた時点で10時から21時まで、毎週水曜日が休みです | 10:00, 21:00 | - | 2026-09-20 |
「強風の日は中止します」のように、その日の掲示に頼る部分はカードに書き、中身は掲示の側に置きます。 カードの本文に「今日は中止」と書くと、翌日に直し忘れます。
カードは約80枚になります。 シャワー・トイレ・ヒーター・照明・BBQの道具・焚き火・薪・夕食・朝食・売店・ペット・駐車場・チェックアウト・周辺の店と温泉・最寄り駅への送迎など。周辺の店のカードには、施設が確かめた日を入れます。 周辺の店の営業時間は、施設が変えられないからです。
データの取得方法を決める
カードは数が少ないので、検索せずに全部を毎回渡します。 約80枚のカードとその日の掲示を、日本語のまま指示に入れます。カードを絞り込む検索を挟むと、絞り込みで落ちたカードについて「分かりません」と答えることになります。 枚数が200を超えるようになったら、項目で絞ってから渡す形に変えます。
| 取るもの | どこから | どう取るか |
|---|---|---|
| カード | SharePoint のリスト | 起動時に読み、更新日が変わったら読み直す |
| その日の掲示 | SharePoint のリスト | 質問のたびに読む |
| 直近のやり取り | 記録 | テントの番号で直近5往復 |
| 今夜の宿泊者 | 予約の書き出し | 毎日15時 |
会話の記録は、Azure OpenAI の側に残しません。 Microsoft の公式ページでは、Responses API の応答は既定で30日保持されるとされ、store=false にすると状態を持たない呼び出しになるとされています。この構成では store=false にし、直近5往復は Functions が自分の記録から入れます。 previous_response_id で前の応答をつなぐ使い方は、応答を保存しないとできないので使いません。
処理の場所も確かめます。 公式ページでは、プロンプトと応答は顧客が指定した地域の中で処理される(Global か DataZone の展開を除く)とされています。客の質問には名前や体調のことが書かれることがあるので、展開の種類は標準(日本の地域)を選びます。
AIへ渡す前に整形する
- 言葉の一覧を当てる … 「アレルギー」「allergy」「过敏」「알레르기」「けが」「injury」「火事」「fire」「救急」「返金」など。当たれば、AIを呼ばずにすぐスタッフへ回します
- 長さを確かめる … 1回の質問は500文字までにします。超えたら「短く分けて送ってください」と返します
- 連絡先や名前を伏せる … 電話番号・メールアドレスの形の文字列は伏せてから渡します
- カードの数字をそろえる … 時刻は「21:00」の形、金額は「500」の形で別の項目に入れます。本文の「21時」「午後9時」もこの形に読み替えた一覧を持ちます
- その日の掲示をカードより先に置く … 焚き火の可否が掲示とカードで違えば、掲示を使うように指示に入れます
1番目で拾いすぎてもかまいません。 「fire」は「焚き火」の質問でも当たります。焚き火の質問がスタッフに回っても、スタッフが答えれば済みます。 拾い漏らして、火事の連絡にAIがカードの答えを返すほうがずっと困ります。
4番目が、第7章「出力形式」の照合の土台です。 カードの時刻と金額を、本文から読み取らずに項目として持っておけば、答えに出した数字とそのまま照らせます。
AIに処理させる
| させること | させないこと |
|---|---|
| 客の質問が、どのカードで答えられるかを決める | カードに無いことを一般的な知識で答えること |
| カードの本文を、客の選んだ言語で短く言い直す | カードの時刻・金額・数を変えること、丸めること |
| その日の掲示がカードと違うときは、掲示を使う | 掲示と違う古いカードの内容を答えること |
| 使ったカードの番号と、答えに出した時刻と金額を返す | 食物アレルギーへの対応の可否を答えること |
| カードで答えられないときに、回すと決める | けが・体調・天候による中止・返金について答えること |
| 答えの日本語の訳を作る | 周辺の店の今日の営業を請け合うこと |
周辺の店を請け合わせないのが、宿泊の施設らしい線です。 「近くのラーメン屋は開いていますか」に、カードの営業時間をそのまま「開いています」と答えると、定休日や臨時休業で外れます。答えるのは「施設が〇月〇日に確かめた営業時間は〜です。お出かけ前にお店にご確認ください」までです。
アレルギーを答えさせないのも外せません。 夕食のBBQの食材はカードに書けますが、その客のアレルギーに対応できるかは、厨房が食材と調理の場所を見て決めることです。 カードに原材料が書いてあっても、AIには「大丈夫です」と言わせません。
指示内容を固定する
あなたはグランピング施設の案内係です。宿泊中のお客様の質問に答えます。
答えの根拠にしてよいのは【その日の掲示】と【案内と決まりのカード】だけです。
【答え方】
- {language} で、短く、ていねいに答えてください。
- 使ったカードの番号を used_cards に入れてください。
- 答えに出した時刻はすべて "HH:MM" の形で times に、
金額はすべて数字だけで prices に入れてください。
- 【その日の掲示】と【案内と決まりのカード】が違うときは、掲示を使ってください。
- 周辺の店や施設については「施設が確かめた日」と「お出かけ前にご確認ください」を
必ず添えてください。
- answer_ja に、答えの日本語の訳を入れてください。
【厳守事項】
- カードに無いことを答えないでください。一般的な知識や推測で補わないでください。
カードで答えられないときは route を "staff" にし、answer には
「スタッフに確認して、このチャットでお返事します」とだけ書いてください。
- カードの時刻・金額・数を変えないでください。丸めたり換算したりしないでください。
- 食物アレルギー、けが、体調、火事、天候による中止、返金、予約の変更については
答えず、route を "staff" にしてください。
- 「大丈夫です」「問題ありません」と請け合わないでください。
- お客様の名前や連絡先を聞かないでください。
【その日の掲示】{today_board}
【案内と決まりのカード】{cards}
【直近のやり取り】{history}
【質問】{question}
「カードで答えられないときの文を決めておく」のが、この指示の中心です。 文を決めないと、AIは「申し訳ありませんが分かりません。一般的には〜」と、断りながら一般的な知識を足します。 決めた文だけを書かせれば、照合も簡単です。
「times と prices にすべて入れる」は、照合のための指示です。 答えの本文から数字を取り出すのは、言語ごとに書き方が違って難しいので、AIに自分で書き出させ、本文にもその数字があるかを Functions が確かめます。
出力形式を固定する
Responses API の構造化出力で、次の形で受け取ります。
{
"route": "answer | staff",
"reason": "covered | not_in_cards | restricted | urgent",
"answer": "",
"answer_ja": "",
"used_cards": [""],
"times": [""],
"prices": [""]
}
Microsoft の公式ページでは、構造化出力は Chat Completions API と Responses API の両方で使え、すべての項目を必須にし、オブジェクトには常に additionalProperties: false を付けるとされています。文字列の minLength・maxLength・pattern・format、配列の minItems・maxItems は使えないとされているので、times が "HH:MM" の形かは Functions で確かめます。
英語で「Can we still have a campfire tonight? And how much is extra firewood?」と届き、その日の掲示が「焚き火:可」のときは、次のように返ってくる想定です。
{
"route": "answer",
"reason": "covered",
"answer": "Yes, campfires are allowed tonight at the fire pit of your tent until 22:00. The first bundle of firewood is included in your plan; additional bundles are 500 yen each at the shop in the main building.",
"answer_ja": "はい、今夜はテントの焚き火台で22時まで焚き火ができます。薪は1束目がプランに含まれ、2束目からは管理棟の売店で1束500円です。",
"used_cards": ["C-031", "C-033"],
"times": ["22:00"],
"prices": ["500"]
}
照合は次の順で行います。
| 確かめること | 合わないときの扱い |
|---|---|
used_cards の番号がカードの表にある | 返さずスタッフへ |
times と prices が、使ったカードかその日の掲示の数字にある | 返さずスタッフへ |
times と prices の数字が、answer の本文にもある | 返さずスタッフへ |
route が answer なのに used_cards が空 | 返さずスタッフへ |
reason が restricted か urgent | 決めた文を返し、スタッフへ |
1つ目の理由は、数字の取り違えを返す前に止められることです。 「23:00」のカードで答えに「22:00」と出ていれば、掲示に22:00が無い限り返しません。 客に間違った時刻が届くより、スタッフが1件答えるほうがましです。
2つ目は、answer_ja でスタッフが外国語の答えを読めることです。 回ってきた質問の前のやり取りを、スタッフは日本語で読めます。ただし answer_ja はAIの訳で、客に返した文そのものではありません。 記録には両方を残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| チャットの画面 | Functions のHTTPの受付 | 質問の受信と答えの返信 |
| 予約の仕組み | 毎日の書き出し(読み取りのみ) | 今夜の宿泊のテントの番号 |
| SharePoint のリスト | 読み取り | カードとその日の掲示 |
| Azure OpenAI | Responses API(store=false) | 答えの作成 |
| Microsoft Teams | スタッフのチャネルへの投稿 | 回した質問(原文・日本語の訳・テントの番号) |
| Azure Table Storage | 書き込み | 質問・答え・照合の結果・回した記録 |
スタッフの答えは、管理棟の端末のチャットの画面から返します。 スタッフが日本語で書いた答えは、AIで客の言語に訳してから返します。訳の時刻と金額も、スタッフが書いた日本語の数字と照らしてから返します。
人が確認する
- 回ってきた質問に答える … Teams に、テントの番号・原文・日本語の訳・理由(カードに無い/答えてはいけない/急ぐ)が届きます。
urgentはすぐテントへ向かうか電話をかけます - アレルギーの相談は厨房に回す … 対応できるかは、厨房の責任者が決めます
- 毎朝、前日の記録を見る … カードに無かった質問、数字が合わなかった答え、客が「違う」と書いた答えを見ます
- カードを直す・足す … よく聞かれたものからカードにし、変わった時刻や金額を直します
3番目を毎朝やるのが、この構成の運用の中心です。 返した答えをすべて人が見ることはしません。数字が合わなかった件と、カードに無かった件だけを見ます。 1日に数件から十数件です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 今夜の宿泊でないテントの番号 | 「管理棟へお電話ください」と返し、AIを呼ばない |
| 言葉の一覧に当たる | AIを呼ばずに決めた文を返し、すぐスタッフへ |
| 安全方針で入力が止まる | 決めた文を返し、スタッフへ |
| 数字が合わない | 返さず、決めた文を返してスタッフへ |
| 選んだ言語と違う言語で書かれた | 書かれた言語で答える。分からなければ選んだ言語で決めた文 |
| 1つの質問に複数のこと | 答えられる部分だけ答え、残りをスタッフへ |
| 深夜(23時〜7時) | 答えはこれまでどおり返し、回すものは当直の端末へ。urgent は電話も鳴らす |
| Azure OpenAI が応答しない | 「管理棟へお電話ください」と返す |
3行目の安全方針は、火やけがの話で起きえます。 Microsoft の公式ページでは、既定の安全方針(DefaultV2)は入力と出力の両方で重大度「中」以上をブロックし、入力が止まるとエラーの応答が返るとされています。止まったときに客に何も返らないのがいちばん困るので、決めた文を返します。 また、分類の学習と検証の言語は中国語・英語・日本語など8つで、韓国語は含まれず、精度が変わりうるとされています。韓国語の質問は、最初の数か月は回す件数が多めになると見込んでおきます。
記録を残す
- 質問ごとの、テントの番号・言語・原文・送った時刻
- 言葉の一覧に当たったかと、当たった言葉
- AIの応答の JSON(答え・日本語の訳・使ったカード・時刻・金額・回すかどうか)
- 照合の結果と、合わなかった数字
- 回した質問へのスタッフの答えと、答えた時刻
- カードとその日の掲示の、そのときの版(更新日)
最後の行は、「昨日はそう言われた」と言われたときのためです。 そのときのカードの版が残っていれば、答えがカードどおりだったのか、カードが古かったのかを分けられます。 記録は90日で消し、テントの番号と予約は結び付けません。
04実装レベルの3段階
最小構成でも、外国語の質問は速くなります。 翻訳のアプリの往復が無くなるからです。ただしスタッフの手は止まるので、夕方の電話の重なりは減りません。 半自動化で、1件8分が5分程度になります。 客は電話をかけずにチャットで書きますが、すべての答えをスタッフが見るので、見る時間が残ります。 本格構成で3分になり、この段階が本記事の想定です。差が大きいのは、数字の照合があるかどうかです。 照合が無いと、すべての答えを人が見ないと返せません。 段階を飛ばさないでください。 半自動化を1か月続けると、スタッフが直した答えから、カードの足りないところが分かります。直す件数が減ってから、自動で返す形に進みます。
05工数削減シミュレーション
導入後 720件 × 3分 ÷ 60 = 36 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- テントやドームなど20棟前後の客室が敷地に散らばり、管理棟までの距離があるグランピング施設。宿泊中の質問が電話と管理棟の窓口に毎月数百件届き、そのうち訪日客からの英語・中国語・韓国語の質問が増えている場合。設備の使い方・夕食の時間・周辺の店の答えがスタッフによって違い、夜のスタッフが少ない場合。施設の案内と決まりを表にまとめ直す手間をかけられる場合。
- 客室が数棟で、スタッフがすべての客と顔を合わせて案内できる場合。質問の大半が予約の変更や料金の相談で、予約の仕組みを見ないと答えられない場合(予約の窓口の題材です)。施設の案内と決まりが文書になっておらず、スタッフの口頭の説明だけで回っている場合(先にカードを作ります)。なお、食物アレルギーへの対応の可否、けがや体調の判断、天候による中止や返金の判断は、この構成では代替できません。カードに書かれたことを客の言葉で返し、それ以外をスタッフに回すまでです。
07最小構成で試す方法
- 過去1か月にスタッフが受けた質問を、思い出せる範囲で30件書き出す(うち10件は外国語の質問を入れる)
- 案内の冊子と利用の決まりから、30件に答えるのに要るカードを20枚ほど作る
- 手元のAIサービスの画面に、カードと「カードに無いことは答えず『スタッフに確認します』と書く。時刻と金額を変えない」という指示を貼る
- 30件の質問を、日本語・英語・中国語・韓国語で1件ずつ貼り、答えを出させる
- 答えの時刻と金額がカードと合うか、カードに無い質問で一般的な知識を足していないかを見る
30件は必ずやってください。 チャットの画面を作る前に、「カードの書き方で答えが決まるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| カードどおりの答えが出て、無いものは回した | チャットの画面とつなぐ |
| カードに無いことを一般的な知識で補った | 指示の書き方で直る。構成は有効 |
| カードが長く、答えに要らないことまで出る | カードの書き方が先。 1枚1つのことに分ける |
3行目が出ることは珍しくありません。 冊子の1ページをそのままカードにすると、シャワーの質問に駐車場のことまで答えます。カードを分け直して、同じ30件で試してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| カードに無いことを一般的な知識で答える | 答えられないときの文を決めて、それだけを書かせる |
| 訳で時刻や金額が変わる | 答えに出した数字を書き出させ、カードと照らす |
| その日の掲示が反映されない | 掲示をカードより先に置き、違えば掲示を使う。リストの更新を引き継ぎの項目に入れる |
| 火事やけがの連絡にカードの答えを返す | AIの前に言葉の一覧で拾い、すぐ回す |
| 安全方針で止まって客に何も返らない | 止まったときは決めた文を返す |
| 韓国語の質問で回る件数が多い | 安全方針の学習言語に韓国語は含まれない。最初の数か月は多めに見込む |
| アレルギーに「大丈夫です」と答える | 答えてはいけない話題として回す。厨房の責任者が決める |
| 周辺の店の営業を請け合う | 確かめた日と「お出かけ前にご確認ください」を必ず添える |
| 応答が30日残る | store=false にし、直近のやり取りは自分で持つ |
| チェックアウトの後も質問が届く | 今夜の宿泊のテントの番号だけを受ける |
| カードの1枚が長い | 1枚1つのことに分ける |
| スタッフが回ってきた質問に気づかない | Teams の通知に加え、urgent は当直の端末に電話も鳴らす |
上の2行が、この構成の失敗のほとんどです。 どちらも「AIがそれらしく答える」ところから出ています。答えの根拠をカードと数字に縛っているかどうかで、客に間違いが届くかが決まります。
下の2行も、早いうちに効いてきます。 長いカードは答えを長くし、回ってきた質問に気づかないと、客は結局電話をかけてきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 客が書いた質問の文、テントの番号、言語、時刻です。質問には、同行者の名前や子どもの年齢、体調やアレルギーのことが書かれることがあります。
- 名前と連絡先を聞かない … チャットはテントの番号だけで受けます。書かれた電話番号やメールアドレスは伏せてから渡します
- 会話を Azure OpenAI の側に残さない … Responses API は既定で応答を30日保持するとされているので、
store=falseにします - 処理の場所を決める … Global や DataZone の展開では、指定した地域の外で処理されうるとされています。標準の展開で日本の地域を選びます
- 体調とアレルギーをAIで判断しない … 言葉の一覧で拾ってスタッフへ回します。厨房と責任者が決めることを、チャットに答えさせません
- 記録を長く持たない … 記録は90日で消し、予約の情報と結び付けません。誰が何を聞いたかを、後から追える形にしません
- 答えがAIのものだと分かるようにする … チャットの画面の最初に「自動の案内です。急ぎの用件は管理棟へお電話ください」と出し、管理棟の電話番号を常に見せます
誤りが起きた場合のリスクは、間違った時刻や決まりを伝えることと、急ぐ連絡をAIが受けてしまうことの2つです。 前者は数字の照合で、後者は言葉の一覧で防ぎます。どちらもAIの前後に置いた規則で守り、AIの答えの出来には頼りません。
10まず何から始めるか
1週目:カードを作る
案内の冊子と利用の決まりを、1枚1つのことのカードに分けます。 時刻と金額は別の項目にも入れます。80枚を一度に作る必要はありません。よく聞かれる上位30項目から作ります。 シャワー・焚き火・薪・夕食・売店・ヒーター・チェックアウトで、質問の大半が埋まります。
2週目:30件で試す
過去の質問を30件書き出し、手元のAIサービスにカードを貼って4言語で答えさせます。時刻と金額がカードと合うか、カードに無い質問で一般的な知識を足していないかを最優先で見ます。
3週目:答えてはいけない話題と、言葉の一覧を決める
アレルギー・けが・体調・火事・天候による中止・返金・予約の変更を、責任者と決めます。 4言語の言葉の一覧を作り、スタッフで見直します。あわせて、その日の掲示をリストで更新する手順を、交代の引き継ぎに入れます。
4週目:QRコードのチャットをつなぐ
チャットの画面と Functions、Azure OpenAI をつなぎ、3棟のテントだけにQRコードを置きます。 この時点では答えを自動で返さず、スタッフが見てから返します。
2か月目: 全部のテントにQRコードを置き、数字の照合と言葉の一覧を足して、照合を通った答えを自動で返します。3か月目以降: 毎朝の記録の確認でカードを足し、1件8分が何分になったかを実測します。カードに無かった質問が週に数件まで減り、夕方の電話が目に見えて減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
構造化出力が Chat Completions API と Responses API の両方で使えること。すべての項目を必須にし、オブジェクトに常に additionalProperties: false を付けること。文字列の minLength・maxLength・pattern・format、配列の minItems・maxItems が使えないこと。最大100個のプロパティ・5段の入れ子まで | Microsoft Learn: 構造化された出力 | 2026-10-29 |
Responses API の応答が既定で30日保持されること。store=false で状態を持たない呼び出しになること。previous_response_id で前の応答をつなげること | Microsoft Learn: Azure OpenAI Responses API | 2026-10-29 |
| 既定の安全方針(DefaultV2)が入力と出力の両方で重大度「中」以上をブロックし、入力が止まるとエラーの応答が返ること。分類の学習と検証の言語が中国語・英語・フランス語・ドイツ語・イタリア語・日本語・ポルトガル語・スペイン語で、ほかの言語は精度が変わりうること | Microsoft Learn: Default Guardrail policies for Microsoft Foundry | 2026-10-29 |
| プロンプトと応答が、Global か DataZone の展開を除いて、顧客が指定した地域の中で処理されること。モデルがプロンプトと応答を保存せず、基盤モデルの学習に使わないこと | Microsoft Learn: Data, privacy, and security for Models sold by Azure | 2026-10-29 |
食物アレルギーへの対応、けがや体調の判断、天候による中止と返金は、施設の責任者と厨房の判断に従ってください。 本記事は公開されている製品のドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2255)についてのご相談はこちらから。
