۱. مرور کلی
جعبه ابزار MCP برای پایگاههای داده، یک سرور متنباز از گوگل است که ساخت ابزارهای Gen AI را برای تعامل با پایگاههای داده آسانتر میکند. این جعبه ابزار به شما این امکان را میدهد که با مدیریت پیچیدگیهایی مانند ادغام اتصال، احراز هویت و موارد دیگر، ابزارها را آسانتر، سریعتر و ایمنتر توسعه دهید. این جعبه ابزار به شما کمک میکند تا ابزارهای Gen AI بسازید که به عاملهای شما اجازه میدهد به دادههای پایگاه داده شما دسترسی داشته باشند. جعبه ابزار موارد زیر را ارائه میدهد:
توسعه ساده: ابزارها را در کمتر از 10 خط کد با عامل خود ادغام کنید، از ابزارها بین چندین عامل یا چارچوب استفاده مجدد کنید و نسخههای جدید ابزارها را آسانتر مستقر کنید.
عملکرد بهتر: بهترین شیوهها مانند ادغام اتصال، احراز هویت و موارد دیگر.
امنیت پیشرفته: احراز هویت یکپارچه برای دسترسی امنتر به دادههای شما.
قابلیت مشاهده از ابتدا تا انتها: معیارهای آماده و ردیابی با پشتیبانی داخلی از OpenTelemetry.
جعبه ابزار بین چارچوب هماهنگسازی برنامه شما و پایگاه داده شما قرار میگیرد و یک صفحه کنترلی را فراهم میکند که برای تغییر، توزیع یا فراخوانی ابزارها استفاده میشود. این جعبه ابزار با فراهم کردن یک مکان متمرکز برای ذخیره و بهروزرسانی ابزارها، مدیریت ابزارهای شما را ساده میکند و به شما امکان میدهد ابزارها را بین عاملها و برنامهها به اشتراک بگذارید و آن ابزارها را بدون نیاز به استقرار مجدد برنامه خود، بهروزرسانی کنید.
آنچه خواهید ساخت
به عنوان بخشی از این آزمایش، شما برنامهای خواهید ساخت که از ابزاری برای انجام یک پرسوجوی ساده از پایگاه داده (AlloyDB) استفاده میکند که میتواند از طریق عامل شما یا برنامه هوش مصنوعی مولد فراخوانی شود. برای این کار شما
- نصب جعبه ابزار MCP برای پایگاههای داده
- ابزار (که برای انجام یک کار در AlloyDB طراحی شده است) را روی سرور Toolbox تنظیم کنید
- استقرار جعبه ابزار MCP برای پایگاههای داده در Cloud Run
- ابزار را با نقطه پایانی Cloud Run مستقر شده آن آزمایش کنید
- تابع Cloud run را برای فراخوانی جعبه ابزار بسازید
الزامات
۲. قبل از شروع
ایجاد یک پروژه
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
- شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.

- پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی کنید که آیا از قبل احراز هویت شدهاید و آیا پروژه روی شناسه پروژه صحیح تنظیم شده است یا خیر:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید شود که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
- با اجرای دستورات زیر به صورت یک به یک در ترمینال Cloud Shell خود، API های مورد نیاز را فعال کنید:
همچنین یک دستور واحد برای اجرای موارد زیر وجود دارد، اما اگر کاربر حساب آزمایشی هستید، ممکن است هنگام فعال کردن این موارد به صورت دستهای با مشکلات سهمیهبندی مواجه شوید. به همین دلیل است که دستورات در هر خط به صورت جداگانه آورده شدهاند.
gcloud services enable alloydb.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable servicenetworking.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
gcloud services enable aiplatform.googleapis.com
جایگزین دستور gcloud از طریق کنسول با جستجوی هر محصول یا استفاده از این لینک است.
اگر هر API از قلم افتاده باشد، میتوانید همیشه آن را در طول پیادهسازی فعال کنید.
برای دستورات و نحوهی استفاده از gcloud به مستندات مراجعه کنید.
۳. راهاندازی پایگاه داده
در این آزمایش، ما از AlloyDB به عنوان پایگاه داده برای نگهداری دادههای جزئی استفاده خواهیم کرد. این پایگاه داده از خوشهها برای نگهداری تمام منابع، مانند پایگاههای داده و گزارشها، استفاده میکند. هر خوشه یک نمونه اصلی دارد که یک نقطه دسترسی به دادهها را فراهم میکند. جداول، دادههای واقعی را نگهداری میکنند.
بیایید یک کلاستر، نمونه و جدول AlloyDB ایجاد کنیم که مجموعه دادههای تجارت الکترونیک در آن بارگذاری شود.
ایجاد یک کلاستر و نمونه
- در کنسول ابری، به صفحه AlloyDB بروید.
یک راه آسان برای یافتن اکثر صفحات در Cloud Console، جستجوی آنها با استفاده از نوار جستجوی کنسول است.
- از آن صفحه، گزینه CREATE CLUSTER را انتخاب کنید:

