Codelab:使用 Neo4j 和 Vertex AI 构建电影推荐聊天机器人

1. 概览

在此 Codelab 中,您将结合使用 Neo4j、Google Vertex AI 和 Gemini 的强大功能,构建一个智能电影推荐聊天机器人。该系统的核心是一个 Neo4j 知识图谱,它通过由相互关联的节点和关系组成的丰富网络来对电影、演员、导演、类型等进行建模。

为了通过语义理解来提升用户体验,您将使用 Vertex AI 的 text-embedding-004 模型(或更新的模型)从电影情节概览中生成向量嵌入。这些嵌入内容已在 Neo4j 中编入索引,以便快速检索相似内容。

最后,您将集成 Gemini 来支持对话式界面,用户可以在其中提出自然语言问题,例如“如果我喜欢《星际穿越》,应该看什么电影?”,并根据语义相似性和基于图的上下文接收个性化的电影建议。

在此 Codelab 中,您将采用以下分步方法:

  1. 构建包含电影相关实体和关系的 Neo4j 知识图谱
  2. 使用 Vertex AI 为电影概览生成/加载文本嵌入
  3. 实现一个由 Gemini 提供支持的 Gradio 聊天机器人界面,该界面将向量搜索与基于图的 Cypher 执行相结合
  4. (可选)将应用部署到 Cloud Run,作为独立的 Web 应用

学习内容

  • 如何使用 Cypher 和 Neo4j 创建电影知识图谱并向其中填充数据
  • 如何使用 Vertex AI 生成和处理语义文本嵌入
  • 如何结合使用 LLM 和知识图谱,通过 GraphRAG 实现智能检索
  • 如何使用 Gradio 构建人性化的聊天界面
  • 如何选择性地部署到 Google Cloud Run

所需条件

  • Chrome 网络浏览器
  • Gmail 账号
  • 启用了结算功能的 Google Cloud 项目
  • 免费的 Neo4j Aura 数据库账号
  • 基本熟悉终端命令和 Python(有帮助,但不是必需的)

此 Codelab 专为各种水平的开发者(包括新手)设计,并在其示例应用中使用 Python 和 Neo4j。虽然对 Python 和图数据库有基本的了解会有所帮助,但无需任何先验知识即可理解相关概念或继续学习。

a194b635f913211b.png

2. 设置 Neo4j AuraDB

Neo4j 是一款领先的原生图数据库,可将数据存储为节点(实体)和关系(实体之间的连接)的网络,非常适合需要了解连接的应用场景,例如推荐、欺诈检测、知识图谱等。与依赖于刚性表格或分层结构的关系型数据库或基于文档的数据库不同,Neo4j 的灵活图模型可以直观高效地表示复杂且相互关联的数据。

与关系型数据库以行和表的形式组织数据不同,Neo4j 使用图模型,其中信息表示为节点(实体)和关系(这些实体之间的连接)。此模型可让您非常直观地处理本身就存在关联的数据,例如人物、地点、商品,或者在本例中,电影、演员和类型。

例如,在电影数据集中:

  • 节点可以表示 MovieActorDirector
  • 关系可以是 ACTED_INDIRECTED

9bdf75fa306c2e84.jpeg

借助此结构,您可以轻松提出以下问题:

  • 这位演员出演过哪些电影?
  • 谁曾与克里斯托弗·诺兰合作过?
  • 哪些电影因演员或类型相同而相似?

Neo4j 附带一种名为 Cypher 的强大查询语言,专门用于查询图。借助 Cypher,您可以以简洁明了的方式表达复杂的模式和连接。例如,此 Cypher 查询使用 MERGE 来确保演员、电影及其与角色详细信息的关系的创建是唯一的,从而避免重复。

MERGE (a:Actor {name: "Tom Hanks"})
MERGE (m:Movie {title: "Toy Story", released: 1995})
MERGE (a)-[:ACTED_IN {roles: ["Woody"]}]->(m);

Neo4j 提供了多种部署选项,您可以根据需要选择:

  • 自行管理:使用 Neo4j Desktop 或作为 Docker 映像(本地或在您自己的云端)在您自己的基础架构上运行 Neo4j。
  • 云端管理:使用 Marketplace 产品在热门云提供商上部署 Neo4j。
  • 全托管:使用 Neo4j 的全托管式云数据库即服务 Neo4j AuraDB,该服务可为您处理预配、扩缩、备份和安全事务。

在此 Codelab 中,我们将使用 Neo4j AuraDB Free,这是 AuraDB 的免费层级。它提供了一个全托管式图数据库实例,具有足够的存储空间和功能,可用于原型设计、学习和构建小型应用,非常适合我们构建由 GenAI 提供支持的电影推荐聊天机器人的目标。

您将创建一个免费的 AuraDB 实例,使用连接凭据将其连接到您的应用,并在本实验中将其用于存储和查询电影知识图谱。

