電力・ガス会社のコールセンターで、通話の文字起こしを要約し、問い合わせの種類・対応・次の対応を応対記録の下書きにする
電気・ガスの引越しや料金の電話が終わるたびに、通話を文字に起こして要約し、問い合わせの種類・対応した内容・次の対応を応対記録の下書きにします。オペレーターは下書きを確かめて保存するだけになります。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- 連携・自動化
- Power Automate
- 対象業界
- その他/自治体
- 対象部門
- カスタマーサポート
- 対象業務
- 要約/記録・議事録作成
- 主な課題
- 人手が足りない/入力作業が多い/期限・対応漏れが起きる
- AIで行う処理
- 要約
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 電話を受け、契約番号か氏名・住所で顧客管理システムの契約を開く
- 話を聞きながら、手元のメモに要点を書く
- その場で済む手続き(支払方法の変更の受付、使用開始日の登録など)を顧客管理システムで行う
- 通話が終わったら、後処理の時間で応対記録の画面を開く
- 問い合わせの種類のコードを選び、要件と対応した内容をメモから清書する
- 折り返しや書類送付を約束していれば、次の対応として期日と担当を登録する
- 保存して、次の電話を受ける
- 人電話を受け、顧客管理システムで契約を開き、その場で済む手続きを行う(いまと同じ)
- 自動通話が終わると、通話録音システムが2チャネルの録音を保存し、Azure Functions に通知する
- 自動Azure AI Speech の高速文字起こしで、オペレーターと顧客のチャネルを分けて文字に起こす
- 自動Azure Functions が、カード番号・口座番号などを伏せ、発話に時刻と話者の印を付ける
- 自動顧客管理システムから契約の情報とコード表を読み、Azure OpenAI に要約・コードの候補・次の対応の抜き出しをさせる
- 自動Azure Functions が、次の対応の引用が文字起こしにあるかを照合し、応対記録の画面に下書きとして入れる
- 人オペレーターが下書きを読み、直して保存する。次の対応の期日と担当を確かめて確定する
- 人苦情の候補や保安に関わる言葉が出たと示された通話は、スーパーバイザーが確かめる
各工程の詳しい説明を読む
- 電話を受け、契約番号か氏名・住所で顧客管理システムの契約を開く
- 話を聞きながら、手元のメモに要点を書く
- その場で済む手続き(支払方法の変更の受付、使用開始日の登録など)を顧客管理システムで行う
- 通話が終わったら、後処理の時間で応対記録の画面を開く
- 問い合わせの種類のコードを選び、要件と対応した内容をメモから清書する
- 折り返しや書類送付を約束していれば、次の対応として期日と担当を登録する
- 保存して、次の電話を受ける
(a)後処理が長い。 応対記録の入力は、通話が終わってから次の電話を受けるまでの時間に行います。この時間が長いほど、待っているお客さまが増えます。 3月と4月は、後処理を短く切り上げるよう指示が出て、記録が「引越し対応」の一言になることがあります。
(b)書き方が人によって違う。 同じ「口座振替への変更」の電話でも、あるオペレーターは手続きの状態まで書き、別のオペレーターは「支払方法変更」とだけ書きます。次にそのお客さまの電話を受けた人が、記録から状況を読み取れません。
(c)約束が記録から漏れる。 通話のなかで「確認して折り返します」と言ったのに、清書のときに次の対応の登録を忘れる。忘れた約束は、誰の作業一覧にも載りません。 お客さまからの2回目の電話で初めて分かり、そのときには「言った・言わない」の話になっています。
(d)コードの選び方がぶれる。 引越しの電話で料金の話も出た場合に、どちらのコードを選ぶかが人によって違います。問い合わせの種類の月次の集計が、実態とずれます。
- 【人】 電話を受け、顧客管理システムで契約を開き、その場で済む手続きを行う(いまと同じ)
- 【自動】 通話が終わると、通話録音システムが2チャネルの録音を保存し、Azure Functions に通知する
- 【自動】 Azure AI Speech の高速文字起こしで、オペレーターと顧客のチャネルを分けて文字に起こす
- 【自動】 Azure Functions が、カード番号・口座番号などを伏せ、発話に時刻と話者の印を付ける
- 【自動】 顧客管理システムから契約の情報とコード表を読み、Azure OpenAI に要約・コードの候補・次の対応の抜き出しをさせる
- 【自動】 Azure Functions が、次の対応の引用が文字起こしにあるかを照合し、応対記録の画面に下書きとして入れる
- 【人】 オペレーターが下書きを読み、直して保存する。次の対応の期日と担当を確かめて確定する
- 【人】 苦情の候補や保安に関わる言葉が出たと示された通話は、スーパーバイザーが確かめる
7番目が、この設計の分かれ目です。 下書きは自動では保存しません。オペレーターは清書の代わりに、下書きを読んで直すようになります。特に次の対応は、期日と担当をオペレーター自身が確定させます。
次の対応の期日をAIに計算させないのも、意図してのことです。 「明日の午前中」がいつかは、通話の日付と営業日のカレンダーで決まります。AIには言ったとおりの言葉を引用させ、日付にするのは顧客管理システムとオペレーターです。
02今回想定するシステム構成
PBX + 通話録音システム(オペレーター/顧客の2チャネル) │ 通話の終了ごとに録音を保存 ▼【トリガー】録音の保存の通知 Azure Functions ── 通話の番号・オペレーター・契約番号をひも付け ▼ Azure AI Speech ── 高速文字起こし(チャネル0・1、フレーズリスト) ▼ Azure AI Language ── 文字起こしの伏せ字(カード番号、口座番号など) ▼ Azure OpenAI(構造化出力)── 要約、コードの候補、次の対応と引用 │ ① 要件 ② 対応した内容 ③ 問い合わせの種類 │ ④ 次の対応(種類・言った期日・引用) ⑤ 苦情・保安の候補 ▼ Azure Functions ── 引用の照合、応対記録の画面への下書きの書き込み ▼ 【オペレーターが下書きを確かめて保存】 ├──▶ 次の対応 → 担当の作業一覧 └──▶ 苦情・保安の候補 → スーパーバイザー
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry) | Claude API、Gemini API |
| 連携 | Azure Functions(通知の受け取り、整形、引用の照合、下書きの書き込み) | Power Automate |
| 文字起こし | Azure AI Speech(高速文字起こし) | 通話録音システムの文字起こし機能 |
| 伏せ字 | Azure AI Language(テキストの PII 検出) | 桁の並びの規則による自前の伏せ字 |
| 保管 | Azure Blob Storage(録音、文字起こし、下書きの記録) | 通話録音システムの保管領域 |
顧客管理システムには、オペレーターが保存した応対記録だけが入ります。 この構成が書き込むのは下書きの欄までで、保存のボタンを押すのはオペレーターです。 次の対応も、オペレーターが確定させるまでは担当の作業一覧に載りません。
Azure OpenAI を選ぶ理由は、構造化出力で JSON スキーマに沿った出力を受けられることです。 公式の説明では、構造化出力は指定した JSON スキーマに従うもので、Chat Completions API と Responses API の両方で使えるとされています。問い合わせの種類を enum でコード表の値に縛れるので、表に無いコードが応対記録に入ることを防げます。録音・文字起こし・要約を Azure の中で扱い、契約と権限の管理を一つにまとめられることも理由です。
03どうやって実装するのか
処理の起点を決める
通話が終わり、通話録音システムが録音を保存したことを起点にします。 応対記録は後処理の時間に書くものなので、夜間にまとめて処理しても意味がありません。 オペレーターが後処理の画面を開いたときに、下書きが入っている状態を目指します。
録音の保存を知る方法は、通話録音システムによって違います。保存先のフォルダにファイルが置かれたことを検知する方法、録音システムが通知を送る方法、PBX の通話終了の記録を見る方法のいずれかです。この部分は、利用している録音システムに応じた個別の実装になります。
文字起こしには、バッチではなく高速文字起こしを使います。 公式の説明では、高速文字起こしは結果を同期で返し、実時間より速く処理するとされ、字幕や会議のメモ、留守番電話のように予測できる待ち時間が要る場面に向くとされています。下書きが間に合わなかった通話は、待たずにオペレーターが手で書きます。 後処理を延ばすと、待っているお客さまが増えるからです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 通話の録音 | 2チャネルの音声(チャネル0:オペレーター、チャネル1:顧客) | 通話録音システム |
| 通話の情報 | 通話の番号、日時、オペレーター、開いていた契約の番号 | PBX と顧客管理システム |
| 契約の情報 | 電気・ガスの別、料金メニュー、支払方法、手続き中の申込み | 顧客管理システム |
| 問い合わせの種類のコード表 | 大分類・小分類のコードと名称、選び方の注記 | 自社で管理(版の番号付き) |
| 次の対応の種類の一覧 | 折り返し、書類送付、開栓・閉栓の立会いの手配、他部署への依頼 | 同上 |
質を決めるのは、コード表の注記です。 「引越しの電話で料金の話も出たときは、引越しのコードを選ぶ」のような、オペレーターが頭の中で使っている選び方の決まりを、コード表に書いておきます。 書いていない決まりは、AIも守りません。第3章の(d)のぶれも、ここで減ります。
契約の情報は、「ガスのほうも」のような言葉の意味を決めるために渡します。 渡すのは料金メニューや支払方法の区分までで、口座番号やカード番号は渡しません。
データの取得方法を決める
| 取るもの | どこから | どうやって |
|---|---|---|
| 録音 | 通話録音システム | 保存の通知を受けて、Blob Storage に写す(方式は録音システムの仕様による) |
| 通話の情報 | PBX、顧客管理システム | 通話の番号でひも付ける |
| 文字起こし | Azure AI Speech | 高速文字起こしの API の応答をそのまま受ける |
| 契約の情報 | 顧客管理システム | 契約の番号で読み取りの API を呼ぶ |
| コード表 | 管理用の保管場所 | 版の番号付きで読む |
高速文字起こしの入力には上限があります。 公式の説明では、5時間未満、500MB未満の音声が対象とされています。保留のまま切り忘れた通話のような極端に長い録音は、前処理で外します。
チャネルの扱いが、この構成の前提です。 公式の説明では、channels に [0,1] を指定でき、ステレオの音声で話者分離を有効にしたときは channels に [0,1] を指定できないとされ、話者分離は単一チャネルの音声を前提としています。オペレーターと顧客を別のチャネルで録音していれば、話者分離に頼らずに「誰が言ったか」が分かります。 次の対応の約束は、オペレーターのチャネルの発話から抜き出します。
電気・ガスの言葉は、フレーズリストで補います。 公式の説明では、phraseList で語句を渡すことができ、API のバージョン 2025-10-15 で使えるとされています。料金メニューの名前、「開栓」「閉栓」「スマートメーター」「検針票」「口座振替」など、取り違えると要約の意味が変わる言葉を登録します。
AIへ渡す前に整形する
- 長さの確認 … 極端に短い通話(無言の切断、転送だけのもの)と、極端に長い録音は下書きの対象から外します
- 発話の並べ替え … 応答の
phrasesにはoffsetMillisecondsとchannelが付きます。時刻順に1本にし、「OP」「客」の印を付けます - 伏せ字 … Azure AI Language のテキストの PII 検出で、カード番号・口座番号・マイナンバーを検出して伏せます。桁の並びの規則でも二重に伏せます
- 契約の情報の付加 … 契約の番号から、電気・ガスの別と料金メニューを読み、文字起こしの前に付けます
- コード表の版の記録 … どの版のコード表で下書きを作ったかを、通話ごとに記録します
3番目で、会話向けの PII 検出を使わないのは理由があります。 公式の言語の一覧では、会話向けの PII 検出が対応する言語は英語・フランス語・ドイツ語・スペイン語で、日本語は含まれていません。一方、テキストの PII 検出は日本語に対応しています。文字起こしを1本の文字列にしてから、テキストの PII 検出にかけます。
規則の伏せ字を重ねるのは、数字が漢字や読みで起こされると検出から漏れうるからです。
AIに処理させる
させるのは、要件と対応した内容の要約、問い合わせの種類のコードの候補、次の対応の抜き出し、苦情と保安の候補の印付けです。
| 項目 | させること | 判断できないときの扱い |
|---|---|---|
| 要件 | お客さまが何を頼んだかを2文以内で | 要件がはっきりしなければ unclear |
| 対応した内容 | オペレーターがその場で行ったことと、案内したこと | 案内しただけか手続きしたかが分からなければその旨を書く |
| 問い合わせの種類 | コード表から主のコードを1つ、従のコードを最大2つ | 当てはまるものが無ければ other |
| 次の対応 | オペレーターが約束したことを、種類・言った期日・引用で | 約束か案内か分からなければ needs_check |
| 苦情の候補 | 不満の表明と、その対象を引用で | 判断しない。印を付けるだけ |
| 保安の候補 | ガスのにおい、停電、火災などの言葉を引用で | 判断しない。印を付けるだけ |
4行目がいちばん大事な項目です。 抜き出すのはオペレーターが自分でする、または社内の誰かにさせると約束したことだけです。「書類は郵送でお届けします」は約束、「書類はお客さまのほうで郵送してください」は案内です。取り違えると、作業一覧に要らない作業が載るか、要る作業が載りません。
| させないこと | 理由 |
|---|---|
| 次の対応の期日を日付にする | 「明日」「週明け」の解釈は営業日のカレンダーで決まる |
| 苦情として扱うかの判断 | 社内の苦情の定義に照らしてスーパーバイザーが決める |
| 料金や使用量の数字を要約に書く | 文字起こしの数字は聞き取りの誤りを含む。数字は顧客管理システムが正 |
| 文字起こしに無い対応を補う | 「案内した」と書かれていないことは、案内していない |
| お客さまの感情や人柄の記述 | 応対記録に要らず、次の応対者の先入観になる |
3行目がいちばん起きやすい失敗です。 聞き取りの誤りで金額が違っていても、応対記録に書かれた数字は正しく見えます。 要約には「請求額についての問い合わせ」とだけ書かせます。
指示内容を固定する
あなたは電気・ガスの小売事業者のお客さまセンターで、通話の応対記録の下書きを作る担当です。
渡された文字起こしと契約の情報だけを見て書いてください。推測で補わないでください。
【文字起こしの形式】
各行は「[開始時刻] 話者: 発話」です。話者は OP(オペレーター)か 客(お客さま)です。
文字起こしには聞き取りの誤りが含まれることがあります。
「***」は伏せ字です。伏せ字の中身を推測しないでください。
【書くこと】
1. request: お客さまが何を頼んだか。2文以内。
2. actions_taken: OP がその場で行った手続きと、案内した内容。手続きと案内を分けて書く。
3. category_main / category_sub: コード表から選ぶ。選び方の注記に従う。
4. follow_ups: OP が約束した次の対応。1つの約束を1要素にする。
5. complaint_flags / safety_flags: 当てはまる発話があれば引用する。
【厳守事項】
- follow_ups には、OP が「自分がする」「社内の誰かがする」と約束したことだけを入れてください。
お客さまにしてもらうことの案内は follow_ups に入れず、actions_taken に書いてください。
- follow_ups の said_due には、OP が言った期日の言葉をそのまま写してください。
「明日の午前中」を日付に直さないでください。期日を言っていなければ空にしてください。
- follow_ups の quote には、約束した OP の発話を、文字起こしのとおりに一字一句写してください。
要約、言い換え、聞き取りの誤りの修正をしないでください。
- 約束か案内か決められないときは、type を needs_check にしてください。
- 料金、使用量、口座、カードなどの数字を request と actions_taken に書かないでください。
「請求額についての問い合わせ」のように、何についての話かだけを書いてください。
- 文字起こしに無い手続きや案内を、あったこととして書かないでください。
- お客さまの感情、話し方、人柄について書かないでください。
- 苦情として扱うべきか、保安上の対応が要るかを判断しないでください。
当てはまりそうな発話を引用するだけにしてください。
【通話の日付】{call_date}
【契約の情報】{contract}
【問い合わせの種類のコード表(版:{code_version})】{codes}
【文字起こし】{transcript}
「期日を日付に直さない」を書いているのは、AIが親切に直すからです。 通話の日付を渡していると、「明日」を翌日の日付にします。金曜の夕方の「明日」が翌営業日の月曜を指していても、AIは土曜にします。 日付にするのは、営業日のカレンダーを持つ顧客管理システムの側です。
「約束と案内を分ける」を2か所に書いているのも同じ理由です。 1か所だけだと、「お送りしますので、ご記入のうえご返送ください」の後半まで約束として拾います。
出力形式を固定する
次の形のJSONを、構造化出力のスキーマで受け取ります。
{
"call_id": "",
"code_version": "",
"request": "",
"actions_taken": { "procedures": [""], "guidance": [""] },
"category_main": "move_in_out | billing | payment_method | plan_change | cancellation | meter_usage | outage_equipment | gas_open_close | other",
"category_sub": [""],
"follow_ups": [
{ "type": "callback | send_document | gas_visit_arrange | internal_request | needs_check",
"what": "", "said_due": "", "quote": "", "timestamp": "" }
],
"complaint_flags": [ { "quote": "", "timestamp": "" } ],
"safety_flags": [ { "quote": "", "timestamp": "" } ]
}
公式の説明では、構造化出力ではすべてのフィールドを必須にし、オブジェクトには additionalProperties: false を設定する必要があり、最大100個のオブジェクトのプロパティと最大5段の入れ子が持てるとされています。また、文字列の minLength や pattern、配列の minItems や maxItems は使えないキーワードとされています。「従のコードは最大2つ」はスキーマでは縛れないので、受け取ったあとに Azure Functions で3つ目以降を落とします。
1つ目の理由は、コードを表の値に縛れることです。 category_main は enum でコード表の大分類だけを受けます。コード表を改定したら、スキーマの enum も同じ版に合わせて作り直します。
2つ目は、次の対応の引用をプログラムで照合できることです。 Azure Functions が quote を文字起こしの該当の時刻の行と突き合わせ、一致しないものは下書きの画面で赤く示し、作業一覧への登録の候補から外します。
| 下書きの状態 | 条件 |
|---|---|
ready | 引用の照合がすべて通り、needs_check が無い |
check_follow_up | needs_check が1つ以上、または引用が照合できない次の対応がある |
supervisor | complaint_flags か safety_flags が1つ以上ある |
manual | 下書きが後処理の時間に間に合わなかった |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 通話録音システム | 保存の通知またはフォルダの監視(製品の仕様による) | 通話ごとの2チャネルの録音 |
| Azure AI Speech | 高速文字起こしの REST API | チャネルごとの文字起こしと時刻 |
| Azure AI Language | テキストの PII 検出の API | 伏せる箇所の検出 |
| Azure OpenAI | Chat Completions API(構造化出力) | 要約、コード、次の対応、候補の印 |
| 顧客管理システム | 読み取りの API と、下書きの欄への書き込み | 契約の情報を読み、下書きを入れる |
Responses API ではなく Chat Completions API を使います。 公式の説明では、Responses API は会話の履歴などを保存する機能とされています。1通話ごとに完結する処理なので、履歴を残す必要がありません。 お客さまの情報を含む入力が、意図しない場所に残ることを避けます。
顧客管理システムへ書き込むのは、下書きの欄だけです。 保存済みの応対記録や契約の情報は書き換えません。次の対応も、下書きのまま作業一覧に載せないようにし、オペレーターの確定を待ちます。
人が確認する
- 要件と対応した内容を読む … 自分の電話なので、記憶と違うところだけ直します。清書から始めないので、ここは短く済みます
- 問い合わせの種類のコードを確かめる … 主のコードが違えば選び直します
- 次の対応を1つずつ確定する … 引用を見て、約束したことかを確かめ、期日を日付にし、担当を選びます。約束したのに下書きに無いものは、ここで足します
- 保存する … 保存した時点で、次の対応が担当の作業一覧に載ります
supervisorの通話はスーパーバイザーが見る … 苦情として社内で管理するか、保安の窓口へ連絡済みかを確かめます
3番目を省かないでください。 次の対応は、この構成でいちばん外せない欄です。下書きに無い約束をオペレーターが足すたびに、その記録を残し、指示の書き方を見直す材料にします。
目標は、9,000件をならして1件1.5分です。 ready の下書きは読んで保存するだけで1分足らず、check_follow_up は引用を確かめて期日を入れるので2〜3分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 下書きが後処理の時間に間に合わない | manual。オペレーターが手で書き、下書きは後から参考として添える |
| 録音が単一チャネル | 話者分離を使う。次の対応がオペレーターの発話かを人が確かめる |
| ガスのにおい、停電などの言葉が出た | supervisor。保安の通報は通話中に決まった手順で対応しているはずなので、その記録があるかを確かめる |
| 契約を開かずに受けた通話(番号が分からない問い合わせ) | 契約の情報なしで下書きを作り、契約の欄は空のままにする |
| 途中で他の窓口へ転送した | 転送の前の部分だけで下書きを作り、転送先を actions_taken に書く |
| 英語など日本語以外の通話 | 文字起こしの locale が違う。下書きを作らず manual |
| 引用が文字起こしに見つからない | その次の対応を作業一覧の候補から外し、赤で示す |
| コード表が改定された | 改定日以降の通話から新しい版を使い、スキーマの enum も入れ替える |
3行目は、この構成の外の手順が前提です。 ガス漏れや停電の通報は、下書きを待たずに通話中に保安の窓口へつなぐもので、この構成はその記録があるかを後から確かめる材料を出すだけです。
記録を残す
- 録音のファイル名と、文字起こしの結果(時刻・チャネル付き、伏せ字の後)
- 使ったコード表の版と、スキーマの版
- Azure OpenAI に渡した入力と、返ってきたJSONの全文
- 引用の照合の結果と、下書きの状態(
readyなど) - オペレーターが直した記録 … どの欄を、何から何に変えたか。足した次の対応
- 下書きができるまでの時間と、
manualになった件数
5つ目が、指示とコード表を直す材料になります。 特定のコードで選び直しが多ければ、コード表の注記が足りていません。次の対応を足した件数が多ければ、約束の言い方のパターンを指示に足します。
04実装レベルの3段階
半自動化で、1件4分が2.5分程度になります。 下書きは出ますが、別の画面から応対記録の欄へ写す作業が残ります。本格構成で1.5分になり、この段階が本記事の想定です。 差が大きいのは、欄ごとの転記と、次の対応の期日と担当の入力が、1件ずつの手作業だからです。
05工数削減シミュレーション
導入後 9,000件 × 1.5分 ÷ 60 = 225 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 家庭向けに電気・都市ガスを売っている小売事業者や、水道の料金センターなど、引越し・料金・契約の変更の電話を毎月数千件受けているコールセンター。通話をオペレーターと顧客の2チャネルで録音しており、通話が終わるたびに録音のファイルを取り出せる場合。応対記録の問い合わせの種類がコード表で決まっている場合。Azure を使っている場合。
- 通話の録音を通話の直後に取り出せない場合。応対記録の項目が自由記述の1欄だけで、問い合わせの種類のコード表が無い場合。月の通話が数百件で、オペレーターの入力が負担になっていない場合。なお、ガス漏れや停電などの保安・緊急の通報の扱いと、苦情として社内で管理するかの判断はこの構成では代替できません。
07最小構成で試す方法
- 先月の通話から30件を選ぶ(うち数件は、折り返しの約束が記録から漏れていた通話を入れる)
- その30件の録音を Azure AI Speech の画面や API で文字に起こす。カード番号などは手で伏せる
- 第7章の指示とコード表を使い、Azure OpenAI の画面で1件ずつ下書きを作らせる
- 出てきた下書きを、当時オペレーターが書いた応対記録と1件ずつ突き合わせる
- 食い違った箇所は、録音を聞いてどちらが正しいかを確かめる
30件は必ずやってください。 要約の質より先に、次の対応の抜き出しが当時の記録より多く出るかを見ます。
| 出てきた内容 | 判断 |
|---|---|
当時記録から漏れていた約束が follow_ups に出た | 自動の処理に進む |
案内まで follow_ups に入った | 約束と案内の例を指示に足す。構成は有効 |
| コードの選び方が当時の記録と食い違う | コード表の注記を書き足す。当時の記録のほうがぶれていることも多い |
3行目は必ず出ます。 失敗ではなく、第3章の(d)のぶれが、30件の中で見えたということです。 どちらが正しいかをスーパーバイザーと決め、その決まりをコード表の注記に書きます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 案内まで次の対応に入り、作業一覧が膨らむ | 約束と案内を分けることを指示の2か所に書き、例を足す |
| 「明日」がAIの判断で日付になる | 言った言葉のまま写させる。 日付は顧客管理システムで |
| 聞き取りの誤りの金額が要約に載る | 数字を要約に書かせない。金額は請求の画面で見る |
| 会話向けの PII 検出が日本語で使えない | テキストの PII 検出を使い、桁の規則の伏せ字を重ねる |
| 料金メニューの名前を取り違える | フレーズリストに登録する(API のバージョン 2025-10-15) |
| ステレオで話者分離を有効にして失敗する | 2チャネルの録音ではチャネルで話者を分ける |
| 下書きが後処理に間に合わない | 待たずに手で書く。manual の件数を毎日見る |
コード表と enum の版がずれる | 改定のときに両方を同じ版の番号で入れ替える |
| 下書きを読まずに保存する | 次の対応の欄は確定の操作を必須にする |
| 苦情の判断をAIの印で決めてしまう | 印は候補。社内の苦情の定義でスーパーバイザーが決める |
上の2行が、この構成の失敗のほとんどです。 どちらも、次の対応の欄にAIが「気を利かせた」ものが入ることで起きます。次の対応は、作業一覧という形で人の仕事を増やす欄です。 引用と言った言葉のままにさせることで、取り違えを見つけやすくします。
下の2行は、AIの問題ではありません。 下書きの質が上がるほど、読まずに保存したくなります。次の対応の確定を操作として残します。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 通話の録音と文字起こし(お客さまの氏名・住所・電話番号、引越しの日付と転居先、支払いの情報)、契約の情報、オペレーターの発話です。
- 伏せ字を前処理で確実に行う … カード番号、口座番号、マイナンバーは応対記録の要約に要りません。Azure OpenAI に渡す前に、PII 検出と桁の規則の二重で伏せます
- 処理の地域を決める … 公式の説明では、プロンプトと応答は顧客が指定した地域の中で処理され、Global や DataZone のデプロイの種類ではそれぞれの範囲で処理されうるとされています。日本の地域の標準のデプロイを選びます
- 学習への利用と不正利用の監視を確かめる … 公式の説明では、プロンプトと応答は他の顧客や OpenAI に提供されず、基盤モデルの学習に使われないとされています。一方で、不正利用の監視の仕組みがあり、兆候が検知されると、プロンプトと応答の一部が確認の対象になり、必要に応じて人が確認するとされています。監視の扱いの変更を申請できる条件に当たるかを確かめます
- 履歴を残す機能を使わない … Responses API は会話の履歴を保存する機能とされています。1通話で完結する処理なので Chat Completions API を使います
- 下書きを自動で保存しない … 応対記録は、苦情と問合せの処理の記録です(電気事業法第2条の15、ガス事業法第16条)。オペレーターが確かめて保存したものだけを、処理の記録とします
- 文字起こしの保存期間を録音にそろえる … 文字起こしは録音と同じ情報です。録音より長く残さないようにします
誤りが起きた場合のリスクは、約束が記録から漏れることと、約束していないことが作業一覧に載ることの2つです。 前者は下書きを信じて足さないことで、後者は案内を約束として拾うことで起きます。どちらも、次の対応を引用付きで出し、オペレーターが確定させることで防ぎます。
10まず何から始めるか
1週目:コード表に選び方の注記を足す
問い合わせの種類のコード表に、複数の話が出たときにどちらを選ぶか、似たコードの違いを書き足します。スーパーバイザーと、次の対応の種類の一覧(折り返し、書類送付、立会いの手配、他部署への依頼)を決めます。
2週目:30件で試す
先月の通話から30件を選び、文字に起こして下書きを作らせます。当時の応対記録と突き合わせ、次の対応が当時より多く出るかを最優先で見ます。
3週目:録音の取り出しを確かめる
通話録音システムから、通話が終わるたびに2チャネルの録音を取り出せるか、その方式(通知かフォルダの監視か)を確かめます。 Azure の処理の地域と、不正利用の監視の扱いを決めます。
4週目:通話ごとの処理をつなぐ
通話の終わりから、文字起こし、伏せ字、下書きの作成までをつなぎ、別の画面に下書きを表示します。 この時点では応対記録の欄には入れず、オペレーター数名に後処理の参考として使ってもらいます。
2か月目: 引用の照合と下書きの状態の判定を足し、応対記録の画面の欄に下書きを入れます。manual の件数と、次の対応を足した件数を毎週数えます。3か月目以降: 全オペレーターに広げ、1件4分が何分になったかを実測します。オペレーターが次の対応を足す件数が減り、下書きのまま確定できる通話が大半になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 小売電気事業者が、小売供給の業務の方法や料金その他の供給条件についての小売供給の相手方からの苦情及び問合せを、適切かつ迅速に処理しなければならないこと(第2条の15) | e-Gov 法令API: 電気事業法 | 2026-10-14 |
| ガス小売事業者が、小売供給の業務の方法や料金その他の供給条件についての小売供給の相手方からの苦情及び問合せを、適切かつ迅速に処理しなければならないこと(第16条) | e-Gov 法令API: ガス事業法 | 2026-10-14 |
高速文字起こしが結果を同期で返し、実時間より速く処理すること。5時間未満・500MB未満の音声が対象なこと。channels に [0,1] を指定できること。ステレオで話者分離を有効にすると channels に [0,1] を指定できず、話者分離が単一チャネル前提なこと。phraseList が API のバージョン 2025-10-15 で使えること。応答の phrases に offsetMilliseconds と channel が付くこと | Microsoft Learn: Use the fast transcription API | 2026-10-14 |
テキストの PII 検出が日本語(ja)に対応すること。会話向けの PII 検出の対応言語が英語・フランス語・ドイツ語・スペイン語であること | Microsoft Learn: PII detection language support | 2026-10-14 |
構造化出力が指定した JSON スキーマに従い、Chat Completions API と Responses API の両方で使えること。すべてのフィールドを必須にし additionalProperties: false を設定すること。最大100個のオブジェクトのプロパティと最大5段の入れ子。minLength・pattern・minItems・maxItems などが使えないこと。列挙型が使えること | Microsoft Learn: Azure OpenAI で構造化出力を使用する方法 | 2026-10-14 |
| プロンプトと応答が他の顧客や OpenAI に提供されず、基盤モデルの学習に使われないこと。プロンプトと応答は顧客が指定した地域で処理され、Global と DataZone のデプロイではそれぞれの範囲で処理されうること。Responses API が会話の履歴を保存すること。不正利用の監視で、兆候が検知されるとプロンプトと応答の一部が確認の対象になり、必要に応じて人が確認すること。監視の扱いの変更を申請できること | Microsoft Learn: Data, privacy, and security for Foundry Models sold by Azure | 2026-10-14 |
保安の通報の扱いと、社内で苦情として管理する範囲は、自社の保安の規程と苦情対応の規程で決めてください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。問い合わせの種類のコード表は、事業者ごとに異なります。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1586)についてのご相談はこちらから。
