メインコンテンツへスキップ
友田 陽大

生成AI音声チャットボット

店舗の対面接客を代替・補完する、RAG搭載の生成AI音声接客システム(来店客向けキオスクUI+運営者向け会話分析コンソールの二層構成)

クライアント

実店舗の対面接客を代替・補完する生成AI音声接客キオスク(タイヤ・ホイール等の専門商材を扱う小売店舗向け/複数店舗・複数端末を単一基盤で運用するマルチテナント構成) | 提供形態: 店舗設置端末(キオスク)+ クラウド運用コンソール

私の役割

AIシステムアーキテクト 兼 フルスタックエンジニア(音声対話パイプライン・RAG設計、React フロントエンド、Flask バックエンド、AWS インフラの IaC 化、CI/CD まで全工程を単独で担当)

課題(Situation & Task)

専門知識を要する商材の接客を、限られた人員で・店舗ごとの品質差なく成立させる必要がありました。商品カタログや仕様はPDF・Excel・画像・動画に散在し、ベテラン店員でなければ即答できない問い合わせが日常的に発生。さらに「音声で自然に会話できること」が要件でしたが、文字起こし→生成→音声合成を直列処理すると応答に数秒以上かかり、対面接客としては体感が破綻していました。

本プロジェクトの本質的な難所は、以下の4点でした。

  1. 専門商材ゆえの「誤答が許されない」要件: 商品番号やサイズ(例: タイヤサイズ 225-60-15)を取り違えると、誤発注やクレームに直結します。生成AIの流暢さと、業務データの厳密な正確さを両立させる必要がありました。

  2. 散在する非構造データの活用: 商品カタログ(PDF)、仕様書(Excel)、商品画像・説明動画(mp4)など形式の異なる大量ドキュメントを横断し、キーワードではなく「意味」で検索して回答根拠にする仕組みが必須でした。

  3. 対面接客に耐える音声レイテンシ: 「文字起こし(STT)→入力チェック→検索→生成→音声合成(TTS)」という重い直列処理を、人と会話していると感じられる速度まで縮める必要がありました。

  4. 無人運用の安全性と改善ループ: 来店客が何を話すか制御できない無人キオスクのため、不適切発話のフィルタリング、セッション管理、そして「どの回答が外したか」を運営側が把握し継続的に改善できる運用基盤が不可欠でした。

技術選定の理由(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 構築

使用技術

Python
Flask
Flask-RESTful
SQLAlchemy
Alembic
Flask-JWT-Extended
flask-executor
Gunicorn
LangChain
AWS Bedrock
Claude 3.5 Sonnet
OpenAI Whisper
AWS Polly
OpenAI Embeddings
RAG
PostgreSQL
pgvector
React
TypeScript
Chakra UI
Zustand
TanStack Query
React Hook Form
zod
AWS Amplify
Socket.IO
Video.js
AWS ECS Fargate
AWS API Gateway
AWS Lambda
AWS Cognito
AWS CloudFront
AWS S3
Amazon ECR
Terraform
Docker
GitHub Actions
Marshmallow

数字で見る成果

応答速度
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化できるか相談する

プロジェクト単位(請負)・技術顧問、どちらにも対応可能です

全ケーススタディを見る