Media > AI活用ユースケース > カスタマーサポート > 住民からのごみの分け方・出し方の問い合わせに、分別辞典と収集日程を根拠にチャットで答え、辞典に無い品目は担当課へ回す

住民からのごみの分け方・出し方の問い合わせに、分別辞典と収集日程を根拠にチャットで答え、辞典に無い品目は担当課へ回す

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

「このフライパンは何ごみか」「うちの地区の燃えないごみは何曜日か」という住民の問い合わせに、チャットで品目と地区を聞き取り、市の分別辞典と収集日程を引いた結果だけで答えます。辞典に無い品目は答えずに担当課へ回します。

サマリー
生成AI
Azure OpenAI Service/ChatGPT/Claude
対象業界
不動産/自治体
対象部門
カスタマーサポート/総務
対象業務
問い合わせ対応/情報検索
主な課題
人手が足りない/問い合わせが多い/情報が見つからない
AIで行う処理
対話
主な効果
品質標準化/対応スピード向上/工数削減
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
200h/月
AI導入後
60h/月
想定削減
70%
年間削減
1,680h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 電話や窓口で、住民から品目の名前と、どこに住んでいるかを聞く
  2. 品目があいまいなときは、材質、大きさ、電池が入っているかなどを聞き返す
  3. 分別辞典の冊子かPDFを開き、五十音の見出しで品目を探す。見つからなければ似た言い方で探し直す
  4. 町名から地区を調べ、収集カレンダーでその区分の曜日と次の収集日を確かめる
  5. 区分、出し方の注意、次の収集日を口頭で伝える
  6. 辞典に無い品目は、担当の職員に聞きに行くか、折り返しの連絡を約束する
  7. 受付記録の表に、品目、地区、回答の内容を1行で書く
導入後(After)
  1. 【住民】 公式サイトのチャット窓口に、品目の名前と住んでいる町名を書く
  2. 自動Azure OpenAI が、品目の言い方を検索の言葉に直し、辞典を引く関数の呼び出しを返す
  3. 自動プログラムが分別辞典の表を引き、候補の行を返す
  4. 自動候補が複数あれば、Azure OpenAI が材質や大きさを住民に聞き返す
  5. 自動町名から地区を引き、収集日程の表からその区分の次の収集日を計算して返す
  6. 自動Azure OpenAI が、引いた行の区分・出し方・次の収集日だけを使って回答の文を作る
  7. 自動辞典に行が無い品目は、区分を答えずに「担当課で確認します」と返し、引き継ぎの記録を作る
  8. 人担当課が引き継ぎの一覧を毎日見て、住民へ折り返す。区分を決めたら辞典に行を足す
  9. 人電話で受けた問い合わせは、職員が同じチャットの画面で引く
  10. 人週に一度、回答の記録を抜き取りで読み、誤った案内がないかを確かめる
各工程の詳しい説明を読む
  1. 電話や窓口で、住民から品目の名前と、どこに住んでいるかを聞く
  2. 品目があいまいなときは、材質、大きさ、電池が入っているかなどを聞き返す
  3. 分別辞典の冊子かPDFを開き、五十音の見出しで品目を探す。見つからなければ似た言い方で探し直す
  4. 町名から地区を調べ、収集カレンダーでその区分の曜日と次の収集日を確かめる
  5. 区分、出し方の注意、次の収集日を口頭で伝える
  6. 辞典に無い品目は、担当の職員に聞きに行くか、折り返しの連絡を約束する
  7. 受付記録の表に、品目、地区、回答の内容を1行で書く

(a)同じ質問に何度も答えている。 問い合わせの多くは、辞典に載っている品目の区分と、地区の収集日です。調べれば分かることを、住民の代わりに職員が調べています。 辞典のPDFは公式サイトにありますが、1,800品目から探すのは住民には手間で、電話のほうが早いと思われています。

(b)品目が辞典のどこにあるか見つからない。 住民の言い方と辞典の見出しが合いません。「保冷剤」を「ほ」で探しても、辞典では「保冷剤(ソフトタイプ)」「保冷剤(ハードタイプ)」に分かれていることがあります。見出しの言い方を知っている職員ほど早く、新しく来た職員ほど遅くなります。