为什么选择图表?

在传统的关系型数据库中,回答诸如“哪些电影在演员或类型方面与《盗梦空间》相似?”之类的问题需要跨多个表执行复杂的联接操作。随着关系深度的增加,性能和可读性会下降。

不过,Neo4j 等图数据库旨在高效遍历关系,因此非常适合用于推荐系统、语义搜索和智能助理。它们有助于捕获难以使用传统数据模型表示的现实世界背景信息,例如协作网络、故事情节或观看者偏好。

通过将这些关联的数据与 Gemini 等 LLMVertex AI 中的向量嵌入相结合,我们可以大幅提升聊天机器人的体验,使其能够以更加个性化、更相关的方式进行推理、检索和回答。

创建 Neo4j AuraDB Free

  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 非常适合开发、实验和小型应用(例如本 Codelab)。它提供宽松的用量限额,最多支持 20 万个节点40 万个关系。虽然它提供了构建和查询知识图谱所需的所有基本功能,但不支持高级配置,例如自定义插件或增加存储空间。对于生产工作负载或较大数据集,您可以升级到更高级别的 AuraDB 方案,以获得更大的容量、更高的性能和企业级功能。

这样就完成了设置 Neo4j AuraDB 后端的部分。在下一步中,我们将创建一个 Google Cloud 项目,克隆代码库,并配置必要的环境变量,以便在开始 Codelab 之前准备好开发环境。

3. 准备工作

创建项目

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 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 命令和用法,请参阅文档

克隆代码库并设置环境设置

下一步是克隆我们将在本 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 实例时提供的凭据填写这些值。
  • 对于 AuraDB Free,NEO4J_DATABASE 通常设置为 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

成功安装所有依赖项后,您的本地 Python 环境将完全配置好,可以运行此 Codelab 中的脚本和聊天机器人。

太棒了!现在,我们可以继续执行下一步了,即了解数据集并为创建图和进行语义丰富做好准备。

4. 准备 Movies 数据集

我们的首要任务是准备电影数据集,我们将使用该数据集构建知识图谱并为推荐聊天机器人提供支持。我们不会从头开始,而是使用现有的开放数据集并在此基础上进行构建。

我们使用的是 Rounak Banik 提供的 电影数据集,这是 Kaggle 上一个著名的公开数据集。它包含来自 TMDB 的 45,000 多部电影的元数据,包括演员、剧组人员、关键字、评分等。

9e3a1dc4c286af1b.png

若要构建可靠且有效的电影推荐聊天机器人,首先必须使用干净、一致且结构化的数据。虽然 Kaggle 上的电影数据集是一个丰富的资源,包含超过 45,000 条电影记录和详细的元数据(包括类型、演员、剧组等),但它也包含噪声、不一致性和嵌套的数据结构,这些都不太适合用于图模型或语义嵌入。

为解决此问题,我们对数据集进行了预处理和归一化,以确保其非常适合构建 Neo4j 知识图谱并生成高质量的嵌入。此流程包括:

  • 移除重复记录和不完整记录
  • 标准化关键字段(例如,流派名称、人名)
  • 将复杂的嵌套结构(例如演员和剧组)扁平化为结构化 CSV
  • 选择约 12,000 部电影的代表性子集,以符合 Neo4j AuraDB Free 的限制

高质量的规范化数据有助于确保:

  • 数据质量:最大限度地减少错误和不一致情况,以便提供更准确的建议
  • 查询性能:简化的结构可提高检索速度并减少冗余
  • 嵌入准确性:清晰的输入可生成更有意义、更具上下文的向量嵌入

您可以在此 GitHub 代码库的 normalized_data/ 文件夹中访问经过清理和归一化的数据集。此数据集还镜像在 Google Cloud Storage 存储分区中,以便在即将推出的 Python 脚本中轻松访问。

数据清理完毕并准备就绪后,我们现在可以将其加载到 Neo4j 中,并开始构建电影知识图谱。

5. 构建电影知识图谱

为了支持我们的生成式 AI 赋能的电影推荐聊天机器人,我们需要以一种能够捕获电影、演员、导演、流派和其他元数据之间丰富的网络连接的方式来构建电影数据集。在本部分中,我们将使用您之前准备的经过清理和归一化的数据集,在 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 命令导入电影元数据。此示例创建了具有标题、概览、语言和时长等关键属性的电影节点:

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");

同样,您也可以使用各自的 CSV 文件和 Cypher 查询来导入和关联其他实体,例如类型制作公司语言国家/地区演员剧组人员用户评分

通过 Python 加载完整图

我们建议您使用此 Codelab 中提供的自动化 Python 脚本,而不是手动运行多个 Cypher 查询。

