Codelab - با استفاده از Neo4j و Vertex AI یک Chatbot توصیه فیلم بسازید

1. بررسی اجمالی

در این نرم افزار کد، با ترکیب قدرت Neo4j، Google Vertex AI و Gemini، یک چت بات توصیه فیلم هوشمند می سازید. در قلب این سیستم یک نمودار دانش Neo4j قرار دارد که فیلم‌ها، بازیگران، کارگردانان، ژانرها و موارد دیگر را از طریق شبکه‌ای غنی از گره‌ها و روابط به هم پیوسته مدل‌سازی می‌کند.

برای بهبود تجربه کاربر با درک معنایی، جاسازی‌های برداری را از نمای کلی طرح فیلم با استفاده از مدل text-embedding-004 Vertex AI (یا جدیدتر) ایجاد خواهید کرد. این تعبیه‌ها در Neo4j برای بازیابی سریع و مبتنی بر شباهت نمایه‌سازی می‌شوند.

در نهایت، Gemini را برای تقویت یک رابط مکالمه ادغام می‌کنید که در آن کاربران می‌توانند سوالاتی به زبان طبیعی بپرسند مانند "اگر Interstellar را دوست داشتم چه چیزی را تماشا کنم؟" و پیشنهادهای فیلم شخصی را بر اساس شباهت معنایی و زمینه مبتنی بر نمودار دریافت کنید.

از طریق کد لبه، شما یک رویکرد گام به گام را به شرح زیر به کار خواهید گرفت:

  1. یک نمودار دانش Neo4j با موجودیت ها و روابط مرتبط با فیلم بسازید
  2. با استفاده از Vertex AI، جاسازی‌های متنی را برای مرور کلی فیلم ایجاد کنید
  3. یک رابط چت بات Gradio که توسط Gemini طراحی شده است، پیاده سازی کنید که جستجوی برداری را با اجرای Cypher مبتنی بر نمودار ترکیب می کند.
  4. (اختیاری) برنامه را به عنوان یک برنامه وب مستقل در Cloud Run اجرا کنید

چیزی که یاد خواهید گرفت

  • نحوه ایجاد و پر کردن نمودار دانش فیلم با استفاده از Cypher و Neo4j
  • نحوه استفاده از Vertex AI برای تولید و کار با جاسازی متن معنایی
  • نحوه ترکیب LLM ها و نمودارهای دانش برای بازیابی هوشمند با استفاده از GraphRAG
  • چگونه با استفاده از Gradio یک رابط چت کاربر پسند بسازیم
  • نحوه استقرار اختیاری در Google Cloud Run

آنچه شما نیاز دارید

  • مرورگر وب کروم
  • یک اکانت جیمیل
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب
  • یک حساب Neo4j Aura DB رایگان
  • آشنایی اولیه با دستورات ترمینال و پایتون (مفید است اما لازم نیست)

این Codelab که برای توسعه دهندگان در تمام سطوح (از جمله مبتدیان) طراحی شده است، از Python و Neo4j در برنامه نمونه خود استفاده می کند. در حالی که آشنایی اولیه با پایتون و پایگاه های داده گراف می تواند مفید باشد، هیچ تجربه قبلی برای درک مفاهیم یا دنبال کردن آنها لازم نیست.

a194b635f913211b.png

2. Neo4j AuraDB را راه اندازی کنید

Neo4j یک پایگاه داده گراف بومی پیشرو است که داده ها را به عنوان شبکه ای از گره ها (موجودات) و روابط (ارتباطات بین موجودیت ها) ذخیره می کند، و آن را برای مواردی ایده آل می کند که درک اتصالات کلیدی است - مانند توصیه ها، تشخیص تقلب، نمودارهای دانش و موارد دیگر. بر خلاف پایگاه داده های رابطه ای یا مبتنی بر سند که بر جداول سفت و سخت یا ساختارهای سلسله مراتبی متکی هستند، مدل نمودار انعطاف پذیر Neo4j امکان نمایش شهودی و کارآمد داده های پیچیده و بهم پیوسته را فراهم می کند.

Neo4j به‌جای سازمان‌دهی داده‌ها در ردیف‌ها و جداول مانند پایگاه‌های داده رابطه‌ای، از یک مدل نمودار استفاده می‌کند که در آن اطلاعات به صورت گره‌ها (موجودات) و روابط (اتصال بین آن موجودیت‌ها) نمایش داده می‌شود. این مدل آن را برای کار با داده‌هایی که ذاتاً مرتبط هستند - مانند افراد، مکان‌ها، محصولات، یا در مورد ما، فیلم‌ها، بازیگران و ژانرها، بسیار شهودی می‌کند.

