程式碼研究室 - 使用 Neo4j 和 Vertex AI 建構電影推薦聊天機器人

程式碼研究室 - 使用 Neo4j 和 Vertex AI 建構電影推薦聊天機器人

程式碼研究室簡介

subject上次更新時間:5月 15, 2025
account_circle作者:Romin Irani and Siddhant Agarwal(GDE)

1. 總覽

在本程式碼研究室中,您將結合 Neo4j、Google Vertex AI 和 Gemini 的強大功能,建構智慧型電影推薦聊天機器人。這個系統的核心是 Neo4j 知識圖譜,可透過相互連結的節點和關係組成的豐富網路,模擬電影、演員、導演、類型等。

為了透過語意理解功能提升使用者體驗,您將使用 Vertex AI 的 text-embedding-004 模型 (或更新版本),根據電影劇情摘要產生向量嵌入資料。這些嵌入項目會在 Neo4j 中建立索引,以便快速根據相似度進行擷取。

最後,您將整合 Gemini 來支援對話式介面,讓使用者可以詢問自然語言問題,例如「如果我喜歡《星際效應》,那我該看哪部電影?」並根據語意相似性和圖表式情境,獲得個人化的電影建議。

您將透過程式碼研究室,按照以下步驟操作:

  1. 使用電影相關實體和關係建立 Neo4j 知識圖譜
  2. 使用 Vertex AI 為電影簡介生成/載入文字嵌入
  3. 實作 Gemini 支援的 Gradio 聊天機器人介面,結合向量搜尋與以圖表為基礎的 Cypher 執行作業
  4. (選用) 將應用程式部署至 Cloud Run 做為獨立網頁應用程式

課程內容

  • 如何使用 Cypher 和 Neo4j 建立及填入電影知識圖譜
  • 如何使用 Vertex AI 產生語意文字嵌入資料並加以運用
  • 如何結合 LLM 和知識圖譜,使用 GraphRAG 進行智慧檢索
  • 如何使用 Gradio 建構使用者友善的即時通訊介面
  • 如何選擇性地在 Google Cloud Run 上部署

軟硬體需求

  • Chrome 網路瀏覽器
  • Gmail 帳戶
  • 已啟用計費功能的 Google Cloud 專案
  • 免付費的 Neo4j Aura DB 帳戶
  • 熟悉終端機指令和 Python (有助於完成工作,但非必要)

這個程式碼研究室專為各級別 (包括初學者) 的開發人員設計,在範例應用程式中使用 Python 和 Neo4j。雖然具備 Python 和圖形資料庫的基本知識會很有幫助,但您不必具備相關經驗,也能瞭解相關概念或跟著操作。

a194b635f913211b.png

2. 設定 Neo4j AuraDB

Neo4j 是領先的原生圖形資料庫,可將資料儲存為節點 (實體) 和關係 (實體之間的連結) 網路,因此非常適合用於需要瞭解連結的用途,例如推薦內容、詐欺偵測、知識圖譜等。與依賴固定表格或階層結構的關聯式或文件式資料庫不同,Neo4j 的彈性圖形模型可直覺且有效率地呈現複雜的相互連結資料。

Neo4j 使用圖形模型,而非以關聯資料庫那樣以資料列和資料表整理資料,其中資訊會以節點 (實體) 和關係 (這些實體之間的連結) 表示。這個模型可讓您以直覺的方式處理本質上相關聯的資料,例如人物、地點、產品,或在本例中,電影、演員和類型。

舉例來說,在電影資料集中:

  • 節點可代表 MovieActorDirector
  • 關係可以是 ACTED_INDIRECTED

有了這個結構,你就能輕鬆提問以下問題:

  • 這位演員演出過哪些電影?
  • 與克里斯多福諾蘭合作過的演員有誰?
  • 根據共同演員或類型,哪些電影與某部電影相似?

Neo4j 提供強大的查詢語言 Cypher,專門用於查詢圖譜。您可以使用 Cypher,以簡潔易讀的方式表達複雜的模式和連結。

Neo4j 提供多種部署選項,可依據您的需求進行選擇:

  • 自行管理:使用 Neo4j Desktop 或 Docker 映像檔 (在內部部署或在您自己的雲端中),在您自己的基礎架構上執行 Neo4j。397a3c535b52d3f6.png
  • 雲端管理:使用市集產品,在熱門雲端服務供應商上部署 Neo4j。
  • 全代管:使用 Neo4j AuraDB,這是 Neo4j 的全代管雲端資料庫即服務,可為您處理佈建、擴充、備份和安全性。