(c)材質と大きさで区分が分かれる。 同じ「かご」でも、プラスチック製か金属製か、一辺が何センチを超えるかで区分が変わります。聞き返しが足りないと、誤った区分を伝えることになります。 誤って出されたごみは収集されずに残り、別の苦情になって返ってきます。

(d)辞典に無い品目の扱いが担当者で違う。 似た品目から推して答える職員もいれば、折り返しにする職員もいます。推した答えは記録に残らず、辞典にも足されません。

  1. 【住民】 公式サイトのチャット窓口に、品目の名前と住んでいる町名を書く
  2. 【自動】 Azure OpenAI が、品目の言い方を検索の言葉に直し、辞典を引く関数の呼び出しを返す
  3. 【自動】 プログラムが分別辞典の表を引き、候補の行を返す
  4. 【自動】 候補が複数あれば、Azure OpenAI が材質や大きさを住民に聞き返す
  5. 【自動】 町名から地区を引き、収集日程の表からその区分の次の収集日を計算して返す
  6. 【自動】 Azure OpenAI が、引いた行の区分・出し方・次の収集日だけを使って回答の文を作る
  7. 【自動】 辞典に行が無い品目は、区分を答えずに「担当課で確認します」と返し、引き継ぎの記録を作る
  8. 【人】 担当課が引き継ぎの一覧を毎日見て、住民へ折り返す。区分を決めたら辞典に行を足す
  9. 【人】 電話で受けた問い合わせは、職員が同じチャットの画面で引く
  10. 【人】 週に一度、回答の記録を抜き取りで読み、誤った案内がないかを確かめる

7番目が、この設計の分かれ目です。 辞典に無い品目で、AI が似た品目から区分を推して答えると、住民は市の回答として受け取ります。答えないことを正常な結果として扱い、担当課へ回る道を最初から作ります。

9番目も大事です。 電話はなくなりません。職員が同じ画面で引けば、電話の1件も②の2分がほぼ消えます。

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

構成図
住民(公式サイトのチャット窓口)/電話を受けた職員(庁内の同じ画面)
   │  品目の名前・町名(写真は受け付けない)
   ▼
チャットのプログラム(会話の履歴を持つ)
   │
   ▼
Azure OpenAI(Microsoft Foundry)── 関数呼び出し
   │   lookup_item(品目の言葉)
   │   resolve_district(町名)
   │   get_next_collection(地区, 区分, 基準日)
   ▼
プログラムが関数を実行(すべて読み取りのみ)
   ├── 分別辞典の表(品目・読み・別名・区分・出し方・注意・更新日)
   ├── 町名と地区の対応表
   └── 収集日程の表(地区×区分の曜日・週)+休みと振替の表
   ▼
Azure OpenAI ── 構造化出力で最終の回答を返す
   │   answered / clarifying / escalated / out_of_scope
   ▼
住民へ回答(辞典の行番号と更新日を添える)
   └──▶ escalated は引き継ぎの一覧へ ──【担当課が折り返し・辞典に追加】
役割想定する製品代替候補
生成AIAzure OpenAI(Microsoft Foundry)(聞き返し・関数の呼び出し・回答文)OpenAI API、Claude API
辞典の照合自団体のサーバーで動くチャットのプログラム自団体のクラウド環境の関数実行サービス
保管分別辞典・地区対応表・収集日程の表(データベース)表計算ファイルを定期的に読み込む形
通知庁内メール・グループウェア庁内チャット

分別辞典と収集日程は、新しく作るものではありません。 冊子の元になっている表を、品目ごとに1行の形に整え、別名の列と更新日の列を足すのが最初の準備作業です。 収集日程は、地区×区分の曜日と週の表に、休みと振替の表を添えます。

Azure OpenAI を選ぶ理由は、データの扱いが文書で示されていることです。 Microsoft Learn では、プロンプトと応答は他の顧客に提供されず、OpenAI にも提供されず、許可なく基盤モデルの学習に使われないとされています。モデルはステートレスで、プロンプトや応答はモデルに保存されないとも説明されています。

辞典を引くのは、関数呼び出しです。 要求に関数を含めると、モデルは文脈から関数を呼ぶかどうかを決め、呼ぶときは引数を JSON で返すとされています。関数を実行するのはアプリケーションの側で、その結果をモデルに返すので、実行される動作をこちらで制御できます。 辞典の検索をモデルの知識に頼らず、表を引いた結果に閉じられるのは、この仕組みがあるからです。