به عنوان مثال، در مجموعه داده های فیلم:

  • یک گره می تواند نشان دهنده یک Movie ، Actor یا Director باشد
  • یک رابطه می تواند ACTED_IN یا DIRECTED باشد

این ساختار شما را قادر می سازد تا به راحتی سوالاتی مانند:

  • این بازیگر در کدام فیلم ها حضور داشته است؟
  • چه کسی با کریستوفر نولان کار کرده است؟
  • فیلم های مشابه بر اساس بازیگران یا ژانرهای مشترک کدامند؟

Neo4j دارای یک زبان پرس و جو قدرتمند به نام Cypher است که به طور خاص برای جستجو در نمودارها طراحی شده است. Cypher به شما امکان می دهد الگوها و ارتباطات پیچیده را به روشی مختصر و خوانا بیان کنید.

Neo4j بسته به نیاز شما چندین گزینه استقرار را ارائه می دهد:

  • خود مدیریتی : Neo4j را روی زیرساخت خود با استفاده از دسکتاپ Neo4j یا به عنوان یک تصویر Docker (در مرحله اولیه یا در فضای ابری خود) اجرا کنید. 397a3c535b52d3f6.png
  • Cloud-managed : Neo4j را در ارائه دهندگان ابر محبوب با استفاده از پیشنهادات بازار مستقر کنید.
  • کاملاً مدیریت شده : از Neo4j AuraDB ، پایگاه داده ابری کاملاً مدیریت شده Neo4j به عنوان سرویس استفاده کنید، که تأمین، مقیاس‌بندی، پشتیبان‌گیری و امنیت را برای شما انجام می‌دهد.

در این لبه کد، از Neo4j AuraDB Free ، سطح صفر هزینه AuraDB استفاده خواهیم کرد. این یک نمونه پایگاه داده گراف کاملاً مدیریت شده با فضای ذخیره‌سازی و ویژگی‌های کافی برای نمونه‌سازی، یادگیری و ساخت برنامه‌های کوچک فراهم می‌کند - برای هدف ما برای ساخت یک ربات چت پیشنهادی فیلم مبتنی بر GenAI عالی است.

شما یک نمونه رایگان AuraDB ایجاد می کنید، آن را با استفاده از اعتبار اتصال به برنامه خود متصل می کنید، و از آن برای ذخیره و جستجوی نمودار دانش فیلم خود در سراسر این آزمایشگاه استفاده می کنید.

چرا نمودارها؟

در پایگاه‌های داده‌های رابطه‌ای سنتی، پاسخ به سؤالاتی مانند «کدام فیلم‌ها بر اساس بازیگران یا ژانر مشترک شبیه Inception هستند؟» شامل عملیات پیچیده JOIN در چندین جدول می شود. با افزایش عمق روابط، عملکرد و خوانایی کاهش می یابد.

با این حال، پایگاه‌های داده گراف مانند Neo4j برای پیمایش مؤثر روابط ساخته شده‌اند، و آنها را به یک مناسب برای سیستم‌های توصیه، جستجوی معنایی و دستیاران هوشمند تبدیل می‌کند. آنها کمک می کنند تا زمینه دنیای واقعی را به تصویر بکشند - مانند شبکه های همکاری، خط داستانی، یا ترجیحات بیننده - که نمایش آن با استفاده از مدل های داده سنتی ممکن است دشوار باشد.

با ترکیب این داده‌های متصل با LLM‌هایی مانند Gemini و جاسازی‌های برداری از Vertex AI ، می‌توانیم تجربه ربات چت را افزایش دهیم - به آن اجازه می‌دهیم تا استدلال، بازیابی و پاسخ را به شیوه‌ای شخصی‌تر و مرتبط‌تر نشان دهد.

Neo4j AuraDB ایجاد رایگان

  1. به https://console.neo4j.io مراجعه کنید
  2. با اکانت گوگل یا ایمیل خود وارد شوید.
  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 برای توسعه، آزمایش و برنامه های کاربردی در مقیاس کوچک مانند این کد لبه مناسب است. این محدودیت‌های استفاده سخاوتمندانه را ارائه می‌کند، تا 200000 گره و 400000 رابطه را پشتیبانی می‌کند. در حالی که تمام ویژگی های ضروری مورد نیاز برای ساختن و پرس و جو یک نمودار دانش را فراهم می کند، از تنظیمات پیشرفته مانند افزونه های سفارشی یا افزایش فضای ذخیره سازی پشتیبانی نمی کند. برای بارهای کاری تولید یا مجموعه داده های بزرگتر، می توانید به یک پلن AuraDB سطح بالاتر ارتقا دهید که ظرفیت، عملکرد و ویژگی های درجه سازمانی بیشتری را ارائه می دهد.

