Codelab: создайте чат-бота с рекомендациями фильмов с помощью Neo4j и Vertex AI

Codelab — создание чат-бота для рекомендаций фильмов с использованием Neo4j и Vertex AI

О практической работе

subjectПоследнее обновление: мая 27, 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. Реализовать интерфейс чат-бота Gradio на базе Gemini, который объединяет векторный поиск с выполнением 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 использует графовую модель , где информация представлена ​​в виде узлов (сущностей) и отношений (связей между этими сущностями). Эта модель делает ее исключительно интуитивно понятной для работы с данными, которые по своей сути связаны — такими как люди, места, продукты или, в нашем случае, фильмы, актеры и жанры.

Например, в наборе данных фильмов:

  • Узел может представлять Movie , Actor или Director
  • Отношения могут быть ACTED_IN или DIRECTED

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 в собственной инфраструктуре с помощью Neo4j Desktop или как образ Docker (локально или в собственном облаке).
  • Управление через облако : развертывайте Neo4j у популярных поставщиков облачных услуг, используя предложения на рынке.
  • Полное управление : используйте Neo4j AuraDB , полностью управляемую облачную базу данных Neo4j как услугу, которая обеспечивает подготовку, масштабирование, резервное копирование и безопасность.

В этой кодовой лаборатории мы будем использовать Neo4j AuraDB Free , уровень AuraDB с нулевой стоимостью. Он предоставляет полностью управляемый экземпляр графовой базы данных с достаточным хранилищем и функциями для прототипирования, обучения и создания небольших приложений — идеально подходит для нашей цели создания чат-бота для рекомендаций фильмов на базе GenAI.

В ходе этой лабораторной работы вы создадите бесплатный экземпляр AuraDB, подключите его к своему приложению с помощью учетных данных для подключения и будете использовать его для хранения и запроса графа знаний о фильмах.

Почему графики?

В традиционных реляционных базах данных ответы на вопросы типа «Какие фильмы похожи на «Начало» по общему актерскому составу или жанру?» подразумевают сложные операции JOIN по нескольким таблицам . По мере роста глубины связей производительность и читаемость ухудшаются.

Однако графовые базы данных, такие как Neo4j, созданы для эффективного обхода отношений , что делает их естественными для систем рекомендаций, семантического поиска и интеллектуальных помощников. Они помогают захватывать реальный контекст — например, сети совместной работы, сюжетные линии или предпочтения зрителей — который может быть трудно представить с помощью традиционных моделей данных.

Объединив эти связанные данные с LLM, такими как Gemini , и векторными вложениями от Vertex 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 Console на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего проекта Cloud включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, которая поставляется с предустановленной bq. Нажмите Активировать Cloud Shell в верхней части консоли Google Cloud.

Изображение кнопки «Активировать Cloud Shell»

  1. После подключения к Cloud Shell вы проверяете, что вы уже аутентифицированы и что проекту присвоен ваш идентификатор проекта, с помощью следующей команды:
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

При успешном выполнении команды вы должны увидеть сообщение: « Операция .... завершена успешно».

Альтернативой команде gcloud является поиск каждого продукта через консоль или использование этой ссылки .

Если какой-либо API отсутствует, вы всегда можете включить его в ходе реализации.

Информацию о командах и использовании gcloud см. в документации .

Клонировать репозиторий и настроить параметры среды

Следующий шаг — клонировать репозиторий-образец, на который мы будем ссылаться в остальной части кодовой лаборатории. Предполагая, что вы находитесь в Cloud Shell, введите следующую команду из вашего домашнего каталога:

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

Чтобы запустить редактор, нажмите Open Editor на панели инструментов окна Cloud Shell. Нажмите на строку меню в верхнем левом углу и выберите File → Open Folder, как показано ниже:

66221fd0d0e5202f.png

Выберите папку neo4j-vertexai-codelab , и вы увидите открытую папку со структурой, похожей на показанную ниже:

e49542efd70de22e.png

Далее нам нужно настроить переменные окружения, которые будут использоваться в кодовой лаборатории. Щелкните на файле example.env , и вы должны увидеть содержимое, как показано ниже:

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

Теперь создайте новый файл с именем .env в той же папке, что и файл example.env , и скопируйте содержимое существующего файла example.env. Теперь обновите следующие переменные:

  • NEO4J_URI , NEO4J_USER , NEO4J_PASSWORD и NEO4J_DATABASE :
  • Заполните эти значения, используя учетные данные, предоставленные при создании экземпляра Neo4j AuraDB Free на предыдущем шаге.
  • Для AuraDB Free NEO4J_DATABASE обычно устанавливается на neo4j.
  • PROJECT_ID и LOCATION :
  • Если вы запускаете лабораторию кода из Google Cloud Shell, вы можете оставить эти поля пустыми, так как они будут автоматически выведены из конфигурации вашего активного проекта.
  • Если вы работаете локально или за пределами Cloud Shell, обновите PROJECT_ID , указав идентификатор проекта Google Cloud, созданного ранее, и установите 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

