Codelab - Neo4j と Vertex AI を使用して映画レコメンデーション チャットボットを構築する

Codelab - Neo4j と Vertex AI を使用して映画レコメンデーション チャットボットを構築する

この Codelab について

subject最終更新: 4月 4, 2025
account_circle作成者: Romin Irani and Siddhant Agarwal(GDE)

1. 概要

この Codelab では、Neo4j、Vertex AI、Gemini を組み合わせて、映画レコメンデーションのスマート チャットボットを構築します。chatbot は、映画、俳優、監督、プロデューサー、ジャンルなどを表す基盤として Neo4j ナレッジグラフを使用します。検索エクスペリエンスを向上させるため、Vertex AI の text-embedding-004 モデルを使用して映画のあらすじの概要からベクトル エンベディングを生成します。

最後に、Gemini を統合して会話型インターフェースを強化します。これにより、ユーザーは「インターステラーが好きなら何を見たらいい?」などの自然言語の質問をすることができ、セマンティックな類似性とグラフベースのコンテキストに基づいてパーソナライズされた映画の候補を受け取ることができます。

この Codelab では、次の手順で進めていきます。

  1. 映画関連データを使用して Neo4j ナレッジグラフを作成する
  2. Vertex AI のテキスト エンベディングを使用して映画の概要やプロットに関するテキスト エンベディングを生成することで、映画データを拡充します。
  3. Gemini を活用した Gradio chatbot インターフェースを構築して、Neo4j からのセマンティック検索と取得を統合します。
  4. 必要に応じて、次のようにスタンドアロン ウェブ アプリケーションとして Google Cloud Run にデプロイします。

学習内容

  • Cypher と Neo4j を使用して映画ナレッジグラフを作成する方法。
  • Vertex AI を使用してテキストのセマンティック エンベディングを生成する方法。
  • Neo4j と Gemini を統合して、インテリジェントなベクトルベースの検索を行う方法。
  • Gradio を使用して会話型 chatbot UI を構築して実行する方法。

必要なもの

  • Chrome ウェブブラウザ
  • Gmail アカウント
  • 課金が有効になっている Google Cloud プロジェクト
  • 無料の Neo4j Aura DB アカウント
  • ターミナル コマンドと Python に関する基本的な知識

この Codelab は、初心者を含むあらゆるレベルのデベロッパーを対象としており、サンプル アプリケーションで Python と Neo4j を使用します。Python とグラフ データベースに関する基本的な知識があると役立ちますが、コンセプトを理解したり、このチュートリアルに沿って学習したりするために、事前の経験は必要ありません。121747afa89e0e6.png

2. Neo4j AuraDB を設定する

Neo4j は、ノード(エンティティ)と関係(エンティティ間の接続)のネットワークとしてデータを保存する、業界をリードするネイティブ グラフ データベースです。接続の理解が重要なユースケース(レコメンデーション、不正行為の検出、ナレッジグラフなど)に最適です。厳格なテーブルや階層構造に依存するリレーショナル データベースやドキュメント ベースのデータベースとは異なり、Neo4j の柔軟なグラフモデルでは、複雑な相互接続データを直感的で効率的に表現できます。

Neo4j は、リレーショナル データベースのようにデータを行とテーブルに整理するのではなく、グラフモデルを使用します。このモデルでは、情報はノード(エンティティ)と関係(エンティティ間の接続)として表されます。このモデルでは、人物、場所、商品、映画、俳優、ジャンルなど、本質的に関連するデータを直感的に操作できます。

たとえば、映画データセットでは次のようになります。

  • ノードは MovieActorDirector を表すことができます。
  • 関係は ACTED_IN または DIRECTED です。

この構造により、次のような質問を簡単に行うことができます。

  • この俳優はどの映画に出演していますか?
  • クリストファー ノーランと仕事をしたことがある人は誰ですか?
  • 共通の俳優やジャンルに基づく類似の映画は何ですか?

Neo4j には、グラフのクエリ専用に設計された強力なクエリ言語 Cypher が付属しています。Cypher を使用すると、複雑なパターンと接続を簡潔で読みやすい方法で表現できます。

