
ケース面接
2026/11/03
技術設計面接(システムデザイン面接)のお題「音声対話システム開発」を題材に、事前に押さえておく知識、面接で引き出せる前提、論点、模範解答、よくあるつまずきを順に解説します。
ほかのお題の解説は技術設計面接の解説と模範解答まとめにあります。
この記事で使う設計の基礎は、日本語のシステムデザイン面接の教材 SystemDesign InterviewCat で詳しく学べます。この記事の各節に関係する章は次のとおりです。
InterviewCat の章 | この記事で関係する節 |
|---|---|
SystemDesign InterviewCat の全体像 | |
面接で見られることと進め方 | |
4. 全体構成(電話 API と音声をやり取りする) | |
4. 全体構成、9. 条件の変更への対応(200 院への拡大) | |
5. 1 秒の内訳 | |
2. 見積もり、4. 全体構成(予約 API の流量制御) | |
6. 取り違えを防ぐ確認、8. 障害への備え(登録を再試行しない理由) | |
6. 取り違えを防ぐ確認(Web 予約との枠の取り合い) | |
7. スタッフへつなぐ経路、8. 障害への備え |
設計面接では、お題を聞いた時点で「たぶんこの作りだろう」という仮説を持ち、前提を聞くたびにそれを確かめたり崩したりします。電話で話す AI のお題なら、まず「患者の声を受けてから AI の声を返すまでを、どうつなぐか」の選択肢を押さえておきます。声を受けて声を返すまでを、文字を経由して順につなぐか(OpenAI は chained、一般にはカスケード方式と呼ぶ)、音声をそのまま扱うモデルに任せるかの選び方を、ここでは音声対話の方式と呼びます。
患者が「来週の水曜の午前に空いてますか」と言い終え、AI が「水曜の午前ですね。10 時と 11 時が空いています」と返す場面を、方式ごとに時間の棒で並べます。横軸は患者が言い終えてからの時間で、点線が前提の 1 秒です。

