管理物件の修繕・設備交換・入居者対応の記録を部屋ごとに探し、担当の交代や入居者からの連絡のときに経緯を根拠付きで引く
管理物件の部屋ごとに、過去の修繕・設備交換・入居者対応の記録を探せるようにします。担当者の交代時や入居者から連絡が来たときに、「いつ、何が起き、誰が何をして、何が残っているか」を根拠の記録付きで返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/OpenSearch
- 連携・自動化
- Make/n8n/Power Automate
- 対象業界
- その他/不動産/宿泊
- 対象部門
- カスタマーサポート
- 対象業務
- 情報検索/要約
- 主な課題
- 属人化している/引き継ぎができていない/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 入居者やオーナーからの連絡、または引き継ぎで、ある部屋の過去の経緯を知る必要が生じる
- 賃貸管理システムで物件と部屋を開き、対応履歴を新しい順にさかのぼる
- メモに協力業者の名前や「完了」とあれば、保管フォルダを開いて該当しそうな月の完了報告を探す
- 見積やオーナーの承認が絡むものは、前任者のメールを検索する。前任者が退職していれば共有のメールボックスを探す
- 見つかった記録を並べ、同じ出来事の記録か、別の出来事かを読み分ける
- 経緯をメモにまとめ、入居者やオーナーへの説明、または手配の判断に使う
- 自動毎晩、賃貸管理システムの対応履歴、完了報告の本文、共有のメールボックスの修繕関係のメールを取り込み、1件ずつの記録として検索基盤に入れる
- 人担当者が、Teams の検索の窓口に質問を書く(「○○マンション302の給湯器、前回は何をした?」)。場面(電話対応中/引き継ぎ/退去前確認)を選ぶ
- 自動生成AIが、質問から物件の手がかり、部屋、設備、症状、期間、探し方をJSONで取り出す
- 自動ワークフローが物件の手がかりを物件マスタで引き、物件コードを確定する
- 自動検索基盤が、物件と部屋で絞ったうえで、言葉と意味の両方で探し、案件ごとに1件にまとめて返す
- 自動上位の案件について、その案件に付く記録を日付の順にすべて取り出す
- 自動生成AIが、取り出した記録だけを根拠にして、案件ごとの経緯と、残っている事項を書く。文ごとに根拠の記録が付く
- 人担当者が根拠の記録を開いて確かめ、入居者やオーナーへの説明、または手配の判断に使う
各工程の詳しい説明を読む
- 入居者やオーナーからの連絡、または引き継ぎで、ある部屋の過去の経緯を知る必要が生じる
- 賃貸管理システムで物件と部屋を開き、対応履歴を新しい順にさかのぼる
- メモに協力業者の名前や「完了」とあれば、保管フォルダを開いて該当しそうな月の完了報告を探す
- 見積やオーナーの承認が絡むものは、前任者のメールを検索する。前任者が退職していれば共有のメールボックスを探す
- 見つかった記録を並べ、同じ出来事の記録か、別の出来事かを読み分ける
- 経緯をメモにまとめ、入居者やオーナーへの説明、または手配の判断に使う
(a)担当が替わると、経緯を知る人がいなくなる。 対応履歴のメモは「給湯器 業者手配」のように短く、前任者の頭の中にあった「なぜそうしたか」が書かれていません。 前任者が社内にいれば聞けますが、退職していれば記録を読み解くしかありません。
(b)言葉がそろっていないので、探しても見つからない。 同じ出来事が、対応履歴では「お湯が出ない」、完了報告では「給湯器エラー 888」、オーナー宛てのメールでは「ボイラー交換」と書かれています。「給湯器」で検索すると、いちばん大事なメールが出てきません。 型番で探せば完了報告は出ますが、入居者の言葉では出てきません。
(c)「前にも言った」に、その場で答えられない。 入居者からの電話の最中に3か所を探す時間はなく、「確認して折り返します」と答えるしかありません。 同じ不具合の2回目の連絡は、入居者の側ではすでに不満になっています。
(d)同じ部屋番号に、前の入居者の記録が混ざる。 さかのぼると前の入居者の苦情も並び、電話の最中に読み上げてしまう危険があります。
- 【自動】 毎晩、賃貸管理システムの対応履歴、完了報告の本文、共有のメールボックスの修繕関係のメールを取り込み、1件ずつの記録として検索基盤に入れる
- 【人】 担当者が、Teams の検索の窓口に質問を書く(「○○マンション302の給湯器、前回は何をした?」)。場面(電話対応中/引き継ぎ/退去前確認)を選ぶ
- 【自動】 生成AIが、質問から物件の手がかり、部屋、設備、症状、期間、探し方をJSONで取り出す
- 【自動】 ワークフローが物件の手がかりを物件マスタで引き、物件コードを確定する
- 【自動】 検索基盤が、物件と部屋で絞ったうえで、言葉と意味の両方で探し、案件ごとに1件にまとめて返す
- 【自動】 上位の案件について、その案件に付く記録を日付の順にすべて取り出す
- 【自動】 生成AIが、取り出した記録だけを根拠にして、案件ごとの経緯と、残っている事項を書く。文ごとに根拠の記録が付く
- 【人】 担当者が根拠の記録を開いて確かめ、入居者やオーナーへの説明、または手配の判断に使う
2番目で場面を選ばせるのが、この設計の分かれ目です。 電話対応中なら、入居者に付く記録はいまの契約のものだけを返します。引き継ぎなら前の入居者の記録も返しますが、印を付けます。同じ部屋番号でも、返してよい記録の範囲が場面で変わります。
探すのは検索基盤で、生成AIは渡された記録を読んで書くだけです。 「記録が見つからない」も、答えの1つとして返します。
02今回想定するシステム構成
賃貸管理システム(対応履歴)/完了報告の保管フォルダ/共有のメールボックス │【取り込み】毎晩2時 ▼ n8n ── 1件ずつの記録に分け、物件コード・部屋・案件番号・種類・日付を付ける ▼ Amazon OpenSearch Service │ 取り込みパイプライン(text_embedding)で本文の埋め込みを作る │ │【トリガー】担当者が Teams の窓口に質問を書く ▼ n8n ── 場面(電話対応中/引き継ぎ/退去前確認)と質問を受け取る ▼ Claude API(呼び出し1)── 検索の条件をJSONで取り出す(structured outputs) ▼ n8n ── 物件マスタで物件コードを確定、場面から見せてよい範囲を決める ▼ Amazon OpenSearch Service │ ① ハイブリッド検索:物件・部屋・範囲で絞り、案件番号でまとめる(collapse) │ ② 上位の案件の記録を日付の順にすべて取る ▼ Claude API(呼び出し2)── 記録だけを根拠にした経緯と残っている事項(citations) ▼ Teams に返す ──【人】根拠の記録を開いて確かめる
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service | OpenSearch(自社で運用)、Azure AI Search |
| 生成AI | Claude API(検索の条件の取り出しと、根拠付きの経緯) | OpenAI API、Gemini API |
| 埋め込み | 日本語に対応したテキスト埋め込みモデル(OpenSearch に接続) | 同等の多言語埋め込みモデル |
| 連携 | n8n(毎晩の取り込み、物件マスタの照合、見せてよい範囲の決定、Teams との受け渡し) | Make、Power Automate |
| 保管 | 賃貸管理システムと完了報告の保管フォルダ(原本) | 文書管理システム |
賃貸管理システムと保管フォルダは、今のまま使います。 検索基盤に入れるのは記録の写しで、正はあくまで元の記録です。 答えに付く根拠からは、元の対応履歴や完了報告のPDFへリンクします。
Amazon OpenSearch Service は、OpenSearch のクラスターを AWS 上で運用するマネージドサービスで、対応する版は 3.5、3.3、3.1、2.19 などです。案件でまとめる機能を使うため、3.1 以降でドメインを作ります。
OpenSearch を選ぶ理由は、3つの機能が1回の検索でそろうことです。 1つ目はハイブリッド検索で、キーワード検索と意味の検索を組み合わせ、検索パイプラインでスコアを統合します。エラー番号や型番は言葉で、「お湯がぬるい」のような入居者の言い回しは意味で引けます。2つ目は、結果を項目の値でまとめる collapse(3.1 で導入)です。案件番号でまとめれば、1件の水漏れに付く6件の記録が1行になります。 3つ目は、すべての下位の検索にかかる filter です。物件・部屋・見せてよい範囲の条件を1か所に書けば、言葉にも意味にも同じように効きます。
03どうやって実装するのか
処理の起点を決める
トリガーは2つあります。記録を入れる側と、探す側です。
入れる側は、毎晩2時の定時実行です。前日分の対応履歴、完了報告、修繕の分類が付いたメールを取り込みます。当日の出来事は、賃貸管理システムを直接見れば足ります。
探す側は、担当者が Teams の検索の窓口に質問を書いたときです。質問と一緒に、場面を3つから選んでもらいます。
| 場面 | 使うとき | 入居者に付く記録の扱い |
|---|---|---|
| 電話対応中 | 入居者やオーナーからの連絡の最中 | いまの契約の記録だけを返す |
| 引き継ぎ | 受け持ちの棟の把握 | 前の契約の記録も返すが、印を付ける |
| 退去前確認 | 退去の立会いの前 | いまの契約の記録だけを返す |
場面を選ばずに送った質問は、見せる範囲がいちばん狭い電話対応中として扱います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 対応履歴 | 受付日、物件・部屋、分類、担当者、メモ、状態(受付/手配中/完了) | 賃貸管理システム(日次の書き出し) |
| 完了報告 | 協力業者名、作業日、作業内容、交換した設備の型番、写真の有無 | 保管フォルダのPDF(文字の入ったもの) |
| 修繕のメール | オーナーへの見積の説明、承認の返信、協力業者との日程調整 | 共有のメールボックス(修繕の分類が付いたもの) |
| 物件マスタ | 物件コード、正式名、通称、旧名、住所、部屋番号の一覧 | 賃貸管理システム |
| 契約の区切り | 部屋ごとの契約番号と、入居日・退去日 | 賃貸管理システム |
質を決めるのは、いちばん下の契約の区切りです。 これが無いと入居者に付く記録の契約が決まらず、場面による見せ分けが成り立ちません。 物件マスタの通称と旧名も欠かせません。担当者は「駅前のコーポ」のように書くからです。
データの取得方法を決める
取り込みでは、1件の記録を1つの文書として入れ、案件の番号(受付番号)を必ず付けます。 完了報告とメールは次の順で結び付けます。
- 本文に受付番号が書かれていれば、それを使う
- 無ければ、物件・部屋・協力業者名・日付が近い受付を探し、1件に決まれば結び付ける
- 決まらなければ、案件の番号に
U-と記録の番号を入れ、link_statusをunlinkedにする
3番目の記録も捨てません。 1件だけの案件として検索に出ます。
| 項目 | 型 | 用途 |
|---|---|---|
event_id / case_id | keyword | 記録の番号と案件の番号。case_id は collapse でまとめる項目 |
property_id / unit_no | keyword | 物件と部屋。共用部は COMMON |
scope / tenancy_id | keyword | unit(部屋に付く)/ common(共用部)/ tenancy(入居者に付く)と、その契約番号 |
event_type / event_date | keyword / date | 受付・手配・見積・承認・完了・入居者連絡と、その日付 |
equipment / model_no | keyword | 設備の種類と型番 |
body_text / body_embedding | text / ベクトル | 本文と、その埋め込み |
source_url | keyword | 元の記録へのリンク |
case_id を keyword にするのは必須です。 collapse でまとめる項目は、keyword か数値の型でなければなりません。 埋め込みは、取り込みパイプラインの text_embedding プロセッサが field_map で指定した body_text から作ります。
探す側は、2回の問い合わせに分けます。 1回目のハイブリッド検索で案件を上位5件まで取り、2回目で、その5件に付く記録を event_date の古い順にすべて取ります。
AIへ渡す前に整形する
取り込み側
- メールの引用と署名を落とす … そのままだと同じ文が何件もの記録に現れます
- 完了報告のPDFから文字を取り出す … 文字の無いスキャンは、本文を空にして
source_urlだけを入れます - 部屋番号の表記をそろえる … 「302号室」「3-02」を
302に。改装で変わった番号は対応表で寄せます tenancy_idを決める … 記録の日付を入居日・退去日と比べます- 個人の連絡先を落とす … 経緯を探すのに連絡先は要りません
探す側
- 物件の手がかりを物件マスタで引く … 正式名・通称・旧名で照合します。複数に当たったら候補を返して選んでもらいます
- 場面から見せてよい範囲を組む … 次の条件を
filterに入れます
| 場面 | filter の中身 |
|---|---|
| 電話対応中 | 物件コードが一致し、scope が unit か common、または scope が tenancy で tenancy_id がいまの契約 |
| 引き継ぎ | 物件コードが一致するもの(tenancy はすべて含むが、後段で印を付ける) |
| 退去前確認 | 電話対応中と同じ |
範囲の条件は、生成AIに組ませません。 いまの契約は賃貸管理システムから n8n が引いて組みます。
AIに処理させる
生成AIは2回呼び、それぞれに1つの仕事をさせます。
| 呼び出し | させること |
|---|---|
| 1:条件の取り出し | 物件の手がかり、部屋(共用部は COMMON)、設備、症状、期間、探し方(relevance 関係の深い順/ timeline 新しい順/ open_cases 終わっていない案件)。書かれていなければ null |
| 2:経緯の整理 | 案件ごとの経緯を日付の順に。残っている事項、同じ症状のくり返し、記録どうしの食い違い、見つからなかったこと |
| させないこと | 理由 |
|---|---|
| 記録にない経緯の補完 | 「おそらく交換した」と書くと、担当者はそれを事実として伝える |
| 費用の負担者の判断 | 契約とオーナーとの取り決めで決まる。人が判断する |
| 入居者の過失の判断 | 入居者との関係に直接ひびく |
| 保証期間の計算 | 設置日と保証の条件が記録にそろっていないことが多い |
| 前の契約の記録の要約を電話対応中に出すこと | 範囲の条件で渡さないが、指示でも禁じる |
いちばん起きやすい失敗は、表の1行目です。 完了報告が無い案件を渡すと「その後、交換されました」と書きたがります。記録が無いことは、残っている事項として書かせます。
指示内容を固定する
呼び出し1(structured outputs で受け取る)
あなたは賃貸管理会社の社内検索の窓口です。
担当者の質問から、検索の条件を取り出してください。検索そのものはしません。
【取り出す項目】
- property_hint : 物件を指す言葉(正式名・通称・旧名・住所の一部)。書かれた言葉のまま
- unit_no : 部屋番号。「号室」は付けない。共用部の話なら COMMON
- equipment : 設備の種類。書かれていなければ null
- symptom : 症状や出来事を表す言葉。書かれた言い回しを残す
- date_from / date_to : 期間。「去年の冬」のような表現は、今日の日付 {today} から範囲にする
- mode : relevance / timeline / open_cases のどれか
【厳守事項】
- 書かれていない項目は null にしてください。推測で埋めないでください。
- 物件名を正式名に直さないでください。照合は別の仕組みが行います。
- 部屋番号を補わないでください。「3階の角部屋」は unit_no を null にします。
- 「前回」「この前」は mode を timeline にしてください。
- 「まだ終わっていない」「進行中」は mode を open_cases にしてください。
【質問】{question}
呼び出し2(citations を有効にした文書で渡す)
あなたは賃貸管理会社の物件担当者の補助です。
渡された記録だけを根拠にして、この部屋(または共用部)の経緯をまとめてください。
【書くこと】
1. 案件ごとに、受付から現在までの経緯を日付の順に書く
2. 各案件で残っている事項(完了報告が無い、完了後に再連絡がある、
見積の承認が無い)を書く
3. 別の案件で同じ設備・同じ症状が出ていれば、くり返しとして書く
4. 記録どうしで食い違いがあれば、両方をそのまま書く
5. 質問に対して記録が見つからない部分は「記録なし」と書く
【厳守事項】
- 渡された記録に書かれていないことを書かないでください。
記録が無い出来事を「おそらく」「と思われる」で補わないでください。
- 完了報告が無い案件を、完了したものとして書かないでください。
- 費用を誰が負担するか、入居者の過失かどうかを書かないでください。
- 保証の期間や残りを計算しないでください。
- 記録の title に「前の契約」とあるものは、経緯の事実だけを書き、
入居者の発言や苦情の内容を引用しないでください。
【場面】{scene}
【質問】{question}
【記録】(案件ごとに document ブロックで渡す)
「完了報告が無い案件を完了と書かない」を別に書くのは、「推測しない」だけでは手配の記録の「交換予定」を「交換した」と読むからです。
呼び出しを2回に分けるのは、仕様の制約でもあります。 文書に citations を有効にしたうえで output_config.format を付けると、400のエラーが返ります。
出力形式を固定する
呼び出し1は、structured outputs で次のJSONを受け取ります。 スキーマは output_config.format に json_schema として渡します。
{
"property_hint": "駅前のコーポ",
"unit_no": "302",
"equipment": "給湯器",
"symptom": "お湯がぬるい",
"date_from": null,
"date_to": null,
"mode": "timeline"
}
呼び出し2は、記録を1件ずつ plain text の文書として渡します。 citations は要求の中の全文書で有効にするか、全文書で無効にするかのどちらかです。title に event_id と日付を、context に case_id と scope を入れます。title と context はモデルに渡るが、引用の対象になりません。 回答は文と引用(cited_text)の組で返り、n8n が次の形に組み直します。
{
"scene": "phone",
"property_id": "P-0148",
"unit_no": "302",
"cases": [
{
"case_id": "R-2025-03112",
"summary": [
{ "text": "2025年12月、入居者から湯温が上がらないとの連絡があり、協力業者が点検した。",
"evidence": [ { "event_id": "E-88121", "cited_text": "" } ] }
],
"open_items": [ "完了報告の記録なし" ],
"has_prior_tenancy": false
}
],
"repeat_pattern": "",
"not_found": [ "給湯器の設置日" ]
}
JSONに組み直す理由は3つです。 evidence を文ごとに持てるので、担当者は気になる文の根拠だけを開けます。open_items と not_found を独立した欄にできるので、「記録が無い」が経緯の文に埋もれません。has_prior_tenancy で、前の契約の記録を含む案件に色を付けられます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 賃貸管理システム | 日次の書き出しと、物件マスタ・契約の参照 | 対応履歴を取り込み、物件コードといまの契約を引く |
| 保管フォルダ/共有のメールボックス | n8n のファイル・メール取得 | 前日分の完了報告と修繕のメールを取り込む |
| Amazon OpenSearch Service | REST の問い合わせ | 取り込み(_bulk)、ハイブリッド検索、案件の記録の取得 |
| Claude API | API呼び出し | 条件の取り出し(structured outputs)と、経緯(citations) |
| Teams | n8n からの投稿 | 質問の受け付けと、経緯の表示 |
ハイブリッド検索の要求は次の形です。
{
"size": 5,
"query": {
"hybrid": {
"queries": [
{ "multi_match": { "query": "給湯器 お湯がぬるい", "fields": ["body_text", "model_no"] } },
{ "neural": { "body_embedding": { "query_text": "お湯がぬるい", "model_id": "<埋め込みモデルのID>", "k": 50 } } }
],
"filter": { "bool": { "filter": [
{ "term": { "property_id": "P-0148" } },
{ "terms": { "unit_no": ["302", "COMMON"] } }
] } }
}
},
"collapse": { "field": "case_id" }
}
filter は1つの問い合わせの形で書く決まりなので、 場面の条件(scope と tenancy_id)も同じ bool に足します。下位の検索は最大5つまでです。
timeline のときは sort に event_date の新しい順を指定します。 並べ替えを指定すると文書のスコアは null になるため、「前回は何をしたか」に限って使います。collapse と併用した集計は、まとめる前の結果に対して動きます。 案件の数は2回目の問い合わせで数えます。
賃貸管理システムには書き込みません。 対応履歴の追記は、これまでどおり担当者が行います。
人が確認する
経緯は、担当者が根拠を開いてから使います。 入居者やオーナーへ直接送る経路は作りません。
open_itemsとnot_foundを先に読む … 「完了報告の記録なし」は、作業が終わっていないのか、報告が取り込まれていないのかを見分けます- 説明に使う文の根拠を開く …
evidenceのリンクから元の記録を開きます - 前の契約の印を確かめる …
has_prior_tenancyの案件は、入居者の発言を外部へ伝えません - 違っていたら印を付ける … 根拠の誤りや結び付けの誤りを、窓口のボタンで返します
1番目を先にするのは、「記録が無い」が最も誤解されやすいからです。 「何もしていない」と伝えたら、実は協力業者が作業を終えていた、ということが起きます。電話対応中は、その場で伝えるのを日付と作業の有無までにし、詳しい内容は折り返す運用にします。
例外に対処する
| 起きること | 対応 |
|---|---|
| 物件が特定できない | 物件マスタで複数に当たったら候補を返して選ばせる。0件なら「物件名を確認してください」と返す |
| 部屋番号が書かれていない | 物件全体で探し、部屋ごとの件数を返す。経緯は書かない |
| 改装で部屋番号が変わっている | 旧番号の対応表で新番号に寄せて探す。答えに旧番号の記録であることを書く |
| 検索で案件が1件も出ない | 「記録なし」と返す。生成AIを呼ばない |
| 完了報告の本文が空 | 文字の無いスキャンのPDF。source_url だけを示し、開いて読むよう促す |
| 案件に結び付かない記録が上位に出る | unlinked の印を付けて別の枠に出す |
| 記録どうしが食い違う | 両方を並べて出す。どちらが正しいかは判定しない |
| 埋め込みモデルが応答しない | 言葉の検索だけで探し、そのことを答えに書く |
| 取り込みが夜間に失敗した | 翌晩に回す。答えに最終取り込み日時を出す |
4行目で生成AIを呼ばないのは、呼ぶと一般的な不具合の説明を書き始めるからです。 0件の答えはワークフローの側で決めます。
記録を残す
- 質問の文と場面、担当者、日時
- 呼び出し1が返した条件のJSONと、物件マスタで確定した物件コード
- OpenSearch に送った問い合わせの全文(
filterの中身を含む) - 返った案件の番号と、2回目で取り出した記録の番号の一覧
- 呼び出し2の回答と引用(文ごとの
event_idとcited_text) - 担当者が付けた印(根拠が関係なかった、結び付けが違っていた)
- 記録が見つからなかった質問の一覧
3つ目で filter の中身を残すのは、見せてよい範囲を後から確かめるためです。 前の入居者の記録が出たという申し出があったとき、原因が範囲の組み方か取り込みの誤りかを切り分けられます。 最後の一覧は、記録する習慣が無い出来事を見つける材料になります。
04実装レベルの3段階
最小構成では棟をまたげません。確かめるための段階です。 半自動化で探す時間は縮みますが、同じ水漏れの6件の記録を担当者が並べ直す作業が残ります。 本格構成で読み分けも自動になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の段階で1か月運用すると、案件に結び付かない記録の数と、見つからなかった質問の傾向が先に分かります。取り込みの規則を直してから経緯を書かせるほうが、誤った経緯が出にくくなります。
05工数削減シミュレーション
導入後 600件 × 4分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 管理戸数が数千戸あり、修繕の受付・手配・完了報告と入居者からの連絡の記録が、賃貸管理システムの対応履歴、協力業者から届く完了報告のPDF、担当者のメールに分かれて残っている賃貸管理会社。担当者の異動や退職のたびに物件の経緯が分からなくなり、入居者から「前にも言った」と連絡が来てから過去の記録を探している場合。社宅の管理会社や、客室の設備の記録を持つ宿泊施設にも当てはまります。
- 管理戸数が数百戸までで、担当者が物件の経緯をほぼ覚えている場合。対応履歴を記録する習慣がなく、検索しても探すものが残っていない場合。過去の記録の大半が紙の台帳だけにある場合。なお、修繕費を誰が負担するか、入居者の過失かどうかといった判断は、この構成では代替できません。
07最小構成で試す方法
- 受け持ちの多い棟を1つ選び、過去3年分の対応履歴を賃貸管理システムから書き出す
- その棟について、この1か月に実際に探した質問を20件、担当者から集める(うち数件は、答えが見つからなかったものを入れる)
- 対応履歴の書き出しを、手元の Claude の画面にファイルとして渡す
- 「この記録だけを根拠に、次の質問に答えてください。記録が無い部分は『記録なし』と書いてください。推測で補わないでください」と指示し、20件を1件ずつ聞く
- 答えを、担当者が当時たどり着いた経緯と突き合わせる
20件のうち、見つからなかった質問に何と答えるかを最優先で見ます。 「記録なし」と答えれば構成は有効です。それらしい経緯を書いたなら、指示の書き方を直します。
| 出てきた内容 | 判断 |
|---|---|
| 当時の経緯と同じ案件にたどり着いた | 検索基盤と取り込みの設計に進む |
| 同じ出来事の記録を別の案件として並べた | 案件の番号でまとめる必要がある。 本格構成の collapse が効く |
| 対応履歴だけでは経緯がつながらない | 完了報告とメールの取り込みが先。 AIの問題ではない |
3行目が出ることは珍しくありません。 そのときは、同じ棟の完了報告を文字にして足し、答えがどこまで変わるかを見てください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 同じ水漏れが何件も並ぶ | 案件の番号で collapse する。番号の項目は keyword 型にする |
| 入居者の言葉で型番の記録が出ない | 言葉と意味のハイブリッド検索にする。型番は言葉の側で拾う |
| 電話対応中に前の入居者の記録が出る | 見せてよい範囲を filter に入れ、場面の既定を最も狭いものにする |
| 範囲の条件を生成AIに組ませてしまう | いまの契約は賃貸管理システムから引き、n8n が組む |
| 完了報告が無いのに「完了」と書く | 予定と実施を分ける禁止を指示に書き、open_items を独立させる |
| 0件のときに一般論を書く | 0件ならワークフローが「記録なし」と返し、生成AIを呼ばない |
| メールの引用で同じ文が何件も当たる | 取り込みで引用と署名を落とす |
| 集計で案件の数が合わない | collapse の前の結果で集計される。件数は2回目の問い合わせで数える |
| 呼び出しを1回にまとめて400が返る | citations と structured outputs は同じ要求で使えない。2回に分ける |
上の3行が、この構成の失敗のほとんどです。 1行目と2行目は使われなくなる失敗、3行目は入居者との信頼を失う失敗です。どちらも検索基盤の設定で決まるので、生成AIを足す前に片付けます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 物件と部屋の設備の記録、協力業者とのやり取り、オーナーとの見積の説明と承認、そして入居者からの連絡の内容です。入居者の連絡には、騒音や近隣とのトラブル、家賃の相談のように、本人が他人に知られたくない内容が含まれます。
- 入居者に付く記録を、契約の区切りで分ける … 見せ分けを検索基盤の
filterに置き、生成AIの指示だけに頼らないでください - 連絡先を取り込まない … 取り込みの段階で落とします
- 答えを入居者やオーナーへ自動で送らない … 送る文は担当者が書きます
- 費用負担や過失の判断をさせない … 契約とオーナーとの取り決めに基づいて人が判断します
- 協力業者やオーナーに検索の窓口を開かない … 使うのは社内の担当者だけにします
- 退去後の記録をいつまで検索に残すかを決める … 部屋に付く設備の記録は長く必要ですが、入居者に付く記録は、退去後にどこまで持つかを自社の規程で決め、期限の来た記録は索引から消します
誤りが起きた場合のリスクは、経緯を誤って伝えることと、見せてはいけない記録を見せることの2つです。 前者は根拠を開いて確かめる運用で防ぎ、後者は検索の条件で防ぎます。後者は担当者の注意では防げないので、設計で守ります。
10まず何から始めるか
1週目:探した記録を集める
受け持ちの多い棟を1つ選び、この1か月に担当者が過去の記録を探した場面を20件集めます。何を探し、どこで見つかり、見つからなかったかを書いてもらいます。 見つからなかった場面が、この構成の目標です。
2週目:20件で試す
その棟の対応履歴を書き出し、手元の Claude の画面で20件を聞きます。見つからなかった質問に「記録なし」と答えるかを最優先で見ます。
3週目:場面と見せてよい範囲を決める
電話対応中、引き継ぎ、退去前確認の3つの場面で、入居者に付く記録をどこまで見せるかを、管理部の責任者と決めます。 あわせて、退去後の記録をいつまで検索に残すかを決めます。
4週目:対応履歴を検索基盤に入れる
OpenSearch のドメインを 3.1 以降で作り、全物件の対応履歴を取り込みます。この時点では完了報告とメールは入れず、物件・部屋で絞ったハイブリッド検索だけを試します。
2か月目: 完了報告とメールの取り込みと、案件への結び付けを足し、collapse でまとめます。結び付かない記録の数を毎週数えます。3か月目以降: 生成AIによる根拠付きの経緯と、場面による見せ分けを足し、1件12分が何分になったかを実測します。見つからなかった質問の一覧を見て、記録の付け方を直し始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Amazon OpenSearch Service が OpenSearch のクラスターを AWS 上で作り、運用し、拡張するマネージドサービスであること。対応する OpenSearch の版が 3.5、3.3、3.1、2.19 などであり、3.1 以降は標準サポートの終了が発表されていないこと。インスタンスの時間とストレージの量で課金されること。索引・文書・項目の単位のセキュリティを備えること | Amazon OpenSearch Service Developer Guide: What is Amazon OpenSearch Service? | 2026-09-30 |
ハイブリッドクエリが複数のクエリのスコアを検索パイプラインで1つに統合し、クエリの句が最大5つであること。filter がすべての下位のクエリにかかり、単一のクエリの形で書くこと。from が0より大きいときは pagination_depth が必要なこと | OpenSearch Documentation: Hybrid query | 2026-09-30 |
ハイブリッド検索がキーワード検索と意味の検索を組み合わせ、検索時に動く検索パイプラインでスコアを統合すること。正規化プロセッサ(スコアに基づく)とスコアランカープロセッサ(順位に基づく RRF)があること。取り込みパイプラインの text_embedding プロセッサが field_map で指定した項目から埋め込みを作ること | OpenSearch Documentation: Hybrid search | 2026-09-30 |
| collapse が 3.1 で導入され、項目の値ごとに最もスコアの高い文書を返すこと。まとめる項目が keyword か数値の型であること。並べ替え・explain・ページ送りと併用できること。集計はまとめる前の結果に対して動くこと | OpenSearch Documentation: Collapsing hybrid query results | 2026-09-30 |
ハイブリッドクエリの並べ替えが 2.16 で導入され、並べ替えを指定すると文書のスコアが null になり、_score で並べた場合だけスコアが残ること | OpenSearch Documentation: Using sorting with a hybrid query | 2026-09-30 |
citations を文書ごとに citations.enabled=true で有効にし、要求の中の全文書で有効か全文書で無効かのどちらかであること。title と context がモデルに渡るが引用の対象にならないこと。cited_text が出力トークンに数えられないこと。RAG の断片を plain text の文書として渡せること。citations と structured outputs を同じ要求で使うと400のエラーになること | Anthropic Docs: Citations | 2026-09-30 |
structured outputs が output_config.format に json_schema の形でスキーマを指定して使い、スキーマに合う応答を返すこと | Anthropic Docs: Structured outputs | 2026-09-30 |
修繕費の負担や入居者の過失についての判断は、契約とオーナーとの取り決めに基づいて、担当者と責任者が行ってください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0400)についてのご相談はこちらから。