Neo4j には、ニーズに応じて複数のデプロイ オプションがあります。

  • セルフマネージド: Neo4j Desktop を使用して、または Docker イメージとして(オンプレミスまたは独自のクラウドで)独自のインフラストラクチャで Neo4j を実行します。397a3c535b52d3f6.png
  • クラウド管理: Marketplace サービスを使用して、一般的なクラウド プロバイダに Neo4j をデプロイします。
  • フルマネージド: Neo4j のフルマネージド クラウド Database as a Service である Neo4j AuraDB を使用して、プロビジョニング、スケーリング、バックアップ、セキュリティを処理します。

この Codelab では、AuraDB のゼロコスト ティアである Neo4j AuraDB Free を使用します。プロトタイプ作成、学習、小規模なアプリケーションの構築に十分なストレージと機能を備えたフルマネージド グラフ データベース インスタンスを提供します。生成 AI を活用した映画のおすすめチャットボットを構築するという目標に最適です。

このラボでは、無料の AuraDB インスタンスを作成し、接続認証情報を使用してアプリケーションに接続します。このインスタンスを使用して、映画ナレッジグラフを保存してクエリを実行します。

グラフを使用する理由

従来のリレーショナル データベースでは、「キャストやジャンルが同じで『インセプション』に似ている映画はどれですか?」などの質問に回答するには、複数のテーブルにまたがる複雑な結合オペレーションが必要でした。関係の深さが増すにつれて、パフォーマンスと読みやすさが低下します。

一方、Neo4j などのグラフ データベースは、関係を効率的に走査するように構築されているため、レコメンデーション システム、セマンティック検索、インテリジェント アシスタントなどに適しています。従来のデータモデルでは表現しにくい、コラボレーション ネットワーク、ストーリーライン、視聴者の好みなどの現実世界のコンテキストをキャプチャするのに役立ちます。

この接続されたデータを Gemini などの LLMVertex AI のベクトル エンベディングと組み合わせることで、chatbot のエクスペリエンスを強化できます。これにより、よりパーソナライズされた関連性の高い方法で推論、取得、応答できるようになります。

Neo4j AuraDB の無料作成

  1. https://console.neo4j.io にアクセスします。
  2. Google アカウントまたはメールアドレスでログインします。
  3. [Create Free Instance] をクリックします。
  4. インスタンスのプロビジョニング中に、データベースの接続認証情報が表示されたポップアップ ウィンドウが表示されます。

ポップアップから次の詳細をダウンロードして安全に保存してください。これは、アプリケーションを Neo4j に接続するために不可欠です。

NEO4J_URI=neo4j+s://<your-instance-id>.databases.neo4j.io
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=<your-generated-password>
AURA_INSTANCEID=<your-instance-id>
AURA_INSTANCENAME=<your-instance-name>

これらの値を使用して、次の手順で Neo4j で認証するようにプロジェクトの .env ファイルを構成します。

a1e29e56e6c412fc.png

Neo4j AuraDB Free は、開発、テスト、この Codelab のような小規模なアプリケーションに適しています。使用量の上限が緩和されており、最大 200,000 ノード400,000 の関係をサポートしています。ナレッジグラフの構築とクエリに必要なすべての基本機能が提供されていますが、カスタム プラグインやストレージの増加などの高度な構成はサポートされていません。本番環境ワークロードや大規模なデータセットの場合は、より高い容量、パフォーマンス、エンタープライズ グレードの機能を提供する上位ティアの AuraDB プランにアップグレードできます。

これで、Neo4j AuraDB バックエンドの設定に関するセクションは完了です。次のステップでは、Google Cloud プロジェクトを作成し、リポジトリのクローンを作成して、必要な環境変数を構成し、開発環境を準備してから、Codelab を開始します。

3. 始める前に

プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Cloud Shell(Google Cloud で動作するコマンドライン環境)を使用します。この環境には bq がプリロードされています。Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。

Cloud Shell を有効にするボタンの画像

  1. Cloud Shell に接続したら、次のコマンドを使用して、認証が完了していることと、プロジェクトがプロジェクト ID に設定されていることを確認します。
gcloud auth list
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
  1. 次のコマンドを使用して、必要な API を有効にします。この処理には数分かかることがありますので、少々お待ちください。
gcloud services enable cloudresourcemanager.googleapis.com \
                       
servicenetworking.googleapis.com \
                       
run.googleapis.com \
                       
