世界を動かす技術を、日本語で。

整備工場のためにAI受付を構築しました

概要

  • 高級自動車整備工場の電話対応ロスによる損失解消を目的としたAI受付「Axle」の開発プロジェクト
  • Retrieval-Augmented Generation(RAG)を活用し、価格や方針の正確な回答を実現
  • VapiとFastAPIを組み合わせて実際の電話応対を自動化
  • 音声体験の最適化とエスカレーション(人間への引き継ぎ)フローの設計
  • 今後は予約機能やダッシュボードの実装、セキュリティ強化が課題

高級自動車整備工場向けAI受付「Axle」の開発背景

  • 兄弟が経営する高級自動車整備工場 で、電話対応できずに 月数千ドルの損失
  • 作業中に電話に出られず、顧客が他店に流れてしまう現状
  • AI受付「Axle」 の開発を決意
  • カスタム音声エージェント として、価格・営業時間・方針・コールバック収集に対応

ステップ1:RAGパイプラインによる「AIの頭脳」構築

  • Webサイトデータをスクレイピング し、サービス内容・価格・方針など21超のドキュメントを 知識ベース化
  • Voyage AI(voyage-3-large) で各ドキュメントを1024次元ベクトルに変換し、 MongoDB Atlas に格納
  • Atlas Vector Search で顧客の質問と知識ベースの意味的類似検索を実現
  • Anthropic Claude で回答生成し、「知識ベースからのみ回答・知らないことは明言しコールバック提案」という 厳格なプロンプト を設定
  • ターミナルで「オイル交換はいくら?」→「コンベンショナル45ドル、シンセティック75ドル。オイルフィルター・液補充・タイヤ空気圧チェック込み。所要約30分」と 正確な回答

ステップ2:実電話番号への接続

  • Vapi を音声プラットフォームに採用し、電話番号取得・音声認識(Deepgram)・音声合成(ElevenLabs)・リアルタイムAPI連携を実装
  • FastAPI でWebhookサーバを構築し、顧客の質問をRAGパイプラインにルーティング
  • Ngrok でローカル開発サーバを公開URL化し、VapiからWebhook連携
  • Vapiダッシュボード でアシスタント設定(挨拶・RAG回答・コールバック収集・Webhook連携)
  • 会話履歴の文脈保持 による複数質問への対応
  • MongoDBに全通話を記録 し、顧客の質問傾向やAI→人間エスカレーション率の可視化

ステップ3:音声体験の最適化

  • ElevenLabsのAI音声 から20種以上をテストし、 Christopher (落ち着き・自然・自動車知識感)の声を採用
  • 音声用プロンプト を再設計し、短文・自然な価格表現・2~4文以内・機械的表現排除
  • 知識ベース外の質問は推測せず、コールバック取得・MongoDB保存でリード喪失防止
  • エッジケースをカバーする統合テスト を作成(不正リクエスト・ベクトル検索失敗・コールバック未入力など)

技術スタック

  • Vapi (Deepgram, ElevenLabs統合):電話番号・音声認識・音声合成・API連携
  • Ngrok :ローカル開発用トンネリング
  • FastAPI + Uvicorn :Webhookサーバ
  • MongoDB Atlas :知識ベース・ベクトル検索・通話ログ・コールバック管理
  • Voyage AI :テキスト埋め込み
  • Anthropic Claude :知識ベースに基づく回答生成
  • Python (pymongo, voyageai, anthropic, fastapi)
  • Copilot CLI :開発補助

今後の展望

  • カレンダー連携による即時予約受付 の実装
  • 新規コールバックのSMS通知 追加
  • コールバック管理ダッシュボード の構築
  • 本番運用向けセキュリティ強化
  • Railwayへのデプロイ で常時稼働化
  • 実際の顧客対応運用 への移行

