酒店搜索代理

一个基于Google ADK和MCP Toolbox for Databases的AI酒店搜索代理,可根据城市或名称查询酒店信息。

  • by sjain2580
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 sjain2580/Travel-Agent

使用说明

旅行社——谷歌ADK+MCP数据库工具箱

使用Google agent Development Kit(ADK)和MCP Toolbox for Databases构建的人工智能酒店搜索代理,可回答用户对城市酒店或酒店名称的查询。

基于Google Codelab: 使用MCP数据库工具箱和ADK构建旅行社

特性

  • 按城市或地点搜索酒店
  • 按名称搜索酒店
  • 按价格级别排序的结果(中型→ 豪华)
  • 对话式AI由Gemini 2.5 Flash驱动
  • Google Cloud Run上完全无服务器

建筑

组件 技术 角色
AI 代理 Google ADK+Gemini 2.5 Flash 了解并回答酒店查询
MCP服务器 MCP数据库工具箱 将数据库作为工具公开给代理
数据库 云SQL PostgreSQL 存储酒店数据
部署 Google Cloud Run 无服务器主机

酒店数据集

酒店 位置 价格等级
巴塞尔希尔顿酒店 巴塞尔 豪华
日内瓦洲际酒店 日内瓦 豪华
苏黎世喜来登酒店 苏黎世 高档酒店
巴塞尔凯悦酒店 巴塞尔 高档
苏黎世万豪酒店 苏黎世 高档
苏黎世万怡酒店 苏黎世 高档
伯尔尼贝斯特韦斯特酒店 伯尔尼 中高档
巴塞尔假日酒店 巴塞尔 中高档
卢塞恩丽笙酒店 卢塞恩 中型
伯尔尼康福特茵酒店 伯尔尼 中型

示例查询

  • “巴塞尔有哪些酒店?”
  • “跟我说说凯悦酒店吧”
  • “查找苏黎世按价格排序的酒店”
  • “搜索万豪酒店”
  • “给我看看日内瓦的豪华酒店”

先决条件

  • 启用计费的谷歌云项目
  • 启用的API:云SQL管理、云运行、工件注册表、秘密管理器、顶点AI
  • gcloud CLI已通过身份验证

设置和部署

步骤1——创建云SQL实例

gcloud sql instances create hoteldb-instance \
  --database-version=POSTGRES_15 \
  --tier=db-f1-micro \
  --region=us-central1 \
  --edition=ENTERPRISE \
  --root-password=postgres

步骤2——创建酒店表并加载数据

sqlCREATE 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
);
INSERT INTO hotels VALUES
  (1,'Hilton Basel','Basel','Luxury','2024-04-20','2024-04-22',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-05','2024-04-24',B'0'),
  (5,'Best Western Bern','Bern','Upper Midscale','2024-04-01','2024-04-23',B'0'),
  (6,'InterContinental Geneva','Geneva','Luxury','2024-04-23','2024-04-28',B'0'),
  (7,'Sheraton Zurich','Zurich','Upper Upscale','2024-04-02','2024-04-27',B'0'),
  (8,'Holiday Inn Basel','Basel','Upper Midscale','2024-04-09','2024-04-24',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');

步骤3--创建服务帐户

export PROJECT_ID="YOUR_PROJECT_ID"
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

步骤4——部署MCP工具箱

gcloud secrets create tools --data-file=tools.yaml
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy travel-toolbox \
  --image $IMAGE --service-account toolbox-identity \
  --region us-central1 --set-secrets "/app/tools.yaml=tools:latest" \
  --args="--config=/app/tools.yaml,--address=0.0.0.0,--port=8080" \
  --allow-unauthenticated

步骤5--部署酒店代理

export TOOLBOX_URL=$(gcloud run services describe travel-toolbox \
  --region=us-central1 --format="value(status.url)")
gcloud run deploy hotels-service \
  --source . --region us-central1 --allow-unauthenticated --clear-base-image \
  --set-env-vars TOOLBOX_URL=$TOOLBOX_URL,GOOGLE_CLOUD_PROJECT=$PROJECT_ID,GOOGLE_CLOUD_LOCATION=us-central1,GOOGLE_GENAI_USE_VERTEXAI=1

清理

gcloud run services delete hotels-service --region=us-central1 --quiet
gcloud run services delete travel-toolbox --region=us-central1 --quiet
gcloud sql instances delete hoteldb-instance --quiet

现场演示: https://hotels-service-726281867698.us-central1.run.app/dev-ui/

参考文献

  • 谷歌代理开发工具包
  • MCP数据库工具箱
  • PostgreSQL的云SQL
  • 原始Codelab

许可证

Apache许可证2.0