生成AI音声チャットボット
店舗の対面接客を代替・補完する、RAG搭載の生成AI音声接客システム(来店客向けキオスクUI+運営者向け会話分析コンソールの二層構成)
クライアント
実店舗の対面接客を代替・補完する生成AI音声接客キオスク(タイヤ・ホイール等の専門商材を扱う小売店舗向け/複数店舗・複数端末を単一基盤で運用するマルチテナント構成) | 提供形態: 店舗設置端末(キオスク)+ クラウド運用コンソール
私の役割
AIシステムアーキテクト 兼 フルスタックエンジニア(音声対話パイプライン・RAG設計、React フロントエンド、Flask バックエンド、AWS インフラの IaC 化、CI/CD まで全工程を単独で担当)
課題(Situation & Task)
専門知識を要する商材の接客を、限られた人員で・店舗ごとの品質差なく成立させる必要がありました。商品カタログや仕様はPDF・Excel・画像・動画に散在し、ベテラン店員でなければ即答できない問い合わせが日常的に発生。さらに「音声で自然に会話できること」が要件でしたが、文字起こし→生成→音声合成を直列処理すると応答に数秒以上かかり、対面接客としては体感が破綻していました。
本プロジェクトの本質的な難所は、以下の4点でした。
-
専門商材ゆえの「誤答が許されない」要件: 商品番号やサイズ(例: タイヤサイズ 225-60-15)を取り違えると、誤発注やクレームに直結します。生成AIの流暢さと、業務データの厳密な正確さを両立させる必要がありました。
-
散在する非構造データの活用: 商品カタログ(PDF)、仕様書(Excel)、商品画像・説明動画(mp4)など形式の異なる大量ドキュメントを横断し、キーワードではなく「意味」で検索して回答根拠にする仕組みが必須でした。
-
対面接客に耐える音声レイテンシ: 「文字起こし(STT)→入力チェック→検索→生成→音声合成(TTS)」という重い直列処理を、人と会話していると感じられる速度まで縮める必要がありました。
-
無人運用の安全性と改善ループ: 来店客が何を話すか制御できない無人キオスクのため、不適切発話のフィルタリング、セッション管理、そして「どの回答が外したか」を運営側が把握し継続的に改善できる運用基盤が不可欠でした。
技術選定の理由(Rationale)
生成LLMに AWS Bedrock(Claude 3.5 Sonnet)を採用:日本語接客の自然さと、データをAWS内に閉じられる統制面を両立。langchain_aws 経由で「回答生成」「入力モデレーション」「メディア提示判定」の3用途に共通利用
STT は OpenAI Whisper(whisper-1)、TTS は AWS Polly(音声「Takumi」/ SSML で読み上げ速度125%):日本語の認識精度と、接客で聞き取りやすい発話速度を実装レベルでチューニング
埋め込みは OpenAI text-embedding-3-large(1024次元)を採用:多様な商材ドキュメントの意味検索精度を優先しつつ、次元数を1024に抑えて検索コストとのバランスを確保
ベクトルストアは PostgreSQL + pgvector に集約:専用ベクトルDBを増設せず、業務データと埋め込みを単一RDBで運用。コスト・運用負荷・トランザクション整合性で有利と判断
重い音声パイプラインは flask-executor のバックグラウンドタスク+並列ファンアウト+ポーリングで非同期化:API Gateway の29秒制約を回避しつつ、相互依存のない処理(検索・履歴取得・QAチェーン初期化)を並列実行して体感レイテンシを短縮
認証は用途別の二層構成:無人キオスクは6桁アクセスコード→JWT(HttpOnly Cookie・CSRFトークン)、運営コンソールは AWS Cognito(SRP認証)。来店客と運営者でセキュリティ境界を分離
インフラは Terraform で全面 IaC 化:VPC/ECS Fargate/RDS(pgvector)/API Gateway/CloudFront/Cognito/Lambda を再現可能なコードで管理し、staging/production を同一構成で運用
実施したこと(Action)
自然な音声対話ループの実装:Web Audio API の AnalyserNode で音量を常時解析し、無音検知(約3秒)で自動録音停止・約45秒で自動セッション終了。録音→送信→再生の状態に応じてアバターを「待機/傾聴/思考/発話/タッチ待ち」の5状態で切り替え、対話状況を視覚的に伝達
非同期推論パイプラインの構築:音声POSTに対し即座に taskId を返却し、バックエンドは「Whisper文字起こし→Claudeによる入力モデレーション→埋め込み生成→pgvector類似検索(top-10)→LangChain QAチェーン(Claude 3.5 Sonnet・直近10会話を文脈・200文字制約)→Polly音声合成→Base64返却」を flask-executor 上で並列実行。クライアントは /api/task/{id} をポーリングして結果取得
ハルシネーションの構造的排除:取り違えが許されない商品番号・サイズは LLM任せにせず、正規表現で発話から抽出し normalized_data テーブルへ決定的に照合。生成AIの曖昧さを業務クリティカルな箇所から排除
入力モデレーション:来店客の発話を Claude 3.5 Sonnet(temperature 0.1)で ACCEPT/REJECT 分類し、不適切・無関係な発話を回答生成前に遮断。無人運用の安全性を担保
マルチモーダル提示:「画像・動画を見せるべきか」を Claude が判定し、該当ドキュメントの添付(S3保管・署名付きURL)を video.js で再生。音声だけでは伝わらない商材説明を視覚的に補完
継続的改善ループの運用基盤:運営コンソールで全会話を検索・レビューし、失敗理由と「本来あるべき応答」を教師データとして付与。これを埋め込み直して再投入することで、運用しながら精度を高める仕組みを構築。会話ごとの process_time も記録し可観測性を確保
AWSインフラの IaC 化と CI/CD:Terraform で VPC〜ECS Fargate〜RDS(pgvector)〜API Gateway(VPC Link→NLB→ALB)〜CloudFront〜Cognito〜Lambda×3 を構築。GitHub Actions でバックエンドは Docker ビルド→ECR→ECS ローリングデプロイ、フロントは S3 同期→CloudFront 無効化を自動化
レイテンシ設計が最大の工夫点でした。 音声接客は「直列に処理すると破綻する」のが本質的制約です。そこで処理を2段階に分割しました。第1にHTTPレイヤーで、音声アップロードに対し文字起こし結果と taskId を即返却し、重い生成処理はバックグラウンドタスク化(API Gateway の29秒タイムアウトも同時に回避)。第2にパイプライン内部で、相互依存のない処理(セッション取得・会話履歴取得・ベクトル検索・QAチェーン初期化)を flask-executor の submit と as_completed で並列ファンアウトし、クリティカルパスを短縮しました。
正確性は「生成と規則のハイブリッド」で担保しました。 流暢な説明文は Claude 3.5 Sonnet に任せる一方、誤りが致命的になる商品番号は正規表現抽出+マスタ照合という決定的処理に倒します。RAG の検索根拠(vector_search_results に類似度を保存)と会話ログを突き合わせれば、なぜその回答に至ったかを後から追跡できます。
データモデルは11テーブルで会話の全文脈を表現しました(User→Terminal→Session→Conversation→Chat の階層に、RAG・Document(pgvector)・Attachment・NormalizedData・BackgroundTaskResult を接続)。無人運用でありながら、会話単位での品質評価と改善を回せる構造にしています。
技術選定の理由
AWS Bedrock(Claude 3.5 Sonnet):日本語接客の自然さとデータ統制を両立
pgvector + OpenAI Embeddings(text-embedding-3-large / 1024次元):RDBに集約した意味検索RAG
flask-executor による非同期・並列パイプライン+ポーリング:音声レイテンシの短縮
二層認証(キオスク=アクセスコード+JWT / 運営=Cognito):用途別のセキュリティ分離
担当領域
- 要件定義・音声対話/RAG アーキテクチャ設計
- フロントエンド開発(React / TypeScript / Chakra UI)
- バックエンド開発(Python / Flask / LangChain)
- AI パイプライン実装(Bedrock / Whisper / Polly / pgvector)
- インフラ構築(AWS / Terraform / ECS Fargate / API Gateway)
- セキュリティ・認証設計(Cognito / JWT)と CI/CD 構築
使用技術
数字で見る成果
- 応答速度
- 1.5秒5秒 → 1.5秒非同期・並列パイプライン化により約 70% 短縮
- 回答精度
- 90%超RAG+型番マスタ照合で実用レベルに到達(PoC で終わらせない)
- 店舗スタッフの接客負荷
- 50%AI 接客により削減
成果
- PoC で頓挫しがちな生成AI音声接客を、無人キオスクとして本番運用できる水準まで実装
- 「文字起こし→入力モデレーション→RAG検索→生成→音声合成」の重い処理を非同期・並列化し、対面接客に耐える応答速度を実現(5秒 → 約1.5秒)
- 商品番号・サイズを決定的に照合するハイブリッド設計で、専門商材における致命的な誤答を構造的に排除
- PDF・Excel・画像・動画に散在していた商材情報を pgvector の意味検索で横断活用し、回答精度を実用レベルへ向上
- 運営コンソールでの会話レビュー+教師データ付与により、運用しながら精度を高める継続的改善ループを確立
- 来店客(アクセスコード+JWT)と運営者(Cognito)の二層認証で、無人運用の安全性とログ監査性を両立
- Terraform による全面 IaC 化と GitHub Actions の自動デプロイで、staging/production を再現可能・低運用負荷で維持
- 属人化していた専門知識を AI に集約し、店舗スタッフの接客負荷を軽減
同様の課題、抱えていませんか?
あなたのビジネス課題も、最新の技術で解決できます。 まずは30分の無料技術相談から、状況をお聞かせください。
自社の課題もSaaS化できるか相談するプロジェクト単位(請負)・技術顧問、どちらにも対応可能です