辞典を検索の仕組みにつなぐ形は取りません。 構造化出力は、自分のデータを接続する「持ち込みデータ」のシナリオや Foundry Agents Service では現時点でサポートされていないとされています。品目は1行ずつの表なので、文章の検索より、表を引く関数のほうが確実です。

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

Step1

処理の起点を決める

住民がチャット窓口に最初の一文を書いたことを起点にします。 公式サイトのごみのページと、分別辞典のPDFのページにチャットの入口を置きます。辞典を探しに来た人が、そのまま聞ける場所に置くのが要点です。

電話を受けた職員は、庁内の同じ画面を開いて、住民から聞いた言葉をそのまま打ちます。住民向けと職員向けで仕組みを分けません。 分けると、辞典の更新がどちらか一方にしか届かない期間ができます。

会話の履歴はプログラムの側で持ち、毎回の要求にその会話のやり取りだけを入れます。 会話ごとに識別子を振り、30分で区切ります。

Step2

入力データを集める

データ中身取得元
住民の発言品目の名前、町名、材質や大きさの答えチャット窓口
分別辞典品目ID、品目名、読み、別名、区分、出し方、注意、更新日清掃担当課の表
町名と地区の対応表町名(丁目まで)、地区番号清掃担当課の表
収集日程地区×区分の曜日、第何週か、休みと振替の日付清掃担当課の表
基準日問い合わせを受けた日の日付プログラムの時計

質を決めるのは、分別辞典の別名の列です。 住民は「ホッカイロ」「使い捨てカイロ」「カイロ」と言います。辞典の見出しが1つでも、別名に言い方を並べておけば、プログラムの照合で引けます。 別名の列が空のままでは、AI が言い換えても辞典に届きません。

更新日の列は、回答に添えるために持ちます。 区分の変更があった品目は、古い冊子を見た住民と食い違います。「この案内は何月何日時点の辞典です」と書ければ、食い違いの理由を住民が自分で読めます。

基準日を AI に渡さず、プログラムの時計から取るのも意図してのことです。 「次の収集日」を計算する関数に基準日を入れ、日付の計算はすべてプログラムが行います。

Step3

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

データは3つの関数で取ります。AI が呼べるのはこの3つだけで、すべて読み取りのみです。

関数引数返すもの
lookup_item品目の言葉(AIが住民の言葉から作る)候補の行(品目ID、品目名、区分、出し方、注意、更新日、一致の種類)を最大5件
resolve_district町名地区番号。見つからなければ not_found
get_next_collection地区番号、区分次の収集日と、その次の収集日。休みと振替を反映したもの

lookup_item の照合はプログラムが行います。 品目名と別名の完全一致、読みの一致、部分一致の順に引き、どの段階で一致したかを「一致の種類」として返します。 AI はこの値を見て、完全一致なら答え、部分一致なら住民に確かめます。

関数の説明文には上限があります。 ツールと関数の説明は、現在1,024文字に制限されているとされています。引数の書き方の注意は説明文に短く書き、長い規則はシステムメッセージの側に置きます。

関数の定義は、たとえば次のように書きます。

{
  "type": "function",
  "function": {
    "name": "lookup_item",
    "description": "市の分別辞典から品目を探す。住民の言い方を、辞典の見出しに近い一般的な品目名に直して渡す。材質や大きさが分かっていれば含める。",
    "strict": true,
    "parameters": {
      "type": "object",
      "properties": {
        "query": { "type": "string", "description": "品目名。例: 使い捨てカイロ、プラスチック製のかご" },
        "material": { "type": ["string", "null"], "enum": ["plastic", "metal", "wood", "glass", "cloth", "paper", "mixed", null] }
      },
      "required": ["query", "material"],
      "additionalProperties": false
    }
  }
}

material を省略可能にせず、null を許す形で必須にしています。 構造化出力では、すべてのフィールドを必須にし、additionalProperties を false にする必要があるとされ、省略可能な項目は null との共用体で表すとされています。

Step4