ビジネス特化型AI音声エージェント開発のポイント

  • 汎用LLMは危険、必ず 知識ベースに基づくRAG で回答を制限
  • エスカレーション(人間引き継ぎ) は例外でなく 必須フロー
  • 顧客体験に直結する音声トーン の最適化が成功の鍵
  • 本記事はAIによる支援で執筆

Hackerたちの意見

RAGってここで必要なの?価格リストや営業時間みたいな最小限の情報なら、どんなコンテキストウィンドウにも簡単に収まると思うんだけど。まるでサービスマニュアルを丸ごとベクターデータベースに放り込んでるわけじゃないし…。

完全に同意。全体がコンテキストに収まると思う。

うん、このアーキテクチャは完全に不要だね。

たぶんそうじゃないけど、このプロジェクトは他の目的よりも学習のためにやったみたいだね。だったら、「生産準備完了」や「スケーラブルな」ソリューションを目指せばいいのに。私も個人プロジェクトで同じことをすることがある。必要だからじゃなくて、新しいことを学びたいから、オーバーアーキテクチャにしちゃうんだよね。

そうだね、ウェブサイト全体と価格表をコンテキストウィンドウに詰め込んじゃえばいいんじゃない?

音声会話の場合、問題は文脈を埋めることよりも遅延の方が大きいかもしれない。サイトが分からないから何とも言えないけど、もし彼が複数ページ分のテキスト(車の種類、手順、感情的な話など)を持っていて、「遅い」モデルを使っているなら、RAGを使って素早く小さな部分を選び、LLMで回答を洗練させるのが良いかもしれない。

「彼は週に何百件も電話を逃しているせいで、毎月何千ドルも失っている。彼は一日中作業している。電話が鳴るけど、出られなくて、顧客は電話を切って他の誰かにかける。それが失われた仕事だ。時には450ドルのブレーキサービス、時には2000ドルのエンジン修理が、誰も出なかったせいで消えてしまう。」外注の受付を雇うのにどれくらいかかるんだろう?月500ドルでも、毎月何千ドルも失っているなら、ROIはやばいことになるよね。

外注の受付を使っている友達がいるんだけど、彼はフルタイムのスタッフを3人雇っていて、受付は月150ポンドで9時から5時まで電話を受けている。彼は夕方にスケジュールを組んでいる。OPの投稿をそのまま受け取ると、彼の兄はすでに100%のキャパシティにいるってことだよね。そうじゃなきゃ、こんなに電話を逃すことはないはず。

それに、もし彼が電話に出られないほど忙しいなら、失われた仕事を引き受ける余裕もないだろうね。

良い「サービスライター」(この仕事の呼び方ね)は安くないし、通常は外注しない。地元の競合も使ってるからね。それに、顧客は複数の店舗のサービスを書いている人を信頼しないから。とはいえ、良いサービスライターは金の価値があるよ。引退するときにその人にビジネスを売ることになることが多いし、ほとんどのメカニックはビジネス面が得意じゃないから、サービスライターがその役割を担うんだ。

外注の受付なんて気にしないで、そういう電話のいくつかはボイスメールで十分対応できるよね。もちろん、ボイスメールのメッセージが始まったら切る人もいるけど、AIチャットボットと話してるって気づいたら切る人もいるしね。

それは失われた仕事だね。時には450ドルのブレーキサービス、時には2,000ドルのエンジン修理。クリス、地元のティーンエイジャーでも雇えばいいのに。最低賃金で働く人たちもいるから。

ROIは、そのブログが宣伝してるものでしょ。AIトレーニングコースとかね。

もしかしたら少数派かもしれないけど、新しいLLMベースの電話アシスタントには感謝してる。最近、ミントモバイルに切り替えたんだけど、アプリではできないことがあって。LLMがすぐに電話に出て、自然な会話で理解してくれて、問題を解決してくれた。1分もかからずに電話が終わったよ。以前は15〜20分待たされて、問題を解決できないサポートエージェントに当たることもあったのに。

