ساخت یک آژانس مسافرتی با استفاده از جعبه ابزار MCP برای پایگاه‌های داده و کیت توسعه نماینده (ADK)

ساخت یک آژانس مسافرتی با استفاده از جعبه ابزار MCP برای پایگاه‌های داده و کیت توسعه نماینده (ADK)

درباره این codelab

subjectآخرین به‌روزرسانی: ژوئن ۱۳, ۲۰۲۵
account_circleنویسنده: Romin Irani Jack Wotherspoon

1. مقدمه

در این کد لبه، شما یک عامل با استفاده از کیت توسعه عامل (ADK) می سازید که از جعبه ابزار MCP برای پایگاه های داده استفاده می کند.

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

  1. ارائه یک Cloud SQL برای پایگاه داده PostgreSQL که دارای پایگاه داده هتل ها و داده های نمونه باشد.
  2. جعبه ابزار MCP را برای پایگاه های داده راه اندازی کنید، که دسترسی به داده ها را فراهم می کند.
  3. با استفاده از کیت توسعه عامل (ADK) یک عامل را طراحی و توسعه دهید که از جعبه ابزار MCP برای پاسخ به سؤالات کاربر استفاده می کند.
  4. گزینه‌های آزمایش Agent و جعبه ابزار MCP برای پایگاه‌های داده را به صورت محلی و در Google Cloud از طریق سرویس Cloud Run کاوش کنید.

b3768488d144b8f6.png

کاری که خواهی کرد

  • عاملی را طراحی، بسازید و استقرار دهید که به سؤالات کاربر در مورد هتل های یک مکان پاسخ دهد یا هتل ها را با نام جستجو کند.

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

  • تهیه و پر کردن یک Cloud SQL برای پایگاه داده PostgreSQL با داده های نمونه.
  • جعبه ابزار MCP را برای پایگاه های داده برای Cloud SQL برای نمونه پایگاه داده PostgreSQL تنظیم کنید.
  • طراحی و توسعه یک عامل با استفاده از کیت توسعه عامل (ADK) برای پاسخ به سؤالات کاربر.
  • Agent و MCP Toolbox را برای پایگاه‌های داده در محیط محلی آزمایش کنید.
  • (اختیاری) Agent و MCP Toolbox را برای پایگاه‌های داده در Google Cloud مستقر کنید.

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

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

این کد لبه که برای توسعه دهندگان همه سطوح (از جمله مبتدیان) طراحی شده است، از پایتون در برنامه نمونه خود استفاده می کند. با این حال، دانش پایتون برای درک مفاهیم ارائه شده مورد نیاز نیست.

2. قبل از شروع

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

  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 \
                       sqladmin
.googleapis.com \
                       compute
.googleapis.com

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

Operation "operations/..." finished successfully.

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

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

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

3. یک نمونه Cloud SQL ایجاد کنید

ما از Google Cloud SQL برای نمونه PostgreSQL برای ذخیره داده های هتل هایمان استفاده خواهیم کرد. Cloud SQL for PostgreSQL یک سرویس پایگاه داده کاملاً مدیریت شده است که به شما کمک می کند پایگاه داده های ارتباطی PostgreSQL خود را در Google Cloud Platform راه اندازی، نگهداری، مدیریت و مدیریت کنید.

برای ایجاد نمونه، دستور زیر را در Cloud Shell اجرا کنید:

gcloud sql instances create hoteldb-instance \
--database-version=POSTGRES_15 \
--cpu=2 \
--memory=8GiB \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

اجرای این دستور حدود 3-5 دقیقه طول می کشد. هنگامی که دستور با موفقیت اجرا شد، باید خروجی را مشاهده کنید که نشان می دهد دستور انجام شده است، همراه با اطلاعات نمونه Cloud SQL مانند NAME، DATABASE_VERSION، LOCATION و غیره.

4. پایگاه داده هتل ها را آماده کنید

وظیفه ما در حال حاضر ایجاد برخی داده های نمونه برای نماینده هتل ما خواهد بود.

از صفحه Cloud SQL در کنسول Cloud دیدن کنید. باید hoteldb-instance آماده و ساخته شده ببینید. مطابق شکل زیر روی نام نمونه ( hoteldb-instance ) کلیک کنید:

29dbc55e97f6f7b.png

