外国人向けシェアハウスの運営会社が、入居者から多言語で届くハウスルール・設備・退去の問い合わせに Azure OpenAI のチャットで答え、修繕と苦情は担当に回す
入居者から LINE に多言語で届くゴミ出し・設備・退去の問い合わせに、その人の住む物件のハウスルールと設備の案内を根拠に、Azure OpenAI のチャットが入居者の言語で答えます。修繕の依頼、入居者どうしの苦情、緊急の連絡は、日本語の要約を付けて担当者に回します。
- 生成AI
- Azure OpenAI Service/Claude
- 連携・自動化
- Power Automate
- 対象業界
- その他/不動産/宿泊
- 対象部門
- カスタマーサポート
- 対象業務
- 分類・仕分け/問い合わせ対応
- 主な課題
- 人手が足りない/問い合わせが多い/期限・対応漏れが起きる
- AIで行う処理
- 対話
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- LINE の管理画面で新しいメッセージを開き、入居者の名前から物件と部屋を台帳で確かめる
- 英語以外のメッセージは機械翻訳にかけて読む
- 物件のハウスルールと設備の案内を開き、答えを探す
- 日本語で答えを書き、機械翻訳で入居者の言語に直して返す
- 修繕の依頼なら、修繕の手配の一覧に書き、協力業者に連絡する
- 苦情(騒音、共用部の汚れ、他の入居者の来客)なら、責任者に相談して返事を決める
- 退去の連絡なら、契約を確かめて退去の手続きの案内を返す
- 自動入居者が LINE にメッセージを送ると、受け取りの仕組みが動き、待っている印を表示する
- 自動LINE の利用者IDから入居者の台帳を引き、物件と部屋を確かめる
- 自動緊急の語(火事、ガスのにおい、水があふれる など)を機械的に照合し、当たれば決まった文面で答えて担当に知らせる
- 自動その物件のハウスルールと設備の案内を検索する
- 自動Azure OpenAI が、検索した文書だけを根拠に入居者の言語で答えるか、答えずに担当へ回すかを決める
- 自動答える場合は返事を送る。回す場合は「担当に伝えました」と入居者の言語で返し、日本語の要約を担当の一覧に入れる
- 人担当が回ってきた問い合わせを読み、修繕の手配や苦情の対応をする
- 人担当が毎日、AIが答えた問い合わせから抜き出した一部を読み、答えの誤りを拾う
各工程の詳しい説明を読む
- LINE の管理画面で新しいメッセージを開き、入居者の名前から物件と部屋を台帳で確かめる
- 英語以外のメッセージは機械翻訳にかけて読む
- 物件のハウスルールと設備の案内を開き、答えを探す
- 日本語で答えを書き、機械翻訳で入居者の言語に直して返す
- 修繕の依頼なら、修繕の手配の一覧に書き、協力業者に連絡する
- 苦情(騒音、共用部の汚れ、他の入居者の来客)なら、責任者に相談して返事を決める
- 退去の連絡なら、契約を確かめて退去の手続きの案内を返す
(a)同じ質問に何度も答える。 ゴミの出し方、Wi-Fi のパスワード、洗濯機の使い方は、入居のときに案内を渡していても毎月届きます。入居者が入れ替わるたびに、同じ質問が最初から始まります。
(b)物件を取り違える。 入居者の名前から物件を探すとき、同じ名前の入居者や、最近転居した入居者で取り違えることがあります。系列の物件の間で部屋を移る入居者も多く、台帳の更新が遅れると前の物件のまま残ります。別の物件のゴミの日を伝えてしまうと、そのゴミは回収されずに残ります。
(c)修繕の依頼が埋もれる。 1日に数十件届く質問のなかに、「トイレの水が止まらない」が混ざります。担当が順番に読んでいくと、修繕の依頼に気づくのが数時間後になります。
(d)夜と休日は止まる。 担当の勤務時間の外に届いた問い合わせは、翌営業日まで返事がありません。簡単な質問でも半日以上待たせることになり、入居者の満足度の調査で毎回いちばん低い項目です。
- 【自動】 入居者が LINE にメッセージを送ると、受け取りの仕組みが動き、待っている印を表示する
- 【自動】 LINE の利用者IDから入居者の台帳を引き、物件と部屋を確かめる
- 【自動】 緊急の語(火事、ガスのにおい、水があふれる など)を機械的に照合し、当たれば決まった文面で答えて担当に知らせる
- 【自動】 その物件のハウスルールと設備の案内を検索する
- 【自動】 Azure OpenAI が、検索した文書だけを根拠に入居者の言語で答えるか、答えずに担当へ回すかを決める
- 【自動】 答える場合は返事を送る。回す場合は「担当に伝えました」と入居者の言語で返し、日本語の要約を担当の一覧に入れる
- 【人】 担当が回ってきた問い合わせを読み、修繕の手配や苦情の対応をする
- 【人】 担当が毎日、AIが答えた問い合わせから抜き出した一部を読み、答えの誤りを拾う
5番目が、この設計の分かれ目です。 文書に答えが無い問い合わせ、修繕・苦情・退去の精算・お金に関わる問い合わせは、答えを考えさせずに回します。 「たぶんこうです」と答える窓口は、外国人の入居者にとっていちばん困る窓口です。
3番目を生成AIの前に置いているのも、意図してのことです。 緊急の連絡に生成AIが文章を考えると、返事が遅れ、言い回しが揺れます。緊急の文面は人が決めた固定の文で、すぐに返します。
02今回想定するシステム構成
入居者(LINE の公式アカウント) │【トリガー】メッセージの受信(Webhook) ▼ Azure Functions ├── 待っている印を表示(loading animation) ├── LINE の利用者ID → 入居者の台帳 → 物件・部屋 ├── 緊急の語の照合 → 当たれば固定の文面+担当へ通知 ▼ Azure AI Search(物件ごとの文書。キーワード+ベクトルのハイブリッド検索) ▼ Azure OpenAI(Chat Completions、構造化出力) │ 答える/回す、返事の文、根拠の文書、日本語の要約 ▼ 答える → 返事を送る(応答メッセージ) 回す → 「担当に伝えました」+担当の一覧へ日本語の要約 ▼ 【担当が修繕・苦情・退去を対応】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry) | Claude API |
| 連携 | Azure Functions(受信、台帳の照会、緊急の照合、検索と呼び出しの順番、返信) | Power Automate |
| 文書の検索 | Azure AI Search(ハイブリッド検索、物件で絞り込み) | Amazon OpenSearch Service |
| 窓口 | LINE の公式アカウント(Messaging API) | 入居者向けのWebのチャット |
| 会話の記録 | Azure Cosmos DB(直近のやり取りと回した記録) | Azure Table Storage |
修繕の手配と契約の仕組みには、この構成から書き込みません。 回した問い合わせは担当の一覧に入るだけで、業者への連絡、退去日の確定、精算は担当がいつもの手順で行います。AIの返事が約束として残る経路を作りません。
検索は自前で行い、その結果を生成AIに渡します。 Azure OpenAI には自社のデータに接続して答えさせる「持ち込みデータ(On Your Data)」の機能がありますが、公式のページでは、構造化出力はこのシナリオではサポートされないとされています。答えるか回すかの判断と根拠の文書を決まった欄で受け取りたいので、検索は Azure Functions から Azure AI Search を呼んで行います。
Azure AI Search はハイブリッド検索で使います。 公式のページでは、ハイブリッド検索は全文検索とベクトル検索を1つの要求で並行して実行し、Reciprocal Rank Fusion(RRF)で結果を統合するとされています。埋め込みの空間に多言語の内容が含まれていれば、言語の解析器や翻訳なしにベクトルの問い合わせで一致を見つけられるとも書かれています。ベトナム語の質問で日本語のハウスルールを探せるのは、このためです。
03どうやって実装するのか
処理の起点を決める
入居者が LINE の公式アカウントにメッセージを送ったときに、Messaging API の Webhook で Azure Functions を動かします。 1通ごとに動き、まとめて処理はしません。
返事は応答メッセージで送ります。 公式のリファレンスでは、応答トークンは1回しか使えず、Webhook を受けてから1分以内に使う必要があり、1分を超えた場合の動作は保証されないとされています。検索と生成に時間がかかっても1分を超えないよう、生成AIの呼び出しには時間の上限を設けます。 上限を超えたら、応答トークンで「確認して改めてお知らせします」と返し、担当の一覧に回します。
受け取ってすぐに、待っている印を表示します。 公式のリファレンスでは、ローディングのアニメーションを表示する口があり、5秒から60秒の間で表示する秒数を指定でき、公式アカウントから新しいメッセージが届くと消えるとされています。入居者は「読まれていない」と思って同じ質問を何度も送ることがあるので、印で受け取ったことを伝えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 入居者のメッセージ | 本文、送った日時、LINE の利用者ID | LINE の Webhook |
| 入居者の情報 | 物件、部屋、契約期間、退去予定日、ふだん使う言語 | 入居者の台帳 |
| 物件の文書 | ハウスルール、設備の案内、ゴミの出し方、退去の手続き、よくある質問 | Azure AI Search の索引 |
| 直近のやり取り | 同じ入居者との直近の数往復 | Azure Cosmos DB |
| 回す基準の一覧 | 修繕・苦情・精算・契約・緊急に当たる問い合わせの例と、回す先 | 自社で用意する一覧 |
| 緊急の文面 | 火事・ガス・水漏れ・けがのときの固定の文面(言語ごと)と連絡先 | 自社で用意する文面 |
質を決めるのは、物件の文書と回す基準の一覧です。 物件の文書が古ければ、AIは古いルールを正しく答えます。ルールを変えたら文書を直す、という手順が無いと、この構成は誤った答えを丁寧に返す仕組みになります。
入居者の台帳の LINE の利用者IDは、入居のときに紐づけます。 入居の案内で公式アカウントを友だちに追加してもらい、部屋の番号を送ってもらって担当が台帳に登録します。紐づいていない利用者IDからの問い合わせには、物件のルールで答えません。
データの取得方法を決める
物件の文書は、物件ごとに分けて1つの索引に入れます。 文書を見出しごとの短い塊に分け、各塊に property_id(物件)、doc_type(ハウスルール・設備・退去など)、updated_at(最終の改定日)を持たせます。本文はキーワードの検索用の項目と、埋め込みにしたベクトルの項目の両方に入れます。
検索は、物件で必ず絞り込みます。 入居者の台帳で確かめた property_id と、全物件に共通の文書を表す common の2つだけを filter に入れます。
ハイブリッド検索の要求(抜粋)
POST /indexes/house-docs/docs/search?api-version=2026-04-01
{
"search": "<入居者のメッセージ>",
"filter": "property_id eq 'H-023' or property_id eq 'common'",
"vectorQueries": [
{ "kind": "vector", "vector": [ <メッセージの埋め込み> ],
"k": 50, "fields": "contentVector" }
],
"select": "chunk_id, property_id, doc_type, title, content, updated_at",
"top": 5
}
filter を外すと、別の物件のルールを答えます。 ゴミの日も共用部の使用時間も物件ごとに違うので、第3章の(b)の取り違えを、検索の側で起きないようにします。
物件の文書の塊は、見出しごとに短く分けます。 ハウスルールの PDF を1ページずつ入れると、ゴミの出し方と来客の決まりが同じ塊に入り、答えに関係のない決まりまで生成AIに渡ります。 見出しを境に分け、塊ごとに title を持たせると、根拠を確かめるときにも探しやすくなります。
直近のやり取りは、同じ入居者の最近の数往復だけを読みます。 「それは何時まで?」のように前の質問を受けた問い合わせに答えるためで、何日も前のやり取りは渡しません。 古い話題が混ざると、答えが関係のない方向に引っ張られます。
AIへ渡す前に整形する
- 入居者の確認 … LINE の利用者IDから台帳を引きます。見つからなければ、物件のルールでは答えず、部屋の番号を聞く決まった文面を返します
- 緊急の語の照合 … 言語ごとの緊急の語の一覧で照合し、当たれば生成AIを呼ばずに固定の文面を返し、担当の携帯に通知します
- 言語の判定 … メッセージの言語を判定し、台帳のふだん使う言語と違えばメッセージの言語を優先します
- 退去の予定の付加 … 退去予定日が近い入居者には、その情報を指示に加えます
- 個人情報の除去 … メッセージに書かれた他の入居者の名前や電話番号は、要約に残さないよう印を付けます
- 連投のまとめ … 数秒の間に続けて届いたメッセージは、1つにまとめて扱います
2番目の一覧は、取りこぼしより拾いすぎを選びます。 「火」で照合すると「火曜日」に当たるので、語の組み合わせで作り、当たったら固定の文面の後で担当が状況を確かめます。 拾いすぎた緊急の連絡は担当が数分で落ち着かせられますが、取りこぼした火事は取り返しがつきません。
6番目は、入居者の送り方に合わせるためです。 外国人の入居者は、1つの質問を短いメッセージ3通に分けて送ることがよくあります。1通ずつ答えると、最初の1通だけを見た的外れな返事になります。
AIに処理させる
させることは、問い合わせを見分けて、答えるか回すかを決め、答えるなら根拠の文書に沿って入居者の言語で書くことです。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 問い合わせの種類を見分ける | ルール・設備・退去の手続き・修繕・苦情・お金・契約・その他 | 迷ったら回す |
| 答えるか回すかを決める | 回す基準の一覧に当たるもの、文書に答えが無いものは回す | 迷ったら回す |
| 入居者の言語で答える | 検索した文書だけを根拠に、短く書く | 文書に無ければ答えず回す |
| 根拠の文書を示す | 答えに使った塊の chunk_id | 使った塊が無ければ答えない |
| 日本語の要約を書く | 回す問い合わせの中身、場所、いつから、入居者の希望 | 分からない項目は「不明」 |
回す基準の一覧には、答えられるように見えて回すべきものを書きます。 「退去の連絡は何日前まで?」は文書で答えられますが、「来週出たいけど大丈夫?」は契約の解釈と精算に関わるので回します。 「隣の部屋がうるさい」は苦情で、ハウスルールに静かにする時間が書いてあっても、答えずに回します。 ルールを伝えるだけでは、苦情は解決しないからです。
| させないこと | 理由 |
|---|---|
| 修繕の日程や業者の手配を約束すること | 業者の都合で決まる。約束が外れると信用を落とす |
| 退去時の精算の金額や敷金の扱いを答えること | 契約と部屋の状態を見て担当が決める |
| 入居者どうしのトラブルの判断 | 双方の話を聞いて責任者が決める |
| 文書に無いルールを答えること | 物件ごとに違う。推測で答えると誤った案内になる |
| 他の入居者の情報を答えること | 部屋の番号、名前、在室の有無を伝えない |
| 緊急の連絡への文章を考えること | 固定の文面で、すぐに返す |
指示内容を固定する
あなたはシェアハウスの運営会社の、入居者向けの窓口です。
入居者のメッセージに、下の【物件の文書】だけを根拠に答えてください。
文書に書かれていないことは答えず、担当に回してください。
【答える範囲】
- ハウスルール、設備の使い方、ゴミの出し方、退去の手続きの流れ
【必ず担当に回すもの】
- 壊れた・動かない・水が漏れるなどの修繕の依頼
- 他の入居者についての苦情や相談
- お金(家賃、精算、敷金、違約金)と契約の解釈
- 文書に答えが無い質問
- 迷ったとき
【書き方】
- 入居者がメッセージを書いた言語で答えてください。
- 短く、手順は番号付きで書いてください。
- 使った文書の chunk_id を cited_chunks に入れてください。
【厳守事項】
- 修繕の日程、業者が来る時間を約束しないでください。
- 金額を答えないでください。文書に金額があっても、担当に回してください。
- 物件の文書に無いルールを、一般的な知識で補わないでください。
- 他の入居者の名前、部屋、在室かどうかを答えないでください。
- 担当に回すときは、reply に「担当に伝えました。担当から連絡します」
という意味の文を入居者の言語で書き、いつ連絡するかは書かないでください。
- summary_ja には、担当が読む日本語の要約を書いてください。
場所、いつから、入居者の希望を書き、分からなければ「不明」としてください。
【入居者の情報】物件 {property_name}/部屋 {room}/退去予定日 {move_out}
【直近のやり取り】{recent_turns}
【物件の文書】{chunks}
【メッセージ】{message}
「文書に金額があっても回す」と書いているのは、金額の答えは条件で変わるからです。 退去の手数料が文書に書いてあっても、契約の時期や部屋の状態で扱いが違うことがあります。金額を窓口で答えると、精算のときに「チャットではこう言われた」と言われます。
「いつ連絡するかは書かない」も同じ理由です。 「明日連絡します」と書くと、担当が休みの日に約束が外れます。
指示は言語ごとに分けません。 日本語の指示1つで、入居者の言語で返すよう求めます。言語ごとに指示を用意すると、改定のたびに全部の言語の指示を直すことになり、どれか1つだけ古いまま残ります。
出力形式を固定する
次の形のJSONで受け取ります。
{
"language": "vi",
"category": "rule | facility | move_out | repair | complaint | money | contract | other",
"action": "answer | handoff",
"reply": "",
"cited_chunks": ["H-023-rule-04"],
"handoff_reason": "",
"summary_ja": ""
}
1つ目の理由は、action で仕組みの動きを分けられることです。 answer なら返事をそのまま送り、handoff なら返事に加えて担当の一覧に summary_ja を入れます。答えるか回すかを、文章の言い回しから読み取る必要がありません。
2つ目は、cited_chunks で答えの根拠を後から確かめられることです。 Azure Functions は、action が answer なのに cited_chunks が空、または検索で渡していない chunk_id が入っているときは、返事を送らずに回す側に切り替えます。
3つ目は、category で回す先を決められることです。 repair は修繕の担当、complaint は責任者、money と contract は契約の担当の一覧に入れます。
スキーマは公式のページの制約に合わせます。 すべてのフィールドを必須にし、オブジェクトには additionalProperties: false を設定します。category と action は列挙型で書けます。reply の長さは maxLength で縛れないので、Azure Functions で文字数を見て、長すぎれば短くする指示を付けて呼び直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| LINE の公式アカウント | Messaging API(Webhook、応答メッセージ、ローディングの表示) | 受信と返信 |
| 入居者の台帳 | 読み取り | 利用者IDから物件・部屋・退去予定日を引く |
| Azure AI Search | ハイブリッド検索 | 物件で絞り込んだ文書の塊を取る |
| Azure OpenAI | Chat Completions API(構造化出力) | 見分け・答え・要約 |
| 担当の一覧 | Teams のチャネルまたは社内の一覧 | 回した問い合わせと日本語の要約 |
| Azure Cosmos DB | 保存 | 直近のやり取り、回した記録 |
担当が入居者に返事をするときは、LINE の管理画面から行います。 回した問い合わせには入居者の言語の原文と日本語の要約が並ぶので、担当は要約で状況をつかみ、返事の文は自分で書いて機械翻訳で確かめます。
人が確認する
AIが答えた問い合わせは、1件ずつ人が確かめてから送るわけではありません。 月1,500件のうち答えで済むものを全件確かめると、第10章の時間には収まりません。その代わりに、次の3つで誤りを拾います。
- 回ってきた問い合わせは、すべて担当が対応する … 修繕・苦情・お金・契約・文書に無い質問
- 答えた問い合わせを毎日抜き出して読む … 1日20件を抜き出し、根拠の文書と照らして誤りを拾う
- 入居者からの「違う」を拾う … 答えの後に入居者が「違う」「分からない」と返したやり取りは、自動で担当の一覧に入れる
抜き出しは、言語と種類が偏らないように選びます。 英語の問い合わせだけを読んでいると、ネパール語の答えの誤りに気づけません。言語ごとに少なくとも1件、category ごとに少なくとも1件を入れて20件にします。
運用の最初の1か月は、答えた問い合わせを全件読みます。 回す基準の一覧の足りないところと、文書の古いところが、この1か月でほとんど見つかります。全件の確認から抜き出しに切り替えるのは、誤りの件数が落ち着いてからです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 台帳に利用者IDが無い | 物件のルールでは答えず、部屋の番号を聞く文面を返す。担当が台帳に紐づける |
| 緊急の語に当たる | 生成AIを呼ばず、固定の文面と連絡先を返し、担当の携帯に通知する |
| 検索で文書が見つからない | 答えずに回す。よく回る質問は文書に足す候補として記録する |
| 生成AIの応答が1分に間に合わない | 応答トークンで「確認して改めてお知らせします」と返し、担当に回す |
| 入力が安全の仕組みで止まる | 苦情の強い言葉で止まることがある。HTTP 400 の content_filter を受けたら、そのまま担当に回す |
| 出力が安全の仕組みで止まる | finish_reason が content_filter。返事を送らず担当に回す |
answer なのに根拠が空 | 返事を送らずに回す |
| 退去済みの入居者から届く | 物件のルールでは答えず、退去後の問い合わせとして担当に回す |
| 画像やスタンプだけが届く | 画像は読ませず、「文字で教えてください」と返す。修繕の写真なら担当に回す |
入力が止まる例外は、苦情の窓口では避けられません。 公式のページでは、既定の安全方針(DefaultV2)はヘイトと公平性・性的・暴力・自傷の4つについて、プロンプトと出力の両方で重大度が中以上をブロックし、入力が止まるとエラーが返るとされています。怒りの強いメッセージほど人が受けるべきものなので、止まったら担当に回す、を正常な流れとして作ります。 学習・評価された言語は中国語・英語・フランス語・ドイツ語・イタリア語・日本語・ポルトガル語・スペイン語で、それ以外の言語は精度が変わりうるとされています。ベトナム語やネパール語のメッセージで止まり方を試しておきます。
記録を残す
- 受信したメッセージ、日時、利用者ID、判定した言語
- 台帳で確かめた物件と部屋
- 検索で渡した文書の塊の
chunk_idと、その時点のupdated_at - 生成AIの出力(
category、action、reply、cited_chunks、summary_ja) - 回した問い合わせについて、担当が受けた日時と対応の結果
- 入居者が「違う」と返したやり取りと、担当が直した内容
3つ目の updated_at は、ルールを改定した後の苦情のときに要ります。 「チャットでは来客は泊まれると言われた」と言われたとき、答えた時点の文書が改定の前だったのか、AIが読み違えたのかをこのログで分けられます。
04実装レベルの3段階
最小構成では件数がさばけません。 1件ずつ貼るので、月1,500件には使えません。確かめるための段階です。 半自動化で、1件8分が4分程度になります。 物件の確認と答えの案と翻訳が自動になりますが、全件を担当が確かめて送るので、夜間と休日は止まったままです。 本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、答えで済む問い合わせを担当が1件ずつ確かめる作業がなくなるからです。 段階を飛ばさないでください。 半自動化の1〜2か月で、担当が直した答えと回す判断が集まります。そこで回す基準の一覧と文書を直してから、そのまま返す形に切り替えます。
05工数削減シミュレーション
導入後 1,500件 × 2分 ÷ 60 = 50 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 数十棟のシェアハウスを運営し、外国人の入居者が半数を超え、LINE やメッセージアプリで月に千件を超える問い合わせを少人数の担当で受けている運営会社。物件ごとにハウスルールと設備の案内が文書で整っているものの、担当が翻訳しながら同じ質問に何度も答えていて、夜間と休日の問い合わせが翌営業日まで止まっている場合。Azure の契約があり、LINE の公式アカウントの Messaging API を使える開発の担当か委託先がいる場合。
- 物件が数棟で、管理人が常駐して入居者と顔を合わせて話せる場合。ハウスルールが物件ごとに文書になっておらず、担当の記憶で答えている場合(先にルールの文書化から始めます)。問い合わせの大半が修繕の依頼で、案内で済む質問が少ない場合。なお、退去時の精算の金額、入居者どうしのトラブルの判断、修繕の日程の約束は、この構成では代替できません。ルールと案内に書かれたことを答え、それ以外を担当に回すまでです。
07最小構成で試す方法
- 先月届いた問い合わせのうち50件を、言語と種類がばらけるように選ぶ(修繕・苦情・お金の問い合わせを10件以上入れる)
- 問い合わせの入居者が住む物件のハウスルールと設備の案内を用意する
- 社内で使える Azure OpenAI の画面(Microsoft Foundry のプレイグラウンド)に、第7章の指示と物件の文書を貼る
- 50件を1件ずつ貼り、答えるか回すか、答えの中身を見る
- 当時担当が返した答えと見比べる
50件は必ずやってください。 窓口の仕組みを作る前に、回すべきものを回せるかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 修繕・苦情・お金をすべて回し、ルールの質問に正しく答えた | LINE と検索の連携に進む |
| 金額を答えた、修繕の日程を約束した | 指示の書き方で直る。構成は有効 |
| 文書に答えが無く、ほとんどを回した | 物件の文書の整備が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、担当が記憶で答えていたルールが、文書になっていなかったと分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 別の物件のルールを答える | 検索の filter に物件を必ず入れる。台帳で確かめた物件だけを使う |
| 修繕の日程を約束する | 指示で禁じ、回すときの返事は「担当から連絡します」だけにする |
| 金額を答える | 文書に金額があっても回す。money は契約の担当へ |
| 苦情にルールを伝えて終わる | 苦情は答えずに回す。ルールを伝えるだけでは解決しない |
| 応答トークンの期限を過ぎる | 1分以内に返す。間に合わなければ「改めてお知らせします」で返して回す |
| 同じ質問が何度も届く | 受け取ってすぐにローディングを表示する。連投はまとめて扱う |
| 緊急の連絡に生成AIが文章を考える | 緊急の照合を生成AIの前に置き、固定の文面で返す |
| 古いルールを正しく答える | ルールを変えたら文書を直す手順を決め、updated_at を残す |
| 持ち込みデータの機能で作ろうとする | 構造化出力と併用できない。検索は自前で行う |
| 怒りの強いメッセージで入力が止まる | 止まったら担当に回す流れを正常系として作る |
| 学習・評価の対象外の言語で精度が変わる | ベトナム語・ネパール語などで、答えと止まり方を事前に試す |
| 根拠の無い答えを送る | cited_chunks が空なら送らずに回す |
上の4行が、この構成の失敗のほとんどです。 どれも答えてはいけないことを答える失敗です。回す基準と物件の絞り込みを、生成AIの外側の仕組みでも守ってあるかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 入居者のメッセージ、LINE の利用者ID、入居者の台帳の情報(物件、部屋、契約期間、退去予定日)、物件の文書です。メッセージには他の入居者の名前や、入居者自身の体調・家族の事情が書かれることがあります。
- 生成AIへ渡す入居者の情報を最小にする … 渡すのは物件、部屋、退去予定日だけです。氏名、国籍、在留の資格、連絡先は答えに要りません
- 他の入居者の情報を答えない … 部屋の番号、名前、在室かどうかは、指示で禁じたうえで、物件の文書にも載せません
- 約束をさせない … 修繕の日程、精算の金額、契約の扱いは担当が決めます。AIの返事が約束として残る経路を作りません
- 緊急の連絡は固定の文面で返す … 火事・ガス・水漏れ・けがは、生成AIを通さずに返し、担当に通知します。命に関わる案内の言い回しを揺らしません
- 苦情を判断しない … 入居者どうしのトラブルは、双方の話を聞いて責任者が決めます。片方のメッセージだけで、どちらが悪いかを答えません
- 会話の記録の保存期間を決める … 直近のやり取りは答えるための短い期間だけ持ち、退去した入居者の記録は決めた期間で消します
誤りが起きた場合のリスクは、誤ったルールを伝えることと、人が受けるべき問い合わせに答えてしまうことの2つです。 前者は物件の絞り込みと文書の改定の手順で、後者は回す基準・根拠の確認・緊急の照合で防ぎます。どちらも、生成AIの判断だけに任せない作りで守ります。
10まず何から始めるか
1週目:物件の文書をそろえる
40棟のハウスルールと設備の案内を集め、見出しと改定日をそろえます。 すべてを一度に直す必要はありません。問い合わせの多い10棟から始めます。
2週目:50件で試す
先月の問い合わせから50件を選び、プレイグラウンドで答えさせます。修繕・苦情・お金をすべて回せたかを最優先で見ます。
3週目:回す基準の一覧と緊急の文面を作る
担当がこれまで「これは自分で受ける」と判断してきた問い合わせを集めて一覧にします。 緊急の文面は、言語ごとに人が訳して確かめます。
4週目:LINE から答えの案までをつなぐ
Webhook を受け、台帳を引き、物件で絞って検索し、答えの案を担当の画面に出すところまで作ります。この時点では入居者に直接送らず、担当が確かめて送ります。
2か月目: 担当が直した答えを見て、回す基準と文書を直します。緊急の照合を足します。3か月目以降: 10棟で、答えで済む問い合わせをそのまま返す形に切り替え、1件8分が何分になったかを実測します。夜に届いた質問がその場で答えられ、修繕の依頼が朝いちばんに担当の一覧に並ぶようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Chat Completions API と Responses API で構造化出力が使え、すべてのフィールドを必須にし additionalProperties: false を設定すること。列挙型がサポートされること。文字列の maxLength などが非対応であること。持ち込みデータ(On Your Data)のシナリオでは構造化出力がサポートされないこと | Microsoft Learn: Azure OpenAI で構造化出力を使用する方法 | 2026-10-26 |
既定の安全方針(DefaultV2)が、ヘイトと公平性・性的・暴力・自傷の4つについて、プロンプトと出力の両方で重大度が中以上をブロックすること。入力が止まるとエラー(HTTP 400 の content_filter)、出力が止まると finish_reason が content_filter になること。学習・評価された言語が中国語・英語・フランス語・ドイツ語・イタリア語・日本語・ポルトガル語・スペイン語で、それ以外は精度が変わりうること | Microsoft Learn: Default safety policies in Microsoft Foundry | 2026-10-26 |
ハイブリッド検索が search と vectorQueries を1つの要求に含め、全文検索とベクトル検索を並行して実行し、RRF で結果を統合すること。filter で絞り込めること。埋め込みの空間に多言語の内容が含まれれば、言語の解析器や翻訳なしにベクトルの問い合わせで一致を見つけられること | Microsoft Learn: Hybrid search overview(Azure AI Search) | 2026-10-26 |
応答トークンが1回だけ使え、Webhook を受けてから1分以内に使う必要があり、1分を超えた動作は保証されないこと。ローディングのアニメーションを表示する口(/v2/bot/chat/loading/start)があり、5秒から60秒で指定でき、公式アカウントから新しいメッセージが届くと消えること | LINE Developers: Messaging API リファレンス | 2026-10-26 |
ハウスルールの内容、回す基準、緊急の文面、精算と契約の扱いは、運営会社の責任者と担当が決めてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1856)についてのご相談はこちらから。