این بخش برای راه اندازی Neo4j AuraDB باطن شما کامل می شود. در مرحله بعد، یک پروژه Google Cloud ایجاد می‌کنیم، مخزن را شبیه‌سازی می‌کنیم، و متغیرهای محیطی لازم را پیکربندی می‌کنیم تا محیط توسعه شما را قبل از شروع با Codelab آماده کنیم.

3. قبل از شروع

یک پروژه ایجاد کنید

  1. در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورت‌حساب در پروژه آشنا شوید.
  3. شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان در حال اجرا در Google Cloud که با bq از قبل بارگذاری شده است. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.

تصویر دکمه 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 

در اجرای موفقیت آمیز دستور، باید پیامی را مشاهده کنید: " عملیات .... با موفقیت به پایان رسید".

جایگزین دستور gcloud از طریق کنسول با جستجوی هر محصول یا استفاده از این پیوند است.

اگر هر یک از API از دست رفته است، همیشه می توانید آن را در طول پیاده سازی فعال کنید.

برای دستورات و استفاده از gcloud به اسناد مراجعه کنید.

کلون کردن مخزن و تنظیمات محیط راه اندازی

گام بعدی کلون کردن مخزن نمونه است که در بقیه قسمت های Codelab به آن ارجاع خواهیم داد. با فرض اینکه در 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

در مرحله بعد، ما باید متغیرهای محیطی را که در سرتاسر Codelab مورد استفاده قرار می گیرند، تنظیم کنیم. روی فایل 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 در مرحله قبل پر کنید.
  • NEO4J_DATABASE معمولاً برای AuraDB Free روی neo4j تنظیم می شود.
  • PROJECT_ID و LOCATION :
  • اگر از Google Cloud Shell نرم افزار کد را اجرا می کنید، می توانید این فیلدها را خالی بگذارید، زیرا به طور خودکار از پیکربندی پروژه فعال شما استنتاج می شوند.
  • اگر به صورت محلی یا خارج از Cloud Shell اجرا می‌کنید، PROJECT_ID با شناسه پروژه Google Cloud که قبلاً ایجاد کرده‌اید به‌روزرسانی کنید و LOCATION روی منطقه‌ای که برای آن پروژه انتخاب کرده‌اید (مثلاً us-central1) تنظیم کنید.

هنگامی که این مقادیر را پر کردید، فایل .env را ذخیره کنید. این پیکربندی به برنامه شما اجازه می دهد تا به هر دو سرویس Neo4j و Vertex AI متصل شود.

مرحله آخر در راه اندازی محیط توسعه خود، ایجاد یک محیط مجازی پایتون و نصب تمام وابستگی های مورد نیاز فهرست شده در فایل 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

هنگامی که تمام وابستگی ها با موفقیت نصب شدند، محیط پایتون محلی شما به طور کامل برای اجرای اسکریپت ها و ربات چت در این کد لبه پیکربندی می شود.

عالیه ما اکنون آماده هستیم تا به مرحله بعدی برویم - درک مجموعه داده و آماده سازی آن برای ایجاد نمودار و غنی سازی معنایی.

4. مجموعه داده Movies را آماده کنید

اولین وظیفه ما این است که مجموعه داده Movies را آماده کنیم که از آن برای ایجاد نمودار دانش و تقویت ربات چت پیشنهادی خود استفاده خواهیم کرد. به جای شروع از ابتدا، از یک مجموعه داده باز موجود استفاده می کنیم و بر اساس آن می سازیم.

ما از The Movies Dataset توسط Rounak Banik، یک مجموعه داده عمومی شناخته شده در Kaggle استفاده می کنیم. این شامل ابرداده برای بیش از 45000 فیلم از TMDB، از جمله بازیگران، خدمه، کلمات کلیدی، رتبه‌بندی و موارد دیگر است.

9e3a1dc4c286af1b.png

