1.2K Views
October 22, 24
スライド概要
WebRTC Meetup Tokyo #28 LT
LiveKit Agents で作る サーバサイド WebRTC AI エージェント 2024/10/22 WebRTC Meetup Tokyo 28 こーのいけ 1
Whoami こーのいけ X: ko_noike GitHub他: kounoike 色々やってるフリーランスエンジニア IoT/画像処理/音声処理/映像処理/リアルタイムコミュニケーション 最近やったこと 国内のPerlコードゴルフコンペに参加。半日強でトップをかっさらう → https://zenn.dev/kounoike/articles/20241007-yapcjapan2024-perlbatross 2
サーバサイド AI エージェント Wasm/WebGPUなどでクライアントサイド(ブラウザ)でのAI活用が盛ん →クライアントサイドでの処理が向かないユースケース ➢クライアントの処理能力が貧弱 ➢推論モデルをクライアントに配布したくない ➢偽装クライアントで処理を誤魔化されると困る(監視など) →サーバサイドでの推論処理が向いている (「サーバ」と言っているが、WebRTC SFUから見ればクライアント) 3
サーバサイドAIエージェントの 実装 ➢ネイティブのWebRTCクライアントライブラリ ➢受信ストリームの映像からフレーム、音声からサンプルの取得 ➢推論結果に基づいた変換後のストリームの送信 ➢DataChannelによるデータ送信 ➢ルーム作成・ユーザの接続・切断などをトリガーにしたWebhook等 ➢ジョブの起動管理 ➢水平スケーリング 4
LiveKit Agents ➢LiveKit (SFU/クラウドSFUサービス)が提供しているAIエージェント作成 用ライブラリ ➢今のところ Python, JavaScript ➢SFUサーバ側にエージェント管理の機能、それに対するクライアント実装 →Webhookなどが不要。エージェント側でグローバルにポート開ける必要なし ➢ルームの作成 or ユーザの参加をトリガーに対応するジョブを起動 ➢エージェントのスケーリングに対応 ➢ワーカーを複数起動すればサーバ側が自動的にジョブを割り振ってくれる ➢AIエージェントで良く使う機能を「プラグイン」として提供 ➢流行りのOpenAI Realtime APIへの接続例もあり 5
LiveKit 情報アップデート 2024/08 料金プランの変更 ➢有料プランに月額最低価格が追加 ➢$50/mo, $500/mo ➢基本的に転送量のみの従量課金→転送量&接続時間 ➢転送量単価は値下げ ➢同時接続数制限 ➢$50/moプラン: 1000、$500/moプラン: 無制限 6
エージェントの構成 1. エージェントの起動 2. ユーザの参加 3. ジョブの送信 4. エージェントの参加 公式ドキュメントより 7
コード例: 顔検出 ➢映像から顔検出して四角を描画して送り返す ➢音声は処理しない ➢1ルーム1ユーザが前提 ➢OpenCVの顔検出(FacerDetectorYN: CPU推論) ➢全フレーム処理する性能が出ないので、間に合わないフレームは無視 Agent LiveKit クラウド 受信タスク 最新 フレーム 処理タスク 映像 ストリーム 8
コード例 9
受信タスク 10
11
コード例: 音声エージェント ➢LiveKitのexamples ➢音声パイプラインエージェント VAD(Voice Activity Detection) →STT(Speech-To-Text) →LLM(Large Language Model) →TTS(Text-To-Speech) 12
初期化 接続して 参加者待ち パイプライン 作成 起動して 最初の一言 13
気になるところ ➢スケーリングさせたときのVM増加等のトリガ ➢インフラ側との関係が強いので、そっち側で何とかする? ➢VMを減らすとき/デプロイ時の断絶 ➢「接続済みは処理を続けるが、新規接続を受け付けない」みたいなモードあるか? ➢接続済みの処理が全部終わったら終了、みたいなことが出来るか? ➢推論リソース(GPU)の効率的活用 ➢推論部分を別サーバにした方がいいかも ➢エンコード・デコードのHWA ➢LiveKitのクライアントライブラリ自体にHWA対応が入ってないような…? 14