cloudbuild.googleapis.com \
                       
cloudfunctions.googleapis.com \
                       
aiplatform.googleapis.com

コマンドが正常に実行されると、次のようなメッセージが表示されます。

Operation "operations/..." finished successfully.

gcloud コマンドの代わりに、コンソールで各プロダクトを検索するか、このリンクを使用します。

いずれかの API が不足している場合は、実装中にいつでも有効にできます。

gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

リポジトリのクローンを作成して環境設定を設定する

次のステップでは、Codelab の残りの部分で参照するサンプル リポジトリのクローンを作成します。Cloud Shell を使用している場合は、ホーム ディレクトリから次のコマンドを実行します。

git clone https://github.com/sidagarwal04/neo4j-vertexai-codelab.git

エディタを起動するには、Cloud Shell ウィンドウのツールバーで [エディタを開く] をクリックします。左上のメニューバーをクリックし、[ファイル] → [フォルダを開く] の順に選択します。

66221fd0d0e5202f.png

neo4j-vertexai-codelab フォルダを選択すると、次のようにフォルダが開き、次のファイルが表示されます。

e49542efd70de22e.png

次に、Codelab 全体で使用する環境変数を設定します。example.env ファイルをクリックすると、次のような内容が表示されます。

NEO4J_URI=
NEO4J_USER=
NEO4J_PASSWORD=
NEO4J_DATABASE=
PROJECT_ID=
LOCATION=

次に、example.env ファイルと同じフォルダに .env という名前の新しいファイルを作成し、既存の example.env ファイルの内容をコピーします。次の変数を更新します。

  • NEO4J_URINEO4J_USERNEO4J_PASSWORDNEO4J_DATABASE:
  • 前の手順で Neo4j AuraDB Free インスタンスの作成時に提供された認証情報を使用して、これらの値を入力します。
  • 通常、NEO4J_DATABASE は AuraDB Free で neo4j に設定されます。
  • PROJECT_IDLOCATION:
  • Google Cloud Shell から Codelab を実行している場合は、これらのフィールドを空のままにしておきます。これらのフィールドは、アクティブなプロジェクト構成から自動的に推測されます。
  • ローカルまたは Cloud Shell の外部で実行する場合は、PROJECT_ID を前に作成した Google Cloud プロジェクトの ID に更新し、LOCATION をそのプロジェクトに選択したリージョン(us-central1 など)に設定します。

これらの値を入力したら、.env ファイルを保存します。この構成により、アプリケーションは Neo4j サービスと Vertex AI サービスの両方に接続できます。

開発環境の設定の最後のステップは、Python 仮想環境を作成し、requirements.txt ファイルに記載されている必要な依存関係をすべてインストールすることです。これらの依存関係には、Neo4j、Vertex AI、Gradio などの操作に必要なライブラリが含まれます。

まず、次のコマンドを実行して .venv という名前の仮想環境を作成します。

python -m venv .venv

環境が作成されたら、次のコマンドを使用して作成した環境を有効にする必要があります。

source .venv/bin/activate

ターミナル プロンプトの先頭に(.venv)と表示され、環境がアクティブになっていることを示します。例: (.venv) yourusername@cloudshell:

次のように実行して、必要な依存関係をインストールします。

pip install -r requirements.txt

ファイルにリストされている主な依存関係のスナップショットは次のとおりです。

gradio>=4.0.0
neo4j>=5.0.0
numpy>=1.20.0
python-dotenv>=1.0.0
google-cloud-aiplatform>=1.30.0
vertexai>=0.0.1

すべての依存関係が正常にインストールされると、この Codelab のスクリプトと chatbot を実行するようにローカルの Python 環境が完全に構成されます。

これで準備が整いました。これで、次のステップに進む準備が整いました。次のステップでは、データセットを理解し、グラフの作成とセマンティックな拡充に備えます。

4. Movies データセットを準備する

最初のタスクは、ナレッジグラフの構築とおすすめ chatbot の強化に使用する映画データセットを準備することです。最初から作成するのではなく、既存のオープンデータセットを使用して、その上に構築します。

ここでは、Kaggle で公開されている有名なデータセットである Rounak Banik の The Movies Dataset を使用します。TMDB の 45,000 本を超える映画のメタデータ(キャスト、スタッフ、キーワード、評価など)が含まれています。