在本程式碼研究室中,我們會使用 Neo4j AuraDB Free,這是 AuraDB 的零成本層級。這項服務提供全代管的圖形資料庫執行個體,內含足夠的儲存空間和功能,可用於建立原型、學習及建構小型應用程式,非常適合我們建構以生成式 AI 為動力的電影推薦機器人聊天機器人。

您將建立免費的 AuraDB 執行個體,並使用連線憑證將其連結至應用程式,然後在本實驗室中使用該執行個體儲存及查詢電影知識圖。

為什麼要使用圖表?

在傳統的關聯式資料庫中,如果要回答「哪些電影與《全面啟動》相似,共用演員或類型?」這類問題,就必須執行跨多個資料表的複雜 JOIN 作業。隨著關係深度的增加,效能和可讀性會降低。

不過,Neo4j 等圖形資料庫的設計目的是有效地掃描關係,因此非常適合用於推薦系統、語意搜尋和智慧助理。這些資料有助於擷取實際情境,例如合作網路、故事情節或觀眾偏好,而這些情境很難透過傳統資料模型呈現。

將這些連結資料與 Gemini 等 LLMVertex AI 的向量嵌入結合,就能強化聊天機器人的使用體驗,讓機器人以更個人化且相關的方式進行推理、擷取及回應。

Neo4j AuraDB 免費建立

  1. 前往 https://console.neo4j.io
  2. 使用 Google 帳戶或電子郵件地址登入。
  3. 按一下「建立免費執行個體」。
  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>

您將使用這些值設定專案中的 .env 檔案,以便在下一個步驟中透過 Neo4j 進行驗證。

a1e29e56e6c412fc.png

Neo4j AuraDB Free 非常適合開發、實驗和小規模應用程式 (例如本程式碼研究室)。這項服務提供充裕的用量限制,最多可支援 200,000 個節點400,000 個關係。雖然它提供建構及查詢知識圖譜所需的所有基本功能,但不支援自訂外掛程式或增加儲存空間等進階設定。如果是實際工作負載或較大的資料集,您可以升級至 AuraDB 更高層級的方案,享有更大的容量、效能和企業級功能。

這樣就完成了 Neo4j AuraDB 後端設定。在下一個步驟中,我們會建立 Google Cloud 專案、複製存放區,並設定必要的環境變數,讓您準備好開發環境,然後開始使用程式碼研究室。

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 .... finished successfully"的訊息。

您可以透過主控台搜尋每項產品,或使用這個連結,來代替 gcloud 指令。

如果遺漏任何 API,您隨時可以在導入期間啟用。

如要瞭解 gcloud 指令和用法,請參閱說明文件

複製存放區並設定環境

接下來,我們要複製範例存放區,以便在程式碼研究室的後續步驟中參照。假設您目前在 Cloud Shell 中,請從主目錄執行下列指令:

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

如要啟動編輯器,請按一下 Cloud Shell 視窗工具列中的「Open Editor」(開啟編輯器)。按一下左上角的選單列,然後依序選取「檔案」→「開啟資料夾」,如下所示:

66221fd0d0e5202f.png

選取 neo4j-vertexai-codelab 資料夾,您應該會看到資料夾開啟,並顯示類似的結構,如下所示:

e49542efd70de22e.png

接下來,我們需要設定在本程式碼研究室中會用到的環境變數。點選 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 執行程式碼研究室,可以將這些欄位留空,系統會自動根據您目前的專案設定推斷這些欄位。
  • 如果您是在本機或 Cloud Shell 外部執行,請使用先前建立的 Google Cloud 專案 ID 更新 PROJECT_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

所有依附元件都已成功安裝後,本程式碼研究室中的本機 Python 環境就會全面設定,以便執行指令碼和聊天機器人。

太好了!我們現在可以繼續進行下一個步驟,瞭解資料集並準備建立圖表和語意豐富化。

4. 準備 Movies 資料集

我們的第一個工作是準備電影資料集,以便建立知識圖並強化推薦對話方塊。我們不會從頭開始,而是使用現有的開放資料集,並在此基礎上進行建構。

我們使用 Rounak Banik 的 The Movies Dataset,這是 Kaggle 上知名的公開資料集。這份資料包含 TMDB 中 45,000 多部電影的中繼資料,包括演員、工作人員、關鍵字、評分等。

9e3a1dc4c286af1b.png

如要建立可靠且有效的電影推薦聊天機器人,請務必先提供清晰、一致且有條理的資料。雖然 Kaggle 的 Movies Dataset 是豐富的資源,含有超過 45,000 筆電影記錄和詳細的中繼資料 (包括類型、演員、劇組人員等),但也包含雜訊、不一致性和巢狀資料結構,不適合用於圖表建模或語意嵌入。