از منوی سمت چپ Cloud SQL، مطابق شکل زیر به گزینه منوی Cloud SQL Studio مراجعه کنید:

c11cc134c83ce327.png

این از شما می خواهد که وارد Cloud SQL Studio شوید که از طریق آن ما چند دستور SQL را می دهیم. postgres برای گزینه Database انتخاب کنید و برای User و Password مقدار postgres است. بر روی AUTHENTICATE کلیک کنید.

اجازه دهید ابتدا جدول هتل را مطابق طرح زیر ایجاد کنیم. در یکی از پنجره های ویرایشگر در Cloud SQL Studio، SQL زیر را اجرا کنید:

CREATE TABLE hotels(
 id            INTEGER NOT NULL PRIMARY KEY,
 name          VARCHAR NOT NULL,
 location      VARCHAR NOT NULL,
 price_tier    VARCHAR NOT NULL,
 checkin_date  DATE    NOT NULL,
 checkout_date DATE    NOT NULL,
 booked        BIT     NOT NULL
);

اکنون، بیایید جدول هتل ها را با داده های نمونه پر کنیم. SQL زیر را اجرا کنید:

INSERT INTO hotels(id, name, location, price_tier, checkin_date, checkout_date, booked)
VALUES
 
(1, 'Hilton Basel', 'Basel', 'Luxury', '2024-04-22', '2024-04-20', B'0'),
 
(2, 'Marriott Zurich', 'Zurich', 'Upscale', '2024-04-14', '2024-04-21', B'0'),
 
(3, 'Hyatt Regency Basel', 'Basel', 'Upper Upscale', '2024-04-02', '2024-04-20', B'0'),
 
(4, 'Radisson Blu Lucerne', 'Lucerne', 'Midscale', '2024-04-24', '2024-04-05', B'0'),
 
(5, 'Best Western Bern', 'Bern', 'Upper Midscale', '2024-04-23', '2024-04-01', B'0'),
 
(6, 'InterContinental Geneva', 'Geneva', 'Luxury', '2024-04-23', '2024-04-28', B'0'),
 
(7, 'Sheraton Zurich', 'Zurich', 'Upper Upscale', '2024-04-27', '2024-04-02', B'0'),
 
(8, 'Holiday Inn Basel', 'Basel', 'Upper Midscale', '2024-04-24', '2024-04-09', B'0'),
 
(9, 'Courtyard Zurich', 'Zurich', 'Upscale', '2024-04-03', '2024-04-13', B'0'),
 
(10, 'Comfort Inn Bern', 'Bern', 'Midscale', '2024-04-04', '2024-04-16', B'0');

بیایید داده ها را با اجرای یک SELECT SQL مطابق شکل زیر تأیید کنیم:

SELECT * FROM hotels;

شما باید تعدادی رکورد را در جدول هتل ها مشاهده کنید که در زیر نشان داده شده است:

a7dd838f1962d412.png

ما فرآیند راه اندازی یک نمونه Cloud SQL را تکمیل کرده ایم و داده های نمونه خود را ایجاد کرده ایم. در بخش بعدی، جعبه ابزار MCP را برای پایگاه‌های داده راه‌اندازی می‌کنیم.

5. جعبه ابزار MCP را برای پایگاه داده راه اندازی کنید

MCP Toolbox for Databases یک سرور MCP منبع باز برای پایگاه های داده است که با در نظر گرفتن درجه سازمانی و کیفیت تولید طراحی شده است. این به شما امکان می دهد تا با مدیریت پیچیدگی هایی مانند ادغام اتصال، احراز هویت و موارد دیگر، ابزارها را آسان تر، سریع تر و ایمن تر توسعه دهید.

Toolbox به شما کمک می کند ابزارهای Gen AI بسازید که به عوامل شما اجازه می دهد به داده های موجود در پایگاه داده شما دسترسی داشته باشند. جعبه ابزار فراهم می کند:

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

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

e316aed02b9861a6.png

می بینید که یکی از پایگاه های داده ای که توسط MCP Toolbox for Databases پشتیبانی می شود، Cloud SQL است و ما آن را در قسمت قبل ارائه کرده ایم.

نصب جعبه ابزار

Cloud Shell Terminal را باز کنید و یک پوشه به نام mcp-toolbox ایجاد کنید.

mkdir mcp-toolbox

با دستور زیر به پوشه mcp-toolbox بروید:

cd mcp-toolbox