9e3a1dc4c286af1b.png

信頼性が高く効果的な映画おすすめチャットボットを構築するには、まず、クリーンで一貫性があり、構造化されたデータから始めることが不可欠です。Kaggle の映画データセットは、45,000 を超える映画レコードと、ジャンル、キャスト、クルーの詳細なメタデータを含む豊富なリソースですが、ノイズ、不整合、ネストされたデータ構造も含まれているため、グラフ モデリングやセマンティック エンベディングには適していません。

この問題に対処するため、データセットを前処理して正規化し、Neo4j ナレッジグラフの構築と高品質なエンベディングの生成に適したものとしました。このプロセスでは、次のことを行いました。

  • 重複と不完全なレコードの削除
  • 主要なフィールド(ジャンル名、人物名など)の標準化
  • 複雑なネストされた構造(キャストやクルーのリストなど)を構造化された CSV にフラット化する
  • Neo4j AuraDB Free の制限内に収まるように、約 12,000 本の映画の代表的なサブセットを選択する

高品質で正規化されたデータは、次のようなメリットがあります。

  • データ品質: エラーと不整合を最小限に抑え、より正確な推奨事項を生成
  • クエリのパフォーマンス: 構造を合理化することで、取得速度が向上し、冗長性が低減されます。
  • エンベディングの精度: クリーンな入力により、より有意義でコンテキストに沿ったベクトル エンベディングが得られます。

クリーンアップして正規化されたデータセットには、この GitHub リポジトリの normalized_data/ フォルダからアクセスできます。このデータセットは、今後の Python スクリプトで簡単にアクセスできるように、Google Cloud Storage バケットにもミラーリングされています。

データのクリーニングが完了したので、Neo4j に読み込んで映画ナレッジグラフの構築を開始する準備が整いました。

5. 映画のナレッジグラフを作成する

GenAI を活用した映画のおすすめ chatbot を強化するには、映画、俳優、監督、ジャンルなどのメタデータ間の豊富な接続ネットワークをキャプチャするように映画データセットを構造化する必要があります。このセクションでは、前のセクションで準備したクリーン化された正規化されたデータセットを使用して、Neo4j に映画ナレッジグラフを構築します。

Neo4j の LOAD CSV 機能を使用して、一般公開の Google Cloud Storage(GCS)バケットでホストされている CSV ファイルを取り込みます。これらのファイルは、映画データセットのさまざまなコンポーネント(映画、ジャンル、キャスト、スタッフ、制作会社、ユーザー評価など)を表します。

ステップ 1: 制約とインデックスを作成する

データをインポートする前に、制約とインデックスを作成してデータの整合性を適用し、クエリのパフォーマンスを最適化することをおすすめします。

CREATE CONSTRAINT unique_tmdb_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.tmdbId IS UNIQUE;
CREATE CONSTRAINT unique_movie_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.movieId IS UNIQUE;
CREATE CONSTRAINT unique_prod_id IF NOT EXISTS FOR (p:ProductionCompany) REQUIRE p.company_id IS UNIQUE;
CREATE CONSTRAINT unique_genre_id IF NOT EXISTS FOR (g:Genre) REQUIRE g.genre_id IS UNIQUE;
CREATE CONSTRAINT unique_lang_id IF NOT EXISTS FOR (l:SpokenLanguage) REQUIRE l.language_code IS UNIQUE;
CREATE CONSTRAINT unique_country_id IF NOT EXISTS FOR (c:Country) REQUIRE c.country_code IS UNIQUE;

CREATE INDEX actor_id IF NOT EXISTS FOR (p:Person) ON (p.actor_id);
CREATE INDEX crew_id IF NOT EXISTS FOR (p:Person) ON (p.crew_id);
CREATE INDEX movieId IF NOT EXISTS FOR (m:Movie) ON (m.movieId);
CREATE INDEX user_id IF NOT EXISTS FOR (p:Person) ON (p.user_id);

ステップ 2: 映画のメタデータと関係をインポートする

LOAD CSV コマンドを使用して映画のメタデータをインポートする方法を見てみましょう。この例では、タイトル、概要、言語、再生時間などの主要な属性を持つ Movie ノードを作成します。