AIへ渡す前に整形する

  1. 発言の長さの確認 … 1回の発言が長すぎるものは切り詰め、品目名と町名の部分だけを渡します
  2. 個人情報の除去 … 住民が氏名、番地、電話番号を書いた場合は、プログラムの側で伏せ字にしてから渡します。収集日の計算に要るのは町名(丁目まで)だけです
  3. 町名の正規化 … 全角と半角、「丁目」と数字の書き方をそろえてから対応表を引きます
  4. 辞典の表の検査 … 毎朝、区分の列が空の行、別名が他の品目と重複している行を洗い出し、担当課へ知らせます
  5. 収集日程の検査 … 休みと振替の表が、向こう60日分そろっているかを毎朝確かめます。足りなければ、次の収集日を答えない設定に切り替えます
  6. 関数の結果の整形 … 候補の行は、AI に要る列だけに絞って返します

2番目を軽く見ないでください。 住民は親切に「○○町3丁目5番の山田です」と書きます。番地と氏名は回答にまったく要らないので、渡さないのが一番安全です。

Step5

AIに処理させる

させるのは、住民の言葉を関数の引数に直すこと、足りない条件を聞き返すこと、関数が返した行だけで回答文を作ることの3つです。

させること中身判断できないときの扱い
品目の言い換え「100均のかご」を「プラスチック製のかご」のように、辞典の見出しに近い言葉にする何の品目か分からなければ聞き返す
聞き返し候補が材質・大きさ・電池の有無で分かれるとき、その違いだけを聞く2回聞いても決まらなければ escalated
町名の確認町名が無ければ聞く。地区が引けなければ町名を確かめる引けなければ収集日を答えない
回答文の作成区分、出し方、注意、次の収集日を、関数の結果のとおりに並べる結果に無いことは書かない
範囲外の見分け事業所のごみ、不法投棄の通報、粗大ごみの申込みの手続きout_of_scope として窓口を案内
させないこと理由
辞典に無い品目の区分を決める区分の決定は担当課の仕事。推した答えが市の回答になる
似た品目から区分を推す材質が同じでも、大きさや危険性で区分が分かれる
収集日を自分で計算する休みと振替を知らない。計算は関数が行う
手数料や申込み方法を答える辞典の範囲外。粗大ごみの手続きの窓口へ案内する
家電4品目の処分先を自分で説明する辞典の「市で収集しないもの」の行に書かれた案内だけを返す

1行目がいちばん起きやすい失敗です。 辞典に「電動歯ブラシ」が無いとき、AI は「電気製品なので小型家電の回収へ」と答えたくなります。その答えが合っているかどうかではなく、辞典に根拠が無いことが問題です。

家電4品目は、辞典の側に行を持たせます。 環境省の説明では、家庭用エアコン、テレビ、電気冷蔵庫・電気冷凍庫、電気洗濯機・衣類乾燥機が家電リサイクル法の対象で、消費者は廃棄するときに収集運搬料金とリサイクル料金を支払い、小売業者には引取りが義務付けられているとされています。市の案内の文面は辞典の行に書き、AI にはその行を返させるだけにします。

Step6

指示内容を固定する

あなたは市の清掃担当課の案内係です。住民からの、ごみの分け方・出し方・
収集日の質問に答えます。

【使ってよい情報】
- lookup_item、resolve_district、get_next_collection の3つの関数が
  返した結果だけを使ってください。
- 自分の知識で、ごみの区分、出し方、収集日を答えないでください。
- 提供された関数以外を使おうとしないでください。

【進め方】
1. 品目の名前が分かったら lookup_item を呼んでください。住民の言い方は、
   一般的な品目名に直してから渡してください。
2. 結果の match_type が exact なら、その行で答えてください。
3. 候補が複数あるときは、候補どうしで違う点(材質・大きさ・電池の有無)
   だけを、1回に1つ質問してください。区分名を住民に選ばせないでください。
4. 収集日を聞かれたら、町名を確かめて resolve_district を呼び、
   get_next_collection で次の収集日を取ってください。
   日付を自分で計算しないでください。
5. 関数に渡す値を推測しないでください。品目や町名があいまいなら、
   住民に聞き返してください。

【答えてはいけないこと】
- lookup_item の結果が0件のときは、区分を答えないでください。
  似た品目から推して答えないでください。status を escalated にし、
  「担当課で確認して連絡します」と伝えてください。
- 同じ品目で2回聞き返しても1つに決まらないときも escalated にしてください。
- 粗大ごみの申込み方法や手数料、事業所のごみ、不法投棄の通報は
  out_of_scope にし、案内先の窓口だけを伝えてください。
