Spanner の事実上無制限のスケーリングで、生成 AI アプリケーションと類似検索アプリケーションを構築
Google Cloud Japan Team
※この投稿は米国時間 2024 年 3 月 9 日に、Google Cloud blog に投稿されたものの抄訳です。
Spanner は、Google Cloud が提供するフルマネージドかつ高可用性の分散データベース サービスです。事実上無制限の水平スケーラビリティとリレーショナル セマンティクスを兼ね備えており、リレーショナルと非リレーショナル両方のワークロードに対応します。さらに、すべてのワークロードに対して、SLA で 99.999% の可用性が保証されています。データ量が増大し、オペレーショナル データベースに対するアプリケーションの要求が増えていくのに伴い、お客様はスケーリングを必要としています。先頃 Google は、企業のお客様が事実上無制限のスケーリングで生成 AI を構築できるよう、厳密最近傍(KNN)探索によるベクトル エンベディング検索のサポート(プレビュー版)を発表しました。これらの機能はすべて Spanner 内で利用できるため、データを別のデータベースに移動することなく、トランザクション データ上でベクトル検索を行い、運用を簡素に保つことができます。
このブログ投稿では、ベクトル検索によってどのように生成 AI アプリケーションが強化されるのか、また Spanner の基本アーキテクチャが非常に大規模なベクトル検索のデプロイをどのようにサポートするのかについて説明します。さらに、専用のベクトル データベースの代わりに Spanner を使用することで得られる多くの運用上のメリットについても説明します。
生成 AI とベクトル エンベディング
生成 AI は、パーソナライズされた会話ができる仮想アシスタントから、シンプルなテキスト プロンプトから新しいコンテンツを生成する機能まで、あらゆる種類の新しいアプリケーションを実現しています。生成 AI が利用する事前トレーニング済みの大規模言語モデル(LLM)により、幅広いデベロッパー コミュニティが ML の専門知識を持たずとも生成 AI アプリケーションを簡単に構築できようになりました。しかし、LLM はハルシネーションを出力したり、誤った回答をしたりすることがあります。そこで、LLM をベクトル検索やオペレーショナル データベースと組み合わせれば、コンテキストに基づくドメイン固有のリアルタイム データでグラウンディングされた生成 AI アプリケーションを構築し、高品質の AI を活用したユーザー エクスペリエンスを実現できます。
ある金融機関が仮想アシスタントを使用して、顧客の口座に関する質問に答えたり、口座管理を行ったり、顧客固有のニーズに最適な金融商品を提案したりしているとします。複雑なシナリオでは、顧客の意思決定プロセスが仮想アシスタントとの複数のチャット セッションにまたがる可能性があります。会話履歴に対してベクトル検索を行えば、仮想アシスタントが最も関連性の高いコンテンツを見つけて、高品質で最適かつ有益なチャット エクスペリエンスを実現できます。
ベクトル検索は、ベクトル エンベディング(エンベディング モデルによって生成されたテキスト、画像、動画などのコンテンツの数値表現)を活用して、LLM プロンプトに含めるべき最も関連性の高いデータを生成 AI アプリケーションが特定できるよう支援します。これにより LLM の回答がカスタマイズされ、品質が向上します。ベクトル検索では、ベクトル エンベディング間の距離が計算され、エンベディングがベクトル空間内で近ければ近いほど、その内容は類似していることになります。
Spanner でベクトル検索に事実上無制限のスケーリングを実現
前述の金融仮想アシスタントの例に見られるような、多数のユーザーをサポートする必要があるベクトル ワークロードは非常に大規模になる可能性があります。大規模なベクトル検索ワークロードは、多数のベクトル(たとえば 100 億以上)または秒間クエリ数(たとえば数百万 QPS 以上)の両方に対応できます。当然のことながら、これは多くのデータベース システムでは実現が困難です。しかし、これらの検索の多くはそれぞれが特定のユーザーに関連するデータに制約されており、高度なパーティショニングが可能です。Spanner は検索空間を効率的に縮小し、低レイテンシで正確なリアルタイムの結果を提供できるため、このようなワークロードは Spanner KNN 探索に最適です。Spanner は水平方向にスケーラブルなアーキテクチャを採用しているため、何兆ものベクトルに対する検索をサポートし、高度にパーティショニング可能なワークロードを実現します。
また、Spanner はアプリケーションのシンプルさを維持しながら、SQL を使用してベクトル エンベディングのクエリとフィルタを行うことができます。SQL を使用することで、ベクトル エンベディングをオペレーショナル データと簡単に結合し、通常のクエリとベクトル検索を組み合わせることができます。たとえば、セカンダリ インデックスを使用して、ベクトル検索を行う前に関連のある行を効率的にフィルタできます。Spanner のベクトル検索クエリは、オペレーショナル データに対する一般的なクエリと同じように、トランザクションがコミットされると同時に、リアルタイムで最新のデータを返します。
Spanner による運用の簡素化とリソースの効率化
さらに、Spanner のデータベース内ベクトル検索機能は、ベクトル データベースを別途管理する費用と複雑さを解消し、運用ワークフローを効率化します。Spanner では、ベクトル エンベディングと運用データは一緒に保存され、同じ方法で管理されます。そのため、ベクトル エンベディングでは、99.999% の高可用性、マネージド バックアップ、ポイントインタイム リカバリ(PITR)、セキュリティおよびアクセス制御機能、変更ストリームなど、Spanner のエンタープライズ機能をすべて活用できます。コンピューティング リソースは運用クエリとベクトルクエリで共有されるため、リソースの有効活用と費用削減も可能になります。さらに、これらの機能は Spanner の PostgreSQL Interface でもサポートされているため、PostgreSQL のユーザーは使い慣れたポータブルなインターフェースを利用できます。
Spanner は LangChain Vector Store、Document Loader、Memory などの一般的な AI デベロッパー ツールとも統合されているため、開発者は好みのツールを使って AI アプリケーションを簡単に構築できます。
使ってみる
生成 AI の台頭により、ベクトル検索機能に対する新たな関心が高まっています。事実上無制限のスケーリングに加え、KNN ベクトル検索をサポートする Spanner は、要求の厳しい分散ワークロードのためにすでに利用しているものと同じプラットフォーム上で、大規模なベクトル検索のニーズに対処するのに適しています。Spanner とそのベクトル検索機能の詳細については(そして無料で利用を開始するには)、以下のリソースをご覧ください。
- Spanner: 無制限データベース - Spanner の最も一般的なユースケースの概要と、Spanner が無制限のスケール、強整合性、最大 99.999% の可用性をどのように実現しているかについての概要
- Spanner ベクトル検索のドキュメント
- ベクトル エンベディングについて、および Spanner のベクトル検索を小売業で活用する方法
- Spanner の ML.PREDICT SQL 関数を使用したデータベース内ベクトル エンベディング生成(チュートリアル)、LLM クエリ(チュートリアル)、Vertex AI が提供するカスタムモデルによるオンライン推論(チュートリアル)
- LangChain と、オープンソースの spanner-analytics パッケージ(Python での一般的なデータ分析オペレーションを容易にし、Jupyter Notebooks とのインテグレーションが含まれます)を含む Spanner の AI エコシステムのインテグレーション
-シニア スタッフ ソフトウェア エンジニア Rose Liu
-シニア プロダクト マネージャー Mohit Gulati