LOAD CSV WITH HEADERS FROM "https://storage.googleapis.com/neo4j-vertexai-codelab/normalized_movies.csv" AS row
WITH row, toInteger(row.tmdbId) AS tmdbId
WHERE tmdbId IS NOT NULL
WITH row, tmdbId
LIMIT 12000
MERGE (m:Movie {tmdbId: tmdbId})
ON CREATE SET m.title = coalesce(row.title, "None"),
             
m.original_title = coalesce(row.original_title, "None"),
             
m.adult = CASE
                           
WHEN toInteger(row.adult) = 1 THEN 'Yes'
                           
ELSE 'No'
                       
END,
             
m.budget = toInteger(coalesce(row.budget, 0)),
             
m.original_language = coalesce(row.original_language, "None"),
             
m.revenue = toInteger(coalesce(row.revenue, 0)),
             
m.tagline = coalesce(row.tagline, "None"),
             
m.overview = coalesce(row.overview, "None"),
             
m.release_date = coalesce(row.release_date, "None"),
             
m.runtime = toFloat(coalesce(row.runtime, 0)),
             
m.belongs_to_collection = coalesce(row.belongs_to_collection, "None");

同様の Cypher コマンドを使用して、ジャンル、制作会社、言語、国、キャスト、クルーの評価などの関連エンティティをインポートできます。

Python を使用して完全なグラフを読み込む

複数の Cypher クエリを手動で実行するのではなく、この Codelab で提供されている自動化された Python スクリプトを使用することをおすすめします。

スクリプト graph_build.py は、.env ファイルの認証情報を使用して、GCS から Neo4j AuraDB インスタンスにデータセット全体を読み込みます。

python graph_build.py

このスクリプトは、必要なすべての CSV を順番に読み込み、ノードと関係を作成して、映画ナレッジグラフ全体を構造化します。

グラフを検証する

読み込み後、次のような単純な Cypher クエリを実行してグラフを検証できます。

MATCH (m:Movie) RETURN m LIMIT 5;
MATCH (a:Actor)-[:ACTED_IN]->(m:Movie) RETURN a.name, m.title LIMIT 5;

映画、人物、ジャンルなどがグラフに入力されているはずです。次のステップでセマンティックに拡充する準備が整いました。

6. エンベディングを生成して読み込み、ベクトル類似性検索を行う

chatbot でセマンティック検索を有効にするには、映画の概要のベクトル エンベディングを生成する必要があります。これらのエンベディングは、テキストデータを類似性を比較できる数値ベクトルに変換します。これにより、クエリがタイトルや説明と完全に一致しない場合でも、チャットボットは関連する映画を取得できます。

⚠️ パフォーマンスに関する注意事項

数千もの映画の説明のエンベディングをリアルタイムで生成することは、時間とリソースの両方を消費します。この Codelab を効率的に利用できるように、Vertex AI の

text-embedding-004

モデルを取得し、一般公開されている CSV ファイルに保存しました。

bcca07eaee60787b.png

オプション 1: Cypher を使用して事前計算されたエンベディングを読み込む

Neo4j の対応する Movie ノードにエンベディングをすばやく接続するには、Neo4j ブラウザで次の Cypher コマンドを実行します。

LOAD CSV WITH HEADERS FROM 'https://storage.googleapis.com/neo4j-vertexai-codelab/movie_embeddings.csv' AS row
WITH row
MATCH (m:Movie {tmdbId: toInteger(row.tmdbId)})
SET m.embedding = apoc.convert.fromJsonList(row.embedding)

このコマンドは、CSV からエンベディング ベクトルを読み取り、各 Movie ノードにプロパティ(m.embedding)としてアタッチします。

オプション 2: Python を使用してエンベディングを読み込む

提供されている Python スクリプトを使用して、エンベディングをプログラムで読み込むこともできます。この方法は、独自の環境で作業している場合や、プロセスを自動化したい場合に便利です。

python load_embeddings.py

このスクリプトは、GCS から同じ CSV を読み取り、Python Neo4j ドライバを使用してエンベディングを Neo4j に書き込みます。

[省略可] エンベディングを自分で生成する(探索用)

エンベディングの生成方法を確認するには、generate_embeddings.py スクリプト自体のロジックを確認します。Vertex AI を使用して、text-embedding-004 モデルを使用して各映画の概要テキストを埋め込みます。

