654 Views
September 19, 26
スライド概要
ServerlessDaysTokyoにて発表したスライドです。
AIアプリのDBはTiDBだけでいい!3種のDBをTiDB1本に kaiwa・Tataraの開発と、TiDBへのデータ集約 Tokyo 2026 株式会社Livetoon 土川 敦也 1 Livetoon, Inc. all rights reserved
登壇者紹介 土川 敦也(つちかわ あつや) ハンドルネーム:最上土川 株式会社Livetoon 開発マネージャー 芝浦工業大学 修士2年生 HCI × AIの研究 2020年頃(大1)からスタートアップ界隈で働く 2023年、とある企業でAIキャラクター開発をする 2024年12月にLivetoonへ転職 フロントエンドエンジニアで入ったはずが、 Unity、バックエンド、インフラ、AIモデル開発もやっている 2 Livetoon, Inc. all rights reserved
kaiwa kaiwa(かいわ) 初リリース:2025年4月 App Store・Google Playで配信中 「ともだちAI」として気軽に お話してくれるAIキャラクターアプリ 個性豊かな3Dキャラクター × あなたを覚える記憶システム × 低遅延なSTS基盤 3 Livetoon, Inc. all rights reserved
Tatara Tataraでできること • VRMモデルで、見た目を設定 • 声・性格・口調・役割を設定 • Codex / GitHub Copilotの進捗を会話で確認 AIエージェントを、画面の向こうから 「隣にいる存在」へ。 4 Livetoon, Inc. all rights reserved
Tataraで話してみる キャラクターとの会話デモ 5
STSは、音声に対して音声で応答する STS Speech to Speech 音声で話しかけ、 音声で応答を受け取る kaiwa・Tataraでは、複数のモデルを組み合わせて実現する Livetoon, Inc. all rights reserved 6
会話の応答には、モデルとデータの両方が必要 今回の構成:STT・LLM・TTSを組み合わせる STT Speech to Text LLM Large Language Model テキスト 音声を文字へ 応答のテキストを生成 応答に使う 会話を支えるデータ テキスト TTS Text to Speech 文字を音声へ 会話を残す キャラクター設定 会話履歴 長期記憶 7 Livetoon, Inc. all rights reserved
会話の今を支えるデータ 誰が、誰と、どんな流れで話しているかを扱う ユーザー・キャラクター • ユーザー情報 • キャラクター設定 • 性格・口調・プロンプト 直近の会話履歴 会話履歴の圧縮 • 今のセッションの発話 • 話題の流れ • 応答に必要な文脈 • 長いセッションの履歴 • 一部を圧縮して扱う • 会話の継続を支える 8 Livetoon, Inc. all rights reserved
過去の情報は、記憶の種類に応じて取り出す セッションメモリの探索と、情報メモリのベクトル検索 セッションメモリ • 過去の会話を要約 • 会話セッション単位 • エージェントで探索 ユーザー情報メモリ • ユーザーへの理解 • ユーザー情報をまとめる • ベクトルで検索 キャラクター情報メモリ • プロンプトを補う設定 • キャラクターを構築 • ベクトルで検索 9 Livetoon, Inc. all rights reserved
kaiwaの初期構成 — AWS内に2種類のDB 自社AWS環境 外部マネージドサービス モデル推論環境:ECS + T4 GPU STT kaiwa アプリ Backend API ALB ECS Valkey TTS 記憶のベクトル検索 Aurora PostgreSQL db.t4g.large / 2AZ DocumentDB db.r6g.large / 2AZ LLM推論 API 10 Livetoon, Inc. all rights reserved
kaiwaの初期は、役割ごとに3種類のDB SQLとNoSQLの良さを組み合わせた構成 Aurora PostgreSQL • ユーザーデータ • キャラクター情報 • プロンプトなど DocumentDB • 会話セッション • 会話履歴 • 会話・記憶データ Qdrant • 記憶のベクトル • 記憶データへの参照 • 類似する記憶の検索 11 Livetoon, Inc. all rights reserved
実際に負担になったのは、費用と処理の複雑さ DBを分けると、一つの機能でも複数のDBをまたぐ DBコスト 横断する処理 • 複数のDBを稼働させる費用 • 利用規模に対する負担 • キャラクター情報はPostgreSQL • 会話セッション・履歴はDocumentDB • 横断した検索のコストが増える 12 Livetoon, Inc. all rights reserved
NewSQLという選択肢 TiDBで、関連するデータを同じ基盤へ 13
TiDBは、MySQL互換の分散SQLデータベース SQL・トランザクションと、分散による拡張性を両立する アプリからの使い方 内部の仕組み • SQLでデータを操作 • 複数ノードでデータを扱う • トランザクションで更新 • 負荷に応じて拡張する • MySQL向けの接続方法を利用 • 冗長化で可用性を支える 14 Livetoon, Inc. all rights reserved
TiDBの基本構造 TiDB SQLの解析・実行 TiKV 行データを分散保存 TiFlash 列指向のレプリカ PD クラスタを管理 出典:PingCAP「分散SQLデータベースTiDBのリアルな課題と運用ノウハウ」p.11 Livetoon, Inc. all rights reserved 15
MySQL互換で、開発資産を活かせる アプリの構造を活かし、EF Coreの接続プロバイダーを切り替える 移行前 TiDBへ移行後 ASP.NET Core アプリケーション ASP.NET Core アプリケーション Entity Framework Core Entity Framework Core PostgreSQL向け プロバイダー MongoDB向け プロバイダー MySQL向けプロバイダー Aurora PostgreSQL DocumentDB TiDB(MySQL互換) 保存済みデータの変換・移行は、プロバイダーの切替とは別に実施 Livetoon, Inc. all rights reserved 16
関連するデータを、同じSQL基盤に置く アプリケーション 関連する情報を、同じDBで検索・取得 SQL キャラクターとの 過去の会話を探す キャラクター情報 会話セッション 会話履歴 設定・性格・口調 誰との、どの会話か 実際の発話と流れ DBをまたいで組み合わせていた処理を、同じ基盤へ 17 Livetoon, Inc. all rights reserved
TiDBで、記憶の保存とベクトル検索を扱う 保存しておいた記憶を、会話の内容から検索する 記憶を保存するとき 記憶本文を用意し、 埋め込みモデルでベクトルを生成 会話から検索するとき 今の話題をベクトル化し、 関連する記憶を応答に使う 本文 + ベクトル TiDB 記憶本文 検索用のベクトル 本文のベクトル 近いベクトルを検索 関連する記憶本文 本文とベクトルを、同じDBに保存してSQLで扱える Livetoon, Inc. all rights reserved 18
TiDB Cloudで、管理されたDBを使う 用途と規模に合わせて、4つのプランから選ぶ 基盤の運用を任せ、使い慣れたSQLで接続する TiDB Cloud TiDB Cloud TiDB Cloud TiDB Cloud 無料枠から始める 本番向けの基盤 大規模・重要な処理 専用クラスタを使う • 負荷に応じて拡張 • 高度なセキュリティ • 複数AZで可用性を確保 • 予測しやすい負荷に • 高度な要件に対応 • 構成を選んで運用 Starter • 無料枠を用意 • 利用量に応じた課金 • ゼロまで縮小可能 Essential Preview • 計算資源を自動拡張 • バックアップを用意 • 使用量に応じた課金 Premium Preview 出典:PingCAP公式プラン紹介・配色(2026年9月17日確認) Dedicated 19 Livetoon, Inc. all rights reserved
TiDB X — クラウドを前提にした新しい構造 出典:PingCAP「The Making of TiDB X: Origins, Architecture, and What’s to Come」 Livetoon, Inc. all rights reserved 20
kaiwaのTiDB移行後 — SQL・会話データを集約 AWS 自社VPC 外部サービス モデル推論環境 ECS + T4 GPU STT kaiwaアプリ TiDB Cloud 管理領域 TTS Backend API ALB 記憶のベクトル検索 構造化データ 会話・記憶 ECS Valkey プライベート接続 LLM推論 API 21 Livetoon, Inc. all rights reserved
EF Coreを活かし、アプリ側の変更を抑えた まずデータを移し、その後に処理を整理する 今回の移行で行ったこと • .NET / EF Coreを使った構成を活用 • MySQL向けの接続プロバイダーへ変更 • 完全移行後、2つのDBを前提にした処理を統合 • 取得処理・クエリを最適化 アプリの資産を活かし、接続先と処理を整理 22 Livetoon, Inc. all rights reserved
kaiwaの移行手順 — 検証から本番切替まで stgで2週間検証し、直近データを用意してから本番を切り替える 1 stg 2 2週間 3 prod準備 4 切替当日 本番に先立ち、検証環境の DBを切り替える stg環境で2週間、問題が起 きないか確認する 参照されやすいデータを TiDB向けに変換し、本番 用DBに事前投入 prod環境のサービスを一 時停止し、接続先をTiDB へ変更 stg環境を TiDBへ移行 移行漏れ・ 性能を検証 直近データを 先に移行 一時停止して DBを切り替える 23 Livetoon, Inc. all rights reserved
kaiwaの移行手順 — 運用しながら移行を完了 切替後も過去データの移行とクエリ最適化を進めた 5 切替後 6 1週間後 7 2週間後 サービスを運用しながら、残る過去デ ータをTiDBへ移す prod環境の移行から1週間後に実施 prod環境の移行から2週間後まで調整 を進めた 過去データもすべて移行 旧DBを削除 クエリ最適化をほぼ完了 24 Livetoon, Inc. all rights reserved
DBの集約は、運用コストの削減にもつながった 比較する対象は、Aurora PostgreSQL・DocumentDBとTiDB 移行前 • Aurora PostgreSQL:db.t4g.large • DocumentDB:db.r6g.large • 両DBを2AZにまたがって構築 移行後 • TiDBの無料枠を活用 • 利用量に応じた費用 比較対象にQdrantの費用は含まない 25 Livetoon, Inc. all rights reserved
TataraでTiDB1本に 会話データも、ベクトル検索も 26
Tataraの構成 — ベクトル検索までTiDBへ 自社AWS環境 外部マネージドサービス モデル推論環境:ECS + T4 GPU STT TTS TiDB Cloud データ + ベクトル検索 Tatara アプリ Backend API ALB ECS LLM推論 API ECS・GPU用ECS・ALB + TiDB Cloud・Cerebrasで構成。 27 Livetoon, Inc. all rights reserved
ベクトル検索は、SQLをコードに直接書く MySQL互換でも、TiDB独自のベクトル型・関数は別対応 ユーザー情報・会話履歴 EF Core / LINQ MySQL向けプロバイダー ベクトル検索 コード内に記述するSQLの例 · SQL 1 SELECT id, content 2 FROM memories 3 ORDER BY VEC_COSINE_DISTANCE( 4 embedding, @query_vector) 5 LIMIT 10; 28 Livetoon, Inc. all rights reserved
10万件のベクトル検索を、東京で比較 日本語の疑似記憶10万件 × ruri-v3-70m(384次元)/上位10件 近似検索(通信込み) 中央値 p50 p95 Recall@10 TiDB Cloud:HNSW 12.91 ms 17.37 ms 93.1% Qdrant:HNSW(ef=64) 7.82 ms 12.62 ms 91.8% Recall@10:全件を正確に検索した上位10件との一致率。 初回Mac→東京の記録/各300回・逐次/絞り込みなし・埋め込み生成を除外 TiDB:Starter/Qdrant:c7g.xlarge・4 vCPU / 4 GiB・SSH経由。構成・検索精度に差あり。 Livetoon, Inc. all rights reserved 29
TiDBを用いたシステムのローカル開発環境 ローカルで動かすものは、検証したい機能で決まる MySQL互換の機能だけ使う • DockerでMySQLを起動すれば十分 • 一般的なSQL・ORMの開発を進める TiDB固有の機能も使う • ベクトル検索などはTiDBで検証 • TiUPやコンテナ構成で起動 • TiDB・TiKV・TiFlash・PDなどが動く • 複数の構成要素が必要で、開発機には重い 30 Livetoon, Inc. all rights reserved
開発者ごとに、TiDB Cloud Starterを用意 ローカルではアプリを動かし、DBは各自のクラウド環境へ 開発者A 専用 開発者B 専用 ベクトル検索も、stgへ進む前に確認できる Livetoon, Inc. all rights reserved 31
TiDBで、音声AIのデータ基盤をまとめる kaiwa 初期 PostgreSQL kaiwa 移行後 2つを集約 Tatara 新規開発で DocumentDB DBをまたぐ処理と費用を削減 設定・履歴・記憶 ベクトル検索も データの保存・検索を一本化 日々の開発も、各自のTiDB Cloudで。 32 Livetoon, Inc. all rights reserved
皆さん、TiDBに関して 興味が湧いていますよね? 33 Livetoon, Inc. all rights reserved
シルバーウィークで TiDBを触ろう! 34 Livetoon, Inc. all rights reserved
まずはTiDB Cloudの アカウントを作成して… 35 Livetoon, Inc. all rights reserved
不要! そう、TiDB Zeroならね 36 Livetoon, Inc. all rights reserved
TiDB Zero:アカウント不要で、実際のDBを試せる TiDB Zero 30日 登録・クレジットカード不要 試作・検証用の一時DB APIで作成して、SQLですぐ接続 MySQL互換 + ベクトル検索 継続利用は、期限内に TiDB Cloudへ引き継ぎ https://zero.tidbcloud.com/ 利用枠・期限あり。継続する場合はアカウントを作成して引き継ぐ。 Livetoon, Inc. all rights reserved 37
作りたいものを、エージェントに頼む 「〇〇なシステムを、 DBにTiDB Zeroを使って作って」 https://zero.tidbcloud.com の手順で、DB作成から進めて。 Livetoon, Inc. all rights reserved 38
Livetoon, Inc. all rights reserved