- 住民が氏名や番地を書いても、回答に繰り返さないでください。

【回答の書き方】
- 区分、出し方、注意、次の収集日の順に、短く書いてください。
- 使った辞典の行の item_id と updated_at を必ず sources に入れてください。
- 結果に書かれていないことを付け足さないでください。

「関数に渡す値を推測しない」を明記しているのは、公式の案内に沿ったものです。 Microsoft Learn では、関数で使う値を推測せず、要求があいまいなら明確化を求めるようシステムメッセージで指示する例が示されています。町名が無いまま、ありそうな地区で収集日を引かれると、住民は誤った曜日にごみを出します。

Step7

出力形式を固定する

最終の回答は、構造化出力で次の形の JSON にします。

{
  "status": "answered | clarifying | escalated | out_of_scope",
  "reply_text": "",
  "items": [
    {
      "query": "",
      "item_id": "",
      "item_name": "",
      "category": "",
      "how_to": "",
      "note": "",
      "updated_at": ""
    }
  ],
  "collection": {
    "district": "",
    "category": "",
    "next_dates": []
  },
  "question": "",
  "escalation": {
    "item_words": "",
    "reason": "not_in_dictionary | unresolved_after_two_questions | district_not_found"
  },
  "sources": []
}

1つ目の理由は、status で後段の処理を分けられることです。 answered はそのまま住民に表示し、escalated は引き継ぎの一覧に1行を足し、out_of_scope は窓口の案内を添えます。文の中身を読まずに、値だけで分岐できます。

2つ目は、回答文と根拠を別の欄に置けることです。 reply_text は住民向けの文、items と sources は辞典の行です。抜き取りで確かめるとき、文と行を並べて読めば、行に無いことを書いていないかがすぐ分かります。

3つ目は、escalation.reason で担当課の仕事が分かれることです。 not_in_dictionary は辞典に足す品目の候補、district_not_found は町名の対応表の不備です。同じ「答えられなかった」でも、直す先が違います。

構造化出力は、指定した JSON スキーマに従って応答させる機能で、有効な JSON だけを保証していた従来の JSON モードとは違い、スキーマへの準拠まで求められるとされています。スキーマは最大100個のオブジェクトプロパティ、最大5レベルの入れ子までとされており、この形はその範囲に収まります。

並列の関数呼び出しは使いません。 構造化出力は並列関数呼び出しではサポートされず、使う場合は parallel_tool_calls を false にするとされています。品目を引いてから地区を引く順番が決まっているので、並列にする利点もありません。

Step8

システムへ連携する

つなぎ先方式内容
チャット窓口公式サイトに埋め込んだ画面住民の発言を受け、回答を表示する
Azure OpenAIChat Completions API(v1)関数の呼び出しと、構造化出力の回答
分別辞典・地区対応表・収集日程データベースの読み取り3つの関数の中身
引き継ぎの一覧データベースへの追記escalated の会話を1行ずつ足す
担当課への通知庁内メール引き継ぎの件数を毎朝知らせる

辞典への書き込みは、この構成からは行いません。 AI にも関数にも、辞典を書き換える経路を持たせません。区分を決めて辞典に足すのは、担当課の職員が表を直す作業です。 関数は読み取りだけの権限で動かします。

モデルが返した関数呼び出しは、実行する前にプログラムが検証します。 呼ぶ関数の名前が3つのどれかか、引数が型どおりかを見ます。Microsoft Learn でも、モデルが生成した関数呼び出しを常に確認すること、関数には必要最小限のアクセス権だけを与えることが勧められており、データベースへの問い合わせなら読み取り専用のアクセス権にする例が挙げられています。

JSON の読み込みの失敗にも備えます。 関数呼び出しの JSON 応答が常に有効とは限らないため、エラーを処理するロジックを足す必要があるとされています。読めなかったときは同じ要求を1回だけやり直し、それでも読めなければ escalated にします。

Step9

人が確認する

