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

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

در این نرم افزار کد، یک چت بات توصیه فیلم هوشمند با استفاده از ترکیبی از Neo4j، Vertex AI و Gemini خواهید ساخت. ربات چت از یک نمودار دانش Neo4j به عنوان پایه ای برای نمایش فیلم ها، بازیگران، کارگردانان، تهیه کنندگان، ژانرها و غیره استفاده می کند. برای بهبود تجربه جستجو، با استفاده از مدل text-embedding-004 Vertex AI، جاسازی های برداری را از مرور کلی طرح فیلم ایجاد می کنید.

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

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

  1. یک نمودار دانش Neo4j با داده های مربوط به فیلم بسازید
  2. با استفاده از جاسازی‌های متنی Vertex AI، داده‌های فیلم را با ایجاد جاسازی‌های متنی در نمای کلی/طرح‌های فیلم غنی کنید.
  3. برای جستجوی معنایی و بازیابی از Neo4j که همه چیز را با هم جمع می‌کند، یک رابط چت بات Gradio که توسط Gemini طراحی شده است، بسازید.
  4. به صورت اختیاری، آن را در Google Cloud Run به عنوان یک برنامه وب مستقل مانند شکل زیر استقرار دهید:

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

  • چگونه با استفاده از Cypher و Neo4j یک نمودار دانش فیلم بسازیم.
  • نحوه استفاده از Vertex AI برای ایجاد تعبیه‌های معنایی برای متن.
  • نحوه ادغام Neo4j و Gemini برای بازیابی هوشمند مبتنی بر برداری.
  • نحوه ساخت و اجرای رابط کاربری چت بات مکالمه با Gradio.

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

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

این Codelab که برای توسعه دهندگان در تمام سطوح (از جمله مبتدیان) طراحی شده است، از Python و Neo4j در برنامه نمونه خود استفاده می کند. در حالی که آشنایی اولیه با پایتون و پایگاه های داده گراف می تواند مفید باشد، هیچ تجربه قبلی برای درک مفاهیم یا دنبال کردن آنها لازم نیست. 121747afa89e0e6.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 

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

Operation "operations/..." finished successfully.

جایگزین دستور 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_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 شما بارگیری می کند.

پایتون 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. برای انجام جستجوی شباهت برداری، جاسازی ها را ایجاد و بارگذاری کنید

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

⚠️ توجه به عملکرد

ایجاد جاسازی برای هزاران توصیف فیلم در زمان واقعی هم زمان بر و هم منابع فشرده است. برای اینکه این آزمایشگاه کد را کارآمد و در دسترس قرار دهیم، ما با استفاده از Vertex AI تعبیه‌هایی را برای تمام 12000 نمای کلی فیلم از پیش محاسبه کرده‌ایم.

text-embedding-004

مدل و آنها را در یک فایل CSV در دسترس عموم ذخیره کرد.

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"

⚠️ اجرای کامل فرآیند تولید جاسازی، سهمیه Vertex AI را مصرف می‌کند و می‌تواند زمان قابل توجهی را ببرد، به خصوص با هزاران رکورد.

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

7. The Movie Recommendation Chatbot

با وجود نمودار دانش و جاسازی‌های شما، زمان آن رسیده است که همه چیز را در یک رابط مکالمه جمع کنید - Chatbot توصیه فیلم شما.

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

ربات چت از 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

با یک رابط چت ساده از شما استقبال می شود که در آن می توانید پرس و جوهای زبان طبیعی مانند:

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

c76b6c6e2bcb25d9.png

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

هر توصیه در یک طرح به سبک کارت با نتایج منظمی ارائه شده است.

با اجرای ربات چت شما به صورت محلی، اکنون یک سیستم توصیه فیلم کاملاً کاربردی با قدرت GenAI دارید که بهترین نمودارهای دانش ، LLMs (Gemini) و جستجوی معنایی را با استفاده از جاسازی‌های Vertex AI ترکیب می‌کند.

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

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

قبل از استقرار، مطمئن شوید که فایل های زیر در پروژه شما وجود دارد (آنها قبلاً در این مخزن گنجانده شده اند):

  • requirements.txt – تمام وابستگی های پایتون مورد نیاز برای اجرای برنامه را فهرست می کند، از جمله 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 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"

به چت بات دسترسی پیدا کنید

پس از استقرار، Cloud Run یک URL سرویس عمومی را در قالب زیر برمی گرداند:

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

URL را در مرورگر خود باز کنید تا به چت بات خود دسترسی پیدا کنید. باید همان رابط کاربری Gradio را مشاهده کنید که در فضای ابری اجرا می‌شود و می‌تواند درخواست‌ها را دریافت کند و با توصیه‌های فیلم پاسخ دهد.

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

  • مطمئن شوید که 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 ، یک چت ربات توصیه فیلم مجهز به گرافیک و GenAI را با موفقیت ساخته و به کار گرفته‌اید. با ترکیب قابلیت‌های مدل‌سازی بیانی Neo4j با قدرت معنایی تعبیه‌های Vertex AI و هوش محاوره‌ای Gemini، یک سیستم بصری و هوشمند ایجاد کرده‌اید که پرس و جوهای زبان طبیعی را درک می‌کند و توصیه‌های فیلم مرتبط با متن را برمی‌گرداند.

در سراسر این کد، شما:

  • یک نمودار دانش غنی و بهم پیوسته از مجموعه داده های فیلم در دنیای واقعی ایجاد کرد
  • جاسازی های برداری تولید و یکپارچه برای فعال کردن جستجوی شباهت معنایی
  • از Gemini برای تقویت تعامل زبان طبیعی استفاده کرد
  • یک رابط چت بات ساده و در عین حال قدرتمند با استفاده از Gradio ساخته شده است
  • به‌صورت اختیاری، برنامه را با استفاده از Google Cloud Run برای مقیاس‌پذیری و دسترسی اجرا کرد

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

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

اسناد مرجع