これを試すには、コードのエンベディング生成セクションを開いて実行します。Cloud Shell で実行している場合は、Cloud Shell はアクティブなアカウントですでに認証されているため、次の行をコメント化できます。

# os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "./service-account.json"

⚠️ エンベディング生成プロセス全体を実行すると Vertex AI の割り当てが消費され、特に数千件のレコードがある場合は、かなりの時間がかかることがあります。

エンベディングが Neo4j に読み込まれると、映画ナレッジグラフはセマンティック アウェアになり、ベクトル類似性を使用して強力な自然言語検索をサポートできるようになります。

7. 映画のおすすめ chatbot

ナレッジグラフとエンベディングが準備できたので、すべてを会話型インターフェース(映画おすすめチャットボット)にまとめましょう。

chatbot は、Python と、ウェブベースの UI を構築するための軽量フレームワークである Gradio を使用して実装されています。メインのロジックは chatbot.py スクリプトにあり、Neo4j AuraDB インスタンスに接続し、自然言語プロンプトに基づいて映画エンベディングのベクトル類似度検索を行います。

chatbot は Gemini を使用して、クエリを絞り込み、回答をフォーマットすることでユーザー エクスペリエンスを向上させます。検索結果は、グラフ コンテキストとベクトル類似性を組み合わせて Neo4j から返されます。

チャットボットをローカルで実行する

chatbot を起動するには、仮想環境を有効にして(まだ有効になっていない場合)、次のコマンドを実行します。

python chatbot.py

出力は次のようになります。

Old index dropped
Creating new vector index
Vector index created successfully
* Running on local URL:  http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.

💡 allow_flagging に関連する非推奨警告が表示された場合は、今のところ無視してかまいません。アプリは引き続き実行されます。

チャットボットを操作する