Наша первая задача — подготовить набор данных Movies, который мы будем использовать для построения графа знаний и питания нашего чат-бота рекомендаций. Вместо того, чтобы начинать с нуля, мы воспользуемся существующим открытым набором данных и будем его развивать.

Мы используем The Movies Dataset от Rounak Banik, известный публичный набор данных, доступный на Kaggle. Он включает метаданные для более чем 45 000 фильмов из TMDB, включая актерский состав, съемочную группу, ключевые слова, рейтинги и многое другое.

9e3a1dc4c286af1b.png

Чтобы создать надежный и эффективный чат-бот для рекомендаций фильмов, важно начать с чистых, последовательных и структурированных данных. Хотя набор данных фильмов от Kaggle — это богатый ресурс с более чем 45 000 записей о фильмах и подробными метаданными, включая жанры, актерский состав, съемочную группу и многое другое, он также содержит шум, несоответствия и вложенные структуры данных, которые не подходят для графического моделирования или семантического встраивания.

Чтобы решить эту проблему, мы предварительно обработали и нормализовали набор данных, чтобы убедиться, что он хорошо подходит для построения графа знаний Neo4j и создания высококачественных вложений. Этот процесс включал:

  • Удаление дубликатов и неполных записей
  • Стандартизация ключевых полей (например, названия жанров, имена людей)
  • Преобразование сложных вложенных структур (например, актеров и съемочной группы) в структурированные CSV-файлы
  • Выбор репрезентативного подмножества из ~12 000 фильмов для соблюдения ограничений Neo4j AuraDB Free

Высококачественные нормализованные данные помогают обеспечить:

  • Качество данных : минимизирует ошибки и несоответствия для более точных рекомендаций.
  • Производительность запроса : Оптимизированная структура повышает скорость поиска и снижает избыточность.
  • Точность встраивания : чистые входные данные приводят к более осмысленным и контекстным векторным встраиваниям.

Вы можете получить доступ к очищенному и нормализованному набору данных в папке normalized_data/ этого репозитория GitHub. Этот набор данных также зеркалирован в контейнере Google Cloud Storage для легкого доступа в будущих скриптах Python.

Теперь, когда данные очищены и готовы, мы готовы загрузить их в Neo4j и начать строить нашу диаграмму знаний о фильмах.

5. Создайте график знаний о фильмах

Для работы нашего чат-бота с рекомендациями фильмов на базе GenAI нам необходимо структурировать наш набор данных о фильмах таким образом, чтобы он охватывал богатую сеть связей между фильмами, актерами, режиссерами, жанрами и другими метаданными. В этом разделе мы построим граф знаний о фильмах в Neo4j, используя очищенный и нормализованный набор данных, который вы подготовили ранее.

Мы будем использовать возможность Neo4j LOAD CSV для загрузки CSV-файлов, размещенных в публичном хранилище Google Cloud Storage (GCS). Эти файлы представляют различные компоненты набора данных фильмов, такие как фильмы, жанры, актерский состав, съемочная группа, производственные компании и пользовательские рейтинги.

Шаг 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");

Аналогичным образом вы можете импортировать и связывать другие сущности, такие как жанры , компании-производители , языки общения , страны , актерский состав, съемочную группу и рейтинги пользователей , используя соответствующие CSV-файлы и запросы Cypher.

Загрузите полный график через Python

Вместо того чтобы вручную запускать несколько запросов Cypher, мы рекомендуем использовать автоматизированный скрипт Python, представленный в этой лабораторной работе.

Скрипт graph_build.py загружает весь набор данных из GCS в ваш экземпляр Neo4j AuraDB, используя учетные данные в вашем файле .env .

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

Чтобы быстро прикрепить вложения к соответствующим узлам Movie в Neo4j, выполните следующую команду Cypher в браузере Neo4j:

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

Этот скрипт считывает тот же CSV из GCS и записывает вложения в Neo4j с помощью драйвера Python 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 AI и Gemini для обработки и ответа на запросы на естественном языке.

Как это работает

  1. Пользователь вводит запрос на естественном языке, например, «Порекомендуйте мне научно-фантастические триллеры, такие как «Интерстеллар»»
  2. Сгенерировать векторное вложение для запроса с использованием модели text-embedding-004 Vertex AI
  3. Выполните векторный поиск в Neo4j для извлечения семантически схожих фильмов.
  4. Используйте Близнецов , чтобы:
  • Интерпретируйте запрос в контексте
  • Сгенерируйте пользовательский запрос Cypher на основе результатов векторного поиска и схемы Neo4j
  • Выполнить запрос для извлечения связанных графических данных (например, актеров, режиссеров, жанров)
  • Обобщите результаты в разговорной форме для пользователя

7e3658016dac9fa7.jpeg

Этот гибридный подход, известный как GraphRAG (Graph Retrieval-Augmented Generation) , объединяет семантический поиск и структурированные рассуждения для получения более точных, контекстуальных и объяснимых рекомендаций.

Запустите чат-бот локально

