基于BigQuery數(shù)據(jù)構(gòu)建聊天代理:使用ADK和MCP在Cloud Run上部署的方法
本文将提供一个详细的实操指南,介绍如何使用ADK和MCP部署在Cloud Run上查询Google BigQuery数据。
ADK:Google 的代理开发工具包(ADK)是一个帮助开发人员构建可以与数据库等结构化数据源交互的对话代理的工具包。它提供了一个框架体系来定义代理行为、理解并解析自然语言查询并根据实时数据生成回应。ADK 简化了将用户的问题转换为结构化查询(比如 SQL)的过程,实现了聊天界面与后端数据系统(例如 BigQuery)的无缝集成。
MCP:数据库模型上下文协议(MCP,Model Context Protocol 的缩写)是谷歌将对话式人工智能直接引入你的数据基础设施的方式。可以将其视为连接聊天界面和数据系统之间的桥梁——安全、可靠且内置智能。MCP 作为你的对话代理的运行时环境,处理从解析用户输入到在你的数据库(如 BigQuery)中执行查询,再到返回有意义的、上下文相关的响应等所有任务。它处理会话管理、意图处理和对数据的安全访问等繁重任务,让你能够专注于构建更好的用户体验,而无需担心后端复杂性。
10K架构:准备好和您的 Google BigQuery 数据聊天了吗?那就开始吧…
- 用户开始通过对话聊天查询Google BigQuery中的数据。
- ADK和MCP被部署到了Cloud Run。
- Romin Irani 的 Codelab 文章教程
- Google 开发者 Codelabs 的 MCP 工具箱 BigQuery 数据集
- 代理开发工具包(ADK)
- 数据库 MCP 工具箱
- Langchain 框架
- 模型:gemini-2.0-flash-001
- Vertex AI
- Google CloudRun
- Google BigQuery
- 打开 Google Cloud Shell 并设置项目,为:
在终端中输入
gcloud config set project <gcp-project-id>
- 启用所需的API。
gcloud 服务启用 cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
compute.googleapis.com
输出:
3. 创建 BigQuery 数据集和表,并插入数据,
# 创建GBQ数据集如下
bq --location=US mk -d \
--default_table_expiration 3600 \
--description "这是我的数据集。" \
mydataset
# 创建GBQ表如下
bq mk \
-t \
--expiration 3600 \
--description "这是我的表" \
--label 组织标签:开发 \
mydataset.mytable \
name:STRING,address:STRING,age:INTEGER
# 在SQL Studio界面中插入GBQ表数据
INSERT INTO `<gcp-project>.mydataset.mytable` VALUES ('name1', 'address1', 1);
INSERT INTO `<gcp-project>.mydataset.mytable` VALUES ('name2', 'address2', 2);
INSERT INTO `<gcp-project>.mydataset.mytable` VALUES ('name3', 'address3', 3);
INSERT INTO `<gcp-project>.mydataset.mytable` VALUES ('name4', 'address4', 4);
INSERT INTO `<gcp-project>.mydataset.mytable` VALUES ('name5', 'address5', 5);
显示
4. 安装MCP工具箱:
# 创建一个目录
mkdir mcp-toolbox
# 切换到目录
cd mcp-toolbox
# 安装工具箱
curl -O https://storage.googleapis.com/genai-toolbox/v0.4.0/linux/amd64/toolbox
chmod +x toolbox
结果是:
5. 设置工具箱并进行测试执行:
# 创建一个名为 tools.yaml 的文件,这是 toolbox 正常运行所必需的配置文件
sources:
my-bigquery-source:
kind: bigquery
project: <gcp-project>
tools:
search_age:
kind: bigquery-sql
source: my-bigquery-source
parameters:
- name: age
type: integer
description: 该人的姓名。
statement: 查询年龄等于 @age 的记录 FROM `<gcp-project>.mydataset.mytable` WHERE age = @age;
description: |
使用此工具来获取特定人的信息。
接受一个整数参数,表示年龄,并返回用户信息。
示例:
{{
"name": "name1",
"address": "address1",
"age": 1
}}
toolsets:
my_first_toolset:
- search_age
# 运行 toolbox
./toolbox --tools-file "tools.yaml" --port 6000
# 访问本地主机的端口 6000:http://localhost:6000
将会显示 'Hello World' 这条消息
显示:
6. 将MCP运行在Cloud Run上(MCP:具体技术术语)
# 设置项目ID
export PROJECT_ID="YOUR_GOOGLE_CLOUD_PROJECT_ID"
# 启用服务
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com \
# 创建服务账户
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 secrets create tools --data-file=tools.yaml
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
# 部署到云运行
gcloud run 部署 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
输出:
- 安装代理开发工具包(ADK):
# 创建一个文件夹
mkdir my-agents
cd my-agents
# 设置虚拟环境
python -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install google-adk toolbox-langchain langchain
# 创建一个agent-app的框架
adk create hotel-agent-app
选择Gemini模型(1)
选择Vertex AI(2)
requirements.txt,在 my-agents 文件夹里
google-adk
toolbox-langchain(工具链箱)
langchain(语言链)
agent.py,(在我的 agents 文件夹里)
from google.adk.agents import Agent
from google.adk.tools.toolbox_tool import ToolboxTool
toolbox = ToolboxTool("https://cloud-run-url.us-central1.run.app")
tools = toolbox.get_toolset(toolset_name='my_first_toolset')
root_agent = Agent(
name="name_agent",
model="gemini-2.0-flash",
description=(
"用于根据用户输入的名字回答关于个人的信息问题的代理"
),
instruction=(
"你是一个乐于助人的代理,可以通过名字回答用户关于个人的信息问题。使用工具来回答问题,请先问候用户"
),
tools=tools,
)
最终输出:
或
这里有一些参考资料: - https://codelabs.developers.google.com/mcp-toolbox-bigquery-dataset 查看 Google 开发者的 MCP 工具箱 BigQuery 数据集代码实验室。
- https://googleapis.github.io/genai-toolbox/getting-started/introduction/ 了解 GenAI 工具箱的入门介绍。
- https://google.github.io/adk-docs/ 查阅 Google 的 ADK 文档。
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章