実行したら、ターミナルに表示された URL を開きます(通常は http://127.0.0.1:7860)。

シンプルなチャット インターフェースが表示されます。ここで、次のような自然言語クエリを入力できます。

  • 「『インセプション』のような SF スリラーをおすすめして」
  • 「トム ハンクスが出演するロマンティックな映画をおすすめして」
  • 「心温まる家族ドラマを観たい」

c76b6c6e2bcb25d9.png

chatbot はクエリを処理し、映画の概要に対してセマンティック ベクトル検索を行い、タイトル、概要、公開年など、最も関連性の高い映画のリストを表示します。

各推奨事項は、カード形式のレイアウトでレンダリングされ、結果が整然と表示されます。

これで、chatbot がローカルで実行され、Vertex AI エンベディングを使用して、ナレッジグラフLLM(Gemini)セマンティック検索のメリットを組み合わせた、生成 AI を活用した映画レコメンデーション システムが完全に機能するようになりました。

8. (省略可)Google Cloud Run へのデプロイ

映画のおすすめチャットボットをウェブで一般公開する場合は、Google Cloud Run にデプロイします。Google Cloud Run は、アプリケーションを自動的にスケーリングするフルマネージド サーバーレス プラットフォームです。121747afa89e0e6.png

デプロイする前に、プロジェクトに次のファイルがあることを確認します(これらのファイルはすでにこのリポジトリに含まれています)。

  • requirements.txt - アプリケーションの実行に必要なすべての Python 依存関係(Neo4j や Vertex AI など)を一覧表示します。
  • Dockerfile - ベースイメージ、依存関係のインストール、アプリの起動方法など、コンテナ環境を定義します。

ステップ 1: 環境変数を設定する

ターミナルで、次の環境変数を設定します(プレースホルダ値は実際のプロジェクト設定に置き換えてください)。

# Set your Google Cloud project ID
export GCP_PROJECT='your-project-id'  # Change this

# Set your preferred deployment region
export GCP_REGION='us-central1'

ステップ 2: Artifact Registry を作成し、コンテナをビルドする

# Artifact Registry repo and service name
export AR_REPO='your-repo-name'       # Change this
export SERVICE_NAME='movies-chatbot'  # Or any name you prefer

# Create the Artifact Registry repository
gcloud artifacts repositories create "$AR_REPO" \
 
--location="$GCP_REGION" \
 
--repository-format=Docker

# Authenticate Docker with Artifact Registry
gcloud auth configure-docker "$GCP_REGION-docker.pkg.dev"

# Build and submit the container image
gcloud builds submit \
 
--tag "$GCP_REGION-docker.pkg.dev/$GCP_PROJECT/$AR_REPO/$SERVICE_NAME"

このコマンドは、Dockerfile を使用してアプリをパッケージ化し、コンテナ イメージを Google Cloud Artifact Registry にアップロードします。

ステップ 3: Cloud Run にデプロイする

デプロイする前に、必要な環境変数(Neo4j 認証情報、プロジェクト設定)が .env ファイルにリストされています。

次のスニペットを使用して、.env ファイルを --set-env-vars フラグと互換性のある形式に動的に変換します。

ENV_VARS=$(grep -v '^#' .env | sed 's/ *= */=/g' | xargs -I{} echo -n "{},")
ENV_VARS=${ENV_VARS%,}

次に、アプリをデプロイします。

gcloud run deploy "$SERVICE_NAME" \
 
--port=8080 \
 
--image="$GCP_REGION-docker.pkg.dev/$GCP_PROJECT/$AR_REPO/$SERVICE_NAME" \
 
--allow-unauthenticated \
 
--region=$GCP_REGION \
 
--platform=managed \
 
--project=$GCP_PROJECT \
 
--set-env-vars="GCP_PROJECT=$GCP_PROJECT,GCP_REGION=$GCP_REGION,$ENV_VARS"

chatbot にアクセスする

デプロイされると、Cloud Run は次の形式で公開サービスの URL を返します。

https://movies-chatbot-[UNIQUE_ID].${GCP_REGION}.run.app

ブラウザで URL を開き、チャットボットにアクセスします。クラウドで実行されている同じ Gradio UI が表示され、クエリを受信して映画のおすすめを返すことができます。

注とヒント

  • Dockerfile がビルド中に pip install -r requirements.txt を実行していることを確認します。
  • Cloud Shell を使用していない場合は、Vertex AI と Artifact Registry の権限を持つサービス アカウントを使用して環境を認証する必要があります。
  • デプロイ ログと指標は、[Google Cloud コンソール] > [Cloud Run] でモニタリングできます。

Google Cloud コンソールから Cloud Run にアクセスすると、Cloud Run のサービスが一覧表示されます。movies-chatbot サービスが、そこに表示されるサービスの 1 つ(唯一のサービスではない)である必要があります。

bccf390b7099e73b.png

特定のサービス名(この場合は movies-chatbot)をクリックすると、URL、構成、ログなどのサービスの詳細を表示できます。

3709b596167cdaa0.png

これで、映画のおすすめチャットボットをデプロイ、スケーリング、共有できるようになりました。🎉

9. クリーンアップ

この投稿で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

10. 完了

Neo4jVertex AIGemini を使用して、グラフを活用した生成 AI 強化映画レコメンデーション chatbot を構築してデプロイしました。Neo4j の表現力豊かなモデリング機能と Vertex AI エンベディングのセマンティックなパワー、Gemini の会話型インテリジェンスを組み合わせることで、自然言語クエリを理解し、コンテキストに応じて関連性の高い映画のおすすめを返す直感的でインテリジェントなシステムを構築しました。

この Codelab では、次のことを学びます。

  • 実世界の映画データセットから、相互接続された豊富なナレッジグラフを作成しました。
  • 生成および統合されたベクトル エンベディングにより、セマンティック類似性検索を可能に
  • Gemini を活用して自然言語によるインタラクションを実現
  • シンプルで強力な Gradio を使用した chatbot インターフェースを構築しました。
  • 必要に応じて、スケーラビリティとアクセスのために Google Cloud Run を使用してアプリをデプロイした

このアプローチは映画に限定されません。同じアーキテクチャを、書籍、音楽、商品、学術論文など、関係とセマンティクスが重要となるドメインに拡張できます。Gemini などのマルチモーダル GenAI モデルが進化を続けることで、より深い理解、パーソナライズされたインタラクション、マルチフォーマット出力により、アプリケーションを充実させることができます。

引き続き探索と構築を進め、Neo4jVertex AIGoogle Cloud の最新情報を入手して、インテリジェント アプリケーションを次のレベルに引き上げましょう。

リファレンス ドキュメント