脚本 graph_build.py 使用 .env 文件中的凭据将整个数据集从 GCS 加载到您的 Neo4j AuraDB 实例中。

python graph_build.py

该脚本将按顺序加载所有必需的 CSV 文件,创建节点和关系,并构建完整的电影知识图谱。

验证图表

加载后,您可以运行以下脚本来验证图表:

python validate_graph.py

这样一来,您便可快速了解图中的内容:有多少部电影、演员、类型以及 ACTED_IN、DIRECTED 等关系,从而确保导入成功。

📦 Node Counts:
Movie: 11997 nodes
ProductionCompany: 7961 nodes
Genre: 20 nodes
SpokenLanguage: 100 nodes
Country: 113 nodes
Person: 92663 nodes
Actor: 81165 nodes
Director: 4846 nodes
Producer: 5981 nodes
User: 671 nodes

🔗 Relationship Counts:
HAS_GENRE: 28479 relationships
PRODUCED_BY: 22758 relationships
PRODUCED_IN: 14702 relationships
HAS_LANGUAGE: 16184 relationships
ACTED_IN: 191307 relationships
DIRECTED: 5047 relationships
PRODUCED: 6939 relationships
RATED: 90344 relationships

现在,您应该会看到图表中填充了电影、人物、流派等内容,接下来就可以进行语义丰富了!

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 文件中读取嵌入向量,并将其作为属性 (m.embedding) 附加到每个 Movie 节点。

选项 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 的电影推荐聊天机器人

此聊天机器人使用 Gradio(一个用于构建直观界面的轻量级 Web 框架)以 Python 实现。核心逻辑位于 app.py 中,该文件会连接到您的 Neo4j AuraDB 实例,并使用 Google Vertex AIGemini 来处理自然语言查询并做出响应。

工作方式

  1. 用户输入自然语言查询例如,“Recommend me sci-fi thrillers like Interstellar”(推荐一些像《星际穿越》这样的科幻惊悚片)
  2. 使用 Vertex AI 的 text-embedding-004 模型为查询生成向量嵌入
  3. 在 Neo4j 中执行向量搜索,以检索语义上相似的电影
  4. 使用 Gemini 可执行以下操作:
  • 根据上下文解读查询
  • 根据向量搜索结果和 Neo4j 架构生成自定义 Cypher 查询
  • 执行查询以提取相关图数据(例如演员、导演、流派)
  • 以对话方式向用户总结结果

7e3658016dac9fa7.jpeg

这种混合方法称为 GraphRAG(图检索增强生成),它将语义检索与结构化推理相结合,可生成更准确、更具上下文相关性且更易于理解的推荐。

在本地运行聊天机器人

激活虚拟环境(如果尚未激活),然后使用以下命令启动聊天机器人:

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 实现流畅的聊天界面

此架构构成了一个基础,您可以将其扩展为由 GenAI 提供支持的更高级的搜索、推荐或推理系统。

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 在 build 期间运行 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,然后点击关停以删除项目。

10. 恭喜

您已成功使用 Neo4jVertex AIGemini 构建并部署了由 GraphRAG 提供支持、由生成式 AI 增强的电影推荐聊天机器人。通过将 Neo4j 的原生图建模功能与 Vertex AI 的语义搜索功能以及 Gemini 的自然语言推理功能相结合,您创建了一个超越基本搜索的智能系统,该系统可以理解用户意图基于关联数据进行推理,并以对话方式回答问题

在此 Codelab 中,您完成了以下任务:

✅ 在 Neo4j 中构建了实景电影知识图谱,用于对电影、演员、类型和关系进行建模

✅ 使用 Vertex AI 的文本嵌入模型为电影剧情概览生成向量嵌入

实现了 GraphRAG,将向量搜索与 LLM 生成的 Cypher 查询相结合,以实现更深入的多跳推理

集成 Gemini,可解读用户问题、生成 Cypher 查询,并以自然语言总结图结果

✅ 使用 Gradio 创建了直观的聊天界面

(可选)将聊天机器人部署到 Google Cloud Run,以实现可扩缩的无服务器托管

后续步骤

此架构不仅限于电影推荐,还可以扩展到:

  • 图书和音乐探索平台
  • 学术研究助理
  • 产品推荐引擎
  • 医疗保健、金融和法律知识助理

在任何需要处理复杂关系和丰富文本数据的场景中,知识图谱 + LLM + 语义嵌入的组合都可以为下一代智能应用提供支持。

随着 Gemini 等多模态生成式 AI 模型的不断发展,您将能够融入更丰富的背景信息、图片、语音和个性化元素,打造真正以人为本的系统。

继续探索,继续构建,别忘了及时了解 Neo4jVertex AIGoogle Cloud 的最新动态,让您的智能应用更上一层楼!如需了解更多知识图谱实践教程,请访问 Neo4j GraphAcademy

参考文档