برای ایجاد یک چت بات توصیه فیلم قابل اعتماد و موثر، ضروری است که با داده های تمیز، سازگار و ساختاریافته شروع کنید. در حالی که The Movies Dataset از Kaggle یک منبع غنی با بیش از 45000 رکورد فیلم و فراداده دقیق - از جمله ژانرها، بازیگران، خدمه و غیره است - همچنین حاوی نویز، ناسازگاری‌ها و ساختارهای داده تودرتو است که برای مدل‌سازی نمودار یا تعبیه معنایی ایده‌آل نیستند.

برای رسیدگی به این موضوع، ما مجموعه داده را از قبل پردازش و نرمال سازی کرده ایم تا اطمینان حاصل کنیم که برای ساخت یک نمودار دانش Neo4j و ایجاد جاسازی با کیفیت بالا مناسب است. این فرآیند شامل:

  • حذف سوابق تکراری و ناقص
  • استاندارد کردن فیلدهای کلیدی (به عنوان مثال، نام ژانر، نام افراد)
  • صاف کردن ساختارهای تو در تو پیچیده (مثلاً بازیگران و خدمه) به CSVهای ساختاریافته
  • انتخاب یک زیرمجموعه نماینده از 12000 فیلم برای ماندن در محدوده Neo4j AuraDB Free

داده های با کیفیت بالا و نرمال کمک می کند تا اطمینان حاصل شود:

  • کیفیت داده ها : برای توصیه های دقیق تر، خطاها و ناسازگاری ها را به حداقل می رساند
  • عملکرد پرس و جو : ساختار ساده سرعت بازیابی را بهبود می بخشد و افزونگی را کاهش می دهد
  • دقت جاسازی : ورودی‌های تمیز منجر به جاسازی‌های برداری معنادارتر و متنی‌تر می‌شوند.

می توانید به مجموعه داده تمیز و نرمال شده در پوشه normalized_data/ این مخزن GitHub دسترسی داشته باشید. این مجموعه داده همچنین در یک سطل Google Cloud Storage برای دسترسی آسان در اسکریپت های آینده پایتون منعکس شده است.

با پاکسازی و آماده بودن داده ها، اکنون آماده هستیم تا آن را در Neo4j بارگذاری کنیم و شروع به ساخت نمودار دانش فیلم خود کنیم.

5. نمودار دانش فیلم را بسازید

برای تقویت چت ربات توصیه فیلم مجهز به GenAI، باید مجموعه داده فیلم خود را به گونه ای ساختار دهیم که شبکه غنی از ارتباطات بین فیلم ها، بازیگران، کارگردانان، ژانرها و سایر ابرداده ها را به تصویر بکشد. در این بخش، با استفاده از مجموعه داده تمیز و نرمال‌شده‌ای که قبلاً آماده کرده‌اید، یک نمودار دانش فیلم در Neo4j می‌سازیم.

ما از قابلیت LOAD CSV Neo4j برای جذب فایل‌های 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 بیندازیم. این مثال گره های فیلم را با ویژگی های کلیدی مانند عنوان، نمای کلی، زبان و زمان اجرا ایجاد می کند:

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 می توان برای وارد کردن موجودیت های مرتبط مانند ژانرها، شرکت های تولید، زبان ها، کشورها، بازیگران، خدمه و رتبه بندی استفاده کرد.

نمودار کامل را از طریق پایتون بارگیری کنید

به جای اجرای دستی چند پرس و جوی Cypher، توصیه می کنیم از اسکریپت خودکار پایتون ارائه شده در این کد لبه استفاده کنید.

اسکریپت graph_build.py کل مجموعه داده را از GCS در نمونه Neo4j AuraDB شما با استفاده از اعتبارنامه ها در فایل .env شما بارگیری می کند.

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 بارگیری کنید

برای اتصال سریع جاسازی‌ها به گره‌های 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)

این دستور بردارهای embedding را از CSV می خواند و آنها را به عنوان یک ویژگی ( m.embedding ) روی هر گره Movie متصل می کند.

گزینه 2: بارگذاری جاسازی ها با استفاده از پایتون

همچنین می توانید با استفاده از اسکریپت پایتون ارائه شده، جاسازی ها را به صورت برنامه نویسی بارگذاری کنید. اگر در محیط شخصی خود کار می کنید یا می خواهید فرآیند را خودکار کنید، این رویکرد مفید است:

python load_embeddings.py

این اسکریپت همان CSV را از GCS می خواند و جاسازی ها را با استفاده از درایور Python Neo4j در Neo4j می نویسد.