人が見るのは、escalated の引き継ぎと、抜き取りの記録だけです。 answered の回答を1件ずつ承認する設計にはしません。承認を挟むと、住民は答えを待つことになり、電話のほうが早くなります。

  1. 引き継ぎの一覧を毎朝見る … not_in_dictionary の品目について、区分を決めて住民に折り返します。折り返しの期限は、受け付けた翌開庁日までとします
  2. 決めた区分を辞典に足す … 品目名と、住民が使った言い方を別名に入れます。次に同じ品目を聞かれたとき、引き継ぎにならずに答えられます
  3. 週に一度、50件を抜き取って読む … reply_text と items を並べ、行に無いことを書いていないかを見ます
  4. 誤りを見つけたら記録する … どの会話の、どの文が、辞典のどの行と食い違ったかを残します

2番目を省かないでください。 折り返しだけで終えると、同じ品目がまた引き継ぎになります。引き継ぎの件数が月を追って減っていくかどうかが、辞典の整備が進んでいるかの目安です。

3番目の抜き取りで見るのは、根拠の外に出ていないかです。 関数の結果に無いことを付け足していれば、指示を直します。

Step10

例外に対処する

起きること対応
辞典に品目が無いescalated。区分を答えず、担当課で確認すると伝える
2回聞き返しても品目が決まらないescalated。住民の言葉のまま引き継ぐ
町名が対応表に無い町名を聞き直す。引けなければ収集日を答えず escalated
休みと振替の表が足りない次の収集日を答えない。曜日だけを案内し、公式サイトの告知を案内する
関数呼び出しの JSON が読めない1回だけやり直す。だめなら escalated
定義していない関数を呼ぼうとする実行しない。1回だけやり直す
事業所のごみ、不法投棄の通報out_of_scope。担当の窓口を案内する
粗大ごみの申込みout_of_scope。申込みの窓口を案内する
Azure OpenAI が応答しない「ただいま案内できません」と表示し、辞典のPDFと電話番号を示す

上の3行が大半を占めます。 どれも AI の問題ではなく、辞典と対応表の穴の問題です。 引き継ぎの理由を数えれば、どこを直せばよいかが分かります。

Step11

記録を残す

  • 会話の識別子、受け付けた日時、入口(住民のチャット/職員の画面)
  • 住民の発言(伏せ字にした後のもの)と、AI の回答(reply_text)
  • 呼んだ関数の名前、引数、返った結果
  • 最終の JSON(status、items、collection、escalation、sources)
  • そのとき参照した辞典の行の更新日
  • 引き継ぎの処理(折り返した日時、決めた区分、辞典に足した日)
  • 抜き取りの結果と、誤りの記録

3つ目の関数の記録が、いちばん役に立ちます。 誤った案内が見つかったとき、AI が言い換えを誤ったのか、辞典の行が誤っていたのか、日程の表が古かったのかを、呼んだ引数と返った結果で切り分けられます。

04実装レベルの3段階

最小構成:辞典の一部を生成AIの画面に貼り、職員が住民の質問を入れて回答を読み上げる / 品目の言い換えと回答文の作成
半自動化:上記+職員向けの画面で関数呼び出しを使い、辞典と収集日程の表を引く / 辞典と日程の照合、電話の1件あたりの時間の短縮
本格構成:上記+住民向けのチャット窓口を公開し、引き継ぎの一覧と辞典の追加の流れまでつなぐ / 一次回答の大半と、辞典の穴の洗い出し

最小構成では、1,800品目を貼りきれません。 問い合わせの多い品目に絞った表で、答えない動きができるかを確かめる段階です。 半自動化は、職員だけが使う形です。 住民に公開する前に、電話を受けた職員が同じ画面で引きます。1件5分のうち②の2分がほぼ消え、誤った案内が出ても職員がその場で気づけます。 ここで1か月、引き継ぎの理由と抜き取りの結果を数えます。 本格構成で住民に公開し、この段階が本記事の想定です。 差が大きいのは、住民が自分で聞いた分だけ、電話そのものが減るからです。

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

前提値(モデル条件)
対象人数
6 名
月間件数
2,400 件
1件あたり現在時間
5 分
1件あたり導入後時間
1.5 分
現在  2,400件 × 5分 ÷ 60 = 200 時間/月
導入後 2,400件 × 1.5分 ÷ 60 = 60 時間/月
月間削減時間
140h
削減率
70%
年間削減時間
1,680h
年間金額換算(時間単価2,500円)
420万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

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

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

AI活用について相談する

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