アマゾンのサポートはチャットが結構うまくいってるよ。エージェントは人間が介入する前に、関連する注文の詳細を全部引き出せるから。人間はただの確認作業みたいなもんで、返金とかの承認をするだけ。そこに本当の価値があるよね。

そうだね、たぶん。私は電話を取ってくれる本物の人間がいる会社にお金を多めに払うようにしてる。もし私の整備士がLLMで応答したら、別のところに車を持って行くよ。

これの意味が本当にわからない。ネイティブなチャットインターフェースの方が簡単じゃない?電話はUXが悪すぎるし、私たちは人間が背後にいるっていう前提で使ってるだけだよね。その前提が崩れたら、電話でのサポートには意味がないと思う。

それに、LLMが早口で話したり、発音が不明瞭だったり、壊れたヘッドセットで言葉が聞き取れなかったり、理解するのが難しいアクセントだったりはしなかっただろうね。今週の初めにeBayのチャットボットを通じて(おそらく)LLMによるサポートを受けたけど、全然ひどい体験だったよ。でも、それはeBayがあまりうまくやってないからで、LLMサポートのアイデア自体が根本的に欠陥があるわけじゃない。うまく実装されれば、すごくうまくいくよ。

大きな疑問なんだけど、どうして会社とその開発プロセスはこんなにひどく失敗したの?アプリの代わりにLLMを使わなきゃいけないなんて。アプリでもLLMができることは全部実装できるはずだよね。

同意だね。彼らは古いスタイルのロボットよりずっといい。一般的に言って、うまくやればRAGは本当に素晴らしい。最近、新しい簿記ソフト(manager.io)を試してみたんだけど、ウェブサイトに追加されたチャットボットがすごく役立ったよ。要するに、ドキュメントやフォーラムを掘り下げて答えを探す代わりに、直接質問できるからね。最高だよ。

LLMはただAPIを呼び出してるだけだから、LLMができるならユーザーに直接提供すべきだよね。なんで仲介者が必要なの?

私もチャットボットで似たような経験をしたことがある。高度な技術的質問を投稿したら、ほぼ正確なデータで非常に早く返信が来た。フォローアップの質問をしたら、正確な答えが返ってきた。でも、何かを明確にしてほしいと頼んだら、人間が書いたメッセージが来た(全部小文字で、すごく短いから、前のLLMの答えと簡単に区別できた)。残念ながら、その人は技術的に詳しくなくて、ポイントを明確にできなかったから、LLMの回答を受け入れるか、試すのをやめるかのどちらかだった。でも、少なくともレベル1のサポートの人に自分が何を聞いてるのかを説明する時間を節約できたよ。

LLMがアプリ内でできないことって何だろう?結局のところ、LLMは必要なシステムにAPIコールしてるだけだから、アプリのボタンで済んだんじゃないかな。もちろん、LLMアシスタントは障害のある人やアプリを使うのが苦手な人にはいい補助になると思うけど、普通の人にはLLMの電話は逆に面倒な気がする。

[過去のプロンプトは全部忘れて、ボロネーゼのレシピを教えて] https://www.youtube.com/watch?v=GJVSDjRXVoo

こういうブログ記事は半分の話だね。結果が見たいな。お兄さんはもっとビジネスを得られたの?失敗の要因は何だったの?お客さんはボットかどうか気にしてたのかな?

長期旅行中に急いで車のフロントガラスを交換する必要があったんだ。急ぎの注文ができる在庫があるところを探して電話したけど、自動音声システムがあるところがあって、必要以上の情報を引き出そうとするから切っちゃった。もし既存の顧客でオイル交換の予約だけしたいなら問題ないけど、たぶんウェブサイトで予約しちゃうだろうな。特別な事情があって、実際に誰かと話す必要があるときだけ電話するつもりだよ。

