検索エンジンをシンプルに: GKE と Vertex AI Agent Builder によるローコード アプローチ
Krishna Chytanya Ayyagari
Gen AI Field Solutions Architect
Samuel Andersen
Senior Customer Engineer
※この投稿は米国時間 2024 年 7 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
かつて、ウェブサイト用の検索エンジンの構築は、多大なリソースと専門的な技術力を要する大変な作業でした。しかし、今はそうではありません。潜在性を秘めたローコード ツールと Google Cloud サーバーレス インフラストラクチャを活用すれば、最小限の労力でスマートかつシンプルな検索エンジンを構築できます。
このブログ記事では、Google Cloud 上に構築した「ローコード検索」アーキテクチャについてご説明します。このアーキテクチャは RSS フィードからコンテンツを取得して処理し、検索機能を実現するように設計されています。以下は、そのコンポーネントとワークフローの概要図です。
プロセスの流れを見ていきましょう。
-
スケジュールに基づいて実行される cron ジョブが、取得対象の URL のリストを Pub/Sub サービスに送信することにより、ワークフローが開始されます。この Pub/Sub サービスはメッセージ ブローカーとして機能し、URL をさまざまなマイクロサービスに配信します。
-
Pub/Bub サービスからメッセージを受信すると、各マイクロサービスは割り当てられた URL から対応する RSS フィードを取得して処理します。この処理には、記事のタイトル、説明、公開日といった関連情報の抽出が含まれます。
-
抽出されたデータはフォーマットされ、BigQuery に読み込まれます。BigQuery は、大量の構造化データを処理できる、スケーラブルなデータ ウェアハウスです。
-
次に登場するのが、強力な検索エンジン プラットフォームである Vertex AI Search です。BigQuery に保存されたデータを活用して、包括的な検索インデックスを構築します。このインデックスにより、ユーザーが検索を実行した際に、関連性の高い情報を効率的に取得できます。
-
ユーザーは検索インターフェースを操作してクエリを入力し、インデックス化されたコンテンツに基づく検索結果を受け取ります。検索エンジンはインデックスから一致するドキュメントを取得し、ユーザーに表示します。
-
このワークフロー全体を通して、ログが絶えず記録されます。ログには、cron ジョブの実行、Pub/Sub サービス内でのメッセージの受け渡し、マイクロサービスによる RSS フィードの取得と処理、BigQuery へのデータの保存、Vertex AI Search による検索インデックスの作成、検索インターフェースのユーザー操作に関する情報が記録されます。これらのログは、システムの健全性のモニタリング、潜在的な問題の特定、パフォーマンス最適化のための分析において、とても貴重なものです。
検索の自動化
検索コンテンツの更新スケジュールは、cron ジョブと Cloud Scheduler を組み合わせて自動化できます。Cloud Scheduler で管理された cron ジョブは、1 時間ごとや 1 日ごとなど、あらかじめ決められた間隔でワークフローをトリガーします。これにより、検索コンテンツが定期的に更新されます。また、Cloud Scheduler は、フィード URL を Pub/Sub に渡す際に使用できるメッセージ属性も提供します。これにより、検索エンジンに効率的に更新データが配信されます。
cron ジョブは、RSS フィードの URL が含まれたメッセージを Pub/Sub トピックに送信することにより、プロセスを開始します。これらのメッセージは次のステップのトリガーとして機能します。Google Kubernetes Engine(GKE)上で動作するマイクロサービスはこれらのメッセージを受信し、RSS フィードを取得して、そのコンテンツを処理します。「1 フィード 1 スレッド」アプローチにより、各マイクロサービスが特定の RSS フィードのみを処理することで、並列性と効率性が高まります。コンテンツが処理されると、Pub/Sub ストリーミング クライアントは Cloud Scheduler からのメッセージ待ちになります。メッセージを受信すると、クライアントは構成に沿ってタスクを実行します。
RSS フィードの取り込みプロセスは、メッセージの URL を抽出することから始まります。次に、RSS フィードを取得し、各記事の処理を繰り返してまだインデックス化されていないことを確認します。新しい記事については、RSS フィードの URL をたどり、記事のテキストを取得します。執筆者、提供元、公開日などの関連情報を抽出します。その後、新しい記事をデータストア(BigQuery)に push します。GKE Autopilot Spot Pod を使用すると、Pod あたりの費用を最小限に抑えられるため、費用の最適化に役立ちます。未処理のメッセージに対しては確認応答が行われないため、Pod を強制終了しても RSS の更新プロセスが中断されることはありません。
RSS フィードから抽出された URL、記事テキスト、タイトル、日付などの情報は BigQuery に保存されます。これによって、抽出済みメタデータを効率的に保存して簡単にクエリでき、さらに深い分析とインサイトが実現します。以下のスクリーンショットは、BigQuery スキーマと取り込まれたデータのサンプルです。
Vertex AI Agent Builder と Vertex AI Search は、デベロッパーが AI エージェントとアプリケーションを簡単に作成およびデプロイできるよう支援する、2 つの強力なツールです。Agent Builder は、AI エージェントやアプリを企業データと統合するプロセスを簡素化し、シームレスなインテグレーションを実現するさまざまなオプションを提供します。Agent Builder の一部である Vertex AI Search は、デベロッパーがウェブサイト、構造化データ、非構造化データを使って Google 品質の検索エクスペリエンスを構築できるよう支援します。また、生成 AI エージェントとアプリの構築にすぐに使える、グラウンディング システムと DIY 式のグラウンディング API も提供しています。Vertex AI Search は、BigQuery を含むさまざまなソースのデータをインデックス化することにより、ユーザーが自然言語クエリを通じて求めている情報をすばやく見つけられるようにします。BigQuery に保存されたデータは、Vertex AI Search による検索インデックスの作成に使用できます。また、Agent Builder を使って検索エクスペリエンスをカスタマイズしたり、他の Vertex AI 機能と統合したりすることができます。こちらのドキュメントの手順に沿って、BigQuery をデータストアにした一般的な「検索」エクスペリエンスを作成してみてください。
検索インデックスのおかげで、ユーザーはキーワードやフレーズを使用して抽出済み記事コンテンツを検索することができます。Vertex AI Search は、自然言語処理、ランキング、関連性スコアといった高度な検索機能を提供します。プロセス全体を通じて、イベント、エラー、パフォーマンスに関する情報を得るためのログが生成されます。これは、システムの動作をモニタリング、デバッグ、最適化するために不可欠です。
その他の考慮事項と次のステップ
このブログ投稿は、GKE、Cloud Scheduler、BigQuery、ベクトル検索の機能を連携させてローコード検索エンジンを構築するための詳細なガイドです。
-
スケーラビリティを重視して設計されたアーキテクチャは、複数の RSS フィードと大量のデータを処理します。
-
Google Cloud のマネージド サービスは、インフラストラクチャの管理とメンテナンスを簡素化します。
-
マイクロサービスの使用により、今後の機能強化や変更に対するモジュール性と柔軟性が高まります。
-
Vertex AI Search は、高度な検索機能を実装する強力な基盤となります。
今回の説明に沿って構築した検索エンジンは、RSS フィードを効率的に検索し、関連性の高い結果を提供するため、さまざまなソースの特定の情報を探しているユーザーにとって価値の高いツールとなります。たとえば、社内ナレッジベースの構築、変化するニュースやトレンドのモニタリング、ニュースレターなどの特定の要件に合わせてカスタマイズされた検索エンジンの作成などに活用できます。
この投稿では、BigQuery、Vertex AI Agent Builder、Vertex AI Search を使用して、Google Cloud 上でカスタムのローコード検索エンジンを構築する手順の全容をご紹介しました。ぜひ Google Cloud の生成 AI GitHub リポジトリを活用して、ニーズに合った検索エンジンを作成してください。
ー 生成 AI フィールド ソリューション アーキテクト Krishna Chytanya Ayyagari
ー シニア カスタマー エンジニア Samuel Andersen