نسخه باینری جعبه ابزار MCP برای پایگاه‌های داده را از طریق اسکریپت زیر نصب کنید:

export VERSION=0.6.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

اکنون نسخه باینری جعبه ابزار را برای استفاده آماده کرده ایم. مرحله بعدی پیکربندی جعبه ابزار با منابع داده و سایر تنظیمات است.

پیکربندی tools.yaml

راه اصلی برای پیکربندی جعبه ابزار از طریق فایل tools.yaml است. یک فایل با نام tools.yaml در همان پوشه یعنی mcp-toolbox ایجاد کنید که محتویات آن در زیر نشان داده شده است.

می توانید از ویرایشگر نانویی که در Cloud Shell موجود است استفاده کنید. دستور nano به صورت زیر است: " nano tools.yaml ".

به یاد داشته باشید که مقدار YOUR_PROJECT_ID را با شناسه پروژه Google Cloud خود جایگزین کنید.

sources:
 my-cloud-sql-source:
   kind: cloud-sql-postgres
   project: YOUR_PROJECT_ID
   region: us-central1
   instance: hoteldb-instance
   database: postgres
   user: postgres
   password: postgres

tools:
 search-hotels-by-name:
   kind: postgres-sql
   source: my-cloud-sql-source
   description: Search for hotels based on name.
   parameters:
     - name: name
       type: string
       description: The name of the hotel.
   statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
 search-hotels-by-location:
   kind: postgres-sql
   source: my-cloud-sql-source
   description: Search for hotels based on location.
   parameters:
     - name: location
       type: string
       description: The location of the hotel.
   statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';

toolsets:
   my_first_toolset:
     - search-hotels-by-name
     - search-hotels-by-location

اجازه دهید فایل را به طور خلاصه درک کنیم:

  1. Sources نشان دهنده منابع داده های مختلف شما هستند که یک ابزار می تواند با آنها تعامل داشته باشد. منبع یک منبع داده را نشان می دهد که یک ابزار می تواند با آن تعامل داشته باشد. می توانید Sources به عنوان نقشه در قسمت sources فایل tools.yaml خود تعریف کنید. به طور معمول، یک پیکربندی منبع حاوی اطلاعات مورد نیاز برای اتصال و تعامل با پایگاه داده است. در مورد ما، ما یک منبع واحد را پیکربندی کرده‌ایم که به Cloud SQL ما برای نمونه PostgreSQL با اعتبارنامه اشاره می‌کند. برای اطلاعات بیشتر به مرجع منابع مراجعه کنید.
  2. Tools اقداماتی را که یک عامل می تواند انجام دهد را تعریف می کند - مانند خواندن و نوشتن برای یک منبع. یک ابزار عملکردی را نشان می دهد که نماینده شما می تواند انجام دهد، مانند اجرای یک دستور SQL. می توانید Tools به عنوان نقشه در قسمت tools فایل tools.yaml خود تعریف کنید. به طور معمول، یک ابزار برای عمل کردن به یک منبع نیاز دارد. در مورد ما، ما دو ابزار را تعریف می‌کنیم: search-hotels-by-name و search-hotels-by-location و مشخص کردن منبعی که روی آن عمل می‌کند، همراه با SQL و پارامترها. برای اطلاعات بیشتر به مرجع ابزار مراجعه کنید.
  3. در نهایت، Toolset داریم که به شما امکان می‌دهد گروه‌هایی از ابزارها را تعریف کنید که می‌خواهید با هم بارگذاری شوند. این می تواند برای تعریف گروه های مختلف بر اساس عامل یا برنامه مفید باشد. در مورد ما، ما یک مجموعه ابزار به نام my_first_toolset داریم که شامل دو ابزاری است که ما تعریف کرده ایم.

جعبه ابزار MCP را برای سرور پایگاه داده اجرا کنید

دستور زیر را (از پوشه mcp-toolbox ) برای راه اندازی سرور اجرا کنید:

./toolbox --tools-file "tools.yaml"

در حالت ایده‌آل باید خروجی‌ای ببینید که سرور توانسته است به منابع داده ما متصل شود و مجموعه ابزار و ابزارها را بارگیری کرده باشد. یک نمونه خروجی در زیر آورده شده است:

./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"

