使用说明
旅行社——谷歌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