[اختیاری] خودتان جاسازی‌ها را ایجاد کنید (برای کاوش)

اگر کنجکاو هستید که بدانید چگونه embeddings ایجاد می شود، می توانید منطق را در خود اسکریپت generate_embeddings.py بررسی کنید. از Vertex AI برای جاسازی هر متن نمای کلی فیلم با استفاده از مدل text-embedding-004 استفاده می کند.

برای اینکه خودتان آن را امتحان کنید، بخش Embedding Generation کد را باز کرده و اجرا کنید. اگر در Cloud Shell اجرا می‌کنید، می‌توانید در خط زیر نظر دهید، زیرا Cloud Shell قبلاً از طریق حساب فعال شما احراز هویت شده است:

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

هنگامی که جاسازی‌ها در Neo4j بارگیری می‌شوند، نمودار دانش فیلم شما از نظر معنایی آگاه می‌شود - آماده پشتیبانی از جستجوی قدرتمند زبان طبیعی با استفاده از شباهت برداری!

7. The Movie Recommendation Chatbot

با وجود نمودار دانش و جاسازی‌های برداری، زمان آن فرا رسیده است که همه چیز را در یک رابط مکالمه کاملاً کاربردی گرد هم بیاورید - چت ربات پیشنهادی فیلم مبتنی بر GenAI .

این ربات چت در پایتون با استفاده از Gradio ، یک چارچوب وب سبک وزن برای ایجاد رابط های کاربری بصری پیاده سازی شده است. منطق اصلی در app.py زندگی می‌کند، که به نمونه Neo4j AuraDB شما متصل می‌شود و از Google Vertex AI و Gemini برای پردازش و پاسخ به پرسش‌های زبان طبیعی استفاده می‌کند.