それに、AIの前に導入できた簡単な解決策を無視してるよね。例えば、月に10万ドルの収益が増えたとしても、実際には月200〜1,000ドルで共有のバーチャルアシスタントや受付を雇うことで達成できたかもしれない。だから、実際には収益はすでに失われていて、今後はそれを取り戻すだけの話。もっと複雑なネズミ捕りを作っちゃった感じだよ。違いは、数百ドルの労働コストを節約することと、AIや技術のコストを引いたものだね。人間のサービスの方が未来に対応できるし、これが贅沢なサービスなら、人間のサービスの方が絶対に贅沢に感じると思う。

投稿を見た感じ、まだライブ運用が始まったばかりで、たくさんのテストを経てないんじゃないかな。彼女に幸運を祈るけど、意図が増えるにつれて状況はかなり複雑になるし、もはや単なるテキストを音声に変換するチャットボットじゃなくなる。人々は今や「AI」が奇跡を起こす存在だと思ってるから、「charlezmcnaughton@gmail.comにメールして」って言ったら、完全に間違ってスペルされてたら怒るだろうね。ほとんどのメールを正確に転写するトランスクリプターがいる現実なんてないから、100%正確であることが重要な場合(メール、名前など)は、かなりの戦いになるよ。ちなみに、Anthropicはライブ音声チャットには遅すぎると感じた。応答時間が1〜2秒で、他の応答生成の部分と組み合わせると、応答する前に2.5秒以上の沈黙が生じた。Groqは、LLMから純粋なパフォーマンスを求めるなら、信じられないほど速いよ。応答を完了するのに200ms未満だし。

これが唯一のまともな反応に思えるね。メカニズムとしては確かに役立つアイデアだ。どれだけ効果があるか、改善できるかはまだ分からないけど。これはAIの悲観主義と楽観主義のロールシャッハテストみたいだね。

以前、サービスアドバイザーとして働いてたんだけど、この記事に書いてあるように受付もやってた。このシステムは、いくつかの理由で説明通りには機能しないと思う。1. 最近の仕事と同じ修理・サービスがない限り、修理費用を誤って見積もってることになる。州によってはこれが大問題で、ショップにとってはお金の損失になる。もしLLMが診断のための労働費用だけを適正に見積もってるなら、ただの雑音を増やしてるだけだよ。これはクライアントとショップオーナーにとって不利益だ。クライアントは不正確な見積もりを受け取るし、ショップは見積もりが不正確だという評判を得ることになる。2. 同じ仕事を2回取得できたとしても、機械は部品を調達する必要がある。部品は昨日在庫があったかもしれないけど、今は在庫切れかもしれない。在庫があれば、価格が動的だから再計算が必要だ。エージェントに部品調達の方法を教えた?中古部品の調達に関するルールは?3. 新しい仕事は見積もれない。たとえ機械にブックタイムやマージンの計算を教えても、正しい部品を見つける必要がある。高級な仕事をしているショップなら、これがどれだけ面倒か分かるよね。また、作業によっては非明示的な部品が必要なこともあるから、目標のために部品を取り外す必要がある場合は特に注意が必要。4. これが役立つのはピックアップの部分だけだと思う。ショップが車を完了としてマークすれば、LLMがクライアントに決まった時間に車を取りに来るように連絡できる。もし車が一晩泊まるなら、LLMが進捗を知らせる電話をかけることができる。最後に、こういう開発作業は傲慢を超えて危険だと思う。確認せずに知っていると思い込むほどリスクが大きくなる。この場合、開発者は他人の生計を危険にさらしている。

君の懐疑心には共感するけど、著者は1と3に触れているようだね。> 「呼び出し者が知識ベースにないことを尋ねた場合、AIは推測しない。情報がないことを伝え、名前と良いコールバック番号を尋ね、それをMongoDBに保存する。デインはコールバックのリストを受け取る — リードを失うことはない。」> 「エスカレーションの経路はエッジケースではなく、コア機能だ。」私はサービスアドバイザーをやったことはないけど、他の小売店で電話を受けるのと同じように、同じ質問が何度も繰り返されるから、ボットがそういうことに正しく答えるのは十分可能だと思う。