- صفحهای مانند تصویر زیر خواهید دید. یک کلاستر و نمونه با مقادیر زیر ایجاد کنید (مطمئن شوید که مقادیر مطابقت دارند، در صورتی که کد برنامه را از مخزن کپی میکنید):
- شناسه خوشه: "
vector-cluster" - رمز عبور: "
alloydb" - سازگار با PostgreSQL 15
- منطقه: "
us-central1" - شبکه: «
default»

- وقتی شبکه پیشفرض را انتخاب میکنید، صفحهای مانند تصویر زیر مشاهده خواهید کرد. گزینه SET UP CONNECTION را انتخاب کنید.

- از آنجا، گزینه «استفاده از یک محدوده IP اختصاص داده شده خودکار» را انتخاب کرده و ادامه دهید. پس از بررسی اطلاعات، گزینه «ایجاد اتصال» را انتخاب کنید.

- پس از راهاندازی شبکه، میتوانید به ایجاد خوشه خود ادامه دهید. برای تکمیل راهاندازی خوشه، مطابق شکل زیر، روی CREATE CLUSTER کلیک کنید:

مطمئن شوید که شناسه نمونه را به "" تغییر دهید.
vector-instance"
.
توجه داشته باشید که ایجاد خوشه حدود ۱۰ دقیقه طول خواهد کشید. پس از موفقیتآمیز بودن، باید صفحهای را مشاهده کنید که نمای کلی خوشه ایجاد شده شما را نشان میدهد.
۴. دریافت دادهها
حالا وقت آن رسیده که یک جدول با دادههای مربوط به فروشگاه اضافه کنیم. به AlloyDB بروید، خوشه اصلی و سپس AlloyDB Studio را انتخاب کنید:

ممکن است لازم باشد منتظر بمانید تا نمونه شما به طور کامل ایجاد شود. پس از اتمام، با استفاده از اعتبارنامههایی که هنگام ایجاد خوشه ایجاد کردهاید، وارد AlloyDB شوید. از دادههای زیر برای تأیید اعتبار در PostgreSQL استفاده کنید:
- نام کاربری: "
postgres" - پایگاه داده: "
postgres" - رمز عبور: "
alloydb"
پس از اینکه با موفقیت در AlloyDB Studio احراز هویت شدید، میتوانید دستورات SQL را در ویرایشگر وارد کنید. میتوانید با استفاده از علامت + در سمت راست آخرین پنجره، چندین پنجره ویرایشگر اضافه کنید.

شما میتوانید دستورات AlloyDB را در پنجرههای ویرایشگر وارد کنید و در صورت لزوم از گزینههای Run، Format و Clear استفاده کنید.
فعال کردن افزونهها
برای ساخت این برنامه، از افزونههای pgvector و google_ml_integration استفاده خواهیم کرد. افزونه pgvector به شما امکان ذخیره و جستجوی جاسازیهای برداری را میدهد. افزونه google_ml_integration توابعی را ارائه میدهد که برای دسترسی به نقاط پایانی پیشبینی هوش مصنوعی Vertex برای دریافت پیشبینیها در SQL استفاده میکنید. این افزونهها را با اجرای DDL های زیر فعال کنید :
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
اگر میخواهید افزونههایی که در پایگاه داده شما فعال شدهاند را بررسی کنید، این دستور SQL را اجرا کنید:
select extname, extversion from pg_extension;
ایجاد یک جدول
با استفاده از دستور DDL زیر، یک جدول ایجاد کنید:
CREATE TABLE toys ( id VARCHAR(25), name VARCHAR(25), description VARCHAR(20000), quantity INT, price FLOAT, image_url VARCHAR(200), text_embeddings vector(768)) ;
پس از اجرای موفقیتآمیز دستور فوق، باید بتوانید جدول را در پایگاه داده مشاهده کنید.
دریافت داده
برای این آزمایش، ما دادههای آزمایشی حدود ۷۲ رکورد در این فایل SQL داریم. این فایل شامل فیلدهای id, name, description, quantity, price, image_url است. فیلدهای دیگر بعداً در این آزمایش پر خواهند شد.
خطوط/عبارات را از آنجا کپی کنید و سپس آن خطوط را در یک برگه ویرایشگر خالی جایگذاری کنید و RUN را انتخاب کنید.
برای مشاهدهی محتوای جدول، بخش Explorer را باز کنید تا جدولی به نام apparels را ببینید. برای مشاهدهی گزینهی Query the table، علامت سهکلون (⋮) را انتخاب کنید. یک عبارت SELECT در یک تب جدید Editor باز خواهد شد.