چگونه کار می کند

  1. کاربر یک عبارت جستجوی زبان طبیعی را تایپ می‌کند، به‌عنوان مثال، «هیجان‌انگیزهای علمی تخیلی مانند Interstellar را به من توصیه کنید»
  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()`.

💡 برای به اشتراک گذاری ربات چت به صورت خارجی، share=True در تابع launch() در app.py تنظیم کنید.

با چت بات تعامل کنید

URL محلی نمایش داده شده در ترمینال خود را باز کنید (معمولاً http://0.0.0.0:8080 ) برای دسترسی به رابط چت بات.

سعی کنید سوالاتی مانند:

  • "اگر Interstellar را دوست داشتم چه چیزی را تماشا کنم؟"
  • «پیشنهاد یک فیلم عاشقانه به کارگردانی نورا افرون»
  • "من می خواهم یک فیلم خانوادگی با تام هنکس تماشا کنم"
  • «فیلم‌های هیجان‌انگیز مرتبط با هوش مصنوعی را پیدا کنید»

a194b635f913211b.png

چت بات انجام خواهد داد:

✅ پرس و جو را درک کنید

✅ با استفاده از جاسازی ها، طرح های فیلم از لحاظ معنایی مشابه را پیدا کنید

✅ یک پرس و جو Cypher را برای واکشی زمینه گراف مرتبط ایجاد و اجرا کنید

✅ یک توصیه دوستانه و شخصی را برگردانید — همه در عرض چند ثانیه

آنچه شما در حال حاضر دارید

شما به تازگی یک ربات گفتگوی فیلم با پشتیبانی از GraphRAG ساخته اید که ترکیبی از:

  • جستجوی برداری برای ارتباط معنایی
  • استدلال نمودار دانش با Neo4j
  • قابلیت های LLM از طریق Gemini
  • رابط چت روان با Gradio

این معماری پایه‌ای را تشکیل می‌دهد که می‌توانید آن را در جستجوی پیشرفته‌تر، توصیه‌ها یا سیستم‌های استدلالی که توسط GenAI ارائه می‌شوند گسترش دهید.

8. (اختیاری) استقرار در Google Cloud Run

a194b635f913211b.png

اگر می‌خواهید ربات پیشنهادی فیلم خود را در دسترس عموم قرار دهید، می‌توانید آن را در Google Cloud Run اجرا کنید - یک پلت‌فرم کاملاً مدیریت شده و بدون سرور که برنامه شما را به‌طور خودکار مقیاس‌بندی می‌کند و همه نگرانی‌های زیرساختی را از بین می‌برد.

این استقرار از:

  • requirements.txt - برای تعریف وابستگی‌های پایتون (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: استقرار در 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 یک URL عمومی مانند:

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

برای دسترسی به رابط چت ربات Gradio مستقر شده خود، این URL را در مرورگر خود باز کنید - آماده ارائه توصیه های فیلم با استفاده از GraphRAG، Gemini، و Neo4j!

یادداشت ها و نکات

  • مطمئن شوید که Dockerfile شما در حین ساخت، pip install -r requirements.txt را اجرا می کند.
  • اگر از Cloud Shell استفاده نمی کنید، باید محیط خود را با استفاده از یک حساب سرویس با مجوزهای Vertex AI و Artifact Registry احراز هویت کنید.
  • می‌توانید گزارش‌ها و معیارهای استقرار را از Google Cloud Console > Cloud Run نظارت کنید.

همچنین می توانید از طریق کنسول Google Cloud به Cloud Run مراجعه کنید و لیست خدمات را در Cloud Run مشاهده خواهید کرد. سرویس movies-chatbot باید یکی از خدمات (اگر نه تنها) باشد که در آنجا فهرست شده است.

bccf390b7099e73b.png

می‌توانید جزئیات سرویس مانند URL، تنظیمات، گزارش‌ها و موارد دیگر را با کلیک کردن روی نام سرویس خاص (در مورد ما movies-chatbot ) مشاهده کنید.

3709b596167cdaa0.png

با این کار، Chatbot توصیه فیلم شما اکنون مستقر، مقیاس‌پذیر و قابل اشتراک‌گذاری است. 🎉

9. پاکسازی کنید

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:

  1. در کنسول Google Cloud، به صفحه مدیریت منابع بروید.
  2. در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید.
  3. در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود.

10. تبریک می گویم

شما با استفاده از Neo4j ، Vertex AI ، و Gemini ، یک چت ربات توصیه فیلم با پشتیبانی از GraphRAG و GenAI را با موفقیت ساخته و به کار گرفته‌اید. با ترکیب قابلیت‌های مدل‌سازی مبتنی بر نمودار Neo4j با جستجوی معنایی از طریق Vertex AI و استدلال زبان طبیعی از طریق Gemini، سیستم هوشمندی ایجاد کرده‌اید که فراتر از جستجوی اولیه است - این سیستم قصد کاربر ، دلایل داده‌های متصل را درک می‌کند و به صورت مکالمه پاسخ می‌دهد .

در این کد لبه، شما موارد زیر را انجام دادید:

✅ برای مدل سازی فیلم ها، بازیگران، ژانرها و روابط ، یک نمودار دانش واقعی فیلم در Neo4j ساخته است.

ایجاد جاسازی های برداری برای مرور کلی طرح فیلم با استفاده از مدل های جاسازی متن Vertex AI

پیاده سازی GraphRAG ، ترکیب جستجوی برداری و پرس و جوهای Cypher ایجاد شده توسط LLM برای استدلال عمیق تر و چند هاپ

Gemini یکپارچه برای تفسیر سوالات کاربر، ایجاد پرس و جوهای Cypher و خلاصه کردن نتایج نمودار به زبان طبیعی

یک رابط چت بصری با استفاده از Gradio ایجاد کرد

به صورت اختیاری ربات چت خود را در Google Cloud Run برای میزبانی مقیاس پذیر و بدون سرور مستقر کنید

بعد چه می شود؟

این معماری به توصیه های فیلم محدود نمی شود - می توان آن را به موارد زیر گسترش داد:

  • پلتفرم‌های کشف کتاب و موسیقی
  • دستیاران پژوهشی دانشگاهی
  • موتورهای توصیه محصول
  • دستیاران بهداشت، امور مالی و دانش حقوقی

هرجا که روابط پیچیده + داده‌های متنی غنی دارید، این ترکیب نمودارهای دانش + LLMs + تعبیه‌های معنایی می‌تواند نسل بعدی برنامه‌های هوشمند را تقویت کند.

همانطور که مدل‌های GenAI چندوجهی مانند Gemini تکامل می‌یابند، می‌توانید حتی بافت، تصاویر، گفتار و شخصی‌سازی غنی‌تری را برای ساختن سیستم‌های واقعاً انسان محور ترکیب کنید.

به کاوش ادامه دهید، به ساختن ادامه دهید - و فراموش نکنید که با جدیدترین های Neo4j ، Vertex AI و Google Cloud به روز بمانید تا برنامه های هوشمند خود را به سطح بعدی ببرید! آموزش‌های عملی نمودار دانش را در Neo4j GraphAcademy کاوش کنید.

اسناد مرجع