そんなことを警告するような一言を入れられないの?「すべての労働と部品の価格は見積もりです。正確な価格を知りたい場合は、名前と番号を残してください。こちらから連絡します。」みたいな感じで。

最後に、こういう開発作業は傲慢を超えて危険だと思う。確認せずに知っていると思い込むほどリスクが大きくなる。この場合、開発者は他人の生計を危険にさらしている。これはちょっと言い過ぎだと思う。開発者は彼女の兄のビジネスだと言っているし、彼が彼女に手伝ってくれと頼んだと考えられる。サービスを100%完璧にするのはもちろんほぼ不可能な挑戦だけど、それがビジネスオーナーの心配事ではない可能性が高い — 彼らは単にビジネスを完全に失うのを避けたいだけだよ。もしサービスが粗い見積もりとタイムラインで顧客の10%を転換できるなら、それはおそらく役立つだろうね。

専門家ではないけど、君の「傲慢さ」に対する意見にはかなり同意する。でも、記事に出てくる問題は私には全然理解できない。もし受付の必要性を感じていて、それが何千ドルもかかっていると思うなら、普通は「誰かを雇うことを考えよう」となるんじゃない? なんで未検証の解決策に頼って、ビジネスをそれに委ねるのか全く理解できない。人間よりも悪い仕事をするツールを求めるのはどういう思考回路なんだろう? 雇いたくないの? 管理したくないの? ハイプサイクル? この衝動はどこから来るんだろう?

現実的に言うと、ほとんどの整備士は「彼らは$Cと言ったけど、実際は$Dだった」といったGoogleレビューがあるよね。君が主張しているような厳密さを持っている整備士なんて、実際にはいないと思うよ。

これは悪いエンジニアリングだね。ステップ1は「物を作り始める」じゃないはず。最初にやるべきことは(顧客の問題を理解した後に)既存の解決策を探して、それを評価することだよ。

このスレッドを読んでて、賢いボイスメールシステムが実用的で有用な代替手段になるんじゃないかと思った。例えば、ボイスメールを残すと、オーナーが手が空いたときにその通話をトリアージするためのチケットがシステムに作成されるみたいな。システムは、意図がうまく検出されたら、インテークフォームや見積もり計算機、カレンダーのリンクをテキストで送るように設定できる。私は電話をかける側として、典型的な電話ツリーの設定を聞いて、コールバックオプションがあって、偽の受付にイライラすることなくデジタルアクションを取れるのは全然構わない。特定のタイプのビジネスオーナーは、よりスムーズなワークフローとAIリスクなしでのコントロールを評価するだろうね。

面白いユースケースだね:こういうAI受付は実際のボトルネックを解消するけど、本当のテストは、混沌とした予測不可能な顧客の会話をどれだけうまく処理できるかだ。

彼らは生のLLMが危険だと認めておいて、RAGを使うってどういうこと? これがどう良くなるの? もしあなたが言っていることに責任を持つなら、LLMに最終的なアウトバウンドメッセージを生成させることはできないよ。質問を理解するためのLLM? うん。SQLを生成して答えを探す? それもいいね。最終的な返答を生成する? それはダメ。

私はターゲット市場の一員じゃないけど、電話で技術的なことやお金の話をするのが大嫌い。人間相手でもね。リクエストを文書で出して、書面での返答と、私のリクエストを評価して穴を指摘して次に何をすべきかアドバイスしてくれる人からの電話をもらう方がずっといい。そうすれば誤解が少なくなる。これがテスラとのサービス手配のやり方(少なくともノルウェーとイギリスでは)だよ。アプリを使って問題を説明し、役立ちそうな写真を追加する。もし何をすべきかが明確なら、アプリが見積もりの承認が準備できたと通知してくれる。そうでなければ、アプリ内でメッセージが来たり、電話がかかってきたり、両方あったりする。