同じ「来週の水曜の午前に空いてますか」に対して、方式ごとに裏で起きることを並べます。
順につなぐ方式(無音を待ってから処理する):無音が一定時間続くのを待ち、録った音声を STT に渡して文字にし、その文字を LLM に渡して返事を作り、「水曜の午前ですね。10 時と 11 時が空いています」が全部できてから TTS で声にします。部品ごとに製品を選べ、途中に文字が残るので、何を聞き取って何を答えたかを確かめられます。弱いところは、待ちが足し算になることです。図の 1 行目のように、無音の待ち、文字起こし、返事の全文、声の合成が順に並ぶので、1 秒には届きません。
順につなぐ方式(ストリーミングで重ねる):部品は同じですが、待ちを重ねます。STT には話している最中から音声を流して文字起こしを進めておき、LLM が「水曜の午前ですね」の 1 文を作った時点で TTS に渡して話し始めます。「10 時と 11 時が空いています」は、1 文目を話しているあいだに作ります。無音を待つ方式と比べると、途中に文字が残る良さを保ったまま、話し始めまでの時間を大きく縮められます。それでも、話し終わりの判定の待ちと、文字起こし、返事、声それぞれの最初の出力までの時間は残ります。
音声をそのまま扱うモデル(speech-to-speech):声を受けたモデルが、文字を経ずに声で答えます。順につなぐ方式と比べると、処理を受け渡す時間が無いぶん速く、声の調子も返事に反映できます。ただし、話し終わりの判定は同じように要ります。弱いところは、返事の前に中身を確かめにくいことです。OpenAI の Realtime API では、患者の発話の文字起こしはモデルとは別の仕組みで非同期に作られるので(OpenAI Realtime client events)、返事より先に検査には使えません。返事の文を決まった型に差し替えたり、部品を 1 つだけ別の製品に替えたりすることもできません。
方式名は製品やフレームワークによって呼び方が変わりますが、設計面接で比べたいのは名前ではなく、どこで待ちが生まれ、返事の前に何を確かめられるかです。
方式の違いは、「水曜の午前ですね。10 時と 11 時が空いています」と返すまでの時間と、聞き取った内容を返事の前に確かめる場面の 2 つに、「決まった手順を守らせやすいか」を加えて比べると分かりやすくなります。
方式 | 話し終わってから声が返るまで | 聞き取った内容を返事の前に確かめる | 決まった手順を守らせやすいか |
|---|---|---|---|
順につなぐ(無音を待つ) | 返事を全文作ってから話すので、無音の待ち、文字起こし、返事の全文、声の時間の足し算になる | できる(文字が残る) | 守らせやすい |
順につなぐ(ストリーミング) | 「水曜の午前ですね」ができた時点で話し始めるので、話し終わりの待ちと、文字起こし、返事、声それぞれの最初の出力までの時間で済む | できる(文字が残る) | 守らせやすい |
音声をそのまま扱うモデル | 話し終わりの待ちとモデルの最初の声までで、処理を受け渡す時間が無いぶん短い | 難しい(文字起こしは返事と並行して別に作られるので、返事の前には使えない) | モデルの指示の守り方に頼る |
表から分かるとおり、速さだけなら音声をそのまま扱うモデルが有利で、確かめやすさなら順につなぐ方式が有利です。順につなぐ方式でもストリーミングで重ねれば、速さの差はかなり縮まります。ただし、どの方式でも話し終わりの待ちは残ります。
話し終わりの判定:一番簡単な形は、VAD(音声に人の声が入っているかどうかだけを見分ける仕組み)で無音が一定時間続いたら話し終わりとみなすものです。無音の長さだけで決めると、待ちを短くすれば言いよどみの途中で割り込み、長くすれば返事が遅れます。そこで、文字起こしの途中経過と会話の流れから「この言い方なら続きがある」と見分けるモデルを VAD と併せて使う方法があります。「来週の、えっと」で止まったら待ち、「水曜の午前で」で止まったら早めに返す、という区別ができます。
割り込み:AI が話している途中で患者が話し始めることを割り込みと呼び、どの方式でも、割り込まれたらすぐ AI の声を止める処理が要ります。止め方の詳細は、模範解答の 5 で扱います。
お題文だけを読んだ段階では、次の仮説を置きがちです。どれも筋は悪くありませんが、前提を聞くと一部が崩れます。答え合わせは「隠れていた前提を見直す」で行います。
仮説 | 中身 | 確かめること |
|---|---|---|
1 | 音声をそのまま扱うモデル 1 つで作れば、速くて簡単 | 聞き取った内容を文字で使う場面があるか、答えてはいけない用件があるか、費用の上限 |
2 | 話し終わりは、無音が一定時間続いたら決めればよい | 話し始めまでの許容時間、患者の話し方の特徴 |
3 | 聞き取った日時と名前をそのまま予約 API に登録すればよい | 取り違えの重さ、聞き取りにくさ、ほかの経路と枠を取り合うか |
4 | AI が困ったらスタッフに転送すればよい | AI が止まったとき、転送先がいない時間帯、スタッフの人数 |
面接官から示されるお題は次のとおりです。
本日はシステムの設計方法についてディスカッションしたいと思います。今、歯科クリニックチェーンの電話の予約受付を自動化するために、音声で対話するAIを作ることを考えています。電話で予約の新規・変更・キャンセルを受け、予約台帳のAPIで空きを確認して登録し、判断できない用件はスタッフに転送するようにしたいです
▼このお題は CaseMatch の AI 面接で、面接官に前提を質問しながら練習できます。
前提は質問すれば答えてもらえます。面接で引き出せる前提を、音声対話の方式の選び方に関わるものとそれ以外に分けて並べます。種類の列は、機能要件、非機能要件、制約、将来のどれにあたるかです。設計への影響の列は、次の節の問いを考えてから読んでください。
事前知識の比較表の 3 つの比べ方(声が返るまでの時間、返事の前に確かめられるか、手順を守らせやすいか)と、どの方式でも要る話し終わりの判定と割り込みの扱いを決める前提です。
種類 | 前提 | 値 | 設計への影響 |
|---|---|---|---|
非機能 | 応答の速さ | 相手の話し終わりから1秒以内に発話開始 | 無音を待ってから順に処理する作りでは届かない |
機能 | 割り込み | 患者が途中で話したらすぐ発話を止める | 電話の側で再生を待つ音声まで捨てる |
非機能 | 話し方 | 高齢患者が多く聞き取りにくい話し方もある | 無音の待ちを短くすると言いよどみで割り込む |
非機能 | 発音 | 方言や入れ歯で発音が不明瞭な患者もいる | 番号を声の聞き取りに頼れない |
制約 | 予約 API の速さ | 予約APIは1回1〜2秒、毎秒10リクエストまで | 待つあいだに話すことが要り、呼び出しを全通話で分け合う |
機能 | 答えない用件 | 症状の相談や治療内容の質問には答えず、スタッフへ転送する | 返事の前に中身を確かめられる作りが要る |
機能 | 転送時の画面 | 転送したときは、AIが聞き取った用件をスタッフの画面に出したい | 聞き取った内容を文字で持つ |
制約 | 費用 | 費用は1通話あたり50円以内 | 方式ごとの単価と通話の長さで比べる |
取り違えの防ぎ方、予約台帳とのやり取り、転送、個人情報、規模のように、どの方式を選んでも別に設計が要る前提です。
種類 | 前提 | 値 | 設計への影響 |
|---|---|---|---|
機能 | 目標 | 受付スタッフの電話対応を半分に減らし、来院した患者の対応に回したい | 予約の電話の大半を AI が最後まで終える必要がある |
非機能 | 取り違え | 予約の日時や患者の取り違えはゼロにしたい。迷ったらスタッフへ転送してよい | 登録の前に必ず確かめる手順を置く |
非機能 | 通話の量 | 首都圏に40院、1院あたり電話は1日60〜80件で、うち予約関連が約7割 | AI が終えるべき割合が決まる |
非機能 | 同時通話 | ピーク同時100通話 | 予約 API の上限とぶつかる |
非機能 | ピークの時間 | ピークは平日の9〜10時と、昼休み明けの14時台 | スタッフも忙しい時間に転送が集まる |
機能 | 患者の特定 | 患者は診察券番号、または氏名・生年月日・電話番号で特定する | 番号はプッシュ入力で受ける |
制約 | 枠の取り合い | 同じ空き枠をWeb予約と取り合うことがある | 確定の直前に空きを照会し直す |
制約 | 電話の転送 | 各院の代表番号はクラウドPBXにあり、外部の電話APIへ転送できる | 停止時の転送を電話の側に持たせられる |
制約 | 予約台帳 API | 予約台帳はSaaSで、APIは空き照会と登録・変更・取消のみ | 登録の結果が分からないとき、予約を読み返して確かめられない |
制約 | 録音 | 通話は既存の仕組みで録音しており、3年保存の決まりがある | 録音は既存の仕組みに任せ、AI の側で音声を持たない |
制約 | 停止時 | 停止しても電話は必ずつながる | AI の外に転送の経路を持つ |
制約 | 急患 | 痛い・腫れているなどの急患の当日枠はスタッフが判断 | 急患は予約を取らずに転送する |
制約 | 症状の扱い | 症状は要配慮個人情報にあたり、外部に保存する場合は同意が要る | 症状の中身を記録に残さない |
制約 | 転送先 | 受付スタッフは1院2名、転送先は各院の内線 | 転送が出られないときの扱いが要る |
機能 | 夜間と休日 | 夜間・休日も予約を受けたいが、その時間は転送先がいない | 転送の代わりに折り返しを受け付ける |
将来 | 拡大 | 1年後に全国200院へ広げる | 同時通話が増え、予約 API の上限が先に詰まる |
お題文は「電話で予約を受けて、空きを確認して登録し、判断できなければ転送する」としか言っていません。前提の表は、質問して初めて出てきたものです。設計への影響を見る前に、あらためて前提を読み直し、お題文の裏に何が隠れていたかを考えます。先に次の問いを考えてから、前提の表の「設計への影響」の列と見比べてください。
前提の多くは単独では難しくありません。難しいのは 2 つが互いに逆を向いているところで、このお題では次の 3 組です。これがそのまま、面接の後半で詳しく問われる 3 つの論点(深掘り)になります。
ぶつかる前提 | なぜぶつかるか | 解き方 |
|---|---|---|
1 秒以内に発話開始 × 聞き取りにくい話し方 | 無音の待ちを短くすると言いよどみで割り込み、長くすると 1 秒を超える | 話し終わりを言い方から見分け、処理を重ねる |
取り違えゼロ × 聞き取りにくい話し方、Web 予約と枠を取り合う | 聞き取りを信じて登録すると誤り、聞き直しを重ねると通話が長くなり、確かめた枠もすぐ埋まりうる | 番号はプッシュ入力にし、日時と患者は復唱で確かめ、確定の直前に空きを照会し直す |
停止しても電話は必ずつながる × 電話を AI が受ける、夜間は転送先がいない | AI が電話を最初に受けるので AI が止まると電話もつながらず、夜間は転送先もいない | 転送の経路を AI の外(電話 API とクラウド PBX)に持たせ、夜間は折り返しの依頼として受ける |
仮説 | 崩した前提 | 置き換え |
|---|---|---|
1. 音声をそのまま扱うモデル | 症状には答えない、取り違えゼロ(復唱の文を型で固定したい) | STT、LLM、TTS を順につなぎ、ストリーミングで重ねる(音声をそのまま扱うモデルは代わりの案に回す) |
2. 無音で話し終わりを決める | 1 秒以内、聞き取りにくい話し方、方言や入れ歯 | VAD に、意味から話し終わりを見分けるモデルを足す。番号のように聞き違えると困るものはプッシュ入力にする |
3. 聞き取ったまま登録 | 取り違えゼロ、Web 予約との取り合い、API に予約の読み出しが無い | 復唱で確かめてから登録し、確定の直前に空きを照会し直す。登録の結果が分からないときはスタッフに回す |
4. 困ったら転送 | 停止しても必ずつながる、夜間は転送先がいない、1 院 2 名 | AI が止まっても電話 API の側で内線へ転送する。内線が出ないときと夜間は折り返しの依頼として受ける |
このお題は、音声認識と LLM をつないで予約を取るだけのシステムに見えます。しかし実際に問われるのは、「1 秒以内に話し始める」速さと、「日時と患者を取り違えない」「止まっても電話がつながる」確かさを、聞き取りにくい電話の音声の上で両立させる設計です。
論点は 3 つあり、重さの順に 1 秒の内訳、取り違えを防ぐ確認、スタッフへつなぐ経路です。どれも前提のうち 2 つが互いにぶつかっており、どちらをどう守るかを自分で決めて説明できるかが問われます。予約台帳の側の作りには深入りしなくてかまいません。
模範解答の深掘り(5〜7)では、論点ごとに「弱い答え」「よい答え」「より良い答え」を並べ、何が足りないかを示しています。
面接での問答の順には合わせず、このお題への答えを 1 つの設計としてまとめた解答例です。設計の筋は、STT、LLM、TTS をストリーミングで重ねて 1 秒に収め、予約台帳には復唱で確かめた内容だけを送り、AI が止まっても電話の側で内線へつなぐ、というものです。前提に無いことは仮定として置き、その旨を書いています。
前提を確かめたうえで、最初に作る範囲を次のように切ります。
LLM には会話の聞き取りと言い換えだけを任せ、予約台帳に何を送るか、いつ転送するかは、会話の状態を持つ自前のコードで決めます。
見積もりで出すのは、構成を決める 3 つの数字だけです。どれも前提の値から計算できます。
見積もり | 計算 | 決まること |
|---|---|---|
AI が最後まで終える割合 | 0.5 ÷ 0.7 ≒ 0.7(予約の電話の 7 割) | 転送は予約の電話の 3 割までに抑え、転送の理由を数える |
スタッフに残る電話 | 60〜80 件 × 0.5 = 1 院 1 日 30〜40 件 | 2 名で受けきれない時間に備え、内線が出ないときの折り返しを置く |
予約 API の呼び出し(上限を全院で共有すると仮定) | 10 回/秒 ÷ 100 通話 = 1 通話あたり 10 秒に 1 回 | 全院で共有する流量制御を置く |
予約台帳の正となるデータは SaaS の側にあり、自前で持つのは「1 本の通話で何を聞き取り、何を確かめ、台帳に何を送ったか」の記録だけです。中心になる表は次の 4 つです。
表 | 主な項目 | 書き換え |
|---|---|---|
通話 | 通話 ID、院 ID、発信者番号、開始と終了の日時、結果(AI で完了、転送、折り返し) | 通話の終わりに結果を書く |
用件 | 通話 ID、種類(新規、変更、取消)、患者 ID、希望の日時、項目ごとの確認状態(未確認、復唱済み、プッシュ入力済み) | 会話の進みに合わせて更新する |
予約操作 | 操作 ID、用件、送った内容、結果(成功、枠が埋まっていた、結果不明) | 追記のみ |
転送と折り返し | 通話 ID、理由(急患、答えない用件、聞き取れない、障害)、転送先、用件の要約、折り返しの状態 | 折り返しの状態だけを更新する |
予約操作の表は、すべての項目が確認済みになった用件からしか作れないようにします。用件の要約には「症状の相談あり」のような種類だけを書き、症状の中身は残しません。
患者との会話は、通話ごとに 1 つの音声エージェントが最初から最後まで受け持ちます。予約台帳との通信と記録は、その裏で流量制御を通して行います。