為解決這個問題,我們預先處理及標準化資料集,確保資料集適合用於建立 Neo4j 知識圖譜,並產生高品質的嵌入資料。這項程序涉及:

  • 移除重複和不完整的記錄
  • 將關鍵欄位標準化 (例如類型名稱、人物姓名)
  • 將複雜的巢狀結構 (例如演員和工作人員) 扁平化為結構化 CSV
  • 選取約 12,000 部電影的代表性子集,以便在 Neo4j AuraDB 免費限制範圍內

優質的正規化資料有助於確保:

  • 資料品質:盡可能減少錯誤和不一致性,提供更準確的推薦內容
  • 查詢效能:簡化結構可加快擷取速度並減少重複內容
  • 嵌入準確度:清除輸入內容,可產生更有意義且符合情境的向量嵌入

您可以在這個 GitHub 存放區的 normalized_data/ 資料夾中,存取經過清理和正規化的資料集。這個資料集也會複製到 Google Cloud Storage 值區,方便您在日後的 Python 指令碼中存取。

資料經過清理後,我們現在可以將資料載入 Neo4j,並開始建構電影知識圖譜。

5. 建立電影知識圖譜

為了讓支援 GenAI 的電影推薦機器人順利運作,我們需要以某種方式建構電影資料集,以便擷取電影、演員、導演、類型和其他中繼資料之間的豐富連結網絡。在本節中,我們將使用先前準備的經過清理和標準化的資料集,在 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_data/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 載入完整圖表

建議您使用本程式碼研究室提供的自動化 Python 指令碼,而非手動執行多個 Cypher 查詢。

這個 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. 產生及載入嵌入項目,以便執行向量相似度搜尋

如要在聊天機器人中啟用語意搜尋,我們需要為電影摘要產生向量嵌入。這些嵌入功能可將文字資料轉換為可比較相似度的數值向量,讓對話方塊即使查詢不完全符合標題或說明,也能擷取相關電影。

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"

嵌入項目載入至 Neo4j 後,電影知識圖譜就會變成語意感知,可使用向量相似度支援強大的自然語言搜尋功能!

7. 電影推薦聊天機器人

知識圖譜和向量嵌入完成後,您可以將所有內容整合成功能完整的對話介面,也就是以 GenAI 技術為基礎的電影推薦聊天機器人

這個聊天機器人是以 Python 實作,並使用 Gradio 這個輕量網路架構來建構直覺的使用者介面。核心邏輯位於 app.py 中,可連線至 Neo4j AuraDB 執行個體,並使用 Google Vertex AIGemini 處理自然語言查詢並回應。

運作方式

  1. 使用者輸入自然語言查詢例如:「推薦我科幻驚悚片,例如《星際效應》」
  2. 使用 Vertex AI 的 text-embedding-004 模型為查詢產生向量嵌入
  3. 在 Neo4j 中執行向量搜尋,找出語意相似的電影
  4. 使用 Gemini 可執行下列操作:
  • 根據背景資訊解讀查詢
  • 根據向量搜尋結果和 Neo4j 結構定義產生自訂 Cypher 查詢
  • 執行查詢,擷取相關圖表資料 (例如演員、導演、類型)
  • 為使用者提供結果摘要

c628f853e86ff61b.png

這種混合方法稱為 GraphRAG (圖譜檢索增強生成),結合了語意檢索和結構化推理,可產生更準確、更符合脈絡且可解釋的推薦內容。

在本機執行 Chatbot

啟用虛擬環境 (如果尚未啟用),然後使用以下指令啟動聊天機器人:

python app.py

畫面會顯示類似以下的輸出:

Vector index 'overview_embeddings' already exists. No need to create a new one.
* Running on local URL:  http://0.0.0.0:8080
To create a public link, set `share=True` in `launch()`.

💡 如要將聊天機器人分享至外部,請在 app.pylaunch() 函式中設定 share=True

與聊天機器人互動