سرور جعبه ابزار MCP به طور پیش فرض روی پورت 5000 اجرا می شود. اگر متوجه شدید که پورت 5000 از قبل در حال استفاده است، طبق دستور زیر از پورت دیگری (مثلاً 7000 ) استفاده کنید. لطفاً به جای پورت 5000 در دستورات بعدی 7000 استفاده کنید.

./toolbox --tools-file "tools.yaml" --port 7000

اجازه دهید از Cloud Shell برای آزمایش این موضوع استفاده کنیم.

مطابق شکل زیر روی Web Preview در Cloud Shell کلیک کنید:

f990712162e8e924.png

بر روی Change port کلیک کنید و مطابق شکل زیر پورت را روی 5000 قرار دهید و روی Change and Preview کلیک کنید.

d1b9de0c46ecef8a.png

این باید خروجی زیر را به همراه داشته باشد:

2fdcdac326034d41.png

در URL مرورگر، موارد زیر را به انتهای URL اضافه کنید:

/api/toolset

این باید ابزارهایی را که در حال حاضر پیکربندی شده اند را نشان دهد. یک نمونه خروجی در زیر نشان داده شده است:

{
  "serverVersion": "0.3.0+container.12222fe27ae070f2689a0632d60fda45412d1f97",
  "tools": {
    "search-hotels-by-location": {
      "description": "Search for hotels based on location.",
      "parameters": [
        {
          "name": "location",
          "type": "string",
          "description": "The location of the hotel.",
          "authSources": []
        }
      ]
    },
    "search-hotels-by-name": {
      "description": "Search for hotels based on name.",
      "parameters": [
        {
          "name": "name",
          "type": "string",
          "description": "The name of the hotel.",
          "authSources": []
        }
      ]
    }
  }
}

MCP Toolkit برای پایگاه‌های داده یک روش پایتونیک را برای اعتبارسنجی و آزمایش ابزارها توصیف می‌کند که در اینجا مستند شده است. ما آن را نادیده می گیریم و در بخش بعدی که از این ابزارها استفاده می کند، مستقیماً به کیت توسعه عامل (ADK) می پریم.

6. نوشتن نماینده ما با کیت توسعه عامل (ADK)

کیت توسعه عامل (ADK) را نصب کنید

یک تب ترمینال جدید در Cloud Shell باز کنید و یک پوشه به نام my-agents به شرح زیر ایجاد کنید. به پوشه my-agents نیز بروید.

mkdir my-agents
cd
my-agents

حالا بیایید یک محیط پایتون مجازی با استفاده از venv به صورت زیر ایجاد کنیم:

python -m venv .venv

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

source .venv/bin/activate

بسته‌های ADK و MCP Toolbox for Databases را به همراه وابستگی به langchain به شرح زیر نصب کنید:

pip install google-adk toolbox-core

اکنون می توانید ابزار adk را به صورت زیر فراخوانی کنید.

adk

لیستی از دستورات را به شما نشان می دهد.

$ adk
Usage: adk [OPTIONS] COMMAND [ARGS]...

  Agent Development Kit CLI tools.

Options:
  --help  Show this message and exit.

Commands:
  api_server  Starts a FastAPI server for agents.
  create      Creates a new app in the current folder with prepopulated agent template.
  deploy      Deploys agent to hosted environments.
  eval        Evaluates an agent given the eval sets.
  run         Runs an interactive CLI for a certain agent.
  web         Starts a FastAPI server with Web UI for agents.

ایجاد اولین برنامه عامل ما

اکنون می‌خواهیم adk برای ایجاد داربست برای Agent Hotel خود از طریق دستور adk create با نام برنامه ** (hotel-agent-app) ** همانطور که در زیر آورده شده است استفاده کنیم.

adk create hotel-agent-app

مراحل را دنبال کنید و موارد زیر را انتخاب کنید:

  • مدل جمینی برای انتخاب مدل برای عامل ریشه.
  • Vertex AI را برای backend انتخاب کنید.
  • شناسه و منطقه پیش فرض پروژه Google شما نمایش داده می شود. خود پیش فرض را انتخاب کنید.
Choose a model for the root agent:
1. gemini-2.0-flash-001
2. Other models (fill later)

Choose model (1, 2): 1
1. Google AI
2. Vertex AI
Choose a backend (1, 2): 2

You need an existing Google Cloud account and project, check out this link for details:
https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai

Enter Google Cloud project ID [gcp-experiments-349209]:
Enter Google Cloud region [us-central1]:

Agent created in /home/romin/hotel-agent-app:
- .env
- __init__.py
- agent.py

پوشه ای را که در آن یک الگوی پیش فرض و فایل های مورد نیاز Agent ایجاد شده است، مشاهده کنید.

اول فایل .env است. که محتویات آن در زیر نشان داده شده است:

GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT
=YOUR_GOOGLE_PROJECT_ID
GOOGLE_CLOUD_LOCATION
=YOUR_GOOGLE_PROJECT_REGION

مقادیر نشان می‌دهند که از Gemini از طریق Vertex AI به همراه مقادیر مربوطه برای شناسه پروژه Google Cloud و مکان استفاده خواهیم کرد.

سپس فایل __init__.py را داریم که پوشه را به عنوان یک ماژول علامت گذاری می کند و یک دستور واحد دارد که عامل را از فایل agent.py وارد می کند.

from . import agent

در نهایت اجازه دهید نگاهی به فایل agent.py بیاندازیم. مطالب در زیر نشان داده شده است:

from google.adk.agents import Agent

root_agent = Agent(
   
model='gemini-2.0-flash-001',
   
name='root_agent',
   
description='A helpful assistant for user questions.',
   
instruction='Answer user questions to the best of your knowledge',
)

این ساده ترین عاملی است که می توانید با ADK بنویسید. از صفحه مستندات ADK، یک Agent یک واحد اجرایی مستقل است که برای عمل مستقل برای دستیابی به اهداف خاص طراحی شده است. عامل ها می توانند وظایف را انجام دهند، با کاربران تعامل داشته باشند، از ابزارهای خارجی استفاده کنند و با عوامل دیگر هماهنگ شوند.

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

بیایید کد agent.py را به صورت زیر تغییر دهیم:

from google.adk.agents import Agent

root_agent = Agent(
   
model='gemini-2.0-flash-001',
   
name='hotel_agent',
   
description='A helpful assistant that answers questions about a specific city.',
   
instruction='Answer user questions about a specific city to the best of your knowledge. Do not answer questions outside of this.',
)

برنامه Agent را به صورت محلی تست کنید

از پنجره ترمینال موجود و دستور زیر را بدهید. مطمئن شوید که در پوشه والد (my-agents) حاوی پوشه hotel-agent-app هستید.

adk web

یک نمونه اجرای در زیر نشان داده شده است:

INFO:     Started server process [5015]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8000.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

روی آخرین لینک کلیک کنید و باید یک کنسول وب برای آزمایش Agent ظاهر شود. مانند تصویر زیر باید موارد زیر را در مرورگر اجرا کنید:

fe775e0eac5df274.png

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

b732feb383668869.png

می توانید فرآیند در حال اجرا در ترمینال Cloud Shell (Ctrl-C) را خاموش کنید.

یک راه جایگزین برای آزمایش Agent از طریق دستور adk run است که در زیر از پوشه my-agents ارائه شده است.

adk run hotel-agent-app

دستور را امتحان کنید و می توانید از طریق خط فرمان (ترمینال) با Agent مکالمه کنید. برای بستن مکالمه exit تایپ کنید.

7. اتصال نماینده ما به ابزار

اکنون که می دانیم چگونه یک Agent بنویسیم و آن را به صورت محلی آزمایش کنیم. ما قصد داریم این Agent را به Tools متصل کنیم. در زمینه ADK، یک ابزار قابلیت خاصی را نشان می‌دهد که به یک عامل هوش مصنوعی ارائه می‌شود و آن را قادر می‌سازد تا اقداماتی را انجام دهد و با جهان فراتر از تولید متن اصلی و توانایی‌های استدلال خود تعامل داشته باشد.

در مورد ما، اکنون می‌خواهیم نماینده خود را با ابزارهایی که در جعبه ابزار MCP برای پایگاه‌های داده پیکربندی کرده‌ایم، مجهز کنیم.

فایل agent.py را با کد زیر تغییر دهید. توجه داشته باشید که ما از پورت پیش فرض 5000 در کد استفاده می کنیم، اما اگر از یک شماره پورت جایگزین استفاده می کنید، لطفاً از آن استفاده کنید.

from google.adk.agents import Agent
from toolbox_core import ToolboxSyncClient

toolbox = ToolboxSyncClient("http://127.0.0.1:5000")