色を付けた音声エージェントがこの設計の要で、会話の状態と「何が確認済みか」をここで持ちます。
通話の録音は既存の仕組みに任せ、音声エージェントは音声を保存しません。STT の文字起こしも、記録に残すのは用件の項目だけにして、会話の全文は残しません。
実例:OpenAI は音声エージェントの作り方として、音声をそのまま扱うモデルと、STT、LLM、TTS を順につなぐ方式の 2 つを挙げ、後者の利点に処理ごとの中身が見えること、決まりの検査や会話の記録を残しやすいことを、弱みに遅延が増えることを挙げています(OpenAI Voice agents)。電話 API の例として Twilio の Media Streams は、通話の音声を 8kHz の μ-law で WebSocket に流し、こちらから返した音声を再生します(Twilio Media Streams)。
代わりの案:STT、LLM、TTS の代わりに、音声をそのまま扱うモデルを使う構成もあります。話し始めまでの時間は縮まりますが、復唱の文をテンプレートで固定すること、症状の相談を返事の前に止めることがしにくくなります。採るなら、モデルが予約ツールを呼ぶときの引数を文字の用件として受け取ってスタッフ画面にも出し、確認と登録の手順は自前のコードに残します。1 通話 50 円に収まるかは、どちらの方式も通話の平均の長さと各サービスの単価で計算して比べます。
1 秒は、処理を順に待つと超え、重ねても余裕の無い長さです。話し終わりの判定、STT、LLM、TTS のそれぞれで「何を待っているか」を分け、待ちを重ねるか短くします。最初の仮説の 1 と 2 は、ここで崩れます。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | 低遅延のモデルを使います | どこに時間がかかるかを言っておらず、1 秒に収まる根拠が無い |
よい答え | STT、LLM、TTS の処理ごとの時間を見積もり、LLM の出力を文ごとに TTS へ渡します | 話し終わりを決める待ちと、予約 API の 1〜2 秒の扱いが無い |
より良い答え | 処理ごとに重ね、話し終わりは意味から見分け、決まった文は作り置きの声で返し、予約 API を待つあいだは先に一言話します | なし(中身は下の表と 4 つの項目) |
処理ごとの目安は次のとおりです。数字は Twilio が公開している目安で、製品と条件で変わるので、作るときは自分で計測し直します。
処理 | 何を待つか | 目安 | 縮め方 |
|---|---|---|---|
話し終わりの判定 | 無音が続くのを待つ | 無音の待ちの長さそのもの | 意味から見分けるモデルで、言い切った発話では待ちを短くする |
STT | 最後の言葉の文字起こしが確定する | 約 350ms | 話している最中から音声を流し、文字起こしを先に進めておく |
LLM | 返事の最初の文字が出る | 約 375ms | 指示を短くし、復唱や定型のあいさつは LLM を通さず固定の文で返す |
TTS | 最初の音が出る | 約 100ms | LLM の出力を文ごとに渡し、定型の文は声を作り置く |
電話網と通信 | 声が行って戻る | Twilio の目標では、処理側 885ms と、話し手の声が相手の耳に届くまでの 1,115ms の差の約 230ms | 音声エージェントを電話 API と近い地域に置く |
3 つの処理の目安を足すと約 825ms、電話網を含めると 1 秒を超えます。目安どおりでも 1 秒には余裕が無いので、話し終わりの待ちを意味から見分けて短くし、決まった文は作り置きの声で返します。
この構成で 1 秒を超えやすいのは、LLM が予約ツールを呼ぶかどうかを決めてから話す場面です。ツールを呼ぶと決めた時点で固定の文を先に流し、ツールの結果を待つ時間を会話の間に隠します。
実例:Twilio は、STT、LLM、TTS を順につなぐ音声エージェントの遅延を処理ごとに分け、STT 約 350ms、LLM の最初の出力まで約 375ms、TTS の最初の音まで約 100ms を目標に挙げ、LLM がストリーミングで返さないなら採用しない、としています(Twilio, 2025)。LiveKit は、無音の長さだけで話し終わりを決めると短ければ割り込み、長ければ遅れると指摘し、過去の会話から話し終わりを見分けるモデルで意図しない割り込みを 85% 減らしたと報告しています(LiveKit, 2024)。電話の側では、Twilio の Media Streams に clear を送ると、再生を待っている音声がすべて消えます(Twilio Media Streams)。
予約台帳に送るのは、患者と日時と操作の種類がすべて確認済みになった用件だけです。確認のしかたは項目ごとに変え、聞き取りにくい項目ほど声に頼りません。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | 聞き取った内容を確認してから登録します | どの項目をどう確かめるかが無い |
よい答え | 患者と日時を復唱し、「はい」をもらってから登録します | 番号の聞き違いと、確かめたあとに Web 予約で枠が埋まる場合が残る |
より良い答え | 番号はプッシュ入力で受け、患者と日時は復唱し、確定の直前に空きを照会し直します | なし(中身は下の流れと 3 つの項目) |
Web 予約と枠を取り合う問題は、予約台帳 API に枠を仮押さえする機能が無いので、こちらでは完全には防げません。確定の直前に照会し直すことで取り合いが起きる時間を 1〜2 秒に縮め、それでも登録が「埋まっていた」で返ったら別の枠を提案します。
実例:Twilio の Gather は、電話のボタン入力(DTMF)を受け取る指示で、受け取る桁数と、入力の終わりを示すキー(デフォルトは #)を決められます(Twilio Gather)。番号のように聞き違えると困る項目を、声の聞き取りから外す方法になります。
転送の経路は、AI が正常に動いているときと止まったときで別々に持ちます。止まったときの経路は AI に頼らず、電話 API の側だけで完結させます。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | 困ったらスタッフに転送します | 何をきっかけに転送するか、AI が止まったらどうするかが無い |
よい答え | 急患、症状の相談、聞き取れないときに転送します | AI 自体が止まったときに電話がつながらない |
より良い答え | AI が止まったら電話 API の予備の指示で内線へ転送し、転送先がいないときは折り返しで受けます | なし(中身は下の 4 つ) |
転送の前には、スタッフ画面に用件の要約(種類、患者、希望の日時、転送の理由)を出してから内線を鳴らします。スタッフは電話を取った時点で用件が分かり、患者は同じことを 2 回話さずに済みます。症状の相談で転送するときは、画面に出すのは「症状の相談」という種類までにし、症状の中身は患者から直接聞いてもらいます。症状を外部のサービスに保存しないためです。
実例:Twilio では、電話番号ごとに主の応答先とは別に予備の URL を登録でき、主の応答先から指示を取れないときや実行できないときは、すぐに予備の URL を呼び、そこで返した指示で通話を続けます(Twilio Availability and Reliability)。転送の Dial では、相手が出るまでの待ち時間(デフォルト 30 秒)と、終わったあとに結果を送る先を指定でき、結果には出なかった(no-answer)や話し中(busy)が入るので、そこから折り返しの受け付けに戻せます(Twilio Dial)。Google Duplex も、自分だけで終えられない予約を見分けたら人のオペレーターに合図して引き継ぎます(Google, 2018)。
どこが止まっても、患者の電話はスタッフか折り返しの受け付けにつながります。例外は予約の登録の結果が分からないときで、AI の側では片付けずにスタッフへ回します。
止まるもの | 患者に見えること | 手当て |
|---|---|---|
音声エージェント全体 | AI ではなく院の内線につながる | 電話 API の予備の指示で内線へ転送する。AI のサーバーに頼らない |
STT、LLM、TTS のどれか | 返事が遅れる | 決めた時間を超えたら「担当者におつなぎします」と固定の声を流して転送する。別の事業者への切り替えも用意しておく |
予約台帳 API の遅れと失敗 | 「確認に時間がかかっています」と言われる | 照会は再試行し、登録は再試行しない。結果不明の登録はスタッフ画面に回す |
予約台帳 API の上限 | 空きの確認を待たされる | 流量制御で確定の直前の照会と登録を先に通す。待ちが長いときは折り返しの依頼として受ける |
院の内線 | 転送したがスタッフが出ない | 呼ぶ時間に上限を決め、出なければ折り返しの依頼として受ける |
監視するのは、話し終わりから発話開始までの時間(中央値と遅いほうの 5%)、転送の割合と理由、割り込みで止まった回数、予約台帳 API の失敗と結果不明の数です。転送の割合は、見積もりで出した「予約の電話の 3 割まで」と並べて見ます。
面接の後半では、運用で起きた不具合や将来の要望という形で条件が足されます。答え方は、今の設計でなぜ起きたか、何をきっかけに何をどう処理して直すか、変えずに済むところはどこか、の順です。
例 1:同じ患者の予約が、同じ日時に 2 件入っていた
例 2:1 年後に全国 200 院へ広げたら、空きの確認で待たされる患者が増えた
判断 | 選んだ案 | 捨てた案、代わりの案 | 理由 |
|---|---|---|---|
音声対話の方式 | STT、LLM、TTS をストリーミングで重ねる | 代わりの案:音声をそのまま扱うモデル。捨てた案:無音を待ってから順に処理する | 途中の文字で確認と画面表示ができ、重ねて待ちを削れば 1 秒に近づけられる |
話し終わりの判定 | VAD と、意味から見分けるモデルの併用 | 無音の長さだけで決める | 言いよどみで割り込まずに、言い切った発話には早く返せる |
予約 API の待ち | 呼び出しと同時に固定の文を流す | 何も話さずに待つ | 1〜2 秒の沈黙を会話の間に隠せる |
患者の特定 | 番号はプッシュ入力、氏名は読み上げて確かめる | 番号も声で聞き取る | 方言や入れ歯でも番号を取り違えない |
登録の確かめ方 | 復唱、確定の直前の照会し直し、結果不明はスタッフへ | 聞き取ったまま登録、登録の自動再試行 | 取り違えと二重登録を出さない |
停止時の経路 | 電話 API の予備の指示で内線へ転送 | AI が自分で転送する経路だけ | AI が止まっても電話がつながる |
夜間と休日 | AI で終わる予約は受け、残りは折り返しの依頼 | 夜間は電話を受けない | 転送先がいなくても予約の電話を取りこぼさない |
つまずき | なぜ弱いか | 抜け出す一手 |
|---|---|---|
面接の最初から構成図を話し始める | 1 秒、取り違えゼロ、停止時の扱いなど、設計を決める条件を取りこぼす | 応答の速さ、取り違えの重さ、止まったときの扱いを先に聞く |
低遅延のモデルを使う、とだけ言う | どこに時間がかかり、なぜ 1 秒に収まるかを言えない | 話し終わりの判定、STT、LLM、TTS の処理ごとに時間を並べる |
話し終わりを無音の長さだけで決める | 短いと言いよどみで割り込み、長いと遅れる | 意味から見分けるモデルを足し、番号はプッシュ入力にする |
割り込まれたら TTS を止める、で終わる | 電話の側で再生を待つ音声が流れ続け、会話の記録も聞かせていない文を含む | 電話の側の音声を消し、聞かせたところまでで記録を切る |
聞き取った内容をそのまま登録する | 聞き違いと Web 予約との取り合いで、取り違えが起きる | 項目ごとに確かめ方を決め、確定の直前に照会し直す |
登録が失敗したら再試行する、と言う | 台帳に届いていた場合、二重に予約が入る | 照会と登録を分け、結果不明の登録はスタッフに回す |
困ったら転送する、とだけ言う | AI が止まったときと夜間に、電話がつながらない | AI の外に転送の経路を持たせ、夜間は折り返しで受ける |
会話の全文を保存する | 症状は要配慮個人情報で、外部に保存するには同意が要る | 録音は既存に任せ、記録には用件の項目だけを残す |
▼解説を読んだら、同じお題を AI 面接官を相手に通しで解いてみましょう。
海外の技術ブログと技術文書です。どれも開いて内容を確かめています。LiveKit と Twilio の記事は自社製品の紹介を兼ねています。
節 | 記事 | 参照した内容 |
|---|---|---|
事前知識 | Realtime client events(OpenAI) | 入力の文字起こしはモデルとは別に非同期で作られ、モデルが聞いた内容そのものではない |
事前知識, 4 | Voice agents(OpenAI) | 音声をそのまま扱うモデルと、STT、LLM、TTS を順につなぐ方式(chained)の利点と弱み |
4, 5 | 8kHz の μ-law の音声、clear で再生待ちの音声を消す | |
5 | A Guide to Core Latency in AI Voice Agents(Twilio, 2025) | STT、LLM、TTS の処理ごとの遅延の目標、処理側と電話網を含めた全体の目標、ストリーミングが必須であること |
5 | Using a transformer to improve end of turn detection(LiveKit, 2024) | 無音の長さだけで決める問題と、会話から話し終わりを見分けるモデル |
5 | Voice activity detection (VAD)(OpenAI) | server_vad と semantic_vad |
7 | Google Duplex(Google, 2018) | 人のオペレーターへの引き継ぎ |
6 | TwiML Voice: <Gather>(Twilio) | ボタン入力の桁数と終わりのキー |
7, 8 | Availability and Reliability(Twilio) | 主の応答先が使えないときの予備の URL |
7 | TwiML Voice: <Dial>(Twilio) | 転送の待ち時間と、出なかったときの結果 |
▼ほかのお題の解説
公式アカウント
CaseMatch編集部
CaseMatch編集部は、就活・転職における面接対策やキャリア選択に役立つ情報を発信する編集チームです。AI面接練習サービス「CaseMatch」の運営で得た知見や、企業選考・ケース面接・自己分析に関する実践的なノウハウをもとに、候補者が納得感を持って選考に臨めるコンテンツをお届けします。
1分で完了