اعطای مجوز
دستور زیر را اجرا کنید تا به کاربر postgres اجازه اجرای تابع embedding داده شود:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
اعطای نقش کاربری Vertex AI به حساب سرویس AlloyDB
به ترمینال Cloud Shell بروید و دستور زیر را وارد کنید:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
۵. ایجاد جاسازیها برای متن
پردازش اعداد برای کامپیوترها بسیار آسانتر از پردازش متن است. یک سیستم جاسازی، متن را به مجموعهای از اعداد اعشاری تبدیل میکند که جاسازیهای برداری نامیده میشوند و باید متن را نمایش دهند، صرف نظر از اینکه متن چگونه نوشته شده باشد، از چه زبانی استفاده شود و غیره.
برای مثال، یک مکان ساحلی ممکن است «روی آب»، «کنار ساحل»، «از اتاقت تا اقیانوس قدم بزن»، «در دریا»، «در کنار دریا» و غیره نامیده شود. این اصطلاحات همگی متفاوت به نظر میرسند، اما معنای معنایی آنها یا در اصطلاحات یادگیری ماشین، جاسازیهای آنها باید بسیار نزدیک به یکدیگر باشد.
اکنون که دادهها و زمینه آماده هستند، SQL را اجرا میکنیم تا جاسازیهای توضیحات محصول را به جدول در فیلد embedding اضافه کنیم. مدلهای جاسازی متنوعی وجود دارد که میتوانید از آنها استفاده کنید. ما text-embedding-005 از Vertex AI استفاده میکنیم. حتماً در طول پروژه از همان مدل جاسازی استفاده کنید!
توجه: اگر از یک پروژه قدیمی Google Cloud استفاده میکنید، ممکن است لازم باشد به استفاده از نسخههای قدیمیتر مدل جاسازی متن مانند textembedding-gecko ادامه دهید.
به برگه AlloyDB Studio برگردید و DML زیر را تایپ کنید:
UPDATE toys set text_embeddings = embedding( 'text-embedding-005', description);
دوباره به جدول toys نگاه کنید تا برخی از جاسازیها را ببینید. حتماً دستور SELECT را دوباره اجرا کنید تا تغییرات را ببینید.
SELECT id, name, description, price, quantity, image_url, text_embeddings FROM toys;
این باید بردار جاسازیها را که شبیه آرایهای از اعداد اعشاری است، برای توضیحات اسباببازی، همانطور که در زیر نشان داده شده است، برگرداند:

توجه: پروژههای جدید Google Cloud که تحت سطح رایگان ایجاد شدهاند، ممکن است در مورد تعداد درخواستهای جاسازی مجاز در هر ثانیه برای مدلهای جاسازی، با مشکلات سهمیهبندی مواجه شوند. پیشنهاد میکنیم هنگام ایجاد جاسازی، از یک پرسوجوی فیلتر برای شناسه استفاده کنید و سپس به صورت انتخابی ۱ تا ۵ رکورد و به همین ترتیب را انتخاب کنید.
۶. جستجوی برداری انجام دهید
اکنون که جدول، دادهها و جاسازیها آماده هستند، بیایید جستجوی برداری بلادرنگ را برای متن جستجوی کاربر انجام دهیم.
فرض کنید کاربر میپرسد:
« I want a white plush teddy bear toy with a floral pattern .»
با اجرای کوئری زیر میتوانید موارد منطبق با این مورد را پیدا کنید:
select * from toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', 'I want a white plush teddy bear toy with a floral pattern') as vector(768))
LIMIT 5;
بیایید این پرس و جو را با جزئیات بررسی کنیم:
در این پرس و جو،
- متن جستجوی کاربر این است: «
I want a white plush teddy bear toy with a floral pattern.» - ما آن را در متد
embedding()با استفاده از مدلtext-embedding-005به embedding تبدیل میکنیم. این مرحله باید پس از مرحله قبل، که در آن تابع embedding را روی همه موارد موجود در جدول اعمال کردیم، آشنا به نظر برسد. - «
<=>» نشان دهنده استفاده از روش فاصله COSINE SIMILARITY است. میتوانید تمام معیارهای شباهت موجود را در مستندات pgvector بیابید. - ما نتیجه متد جاسازی را به نوع بردار تبدیل میکنیم تا با بردارهای ذخیره شده در پایگاه داده سازگار شود.
- محدودیت ۵ نشان میدهد که میخواهیم ۵ همسایه نزدیک برای متن جستجو استخراج کنیم.
نتیجه به این شکل است:

همانطور که در نتایج خود مشاهده میکنید، نتایج جستجو بسیار نزدیک به متن جستجو هستند. سعی کنید متن را تغییر دهید تا ببینید نتایج چگونه تغییر میکنند.
۷. آمادهسازی AlloyDB برای تعامل با جعبه ابزار
برای آمادهسازی جهت راهاندازی Toolbox، بیایید اتصال IP عمومی را در نمونه AlloyDB خود فعال کنیم تا ابزار جدید بتواند به پایگاه داده دسترسی داشته باشد.
- به نمونه AlloyDB خود بروید، روی ویرایش کلیک کنید و به صفحه ویرایش نمونه اصلی بروید.
- به بخش اتصال IP عمومی بروید، کادر فعال کردن IP عمومی را علامت بزنید و آدرس IP دستگاه Cloud Shell خود را وارد کنید.
- برای دریافت IP دستگاه Cloud Shell خود، به ترمینال Cloud Shell بروید و ifconfig را وارد کنید. از نتیجه، آدرس inet eth0 را شناسایی کنید و دو رقم آخر را با 0.0 با اندازه ماسک '/16' جایگزین کنید. برای مثال، به شکل "XX.XX.0.0/16" خواهد بود که در آن XX اعداد هستند.
- این IP را در کادر متنی «شبکههای خارجی مجاز» در صفحه ویرایش نمونه قرار دهید.

- پس از انجام این کار، روی UPDATE INSTANCE کلیک کنید.
چند دقیقه طول میکشد تا تکمیل شود.
۸. جعبه ابزار MCP برای نصب پایگاههای داده
- میتوانید یک پوشه پروژه برای ذخیره جزئیات ابزار ایجاد کنید. در این مورد، از آنجایی که ما روی دادههای فروشگاه اسباببازی کار میکنیم، بیایید پوشهای به نام "toystore" ایجاد کنیم و به آن برویم. به Cloud Shell Terminal بروید و مطمئن شوید که پروژه شما انتخاب شده و در اعلان ترمینال نمایش داده میشود. دستور زیر را از Cloud Shell Terminal خود اجرا کنید:
mkdir toystore
cd toystore
- دستور زیر را برای دانلود و نصب toolbox در پوشه جدید خود اجرا کنید:
# see releases page for other versions
export VERSION=0.1.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
- به ویرایشگر Cloud Shell بروید. پوشه تازه ایجاد شده "toystore" را گسترش دهید و یک فایل جدید به نام tools.yaml ایجاد کنید. محتوای زیر را کپی کنید. YOUR_PROJECT_ID را جایگزین کنید و بررسی کنید که آیا سایر جزئیات اتصال صحیح هستند یا خیر.
sources:
alloydb-toys:
kind: "alloydb-postgres"
project: "YOUR_PROJECT_ID"
region: "us-central1"
cluster: "vector-cluster"
instance: "vector-instance"
database: "postgres"
user: "postgres"
password: "alloydb"
tools:
get-toy-price:
kind: postgres-sql
source: alloydb-toys
description: Get the price of a toy based on a description.
parameters:
- name: description
type: string
description: A description of the toy to search for.
statement: |
SELECT price FROM toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', $1) AS vector(768))
LIMIT 1;
در این ابزار، ما فقط نزدیکترین مورد منطبق با متن جستجوی کاربر (توضیحات اسباببازی سفارشی) را پیدا میکنیم و قیمت آن را برمیگردانیم. همچنین میتوانید آن را تغییر دهید تا میانگین قیمت ۵ اسباببازی برتر منطبق را پیدا کنید:
انتخاب میانگین(قیمت) از (انتخاب قیمت از اسباببازیها، مرتبسازی بر اساس text_embeddings <=> CAST(embedding('text-embedding-005', $1) به عنوان vector(768)) LIMIT 5) به عنوان قیمت؛
شما با تعریف ابزار کاملاً آماده هستید!
برای جزئیات بیشتر در مورد پیکربندی tools.yaml خود، به این مستندات مراجعه کنید.
- به ترمینال Cloud Shell بروید و دستور زیر را برای شروع سرور جعبه ابزار با پیکربندی ابزارهای خود وارد کنید:
./toolbox --tools_file "tools.yaml"
- حالا اگر سرور را در حالت پیشنمایش وب روی فضای ابری باز کنید، باید بتوانید سرور Toolbox را در حال اجرا با ابزار جدید خود به نام
get-toy-price.
۹. استقرار ابری جعبه ابزار MCP برای پایگاههای داده
بیایید آن را در Cloud Run مستقر کنیم تا بتوانید از این ابزار به طور واقعی استفاده کنید.
- دستورالعملهای این صفحه را یکی یکی دنبال کنید تا به دستور
gcloud run deploy toolboxکه در سومین نکته در بخش "Deploy to Cloud Run" قرار دارد، برسید. شما به گزینه اول نیاز دارید و نه گزینه دوم که برای زمانی است که از روش شبکه VPC استفاده میکنید. - پس از استقرار موفقیتآمیز، یک نقطه پایانی استقرار یافته Cloud Run از سرور Toolbox خود دریافت خواهید کرد. آن را با دستور CURL آزمایش کنید.
نکات:
دستورالعملهای داخل صفحه را با دقت دنبال کنید و از دست ندهید.
شما آمادهاید تا از ابزار تازه مستقر شده خود در برنامه عامل خود استفاده کنید!!!
۱۰. برنامه خود را با MCP Toolbox برای پایگاههای داده متصل کنید
در این بخش، ما یک برنامه کوچک خواهیم ساخت تا ابزار شما را برای تعامل با نیازهای برنامه و بازیابی پاسخ آزمایش کنیم.
- به Google Colab بروید و یک دفترچه یادداشت جدید باز کنید.
- موارد زیر را در دفترچه یادداشت خود اجرا کنید
!pip install toolbox-core
from toolbox_core import ToolboxClient
# Replace with your Toolbox service's URL
toolbox = ToolboxClient("https://toolbox-*****-uc.a.run.app")
# This tool can be passed to your application!
tool = toolbox.load_tool("get-toy-price")
# If there are multiple tools
# These tools can be passed to your application!
# tools = await client.load_toolset("<<toolset_name>>")
# Invoke the tool with a search text to pass as the parameter
result = tool.invoke({"description": "white plush toy"})
# Print result
print(result)
- شما باید به این شکل نتیجه بگیرید:

این ابزاری است که به طور صریح در یک برنامه پایتون که از toolkit toolbox-langchain استفاده میکند، فراخوانی میشود .
- اگر میخواهید از این ابزار استفاده کنید و آن را به یک عامل در یک برنامه یکپارچه LangGraph متصل کنید، میتوانید این کار را به راحتی با جعبه ابزار
langgraphانجام دهید. - برای این منظور به کدهای آماده مراجعه کنید.
۱۱. آن را به فضای ابری ببرید!!!
بیایید این قطعه کد پایتون را در یک Cloud Run Functions قرار دهیم تا آن را بدون سرور کنیم!
- برای انتقال این کد به Cloud Functions، سورس آن را از پوشه مخزن کد کپی کنید.
- به کنسول Cloud Run Functions بروید و روی CREATE FUNCTION کلیک کنید.
- برای برنامه آزمایشی، آن را احراز هویت نشده نگه دارید و در صفحه بعد، زمان اجرای پایتون ۳.۱۱ را انتخاب کنید.
- فایلهای
main.pyوrequirements.txtرا از مخزن منبع به اشتراک گذاشته شده در مرحله ۱ کپی کرده و در فایلهای مربوطه جایگذاری کنید. - آدرس سرور را در main.py با آدرس سرور خود جایگزین کنید.
- تابع را مستقر کنید و یک نقطه پایانی REST برای ابزار پیشبینی قیمت خواهید داشت که در برنامه وب فروشگاه اسباببازی قابل دسترسی است.
- نقطه پایانی شما باید به این شکل باشد:
https://us-central1-*****.cloudfunctions.net/toolbox-toys
- شما میتوانید با رفتن به تب TESTING و وارد کردن موارد زیر به عنوان ورودی درخواست، آن را مستقیماً در کنسول Cloud Functions آزمایش کنید:
{
"search": "White plush toy"
}
- روی TEST THE FUNCTION کلیک کنید یا هر چیزی را که انتخاب میکنید در Cloud Shell Terminal اجرا کنید. باید نتیجه را در سمت راست تحت عنوان "Output" ببینید:

۱۲. تبریک
تبریک! شما با موفقیت یک ابزار قوی و واقعاً ماژولار ایجاد کردهاید که میتواند با پایگاههای داده، پلتفرمها و چارچوبهای هماهنگسازی هوش مصنوعی مولد (Generative AI) تعامل داشته باشد تا به ایجاد برنامه عاملمحور شما کمک کند.