向いている
  1. ごみの分け方・出し方・収集日の問い合わせが、電話と窓口とメールで月に千件を超える市区町村。品目ごとの分別辞典(五十音順の品目一覧)と、地区ごとの収集日程を表の形で持っている、または作れる場合。問い合わせの多くが「これは何ごみか」「何曜日に出せばよいか」で、職員が冊子と収集カレンダーを引いて答えている場合。辞典に無い品目の判断を、担当課が週に一度まとめて行える体制がある場合。管理物件の入居者からごみ出しの問い合わせを受ける賃貸管理会社にも同じ形が当てはまる。
向いていない
  1. 分別辞典が冊子の紙面にしかなく、品目ごとの区分を表に起こす人手を確保できない場合。問い合わせの中心が粗大ごみの申込み受付や手数料の支払いで、案内より手続きそのものが重い場合。問い合わせが月に数十件で、担当者が直接答えて足りる場合。なお、辞典に無い品目の区分の決定と、不法投棄や事業系ごみの扱いの判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の受付記録から、問い合わせの多い品目を50件選ぶ(うち10件は、辞典に無かった品目を入れる)
  2. 分別辞典の表から、その50件に関係しそうな行を抜き出して1つの表にする
  3. 手元の生成AIの画面に、表と次の指示を貼る
  4. 「この表だけを根拠に、住民の質問に答えてください。表に無い品目は区分を答えず『担当課で確認します』と答えてください。材質や大きさで分かれるときは聞き返してください」と指示する
  5. 50件の質問を住民の言い方のまま1件ずつ入れ、当時の職員の回答と突き合わせる

辞典に無い10件を必ず入れてください。 この構成で確かめたいのは、答えられる品目の正しさより、答えてはいけない品目で答えないかどうかです。

出てきた内容判断
表の行どおりに答え、無い品目は答えなかった関数呼び出しの形に進む
表に無い品目を似た品目から推して答えた指示の書き方で直る。関数の結果が0件のときの扱いを先に決める
住民の言い方で表の行に届かない別名の列が足りない。 AI の問題ではない

3行目はよく出ます。 届かなかった言い方をそのまま別名に入れ、同じ50件で取り直してください。

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

問題対策
辞典に無い品目を似た品目から推して答える0件のときは escalated と決め、指示にも書く。 抜き取りで推した答えを探す
住民の言い方で辞典の行に届かない別名の列を足す。届かなかった言い方を毎週別名に入れる
町名が無いまま収集日を答える関数に渡す値を推測させない。町名が無ければ聞き返す
年末年始に通常の曜日で答える休みと振替の表が60日分そろっているかを毎朝確かめる
聞き返しが多すぎて住民が離れる候補どうしで違う点だけを、1回に1つ聞く
関数の説明文に規則を書きすぎる説明は1,024文字の上限がある。長い規則はシステムメッセージへ
構造化出力と並列の関数呼び出しを併用する併用はサポートされない。parallel_tool_calls を false にする
定義していない関数を呼ぼうとする実行前に名前と引数を検証する。システムメッセージに一文を入れる
住民が氏名や番地を書くプログラムの側で伏せ字にしてから渡す
家電4品目の処分先を AI が自分で説明する辞典の「市で収集しないもの」の行に案内を書き、それを返させる
辞典の区分の変更が回答に届かない辞典の表を正本にし、冊子とPDFは表から作る

上の3行が、この構成の失敗のほとんどです。 どれも「分からないのに答える」という同じ形をしています。答えないことを正常な結果として扱えているかで、運用に乗るかが決まります。

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

この構成で扱うデータ: 住民が書いた品目の名前と町名です。住民が自分から氏名、番地、電話番号を書くことがあります。分別辞典と収集日程は公開している情報です。

  1. 外部へ渡すのは、品目と町名までに限る … 収集日の計算に番地は要りません。氏名、番地、電話番号はプログラムの側で伏せ字にしてから渡します
  2. 処理する地域を選ぶ … Global や DataZone のデプロイでは、指定した地域の外でも処理されうるとされています。住民の発言を扱う構成なので、指定した地域内で処理されるデプロイの種類を選びます
  3. 区分の決定を AI に任せない … 辞典に無い品目の区分は、担当課が決めて辞典に足します。 AI が推した区分が市の回答として広がると、収集されないごみと苦情が返ってきます
  4. 不正使用の監視の扱いを確かめる … Microsoft Learn では、不正使用の兆候が検出された場合にプロンプトと応答のサンプルがレビューのために選ばれることがあり、管理対象の顧客は不正使用の監視の変更を申請できるとされています。団体の方針に照らして、申請が要るかを決めてください
  5. 関数には読み取りの権限だけを与える … 辞典、対応表、日程の表を書き換えられる権限を、AI から呼べる経路に持たせません

