市役所の相談窓口で、新しい相談に似た過去の相談・苦情の対応記録を探し、対応の経緯と関係課を初動の判断に使えるように引く
窓口の職員が新しい相談の要点を入れると、個人情報を伏せた過去の対応記録から似た相談を探し、どの課がどう対応したかを記録番号付きで返します。取り次ぎ先を決めるまでの調べものが短くなります。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 自治体
- 対象部門
- 総務
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 判断に時間がかかる/引き継ぎができていない/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 職員が電話や窓口で相談を聞き、要点をメモする
- 相談記録の仕組みで、分類と思いつく言葉を変えながら過去の相談を探す
- 出てきた記録を1件ずつ開き、どの課に回り、どう終わったかを読む
- 見つからない、または自信がないときは、経験の長い職員や関係しそうな課に電話で聞く
- 取り次ぎ先を決め、相談者に伝えて、記録を残す
- 自動相談記録の仕組みで相談が終結すると、要旨・経過・関係課・終結の区分を取り出す。氏名・住所・連絡先の項目は取り出さない
- 自動要旨と経過の文に、個人を特定する言葉が残っていないかを確かめる
- 自動Claude が、経過の文から取り次ぎの順番、受け持った課、対象外として戻した課、根拠にした制度を項目として取り出す
- 人相談を終結させた職員が、取り出された経緯を確かめて確定する
- 自動確定した記録を検索基盤に登録する
- 人職員が相談の要点を、名前や住所を入れずに検索画面に入れる
- 自動入力の中に個人を特定する言葉が残っていれば、伏せたうえで先に進む
- 自動言い換えの辞書を使った言葉の検索で、似た過去の相談を集め、上位10件にする
- 自動Claude が10件について、取り次ぎの経緯と受け持った課、終結の区分を記録番号付きでまとめる
- 人職員が結果を読み、必要なら元の記録を開き、取り次ぎ先と相談者への伝え方を自分で決める
各工程の詳しい説明を読む
- 職員が電話や窓口で相談を聞き、要点をメモする
- 相談記録の仕組みで、分類と思いつく言葉を変えながら過去の相談を探す
- 出てきた記録を1件ずつ開き、どの課に回り、どう終わったかを読む
- 見つからない、または自信がないときは、経験の長い職員や関係しそうな課に電話で聞く
- 取り次ぎ先を決め、相談者に伝えて、記録を残す
(a)言葉の違いで探せない。 市民の言い方と記録の書き方が違い、「ごみ屋敷」で探しても「不良な生活環境」の記録は出てきません。 「騒音」と「音がうるさい」、「空き家」と「空家等」も同じです。
(b)たらい回しの経緯が残らない。 記録の最後には対応した課が書かれていますが、途中で「うちの担当ではない」と戻された課は経過の文の中にしかありません。同じ回り方を、次の職員がまた繰り返します。
(c)異動で経験が途切れる。 3〜4年ごとの人事異動で、どの相談がどの課の受け持ちになったかを覚えている職員がいなくなります。 新しく来た職員は、関係しそうな課に順に電話をかけることになります。
(d)相談者を待たせる。 電話の相談では、調べている間、相談者を待たせるか、折り返しにするしかありません。折り返しになった相談は、その日のうちに戻れないことがあります。
取り込み(相談が終結するたび)
- 【自動】 相談記録の仕組みで相談が終結すると、要旨・経過・関係課・終結の区分を取り出す。氏名・住所・連絡先の項目は取り出さない
- 【自動】 要旨と経過の文に、個人を特定する言葉が残っていないかを確かめる
- 【自動】 Claude が、経過の文から取り次ぎの順番、受け持った課、対象外として戻した課、根拠にした制度を項目として取り出す
- 【人】 相談を終結させた職員が、取り出された経緯を確かめて確定する
- 【自動】 確定した記録を検索基盤に登録する
検索(相談を受けるたび)
- 【人】 職員が相談の要点を、名前や住所を入れずに検索画面に入れる
- 【自動】 入力の中に個人を特定する言葉が残っていれば、伏せたうえで先に進む
- 【自動】 言い換えの辞書を使った言葉の検索で、似た過去の相談を集め、上位10件にする
- 【自動】 Claude が10件について、取り次ぎの経緯と受け持った課、終結の区分を記録番号付きでまとめる
- 【人】 職員が結果を読み、必要なら元の記録を開き、取り次ぎ先と相談者への伝え方を自分で決める
10番目が、この設計の分かれ目です。 過去の相談がある課で受け持たれたことは、今回もその課の担当であることを意味しません。 事務分掌が変わっていることも、相談の細部が違うこともあります。取り次ぎ先は職員が決め、迷うときは受け持ちそうな課に確かめます。
2番目と7番目で、取り込みと検索の両方で伏せるのも、意図してのことです。 記録の側は伏せる運用でも、文の中に名前や番地が書かれてしまった記録は必ずあります。 検索の入力も、急いでいる職員が名前を書いてしまうことがあります。
02今回想定するシステム構成
【取り込み】相談記録の仕組み(終結) ▼【トリガー】終結の登録 AWS Lambda ── 要旨・経過・関係課・終結の区分を取り出す(氏名・住所の項目は除く) ▼ Amazon Bedrock Guardrails ── 文の中に残った名前・電話番号・住所を伏せる ▼ Claude(Amazon Bedrock)── 取り次ぎの経緯(受け持った課・戻した課・根拠の制度)を項目に ▼【人】終結させた職員が確定 Amazon OpenSearch Service(相談の索引。Sudachi+言い換えの辞書) 【検索】窓口の職員の検索画面(相談の要点) ▼ Amazon Bedrock Guardrails ── 入力に残った個人の情報を伏せる ▼ Amazon OpenSearch Service ── 言い換えの辞書を使った言葉の検索 ▼ Claude(Amazon Bedrock)── 検索結果のブロックで渡し、経緯を引用付きでまとめる ▼ 職員が確認・判断 → 取り次ぎと相談記録へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(Sudachi、言い換えの辞書、細かなアクセス制御) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude(Amazon Bedrock。経緯の取り出しと検索結果のまとめ) | Gemini API、OpenAI API |
| 連携 | AWS Lambda(取り込み、伏せる処理の呼び出し、検索) | AWS Step Functions |
| 伏せる処理 | Amazon Bedrock Guardrails(機微な情報のフィルター) | 自前の正規表現の処理 |
| 保管 | Amazon S3(記録の写しと辞書のファイル) | ― |
| 相談記録 | 既存の相談記録の仕組み | ― |
日本語の解析は、Sudachi のプラグインで行います。 Amazon OpenSearch Service の対応プラグインの一覧では、Sudachi Analysis が日本語向けに推奨されるものとして載っており、OpenSearch 1.3以降で使える任意のプラグインです。kuromoji と ICU は全ドメインに入っています。任意のプラグインはドメインに関連付けて使い、関連付けと解除にはブルー/グリーンのデプロイが伴います。
言い換えの辞書は、カスタムパッケージとして取り込みます。 ドキュメントでは、ストップワードや同義語の辞書ファイルを Amazon S3 に置き、パッケージとして取り込んでドメインに関連付けると、synonyms_path に analyzers/<パッケージID> を指定して使えるとされています。辞書は1ファイルのものだけに対応しています。
同義語のフィルターは synonym_graph にします。 複数の語からなる同義語を扱えるもので、「不良な生活環境」と「ごみ屋敷」のように語の数が違う言い換えに向いています。expand を既定の true にすると、双方向の言い換えになります。
この構成では、最初は文の埋め込みを使いません。 相談の要旨は短く、市民の言葉と行政の言葉の違いは、辞書で埋めたほうが説明がつきます。 なぜその記録が出てきたかを、どの言い換えで当たったかで示せるからです。言葉の検索で拾えない相談が多いと分かった段階で、埋め込みとハイブリッド検索を足します。
03どうやって実装するのか
処理の起点を決める
取り込みと検索で、起点が2つあります。
取り込みは、相談記録の仕組みで相談が終結したことを起点にします。 対応中の相談を取り込まないのは、途中の見立てや、まだ決まっていない受け持ちを検索結果に出さないためです。 終結を通知できない仕組みなら、毎晩、終結日で絞った一覧を取りに行きます。
過去の約6万件は、別に一括で取り込みます。 このときは終結させた職員の確認が取れないので、経緯に「未確認」の印を付けます。過去の記録ほど、事務分掌が今と違うことが多いので、受付日も検索結果に必ず出します。
検索は、職員が検索画面で「探す」を押したときに動きます。 電話を受けながら使うので、入力から結果が出るまでを短くすることを優先します。 Claude のまとめは、検索の一覧を先に表示したあとで追って表示します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 相談の記録 | 受付番号、受付日、受付の経路、分類、相談の要旨、対応の経過、関係課、終結の区分 | 相談記録の仕組み |
| 経緯の項目 | 取り込み時に作る。取り次ぎの順番、受け持った課、対象外として戻した課とその理由、根拠にした制度 | 検索基盤 |
| 事務分掌の一覧 | 課の名前、所掌する事務、課の名前の変更の履歴 | 総務課が持つ一覧 |
| 言い換えの辞書 | 市民の言い方と行政の言い方の組 | 市民相談課が作る辞書ファイル |
| 新しい相談(検索時) | 相談の要点、分類、受付の経路 | 検索画面 |
質を決めるのは、言い換えの辞書と事務分掌の一覧です。 辞書が無ければ、言葉の違いで記録を取りこぼします。事務分掌の一覧に課の名前の変更の履歴が無ければ、過去の記録の「生活環境課」が今のどの課なのかが分かりません。 組織の改編のあった年をまたいで探すには、この履歴が要ります。
氏名・住所・連絡先の項目は、最初から取り込みの対象にしません。 同じ人からの繰り返しの相談かどうかは、相談記録の仕組みの側で、権限のある職員が確かめます。 検索基盤には、個人を結びつける項目を持たせません。
データの取得方法を決める
相談の記録は、相談記録の仕組みから文字で取り出します。添付のファイルや写真は取り込みません。 要旨と経過の文、関係課、終結の区分だけを対象にします。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 相談の要旨 | 相談記録 | 言葉の検索の主な対象 |
| 対応の経過 | 相談記録 | 経緯の項目の取り出しと、引用の本文 |
| 関係課と終結の区分 | 相談記録 | 絞り込みと、一覧での表示 |
| 課の名前の変更の履歴 | 事務分掌の一覧 | 過去の課の名前を今の課の名前に読み替えて表示 |
検索は、要旨の項目を重く、経過の項目を軽くして探します。 要旨は相談の中身、経過は役所の中の動きで、経過の言葉で当たった記録は、中身が違うことが多いためです。分類が入力されていれば、filter ではなく加点に使います。分類は職員によって付け方が違うので、絞り込みにすると取りこぼします。
AIへ渡す前に整形する
- 個人を特定する言葉の除去(取り込み時) … 要旨と経過の文を Amazon Bedrock Guardrails の機微な情報のフィルターに通し、名前(
NAME)、電話番号(PHONE)、住所(ADDRESS)、メールアドレス(EMAIL)を、{NAME}のような種類の記号に置き換えます - 市の独自の番号の除去 … 宛名番号や受付番号の形の文字列は、正規表現のフィルターで伏せます。正規表現は先読み・後読みに対応していないので、単純な形で書きます
- 伏せた結果の確認 … 伏せた件数が多い記録は、取り込みを止めて一覧に載せます。伏せる運用が守られていない課を見つける材料にもなります
- 課の名前の読み替え … 事務分掌の一覧の履歴から、当時の課の名前に今の課の名前を併記します
- 辞書の反映 … 言い換えの辞書は検索時の解析器だけに使い、
updateableを true にします。索引を作り直さずに辞書を差し替えられるようにするためです - 長い経過の分割 … 経過の文が長い記録は、取り次ぎごとの段落に分け、段落の番号を付けます
1番目は、伏せる運用の代わりではありません。 ドキュメントでは、このフィルターは文脈に依存する確率的な機械学習の仕組みとされており、日本語の名前や住所をどこまで見つけられるかは、公式には書かれていません。 第8章の試しで、伏せた結果を人が見て確かめます。漏れがあれば、正規表現と記録の書き方の両方で補います。
5番目を軽く見ないでください。 ドキュメントでは、updateable は検索時の解析器にだけ使え、索引時の解析器に辞書を使うと、更新のたびに索引を閉じて開き直すか、作り直す必要があるとされています。言い換えは毎月足していくものなので、最初から検索時の解析器に置きます。
言い換えの辞書は、1行に同じことを指す言い方を並べる形で作ります。
ごみ屋敷, 不良な生活環境, 物があふれた住宅
空き家, 空家等, 管理されていない家
音がうるさい, 騒音, 生活音
木がはみ出している, 越境した枝, 樹木の越境
道路の穴, 舗装の損傷, 道路の陥没
索引時の解析器は Sudachi だけ、検索時の解析器は Sudachi に synonym_graph を足したものにします。 索引の側に言い換えを入れないので、辞書を足しても登録済みの6万件を作り直す必要がありません。1行に並べる言い方は、市民相談課が「この言い方で来た相談は、この書き方で記録した」と確かめたものだけにします。 意味の広い言葉(「困っている」「迷惑」など)は入れません。入れると、関係の無い記録が大量に当たります。
AIに処理させる
AIの仕事は2か所です。取り込み時の経緯の取り出しと、検索結果のまとめです。
| 場面 | させること |
|---|---|
| 取り込み | 経過の文から、取り次ぎの順番、受け持った課、対象外として戻した課とその理由、根拠にした制度の名前を取り出す |
| 検索 | 上位10件について、相談の要旨、取り次ぎの経緯、受け持った課、終結の区分を記録番号付きでまとめる |
| 検索 | 受け持った課が記録によって違うときは、記録に書かれた違いを並べる |
| させないこと | 理由 |
|---|---|
| 今回の相談の取り次ぎ先の決定 | 決めるのは職員。事務分掌が変わっていることがある |
| 相談者への回答の作成 | 回答の中身は受け持つ課が決める。窓口で言い切ると約束になる |
| 記録に書かれていない対応の推測 | 推測された対応が「前例」として広まる |
| 伏せた記号から元の人を推し量ること | 個人を結びつけない設計が崩れる |
| 相談者の評価 | 「繰り返し苦情を言う人」のような書き方をしない |
1行目がいちばん外せない線です。 10件のうち8件が同じ課で受け持たれていると、AIは「本件は〇〇課の担当です」と書きたくなります。この一文を相談者にそのまま伝えると、受け持ちの決まっていない課に相談者を案内することになります。
5行目も必ず指示に入れます。 経過の文には、職員が相談の様子を書いた言葉が残っています。それをまとめの文で要約すると、相談者についての評価のように読める文ができます。
指示内容を固定する
取り込み時(経緯の取り出し):
あなたは市役所の市民相談課で、終結した相談の記録を整理する担当です。
対応の経過の文だけを根拠にしてください。推測で埋めないでください。
【やること】
次の項目を取り出してください。
- 取り次ぎの順番:課の名前を、経過に書かれた順に並べる
- 受け持った課:最後に対応した課
- 対象外として戻した課と、その理由(経過に書かれた文をそのまま写す)
- 根拠にした制度や条例の名前(経過に書かれたものだけ)
- 終結の区分:resolved / referred_outside / explained_only / withdrawn / unresolved
【厳守事項】
- 経過に書かれていない課や対応を足さないでください。
- 戻した理由が書かれていなければ「記載なし」としてください。
- 制度の名前が書かれていなければ null にしてください。補わないでください。
- {NAME} {ADDRESS} {PHONE} などの記号を、元の情報に戻そうとしないでください。
- 相談者の人柄や態度についての記述は、項目に含めないでください。
検索時(結果のまとめ):
あなたは相談窓口の職員の調べものを助ける担当です。
渡された検索結果だけを根拠に、過去の相談の扱いを並べてください。
【新しい相談の要点】{request}
【過去の相談(上位10件)】検索結果として渡します
【書くこと】
1. 各記録の相談の要旨、取り次ぎの経緯、受け持った課、終結の区分
2. 対象外として戻した課があれば、その理由(記録の記載どおり)
3. 受け持った課が記録によって違うときは、記録に書かれた違い
【厳守事項】
- 今回の相談をどの課が受け持つかを書かないでください。
- 相談者への回答を書かないでください。
- 件数の多い課を、担当の課として書かないでください。
- 相談者の人柄や態度に触れないでください。
- 受付日の古い記録には、受付日を必ず添えてください。
検索結果は、Claude の検索結果ブロックで渡します。 1件の記録を1つの search_result にし、source に受付番号と受付日、title に分類と受け持った課、content に要旨と取り次ぎの段落を別々のテキストブロックで入れます。引用を有効にすると、まとめの文ごとにどの記録のどの段落を根拠にしたかが付きます。 職員は、一覧の1行から元の記録へそのままたどれます。
「件数の多い課を担当として書かない」は、取り次ぎ先を書かせない指示とは別に書きます。 取り次ぎ先だけを禁じると、「多くは〇〇課が対応しています」という形で同じことを書きます。
出力形式を固定する
取り込み時の経緯は、次の形のJSONで受け取ります。
{
"case_id": "SD-2024-007215",
"received": "2024-06-12",
"route": ["市民相談課", "道路管理課", "みどり公園課"],
"handled_by": "みどり公園課",
"returned": [ { "section": "道路管理課", "reason": "", "paragraph": 2 } ],
"basis": [""],
"closure": "resolved | referred_outside | explained_only | withdrawn | unresolved",
"redacted_count": 0,
"unconfirmed": false
}
1つ目の理由は、route と returned で、たらい回しの経緯を項目にできることです。 「道路管理課に回したが対象外で、みどり公園課が受け持った」という経緯が、文の中ではなく項目として残ります。次の職員は、道路管理課に電話をかける前に、この経緯を読めます。
2つ目は、closure を決まった値に限れることです。 解決した相談と、説明だけで終わった相談と、市の外の機関に案内した相談では、初動の判断に使える情報が違います。 一覧で区別して見せます。
3つ目は、redacted_count で、伏せる運用の守られ方を数えられることです。 伏せた件数を課ごとに集計すると、記録の文に個人の情報を書いてしまう課が分かります。
検索の要求は、次の考え方で組みます。
| 部分 | 中身 |
|---|---|
| 要旨の項目 | Sudachi と言い換えの辞書で解析した言葉の一致。重みを大きく |
| 経過の項目 | 同じ解析器で言葉の一致。重みを小さく |
| 分類 | 入力されていれば加点。絞り込みにはしない |
| 公開範囲 | 文書レベルのセキュリティで、職員の役割に合う記録だけ |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 相談記録の仕組み | 終結の通知、または毎晩の一覧の取得 | 終結した相談の要旨・経過・関係課を取り出す |
| Amazon Bedrock Guardrails | Lambda からの呼び出し | 取り込みと検索の入力に残った個人の情報を伏せる |
| Claude(Amazon Bedrock) | Lambda からの呼び出し | 経緯の取り出しと、検索結果のまとめ |
| Amazon OpenSearch Service | 索引への登録と、言葉の検索 | 相談の記録の検索 |
| Amazon S3 | 辞書のファイルの置き場 | 言い換えの辞書の更新 |
| 事務分掌の一覧 | 毎月の取り込み | 課の名前の読み替え |
言い換えの辞書の更新は、月に1回の手順にします。 ドキュメントでは、S3 のファイルを差し替えても、OpenSearch Service の側のパッケージは自動では更新されません。 パッケージを更新してドメインに適用し、検索時の解析器が updateable なら、検索時の解析器の再読み込みは自動で行われるとされています。
相談記録の仕組みには書き込みません。 取り次ぎ先と対応の記録は、職員が相談記録の仕組みに自分で書きます。
人が確認する
確認は2か所です。取り込み時の職員と、検索時の窓口の職員です。
- 終結させた職員が経緯を確定する … 取り次ぎの順番と受け持った課、戻した理由を確かめます。伏せた件数が多い記録は、伏せ方が正しいかも見ます
- 窓口の職員が取り次ぎ先を決める … 一覧と経緯を読み、取り次ぎ先を自分で決めます。迷うときは、受け持ちそうな課に確かめてから相談者に伝えます
- 古い記録は今の事務分掌で読み直す … 受付日が組織の改編より前の記録は、今の課の名前で読み替えて判断します
- 拾えなかった言葉を報告する … 探しても出てこなかった言い方は、検索画面から報告し、市民相談課が辞書に足します
1件の相談あたり5分を目安にします。 一覧と経緯を読み、必要なら元の記録を1〜2件開く時間です。まとめの文を相談者に読み上げる運用にはしません。
3番目は、異動の多い職場ほど効いてきます。 過去の記録の課の名前が今の組織と違うと、着任したばかりの職員はその課がどこになったかを知りません。読み替えの表示があれば、取り次ぐ先を組織図で探し直す手間がなくなります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 伏せた件数が多い記録 | 取り込みを止めて一覧に載せる。記録を書いた課に伏せ方を直してもらう |
| 似た相談が0件 | 「似た過去の相談は見つかりませんでした」と表示する。関係しそうな課を推測で出さない |
| 受け持った課が記録によって違う | 違いを並べて見せる。どちらが正しいかは書かない |
| 記録の課が今は無い | 事務分掌の一覧の履歴で読み替え、読み替えたことを示す |
| 入力に名前や住所が入っている | 伏せたうえで検索する。伏せたことを画面に表示する |
| 児童・高齢者の虐待や配偶者からの暴力に関わる相談 | 文書レベルのセキュリティで、担当課の役割だけが検索できる。窓口の一覧には出さない |
| 言い換えの辞書の更新に失敗した | 前の版のまま動かす。更新の状態がドメインで有効になったかを確かめる |
| Bedrock の呼び出しに失敗した | 検索の一覧だけを表示し、まとめは再試行を促す |
6行目が、この構成でいちばん大事な例外です。 こうした相談の記録は、似た相談として窓口の一覧に出るだけで、関わる人の安全に関わります。 担当課の外には、検索の段階で出さない設計にします。
記録を残す
- 取り込んだ記録の受付番号、終結日、取り込んだ日時、伏せた件数
- Claude が返した経緯のJSONと、終結させた職員が確定した時に直した項目
- 検索のたびの入力(伏せたあと)、上位10件、当たった言い換え
- Claude に渡した検索結果と、返ってきたまとめと引用
- 職員が決めた取り次ぎ先と、参照した記録
- 「似た過去の相談は見つかりませんでした」と出た入力と、報告された言い方
ログにも個人の情報を残さないようにします。 ドキュメントでは、Guardrails の伏せる処理はモデルへの入力と出力にだけ効き、モデルの呼び出しのログには元の入力がそのまま残るとされています。伏せる処理の結果の中にも、見つけた元の値が入ります。 ログの側でも伏せる設定を入れ、伏せる処理の結果は保存しません。
04実装レベルの3段階
半自動化で、経緯の項目と言葉の検索までは自動になります。 ただし言い換えの辞書が無いので、市民の言い方と記録の書き方が違う相談を拾えません。本格構成との差はここで、本記事の想定は本格構成です。
05工数削減シミュレーション
導入後 600件 × 5分 ÷ 60 = 50 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 人口10万〜50万人規模の市で、市民相談の窓口や各課の窓口に寄せられる相談・苦情の対応記録が、個人情報を伏せた形で相談記録の仕組みにたまっている団体。空き家、騒音、ごみ、道路の損傷、近隣の樹木のように複数の課にまたがる相談で、どの課に取り次ぐかを決めるのに経験の長い職員に頼っている場合。人事異動のたびに、どの相談をどの課が受け持ったかの経験が途切れている場合。AWS を庁内の基盤として使っており、検索基盤と生成AIを閉じた環境で動かせる場合。
- 相談の対応記録を残しておらず、受付簿に件名と日付しかない場合(先に記録の様式を決める必要がある)。対応記録から個人情報を伏せる運用ができておらず、氏名や住所が記録の文の中にそのまま残っている場合。相談の件数が少なく、窓口の職員が全件を覚えていられる規模の場合。なお、どの課が受け持つか、どう対応するかの判断は職員が行い、この構成はそれを代わりに行いません。
07最小構成で試す方法
- 複数の課にまたがりやすい分類(空き家、樹木、騒音など)から、過去の相談を100件選び、手で経緯の項目を作る(取り次ぎの順番、受け持った課、戻した課と理由)
- 最近その分類で受けた相談を30件選び、当時、どの課に取り次ぎ、何回回ったかを控える
- 市民の言い方と記録の書き方の組を、30件の要点から書き出し、言い換えの一覧にする
- 100件をスプレッドシートにし、言い換えの一覧で言葉を足しながら、30件それぞれに似た相談を選ぶ
- 同じ30件について、手元のAIサービスに伏せた記録を貼り付け、経緯のまとめを作らせる
- 経験の長い職員に、選ばれた相談が「思い当たる前例」と合っているかを見てもらう
30件は必ず、市民相談の経験の長い職員と一緒に見てください。 言い換えで探すことが、その人の記憶と合っているかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 職員が思い当たる前例が並ぶ | 取り込みと検索基盤の構築に進む |
| 言い換えを足しても前例が出てこない | 言い換えでは足りない。 埋め込みを足すことを検討する |
| まとめに取り次ぎ先や回答が混ざる | 指示の書き方で直る。構成は有効 |
2行目は失敗ではなく、文の近さで探す必要がある相談の型が分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 市民の言葉で記録が出てこない | 言い換えの辞書を synonym_graph で使う |
| 辞書を更新するたびに索引を作り直す | 検索時の解析器に置き、updateable を true にする |
| S3 の辞書を差し替えても効かない | パッケージの更新とドメインへの適用が別に要る |
| Sudachi の辞書の差し替えがすぐに効かない | 次のブルー/グリーンのデプロイまで反映されない。別名の索引で作り直す方法もある |
| 記録の文に名前が残る | 取り込みで伏せる処理に通し、伏せた件数で止める |
| 伏せる処理が日本語の名前を見落とす | 公式に日本語の記載はない。試しで人が確かめ、正規表現で補う |
| ログに元の入力が残る | 呼び出しのログは伏せられない。ログの側で伏せる |
| まとめに取り次ぎ先が入る | 指示で禁じ、件数を担当として書かせない指示も別に入れる |
| 古い記録の課が今は無い | 事務分掌の履歴で読み替える |
上の3行が、この構成の失敗のほとんどです。 どれも言い換えの辞書の扱いから出ています。辞書を検索時の解析器に置き、月に1回足していけるかどうかで、窓口で使われ続けるかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 市民からの相談と苦情の内容、対応の経過、関係課の判断です。氏名・住所・連絡先は取り込みませんが、相談の内容そのものが、生活の困りごとや近隣との関係といった機微な情報です。
- 個人を結びつける項目を検索基盤に持たせない … 同じ人からの相談かどうかは、相談記録の仕組みの側で、権限のある職員だけが確かめます
- 公開範囲を相談の種類で分ける … Amazon OpenSearch Service の細かなアクセス制御では、索引・文書・項目の単位で制限できます。文書レベルのセキュリティで、虐待や暴力に関わる相談は担当課の役割だけが検索できるようにします
- 細かなアクセス制御は、有効にしたあと無効にできない … 有効にするには、HTTPS、保存時の暗号化、ノード間の暗号化が必要です。構築の最初に有効にします
- 伏せる処理の限界を知っておく … Guardrails の機微な情報のフィルターは確率的な仕組みで、ツールの呼び出しの引数や結果は対象外とされています。伏せる処理を通したことを、個人の情報が無いことの保証にしません
- 個人情報の取り扱いの定めに沿う … 相談の記録を検索に使うことが、その市の個人情報の取り扱いの定めと、相談を受けたときの説明の範囲に入っているかを、個人情報の担当課と確かめてから始めます
誤りが起きた場合のリスクは、誤った課に相談者を案内することと、相談の内容が見えてはいけない職員に見えることの2つです。 前者は職員の判断と課への確認で、後者は取り込む項目と公開範囲で防ぎます。
10まず何から始めるか
1週目:取り扱いの範囲を確かめる
個人情報の担当課と、相談の記録を検索に使う範囲と、取り込まない項目を確かめます。あわせて、虐待や暴力に関わる相談の分類を決め、検索の対象から分ける方法を決めます。
2週目:100件の記録と30件の相談で試す
複数の課にまたがりやすい分類の100件を手で経緯にし、最近の30件で似た相談を選びます。言い換えの一覧を作りながら、経験の長い職員の思い当たる前例と合うかを見ます。
3週目:伏せる処理と取り出しの指示を作る
記録の文を伏せる処理に通し、名前や番地が残っていないかを人が全件見ます。 同じ記録を Claude に読ませて経緯を取り出し、課を足していないかを確かめます。
4週目:終結のたびの取り込みを始める
新しく終結する相談から、職員の確認付きで経緯をためます。この時点では検索は標準の日本語の解析だけにします。
2か月目: OpenSearch Service に Sudachi を関連付け、言い換えの辞書をカスタムパッケージとして取り込み、検索時の解析器を作ります。3か月目以降: 過去の記録を一括で取り込み、検索の入力にも伏せる処理を入れ、引用付きのまとめを足します。窓口から関係しそうな課への「これはそちらの担当ですか」という電話が減り、拾えなかった言い方が毎月辞書に足されるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Amazon OpenSearch Service の対応プラグインの一覧で、Sudachi Analysis が日本語向けに推奨され OpenSearch 1.3以降で使えること。kuromoji と ICU が全ドメインに入っていること。Sudachi の辞書の関連付け直しは次のブルー/グリーンのデプロイまで反映されず、別名を使った作り直しの方法もあること | Amazon OpenSearch Service: Plugins by engine version | 2026-10-06 |
同義語などの辞書ファイルを S3 に置いてパッケージとして取り込み、ドメインに関連付けて synonyms_path に analyzers/<ID> で使うこと。1ファイルの辞書だけに対応すること。updateable は検索時の解析器にだけ使え、S3 の差し替えだけではパッケージは更新されず、更新を適用すると検索時の解析器が自動で更新されること。索引時の解析器では閉じて開き直すか作り直しが要ること。任意のプラグインの関連付けにブルー/グリーンのデプロイが伴うこと | Amazon OpenSearch Service: Importing and managing packages | 2026-10-06 |
synonym_graph のフィルターが複数の語からなる同義語を扱えること。synonyms か synonyms_path を指定し、expand の既定が true で双方向になること | OpenSearch Documentation: Synonym graph token filter | 2026-10-06 |
Guardrails の機微な情報のフィルターが文脈に依存する確率的な仕組みで、NAME・PHONE・ADDRESS・EMAIL などを伏せ(種類の記号に置き換え)られること。正規表現のフィルターがあり、先読み・後読みに対応しないこと。ツールの呼び出しの引数や結果は対象外であること。モデルの呼び出しのログには元の入力が残り、結果の match には元の値が入ること | Amazon Bedrock: Sensitive information filters | 2026-10-06 |
| 細かなアクセス制御が索引・文書・項目の単位の制限を提供すること。文書レベルのセキュリティが役割のクエリに合う文書だけを返すこと。有効化に HTTPS・保存時の暗号化・ノード間の暗号化が必要で、有効にしたあと無効にできないこと | Amazon OpenSearch Service: Fine-grained access control | 2026-10-06 |
検索結果ブロック(source・title・content)で自社の文書を渡すと、Claude が引用付きで回答すること。Claude API、Amazon Bedrock、Google Cloud で使えること | Claude Docs: Search results | 2026-10-06 |
どの課が相談を受け持つか、相談者にどう伝えるかは、職員が事務分掌と制度に照らして決めてください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0437)についてのご相談はこちらから。