# Load single tool
# tools = toolbox.load_tool('search-hotels-by-location')

# Load all the tools
tools = toolbox.load_toolset('my_first_toolset')

root_agent = Agent(
   
name="hotel_agent",
   
model="gemini-2.0-flash",
   
description=(
       
"Agent to answer questions about hotels in a city or hotels by name."
   
),
   
instruction=(
       
"You are a helpful agent who can answer user questions about the hotels in a specific city or hotels by name. Use the tools to answer the question"
   
),
   
tools=tools,
)

اکنون می‌توانیم عاملی را آزمایش کنیم که داده‌های واقعی را از پایگاه داده PostgreSQL ما که با جعبه ابزار MCP برای پایگاه‌های داده پیکربندی شده است، دریافت کند.

برای انجام این کار، این ترتیب را دنبال کنید:

در یکی از پایانه های Cloud Shell، جعبه ابزار MCP را برای پایگاه های داده راه اندازی کنید. همانطور که قبلاً آزمایش کردیم، ممکن است آن را به صورت محلی روی پورت 5000 اجرا کنید. اگر نه، دستور زیر را (از پوشه mcp-toolbox ) برای راه اندازی سرور اجرا کنید:

./toolbox --tools_file "tools.yaml"

در حالت ایده‌آل باید خروجی‌ای ببینید که سرور توانسته است به منابع داده ما متصل شود و مجموعه ابزار و ابزارها را بارگیری کرده باشد. یک نمونه خروجی در زیر آورده شده است:

./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"

هنگامی که سرور MCP با موفقیت راه اندازی شد، در ترمینال دیگر، Agent را همانطور که قبلاً از طریق دستور adk run (از پوشه my-agents ) نشان داده شده در زیر انجام دادیم، راه اندازی کنید. در صورت تمایل می توانید از دستور adk web نیز استفاده کنید.

$ adk run hotel-agent-app/

Log setup complete: /tmp/agents_log/agent.20250423_170001.log
To access latest log: tail -F /tmp/agents_log/agent.latest.log
Running agent hotel_agent, type exit to exit.

user: what can you do for me?
[hotel_agent]: I can help you find hotels in a specific city or search for hotels by name.

user: I would like to search for hotels
[hotel_agent]: Great, do you have a specific city or hotel name in mind?

user: Yes a specific city
[hotel_agent]: Great, which city are you interested in?

user: Basel
[hotel_agent]: OK. I found three hotels in Basel: Hilton Basel, Hyatt Regency Basel, and Holiday Inn Basel.

توجه داشته باشید که Agent اکنون از دو ابزاری که ما در جعبه ابزار MCP برای پایگاه‌های داده پیکربندی کرده‌ایم ( search-hotels-by-name و search-hotels-by-location ) استفاده می‌کند و گزینه‌های صحیح را در اختیار ما قرار می‌دهد. سپس می تواند به طور یکپارچه داده ها را از پایگاه داده نمونه PostgreSQL بازیابی کند و پاسخ را بر اساس آن قالب بندی کند.

این برنامه توسعه محلی و آزمایش نماینده هتل ما را که با استفاده از کیت توسعه عامل (ADK) ساخته بودیم و با ابزارهایی که در جعبه ابزار MCP برای پایگاه‌های داده پیکربندی کرده بودیم، تکمیل می‌شود.

8. (اختیاری) استقرار جعبه ابزار MCP برای پایگاه های داده و عامل در اجرای ابری

در قسمت قبل از ترمینال Cloud Shell برای راه اندازی سرور MCP Toolbox استفاده کردیم و ابزارها را با Agent تست کردیم. این به صورت محلی در محیط Cloud Shell اجرا می شد.

شما این گزینه را دارید که هم سرور MCP Toolbox و هم Agent را در سرویس‌های Google Cloud استقرار دهید که می‌توانند این برنامه‌ها را برای ما میزبانی کنند.

میزبانی سرور MCP Toolbox در Cloud Run

ابتدا می‌توانیم با سرور MCP Toolbox شروع کنیم و آن را در Cloud Run میزبانی کنیم. سپس یک نقطه پایانی عمومی به ما می دهد که می توانیم با هر برنامه دیگر و/یا برنامه های Agent نیز ادغام کنیم. دستورالعمل های میزبانی این در Cloud Run در اینجا آورده شده است. اکنون مراحل کلیدی را طی خواهیم کرد.