Активируйте свою виртуальную среду (если она еще не активна), затем запустите чат-бота с помощью:

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()`.

💡 Чтобы предоставить внешний доступ к чат-боту, установите share=True в функции launch() в app.py

Взаимодействие с чат-ботом

Откройте локальный URL-адрес, отображаемый в вашем терминале (обычно 👉 http://0.0.0.0:8080 ), чтобы получить доступ к интерфейсу чат-бота.

Попробуйте задать такие вопросы:

  • «Что мне посмотреть, если мне понравился «Интерстеллар»?»
  • «Посоветуйте романтический фильм, снятый Норой Эфрон»
  • «Я хочу посмотреть семейный фильм с Томом Хэнксом»
  • «Найдите триллеры с участием искусственного интеллекта»

a194b635f913211b.png

Чат-бот будет:

✅ Понять запрос

✅ Найдите семантически похожие сюжеты фильмов с помощью встраиваний

✅ Сгенерируйте и запустите запрос Cypher для извлечения соответствующего контекста графа

✅ Верните дружелюбную, персонализированную рекомендацию — все это за считанные секунды

Что у вас есть сейчас

Вы только что создали чат-бота для просмотра фильмов на базе GraphRAG , который объединяет в себе:

  • Векторный поиск семантической релевантности
  • Рассуждение о графе знаний с Neo4j
  • Возможности LLM через Gemini
  • Удобный интерфейс чата с 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 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: Развертывание в облаке. Запуск

Теперь разверните свое приложение, используя файл .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 предоставит общедоступный URL-адрес следующего вида:

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

Откройте этот URL-адрес в браузере, чтобы получить доступ к развернутому интерфейсу чат-бота Gradio, который готов обрабатывать рекомендации фильмов с помощью GraphRAG, Gemini и Neo4j!

Заметки и советы

  • Убедитесь, что ваш Dockerfile запускает pip install -r requirements.txt во время сборки.
  • Если вы не используете Cloud Shell , вам необходимо будет аутентифицировать свою среду с помощью учетной записи службы с разрешениями Vertex AI и Artifact Registry.
  • Вы можете отслеживать журналы и показатели развертывания из Google Cloud Console > Cloud Run .

Вы также можете зайти в Cloud Run из консоли Google Cloud и вы увидите список служб в Cloud Run. Служба movies-chatbot должна быть одной из служб (если не единственной), перечисленных там.

bccf390b7099e73b.png

Вы можете просмотреть подробную информацию о сервисе, такую ​​как URL-адрес, конфигурации, журналы и многое другое, нажав на название конкретного сервиса (в нашем случае movies-chatbot ).

3709b596167cdaa0.png

Теперь ваш чат-бот для рекомендаций фильмов готов к развертыванию, масштабированию и совместному использованию . 🎉

9. Очистить

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой публикации, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу Управление ресурсами .
  2. В списке проектов выберите проект, который вы хотите удалить, и нажмите Удалить .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить работу» , чтобы удалить проект.

10. Поздравления

Вы успешно создали и развернули чат-бота с рекомендациями фильмов на базе GraphRAG и GenAI, используя Neo4j , Vertex AI и Gemini . Объединив возможности графического моделирования Neo4j с семантическим поиском через Vertex AI и рассуждениями на естественном языке через Gemini, вы создали интеллектуальную систему, которая выходит за рамки простого поиска — она понимает намерения пользователя , рассуждает о связанных данных и отвечает в диалоговом режиме .

В этой лабораторной работе вы выполнили следующее:

Создал реальный граф знаний о кино в Neo4j для моделирования фильмов, актеров, жанров и отношений

Сгенерированные векторные вложения для обзоров сюжетов фильмов с использованием моделей вложения текста Vertex AI

Реализован GraphRAG , объединяющий векторный поиск и запросы Cypher, сгенерированные LLM, для более глубокого многошагового обоснования

Интегрированный Gemini для интерпретации вопросов пользователей, генерации запросов Cypher и суммирования результатов графиков на естественном языке

Создали интуитивно понятный интерфейс чата с помощью Gradio

При желании разверните своего чат-бота в Google Cloud Run для масштабируемого бессерверного хостинга

Что дальше?

Эта архитектура не ограничивается рекомендациями фильмов — ее можно расширить на:

  • Платформы для поиска книг и музыки
  • Помощники научных исследований
  • Рекомендательные системы продуктов
  • Помощники по вопросам здравоохранения, финансов и права

Везде, где есть сложные взаимосвязи + богатые текстовые данные , эта комбинация графов знаний + степеней LLM + семантических внедрений может стать основой для следующего поколения интеллектуальных приложений.

По мере развития мультимодальных моделей GenAI, таких как Gemini, вы сможете включать еще более богатый контекст, изображения, речь и персонализацию для создания по-настоящему человекоориентированных систем.

Продолжайте исследовать, продолжайте строить — и не забывайте быть в курсе последних новостей от Neo4j , Vertex AI и Google Cloud , чтобы вывести свои интеллектуальные приложения на новый уровень! Изучите больше практических руководств по графам знаний на Neo4j GraphAcademy .

Справочные документы