誤りが起きた場合のリスクは、誤った区分や曜日を案内して、ごみが収集されずに残ることです。 前者は辞典に無い品目を推して答えると起き、後者は日程の表が古いか、町名を推して引くと起きます。どちらも「根拠が無いときに答えない」で防げるので、そこだけは設計で守ります。

10まず何から始めるか

1週目:分別辞典の表に2つの列を足す

冊子の元になっている表に、別名の列と更新日の列を足します。1,800品目すべてを一度に埋める必要はありません。先月の受付記録で多かった上位200品目から埋めます。 電話を受けている職員に、住民がよく使う言い方を書き出してもらうと早く進みます。

2週目:50件で試す

先月の問い合わせから50件を選び、うち10件は辞典に無かった品目にします。手元の生成AIに表の一部を貼り、無い品目で答えないかを最優先で見ます。

3週目:引き継ぎの流れを決める

辞典に無い品目を誰が、いつまでに、どう決めて辞典に足すのかを、担当課と決めます。 ここが決まらないうちに住民に公開すると、引き継ぎの一覧が積み上がるだけになります。町名と地区の対応表も、丁目まで引ける形にそろえます。

4週目:職員向けの画面をつなぐ

3つの関数を作り、Azure OpenAI の関数呼び出しで辞典と収集日程を引く画面を、電話を受ける職員だけで使い始めます。この時点では住民に公開しません。

2か月目: 職員の画面で、引き継ぎの理由と抜き取りの結果を毎週数え、届かなかった言い方を別名に足します。3か月目以降: 住民向けのチャット窓口を公開し、1件5分が何分になったかと、電話の件数を実測します。引き継ぎの件数が月を追って減り、辞典の更新が1週間以内に回答へ届くようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-09-29/最終更新:2026-09-30
確認した内容情報源確認日
要求に関数を含めるとモデルが呼ぶかどうかを決め、引数を JSON で返すこと。関数はアプリケーションが実行し結果をモデルに返すこと。tool_choice の既定が auto で、名前付きの指定や none があること。関数で使う値を推測せず明確化を求める指示の例、提供した関数だけを使う指示の例。JSON 応答が常に有効とは限らずエラー処理が要ること。関数呼び出しの検証と最小限の特権(読み取り専用)の推奨。関数がプロンプトのトークンを使うこと。ツールと関数の説明が1,024文字に制限されることMicrosoft Learn: 関数呼び出しを使用する方法2026-09-29
構造化出力が指定した JSON スキーマに従わせる機能で、従来の JSON モードと違いスキーマへの準拠まで求めること。すべてのフィールドを必須にし additionalProperties を false にすること、省略可能な項目は null との共用体で表すこと。最大100個のオブジェクトプロパティ・5レベルの入れ子。並列関数呼び出しではサポートされず parallel_tool_calls を false にすること。持ち込みデータのシナリオと Foundry Agents Service では現時点でサポートされないことMicrosoft Learn: Azure OpenAI で構造化出力を使用する方法2026-09-29
プロンプトと応答が他の顧客や OpenAI に提供されず、許可なく基盤モデルの学習に使われないこと。モデルがステートレスであること。Global・DataZone 以外のデプロイでは指定した地域内で処理されること。不正使用の監視でサンプルがレビューのために選ばれうること、管理対象の顧客が監視の変更を申請できることMicrosoft Learn: Azure が販売する Foundry モデルのデータ、プライバシー、セキュリティ2026-09-29
家電リサイクル法の対象が家庭用エアコン、テレビ、電気冷蔵庫・電気冷凍庫、電気洗濯機・衣類乾燥機の4品目であること。消費者が収集運搬料金とリサイクル料金を支払うこと、小売業者に引取りが義務付けられていること環境省: 家電リサイクル法の概要2026-09-29

分別の区分と収集日程は、各自治体の辞典と告知が正本です。 本記事は架空の市の辞典を前提にした構成で、特定の自治体の区分を示すものではありません。

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

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

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

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