یک ترمینال جدید Cloud Shell راه اندازی کنید یا از یک ترمینال Cloud Shell موجود استفاده کنید. به پوشه mcp-toolbox بروید که جعبه toolbox باینری و tools.yaml در آن وجود دارد.

دستورات زیر را اجرا کنید (توضیحاتی برای هر دستور ارائه شده است):

متغیر PROJECT_ID را طوری تنظیم کنید که به شناسه پروژه Google Cloud شما اشاره کند.

export PROJECT_ID="YOUR_GOOGLE_CLOUD_PROJECT_ID" 

سپس، بررسی کنید که سرویس‌های Google Cloud زیر در پروژه فعال هستند.

gcloud services enable run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com

بیایید یک حساب سرویس جداگانه ایجاد کنیم که به عنوان هویت سرویس Toolbox که در Google Cloud Run اجرا خواهیم کرد، عمل می کند. ما همچنین تضمین می‌کنیم که این حساب سرویس دارای نقش‌های صحیح است، یعنی توانایی دسترسی به Secret Manager و صحبت با Cloud SQL.

gcloud iam service-accounts create toolbox-identity

gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/secretmanager.secretAccessor

gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/cloudsql.client

فایل tools.yaml را به صورت مخفی آپلود می کنیم و از آنجایی که باید جعبه ابزار را در Cloud Run نصب کنیم، از آخرین تصویر Container برای جعبه ابزار استفاده می کنیم و آن را در متغیر IMAGE تنظیم می کنیم.

gcloud secrets create tools --data-file=tools.yaml

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest

آخرین مرحله در دستور استقرار آشنا در Cloud Run:

gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools_file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated

این باید فرآیند استقرار Toolbox Server را با tools.yaml پیکربندی شده در Cloud Run آغاز کند. در استقرار موفقیت آمیز، باید پیامی شبیه به زیر مشاهده کنید:

Deploying container to Cloud Run service [toolbox] in project [YOUR_PROJECT_ID] region [us-central1]
OK Deploying new service... Done.                                                                                                                                                                                    
  OK Creating Revision...                                                                                                                                                                                            
  OK Routing traffic...                                                                                                                                                                                              
  OK Setting IAM Policy...                                                                                                                                                                                            
Done.                                                                                                                                                                                                                
Service [toolbox] revision [toolbox-00001-zsk] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-<SOME_ID>.us-central1.run.app

اکنون می‌توانید Service URL فهرست شده در بالا در مرورگر دیدن کنید. باید پیام "Hello World" را که قبلاً دیدیم نمایش دهد. علاوه بر این، می‌توانید برای مشاهده ابزارهای موجود، به آدرس اینترنتی زیر نیز مراجعه کنید:

SERVICE URL/api/toolset

همچنین می توانید از طریق کنسول Google Cloud به Cloud Run مراجعه کنید و سرویس Toolbox را در لیست خدمات موجود در Cloud Run مشاهده خواهید کرد.

توجه: اگر می‌خواهید باز هم آژانس هتل خود را به صورت محلی اجرا کنید و با این حال به سرویس Cloud Run تازه مستقر شده متصل شوید، فقط باید یک تغییر در فایل my-agents/hotel-agent-app/agent.py انجام دهید.

به جای موارد زیر:

toolbox = ToolboxTool("http://127.0.0.1:5000")

مطابق زیر آن را به URL Service سرویس Cloud Run تغییر دهید:

toolbox = ToolboxTool("CLOUD_RUN_SERVICE_URL")

همانطور که قبلا دیدیم، Agent Application را با استفاده از adk run یا adk web آزمایش کنید.

استقرار برنامه Hotel Agent در Cloud Run

اولین قدم این است که اطمینان حاصل کنید که مطابق دستورالعمل بالا، تغییر را در my-agents/hotel-agent-app/agent.py انجام داده اید تا به URL سرویس جعبه ابزار اشاره کنید که در Cloud Run اجرا می شود و نه میزبان محلی.

در یک ترمینال جدید Cloud Shell یا جلسه ترمینال موجود، اطمینان حاصل کنید که در محیط مجازی پایتون درستی هستید که قبلاً تنظیم کردیم.

ابتدا، اجازه دهید مانند شکل زیر یک فایل requires.txt در پوشه my-agents/hotel-agent-app ایجاد کنیم:

google-adk
toolbox-core

به پوشه my-agents بروید و اجازه دهید ابتدا متغیرهای محیطی زیر را تنظیم کنیم:

export GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT_ID
export GOOGLE_CLOUD_LOCATION=us-central1
export AGENT_PATH="hotel-agent-app/"
export SERVICE_NAME="hotels-service"
export APP_NAME="hotels-app"
export GOOGLE_GENAI_USE_VERTEXAI=True

در نهایت، اجازه دهید Agent Application را از طریق دستور adk deploy cloud_run در زیر اجرا کنیم. اگر از شما خواسته شد که فراخوان‌های احراز هویت نشده را برای سرویس مجاز کنید، لطفاً فعلاً "y" را به عنوان مقدار وارد کنید.

adk deploy cloud_run \
--project=$GOOGLE_CLOUD_PROJECT \
--region=$GOOGLE_CLOUD_LOCATION \
--service_name=$SERVICE_NAME  \
--app_name=$APP_NAME \
--with_ui \
$AGENT_PATH

این فرآیند استقرار برنامه Hotel Agent را در Cloud Run آغاز می کند. منابع را آپلود می‌کند، آن را در یک Docker Container بسته‌بندی می‌کند، آن را به رجیستری Artifact فشار می‌دهد و سپس سرویس را در Cloud Run اجرا می‌کند. این ممکن است چند دقیقه طول بکشد، پس لطفا صبور باشید.

شما باید پیامی مشابه پیام زیر ببینید:

Start generating Cloud Run source files in /tmp/cloud_run_deploy_src/20250424_045623
Copying agent source code...
Copying agent source code complete.
Creating Dockerfile...
Creating Dockerfile complete: /tmp/cloud_run_deploy_src/20250424_045623/Dockerfile
Deploying to Cloud Run...
Building using Dockerfile and deploying container to Cloud Run service [hotels-service] in project [YOUR_GOOGLE_CLOUD_PROJECT] region [us-central1]
|  Building and deploying... Uploading sources.                                                                                                                                                                      
  |  Uploading sources...                                                                                                                                                                                            
OK Building and deploying... Done.                                                                                                                                                                                    
  OK Uploading sources...                                                                                                                                                                                            
  OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds;region=us-central1/b02f5a74-6da6-4367-aaba-0c8aa098edf5?project=415458962931].                                  
  OK Creating Revision...                                                                                                                                                                                            
  OK Routing traffic...                                                                                                                                                                                              
Done.                                                                                                                                                                                                                
Service [hotels-service] revision [hotels-service-00002-cpm] has been deployed and is serving 100 percent of traffic.
Service URL: https://hotels-service-<SOME_ID>.us-central1.run.app
Cleaning up the temp folder: /tmp/cloud_run_deploy_src/20250424_045623

در صورت استقرار موفقیت آمیز، مقداری برای URL Service به شما ارائه می شود، که سپس می توانید در مرورگر به آن دسترسی داشته باشید تا همان برنامه وب را مشاهده کنید که به شما امکان می داد با نماینده هتل چت کنید، همانطور که قبلاً در تنظیمات محلی دیدیم.

56bc8b29fa9c9989.png

9. پاکسازی

برای جلوگیری از هزینه‌های مداوم برای حساب Google Cloud خود، مهم است که منابعی را که در طول این کارگاه ایجاد کرده‌ایم حذف کنید. ما نمونه Cloud SQL را حذف خواهیم کرد و به صورت اختیاری، اگر برنامه Toolbox و Hotels را در Cloud Run مستقر کرده باشید، آن سرویس ها را نیز حذف خواهیم کرد.

اطمینان حاصل کنید که متغیرهای محیطی زیر به درستی بر اساس پروژه و منطقه شما تنظیم شده اند:

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

دو دستور زیر سرویس‌های Cloud Run را که ما مستقر کرده‌ایم حذف می‌کند:

gcloud run services delete toolbox --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

gcloud run services delete hotels-service --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

دستور زیر نمونه Cloud SQL را حذف می کند:

gcloud sql instances delete hoteldb-instance

10. تبریک میگم

تبریک می‌گوییم، شما با استفاده از کیت توسعه عامل (ADK) که از جعبه ابزار MCP برای پایگاه‌های داده استفاده می‌کند، با موفقیت یک عامل ایجاد کردید.

اسناد مرجع