×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
対話型AIプロダクトの 今と展望 〜ChatBot・VoiceBotの開発技術を解説〜
Slide 2
Slide 2 text
青野健利 github: @brn twitter: brn227 - 開発責任者 at AI Shift - Contributor of V8(~ 2018) 自己紹介
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
デジタルマーケティング分野のサービス開発を行う事業部。 全体の7割以上が技術職で構成され、広告取引の世界で培ったAI技術の適応領域を拡大中。 約350名を超える、エンジニア・研究者・データサイエンティスト・デザイナーが所属 DX AI D2C マーケ ティング AI クリエイ ティブ 対話AI 新事業 小売 医療 行政 GovTech 開発組織 DataScienceCenter データサイエンティストの横断組織 事業へのデータサイエンスの応用・実装 AI Lab AI技術の研究開発を行う専門組織 国際学会への論文投稿など学術貢献も活発 AI Tech studio ビジネスサイドと連携したプロダクト開発 接客 イベント
Slide 5
Slide 5 text
デジタルマーケティング全般に関わる、幅広いAI技術の研究開発を目的に設立。 ビジネス課題の解決と学術的貢献を目指す。 ・KDD 2022 機械学習における観測遅延問題の 改善方法を提案 ・CVPR2022 研究開発の基礎技術となる指標や 分析方法を提案(3本の主著論文採択) ・ICML2022 高次元情報を用いた逐次的な 意思決定手法を提案 ・国際カンファレンス 「IEEE RO-MAN」基調講演 ・「ACM MMAsia 2022」にAI Lab の山口光太が登壇 ・「SNL2022」にAI Lab研究員の 大谷まゆが登壇 ・「日本経済学会春季大会」に AI Labの蟻生・森脇・加藤・竹浪が 登壇 ・言語処理学会第29回年次大会 (NLP2023)にて過去最多となる 13件の発表を実施 国際トップカンファレンス での採択&発表 登壇実績 2022年 論文採択数 約 50本
Slide 6
Slide 6 text
AI Shiftについて
Slide 7
Slide 7 text
VISION 人らしい世の中を創る 『AI vs 人間』『AIが人の仕事を奪う』といったように AIと人間が対立構造として捉えられることが多くあります。 当社の考えは少し異なり、 AIは人間が使ってこそ、 はじめて価値が出ると考えております。 AIが得意なことはAIに任せることで、本来、人間がすべき 『クリエイティブ、マネジメント、ホスピタリティ』などの仕事に集中出来る、 そんな人らしい世の中が実現出来ると考えております。
Slide 8
Slide 8 text
MISSION AIを民主化する AIは人類最大の革命と言われています。 上手く活用することができれば人類の驚異的な進歩となるでしょう。 しかしながら、現在それを自在に扱える企業や人はまだ限られています。 AIを必要とする企業や人が、最適に、且つ簡単に AIを使える 『AIが民主化された社会』 を実現することが当社の使命です。
Slide 9
Slide 9 text
AI Shiftのミッション
Slide 10
Slide 10 text
チャットボット事業 ボイスボット事業 対話型AIによる チャット対応の自動化 対話型AIによる 電話対応の自動化 生成AI活用による 会話要約の自動化 LLM活用事業
Slide 11
Slide 11 text
AI Messenger Chatbot
Slide 12
Slide 12 text
AI Messenger Chatbot
Slide 13
Slide 13 text
AI Messenger Voicebot
Slide 14
Slide 14 text
AI Messenger Voicebot
Slide 15
Slide 15 text
AI Messenger Summary
Slide 16
Slide 16 text
今後の展望 チャットボット事業 ボイスボット事業 LLMエンジンの追加 LLMによるシナリオ自 動生成 生成AIを活用した新規 事業 新規事業 ?
Slide 17
Slide 17 text
技術スタック フロントエンド バックエンド データベース その他ツール
Slide 18
Slide 18 text
● Audioチーム ● 接客対話チーム ● 強化学習チーム ● 完全自動対話研究センター ● 東北大学 乾健太郎 教授 ● 名古屋工業大学 李 晃伸教授 産学連携 AI((ML/DS)チーム 研究体制
Slide 19
Slide 19 text
【1】AIを活用したChatBot・VoiceBotのシステム概観 【2】マルチテナントBotを支えるインフラ構成について 【3】管理画面の複雑なUIのフロントエンド開発 Speaker:石井 俊輝 Speaker:須永 大生 Speaker:栗崎 一真
Slide 20
Slide 20 text
AIを活用したChatBot・VoiceBot のシステム概観 株式会社 AIShift Backend Engineer 石井俊輝
Slide 21
Slide 21 text
自己紹介 いしい としき 石井 俊輝 【主な業務】 VoiceBot運用基盤/新規プロダクトの開発 2023年 CyberAgent 中途入社 所属: 株式会社AIShift @sugar235711
Slide 22
Slide 22 text
Agenda 1. リアルタイム応答Bot現行アーキテクチャ 2. 現行VoiceBotの課題と対話エンジンの内製化 3. 今後の開発展望
Slide 23
Slide 23 text
リアルタイム応答Bot 現行アーキテクチャ
Slide 24
Slide 24 text
プロダクト概要 自動応対可能なChatBot・VoiceBotを提供 ● 個社ごとにシナリオ構築からBot運用まで一気通貫でサポート
Slide 25
Slide 25 text
プロダクト概要 自動応対可能なChatBot・VoiceBotを提供 ● 個社ごとにシナリオ構築からBot運用まで一気通貫でサポート
Slide 26
Slide 26 text
システムの特徴 ● マイクロサービス ○ シナリオ構築/会話管理/Bot...etc ○ 双方向のリアルタイム通信 ● マルチテナントアプリケーション ○ MySQLのデータベース分離によるセキュ リティ対応 ○ Nginxによるサブドメインの割り当て
Slide 27
Slide 27 text
UI: ChatBot UI(管理画面+ウィジェット)/Backend Service
Slide 28
Slide 28 text
アーキテクチャ: ChatBot
Slide 29
Slide 29 text
アーキテクチャ: ChatBot ● ChatBotのメイン ● 回答の生成と履歴の 管理
Slide 30
Slide 30 text
アーキテクチャ: ChatBot ● リアルタイムチャット実現のために WebSocketは使用していない
Slide 31
Slide 31 text
アーキテクチャ: ChatBot ● リアルタイムチャット実現のために WebSocketは使用していない ➔ FirestoreのSnapShotListenerでドキュ メントの変更を検知
Slide 32
Slide 32 text
アーキテクチャ: ChatBot ● 会話履歴の表示 ● 有人チャットの開始
Slide 33
Slide 33 text
アーキテクチャ: ChatBot ● サービス間のメッセージの やり取りはQueueを通す
Slide 34
Slide 34 text
アーキテクチャ: ChatBot ● サービス間のメッセージの やり取りはQueueを通す ➔ メインプロセスに依存しな い非同期処理の実現 ➔ エラー時の再送処理の保 証
Slide 35
Slide 35 text
UI: VoiceBot UI(管理画面)/Backend Service
Slide 36
Slide 36 text
アーキテクチャ: VoiceBot
Slide 37
Slide 37 text
アーキテクチャ: VoiceBot ● DialogFlowを使用し対話エンジンを構築
Slide 38
Slide 38 text
アーキテクチャ: VoiceBot ● DialogFlowを使用し対話エンジンを構築 ➔ 顧客発話→STT→DialogFlow→TTS→VoiceApp→Twilio応答 ※DialogFlow: シナリオベースのBotを作成できるGCPのサービス
Slide 39
Slide 39 text
現行VoiceBotの課題と 対話エンジンの内製化
Slide 40
Slide 40 text
既存のVoiceBot構築の難しさ DialogFlowではシナリオのフローを表示するUIが存在しない ➔ 手作業でフローを書き起こし、DialogFlow管理画面から入力する DialogFlow管理画面 フローの書き起こし
Slide 41
Slide 41 text
既存のVoiceBot構築の難しさ DialogFlowではシナリオのフローを表示するUIが存在しない ➔ 手作業でフローを書き起こし、DialogFlow管理画面から入力する ● リソースの多重管理(人為的ミス、工数増加) ● バージョン管理が困難(シナリオを含めたアプリケーションのロールバック が難しい) ● 自社独自のリソースとの連携が難しい(音声認識などのモデルがGoogle提 供のものに限られる)
Slide 42
Slide 42 text
シナリオ構築UI + 対話エンジン: DialogEngine DialogFlowの完全置き換えを目指し、UIと対話エンジン部分を内製化を行った スクラッチで実装 ● シナリオ構築部分 RDBによるグラフ管理 ● Botのワークフローの履 歴管理 ● 外部連携機能 SMS/Mail/SIP転送...etc
Slide 43
Slide 43 text
アーキテクチャ: DialogEngine(Admin, Bot)
Slide 44
Slide 44 text
アーキテクチャ: DialogEngine(Admin, Bot)
Slide 45
Slide 45 text
アーキテクチャ: DialogEngine(Admin, Bot) ● シナリオ作成画面とAPIを新設
Slide 46
Slide 46 text
アーキテクチャ: DialogEngine(Admin, Bot) ● シナリオ作成画面とAPIを新設 ➔ React Flow + RDBで軽量なシナリオ描画、か つ強整合なグラフ構造を実現
Slide 47
Slide 47 text
アーキテクチャ: DialogEngine(Admin, Bot) ● 適切な粒度にサービスを分割 ● 各サービス間をgRPCで繋ぎ異 なるチーム・言語での開発を可 能に
Slide 48
Slide 48 text
アーキテクチャ: DialogEngine(Admin, Bot) ● Botが動作するシナリオをRDBから取り出しRedis にキャッシュ
Slide 49
Slide 49 text
アーキテクチャ: DialogEngine(Admin, Bot) ● Botが動作するシナリオをRDBから取り出しRedis にキャッシュ ● 以降ログをRedisに書き込み、アプリケーションの メモリ使用量を抑えつつ素早い応答を実現
Slide 50
Slide 50 text
アーキテクチャ: DialogEngine(Admin, Bot) ● DialogFlowで実現していた機 能をサービスに分割
Slide 51
Slide 51 text
アーキテクチャ: DialogEngine(Admin, Bot) ● DialogFlowで実現していた機 能をサービスに分割 ● 独自のエンジンを選択できる 拡張性を持たせる
Slide 52
Slide 52 text
今後の開発展望
Slide 53
Slide 53 text
1. 運用中VoiceBotのDialogEngineへ のシナリオ移行 2. Chat/Voiceのシナリオ構築サービ スの共通化 3. レガシーコードのリファクタリング 今後の展望 既存 1. LLMを活用のための基盤開発 2. 既存システムへのLLMを導入 3. 新規サービスの実装 新規
Slide 54
Slide 54 text
マルチテナントBotを支える インフラ構成について 株式会社 AIShift Backend Engineer 須永 大生
Slide 55
Slide 55 text
自己紹介 すなが だいき 須永 大生 【主な業務】 Chatbot,Voicebot開発/新規プロダクトの開発 2022年 CyberAgent 新卒入社 所属: 株式会社AIShift
Slide 56
Slide 56 text
利用ツール
Slide 57
Slide 57 text
アーキテクチャパターン ・マイクロサービス 採用した主な理由は2つあります。 ①開発の効率性 各サービスは独立してデプロイできるため、全体のリリースサイクルを速めることができます。AI ShiftではAIチームと開発チームが別れていることや、AIチームの中でも担当しているアプリケーショ ンが別れているので非同期的に開発ができることがメリットです。 ②技術的な柔軟性 AIチームでは開発にPythonを利用しており、開発チームではGoを利用しています。 このように別の技術を同じプロダクトで利用できるのもメリットです。
Slide 58
Slide 58 text
ホスティング ・GCPを利用 FirestoreをChatbotで利用したかったので、GCPを選択しています。 (Firestoreを利用する理由は後ほどご紹介します) ・Kubernetes(GKE)を活用 Kubernetesを利用している主な理由は2016年当時に、Container管理ツールとして良い技術であると判 断したためです。 ・リソースはTerraform管理 Terraformでインフラを管理しています。 Terraformの実行環境としてTerraformCloudを利用していて、安全な実行環境と権限管理を実現していま す。
Slide 59
Slide 59 text
CI/CD ・GitHub Actions アプリケーション側の基本的なCI/CDはGitHub Actionsを通じて実現されています。 ・ArgoCD Gitリポジトリに格納されたマニフェストファイルに基づいてKubernetesリソースを同期させます。これ により、デプロイメントの速度と一貫性が向上します。
Slide 60
Slide 60 text
DB(MySQL) ・フローの整合性 Botが動くフローの整合性が重要なサービスなのでRDB管理となっています。 ・マルチテナント ChatbotもVoicebotもマルチテナントサービスなのでRDBはテナントごとにわかれています。
Slide 61
Slide 61 text
DB(Memorystore、Redis) ・Botの会話内容の一時保存 何が発話されたのか、といった情報を一時的に保存し、Botが参照するために利用しています。 例えば、Voicebot以外のところに一時的に電話をつなぐ処理(外線転送)があり、前の会話の状態を 保存しておいて、外線転送からBotに戻ってきたときに再度コンテキストを復帰させる役割などがあり ます。
Slide 62
Slide 62 text
DB(Cloud Firestore) ・会話ログとして利用 Redisで一時保存した会話情報の永続書き込み先として利用しています。 ・セキュリティルール Botを利用するユーザー、オペレーター、Botの管理者などのデータ参照範囲をセキュリティルールを 利用して簡単に作成できます。
Slide 63
Slide 63 text
DB(Cloud Firestore) ・Botと有人の切り替えが楽 ChatbotではBotが応対する場合と人が応対する場合があるのですが、書き込み先はFirestoreに一 元化しています。これにより、フロントエンド側はBot発話やオペレータ発話のいずれかによらず、 Firestoreを一貫して参照するだけでよいです。 また、Chatbotの場合、Firestoreへの書き込みと同時にSubscribeしているClientへ自動配信されるこ とも重要です。
Slide 64
Slide 64 text
Pub/Sub ・非同期的な会話書き込み ChatbotではPub/Subを利用して非同期的に会話を書き込んでいます。これにより、メッセージのロス トの防止やスケーラビリティを担保しています。 Voicebotでも一部Pub/Subを利用していますが、Chatbotとは違い、リアルタイム性が強いサービスな ので、下記の流れ以外の非同期的な部分で利用しています。
Slide 65
Slide 65 text
プロトコル ・REST I/FはOpenAPIで定義しており、これを参照することで、フロントエンドとバックエンドの間で齟齬が生まれな いようにしています。 ・gRPC 開発チームが開発しているアプリケーションとAIチームが開発しているアプリケーションの間はgRPCで連 携しています。gRPCを利用している理由は高速な通信やStreaming形式のRPCも提供している点です。 protoファイルをAIチームと開発チームで参照しあっています。 ・WebSocket VoicebotではtwilioというWebサービスとBotが接続しますが、この間はWebSocketで接続されておりスト リーミング通信ができます。
Slide 66
Slide 66 text
フロントエンド 複雑な管理画面UIの開発
Slide 67
Slide 67 text
自己紹介 栗崎一真 2023.5 AI-SHIFT 中途入社 2023.5 AI-SHIFT 中途入社 X: @KK_sep_TT 主な業務 chat bot, voicebot, 新規プロダクトのフロントエンド開発
Slide 68
Slide 68 text
Index ● toB SaaS フロントエンド開発について ● 使用技術 ● どうやって複雑さに立ち向かうか ● 今後の展望
Slide 69
Slide 69 text
toB SaaS に求められる要件 あまり重要ではないこと 重要なこと ● SEO ● 初期ロードの速度 ● 動作が軽いこと ● 操作がわかりやすいこと SSRを使用しないSPAで構築
Slide 70
Slide 70 text
ChatBot, VoiceBot 管理画面開発 私たちの toB SaaS の特徴 ● 複雑な画面が多い ● API 連携が多い ● フロントにもロジックがある
Slide 71
Slide 71 text
使用技術 言語: Typescript UIフレームワーク: React 状態管理: Redux 認証: Firebase Auth
Slide 72
Slide 72 text
どうやって複雑さに立ち向かうか コンポーネント設計 純粋な関数への分割 ライブラリの利用
Slide 73
Slide 73 text
コンポーネント設計 ~ Atomic Design からの脱却 Atomic Design の問題点 ● コンポーネントの配置に悩む (特に Molecules or Organisms) ● Atoms 以外で再利用性の高いコンポーネントは少ない ● 実際に使用される場所から遠くに置かれて、どこから使用されているか分かりづらい
Slide 74
Slide 74 text
コンポーネント設計 ~ Colocation 依存関係が分かりやすくなった Atomic Design の Atoms 以外の大部分を使用するリソースと同じディレクトリに配置 Colocation: 関連するリソース同士を近くに置いておくという考え方
Slide 75
Slide 75 text
コンポーネント設計 ~ 多段階バケツリレー バケツリレー自体は悪いことではない (依存関係が分かりやすくなる) バケツリレー自体は悪いことではない (依存関係が分かりやすくなる) – しかし複雑なUIではpropsを自身は使わないのに受け取るコンポーネントが現れることがある Bはpropsを自身で使用しないで子に流すだけ Bが親と子両方と密結合になってしまっている
Slide 76
Slide 76 text
コンポーネント設計 ~ コンポジションパターン Bが不要なpropsを受け取らなくなった Bの責務(レイアウト)が明確に Bがコンポーネントをpropsで受け取るように変更 【React】Context を使う前に #2 コンポジション (ReactNode 型の Props) を使え https://qiita.com/honey32/items/4d04e454550fb1ed922c propsのバケツリレー対策でGlobal Stateを使うその前に... https://speakerdeck.com/taro28/propsnohaketuriredui-ce-teglobal-statewoshi-usonoqian-ni より詳しくは以下を参照
Slide 77
Slide 77 text
コンポーネント設計 ~ 試行錯誤 コンポーネント設計で考えることは多い 再レンダリング ディレクトリ構造 ビューとロジックの分離 コンポーネント粒度 コンポジション props設計 ユースケースに合わせて最適なアーキテクチャを考えていく必要がある state管理 CSS
Slide 78
Slide 78 text
純粋な関数への切り出し UIと関係ない複雑なロジックはReactから切り出して、純粋なTS関数とする 単体テストがやりやすい & 可読性の向上
Slide 79
Slide 79 text
複雑なロジックの例 ● Firestore の データの詳細検索 ○ Firestoreの検索はそこまで強くないのでTSで絞り込む必要がある。 ● グラフのnodeの変換ロジックをフロントが持つ ○ フロントで node を繋げたりするので、nodeの型変換のロジックが必要 純粋関数を結構書く
Slide 80
Slide 80 text
ライブラリのちからを借りる ~ React Hook Form 管理画面には複雑なFormが多くある 自前で実装するのは大変 swap append remove React Hook Form の便利なAPI useFieldArray ● append ● remove ● swap 動的なフォームのサポート
Slide 81
Slide 81 text
ライブラリのちからを借りる ~ React flow フローチャートUIをサポート ● Node, Edge のカスタマイズ性が高い ● 高パフォーマンス ● TSの型サポート
Slide 82
Slide 82 text
今後の展望 既存のリファクタ 新規プロダクト開発 コンポーネントの設計 Fetcher ライブラリの導入 Vite 移行 etc... 新機能の追加 完全新規プロダクト開発