開啟終端機中顯示的本機網址 (通常是 👉 http://0.0.0.0:8080),即可存取聊天機器人介面。

你可以問以下問題:

  • 「如果我喜歡《星際效應》,應該看哪些影片?」
  • 「推薦由諾拉艾芙倫執導的愛情片」
  • 「我想看一部有湯姆漢克斯演出的家庭電影」
  • 「尋找與人工智慧相關的驚悚片」

a194b635f913211b.png

聊天機器人會:

✅ 瞭解查詢

✅ 使用嵌入功能找出語意相似的電影情節

✅ 產生並執行 Cypher 查詢,擷取相關圖表脈絡

✅ 在幾秒內提供友善的個人化推薦內容

目前可用的功能

您剛剛建構了 GraphRAG 輔助的電影聊天機器人,結合了以下元素:

  • 向量搜尋:語意相關性
  • 使用 Neo4j 進行知識圖推論
  • 透過 Gemini 提供LLM 功能
  • 使用 Gradio 打造流暢的聊天介面

這個架構可做為基礎,讓您擴展至採用生成式 AI 技術的進階搜尋、推薦或推理系統。

8. (選用) 部署至 Google Cloud Run

a194b635f913211b.png

如果您想讓電影推薦聊天機器公開供大眾使用,可以將其部署至 Google Cloud Run。這是一個全代管的無伺服器平台,可自動調整應用程式規模,並消除所有基礎架構問題。

這項部署作業使用:

  • requirements.txt:定義 Python 依附元件 (Neo4j、Vertex AI、Gradio 等)
  • Dockerfile:封裝應用程式
  • .env.yaml:在執行階段安全地傳遞環境變數

步驟 1:準備 .env.yaml

在根目錄中建立名為 .env.yaml 的檔案,並加入下列內容:

NEO4J_URI: "neo4j+s://<your-aura-db-uri>"
NEO4J_USER: "neo4j"
NEO4J_PASSWORD: "<your-password>"
PROJECT_ID: "<your-gcp-project-id>"
LOCATION: "<your-gcp-region>"  # e.g. us-central1

💡 建議使用此格式,而非 --set-env-vars,因為此格式可擴充性更高、可控管版本,且更易讀。

步驟 2:設定環境變數

在終端機中設定下列環境變數 (請將預留位置值替換為實際的專案設定):

# 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

接著,使用 .env.yaml 檔案部署應用程式,以便進行執行階段設定:

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 \
 
--env-vars-file=.env.yaml

存取聊天機器人

部署完成後,Cloud Run 會提供公開網址,例如:

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

在瀏覽器中開啟這個網址,即可存取已部署的 Gradio 聊天機器人介面,並準備使用 GraphRAG、Gemini 和 Neo4j 處理電影推薦內容!

注意事項和提示

  • 請確認 Dockerfile 在建構期間執行 pip install -r requirements.txt
  • 如果您未使用 Cloud Shell,就必須使用具備 Vertex AI 和 Artifact Registry 權限的服務帳戶驗證環境。
  • 您可以前往 Google Cloud 主控台 > Cloud Run 監控部署記錄和指標。

您也可以前往 Google Cloud 控制台的 Cloud Run 頁面,查看 Cloud Run 中的服務清單。movies-chatbot 服務應是其中一個 (如果不是唯一) 服務。

bccf390b7099e73b.png

按一下特定服務名稱 (在本例中為 movies-chatbot),即可查看服務的詳細資料,例如網址、設定、記錄等。

3709b596167cdaa0.png

這樣一來,您就能部署、調整及分享電影推薦聊天機器人。🎉

9. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取這篇文章中所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後點按「刪除」。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。

10. 恭喜

您已成功使用 Neo4jVertex AIGemini,建構並部署了 GraphRAG 技術輔助、GenAI 增強的電影推薦機器人。結合 Neo4j 的圖形原生建模功能、透過 Vertex AI 進行語意搜尋,以及透過 Gemini 進行自然語言推理,您就能建立超越基本搜尋的智慧系統,瞭解使用者意圖根據連結資料推理,並以對話方式回覆

在本程式碼研究室中,您完成了以下工作:

✅ 在 Neo4j 中建立真實的電影知識圖譜,用於模擬電影、演員、類型和關係

✅ 使用 Vertex AI 的文字嵌入模型,為電影情節概要產生向量嵌入

實作 GraphRAG,結合向量搜尋和 LLM 產生的 Cypher 查詢,進行更深入的多跳推理

整合 Gemini,以便解讀使用者問題、產生 Cypher 查詢,並以自然語言摘要呈現圖表結果

✅ 使用 Gradio 建立直覺式的即時通訊介面

選擇將聊天機器人部署至 Google Cloud Run,以便進行可擴充的無伺服器主機代管

後續步驟

這個架構不限於電影推薦,還可擴展至:

  • 書籍和音樂探索平台
  • 學術研究助理
  • 產品推薦引擎
  • 醫療照護、金融和法律知識輔助服務

只要有複雜關係 + 豐富的文字資料,這種知識圖 + 大型語言模型 + 語意嵌入的組合就能為下一代智慧應用程式提供動力。

隨著 多模態生成式 AI 模型 (例如 Gemini) 不斷進化,您將能納入更豐富的上下文、圖片、語音和個人化內容,打造真正以人為本的系統。

請繼續探索、持續建構,並別忘了隨時掌握 Neo4jVertex AIGoogle Cloud 的最新消息,讓您的智慧型應用程式更上一層樓!如要進一步瞭解知識圖譜的實作教學課程,請造訪 Neo4j GraphAcademy

參考文件