สร้าง Agent นักวิเคราะห์ Google เทรนด์ด้วย BigQuery MCP

1. ภาพรวม

ใน Codelab นี้ คุณจะได้สร้าง Google Trends Analyst Agent โดยใช้ Google ADK เอเจนต์นี้ใช้ประโยชน์จากเซิร์ฟเวอร์ MCP ของ BigQuery เพื่อค้นหาและเรียกใช้เครื่องมือที่ค้นหาชุดข้อมูลสาธารณะของ Google เทรนด์ (bigquery-public-data.google_trends) แบบไดนามิก

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าโปรเจ็กต์สำหรับการพัฒนา ADK
  • วิธีเปิดใช้และใช้เซิร์ฟเวอร์ MCP ที่มีการจัดการสำหรับ BigQuery
  • วิธีสร้าง Agent ที่ใช้เครื่องมือ MCP
  • วิธีเรียกใช้เอเจนต์ในเครื่องเพื่อทดสอบ
  • วิธีติดตั้งใช้งาน Agent ใน Google Cloud Run

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
  • เว็บเบราว์เซอร์ เช่น Chrome
  • Python 3.11 ขึ้นไป

Codelab นี้เหมาะสำหรับนักพัฒนาแอปที่มีความรู้ระดับกลางซึ่งคุ้นเคยกับ Python และ Google Cloud บ้าง

Codelab นี้จะใช้เวลาประมาณ 15-20 นาที

ทรัพยากรที่สร้างในโค้ดแล็บนี้ควรมีค่าใช้จ่ายน้อยกว่า $5

2. ตั้งค่าสภาพแวดล้อม

สร้างโปรเจ็กต์ Google Cloud

  1. ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่

ตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้

export GOOGLE_CLOUD_PROJECT=<INSERT_YOUR_GCP_PROJECT_HERE>
export GOOGLE_GENAI_USE_VERTEXAI=1

หมายเหตุ: การตั้งค่า GOOGLE_GENAI_USE_VERTEXAI=1 จะสั่งให้ ADK ใช้ Vertex AI โดยใช้ประโยชน์จาก Cloud IAM เพื่อการตรวจสอบสิทธิ์แทน GEMINI_API_KEY

ตรวจสอบสิทธิ์และกำหนดค่า gcloud

ลงชื่อเข้าใช้บัญชี Google ตั้งค่าโปรเจ็กต์ที่ใช้งานอยู่ และกำหนดค่าข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน

gcloud auth login
gcloud auth application-default login

หมายเหตุ: gcloud auth login จะตรวจสอบสิทธิ์คำสั่ง CLI ของ gcloud ส่วน gcloud auth application-default login จะตรวจสอบสิทธิ์โค้ดของแอปพลิเคชันในเครื่อง

ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google

gcloud config set project ${GOOGLE_CLOUD_PROJECT}

เปิดใช้ API ที่จำเป็น

เปิดใช้ Google Cloud APIs ที่จำเป็นสำหรับ Cloud Run, Artifact Registry, BigQuery และ Vertex AI

gcloud services enable run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       bigquery.googleapis.com \
                       aiplatform.googleapis.com

เปิดใช้ MCP สำหรับ BigQuery

คุณต้องเปิดใช้เซิร์ฟเวอร์ MCP ที่มีการจัดการสำหรับโปรเจ็กต์อย่างชัดแจ้ง

gcloud beta services mcp enable bigquery.googleapis.com

สร้างโฟลเดอร์โปรเจ็กต์

เริ่มต้นด้วยการสร้างโฟลเดอร์รูทสำหรับ Agent และโฟลเดอร์ภายในสำหรับการติดตั้งใช้งาน Agent

mkdir google-trends-agent
cd google-trends-agent
mkdir google_trends

3. สร้างรหัสตัวแทน

สร้างไฟล์เปล่าชื่อ google_trends/__init__.py โดยทำดังนี้

touch google_trends/__init__.py

จากนั้นสร้างไฟล์ชื่อ google_trends/agent.py แล้ววางโค้ดต่อไปนี้

import os
import textwrap
import warnings
from datetime import date

import google.auth
from google.adk.agents import LlmAgent
from google.adk.apps import App
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
from google.auth.transport.requests import Request

# Suppress experimental ADK credential warnings
warnings.filterwarnings("ignore")

def get_agent_instruction(project_id: str) -> str:
    """Generates a clear and formatted prompt for the data analyst."""
    instruction = f"""
    # ROLE
    You are a Google Search Trends Analyst. Your mission is to provide clear answers using SQL data.

    # DATA CONSTRAINTS
    - BigQuery tool `execute_sql` requires explicit billing project mapping. Use: '{project_id}'.
    - Target dataset strictly: `bigquery-public-data.google_trends`

    # SCHEMA DISCOVERY (CRITICAL)
    1. DO NOT call `get_table_info` or `list_table_ids` (Triggers Permission Errors).
    2. Run `SELECT * FROM table LIMIT 0` via `execute_sql` for field definition mapping.

    # OUTPUT PRESENTATION
    - Render purely as a cleanly aligned Markdown table.
    - Use clear and descriptive headers for each column.
    - Remove conversational preambles. Output only the results.
    """
    return textwrap.dedent(instruction).strip()

def get_auth_headers() -> dict[str, str]:
    """Fetch auth headers for the project using Google Cloud Platform scopes."""
    credentials, _ = google.auth.default(
        scopes=["https://www.googleapis.com/auth/cloud-platform"]
    )
    request = Request()
    credentials.refresh(request)

    return {"Authorization": f"Bearer {credentials.token}"}

def get_todays_date() -> str:
    """Returns today's date in YYYY-MM-DD format."""
    return date.today().isoformat()

# --- Application Initialization ---
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")
if not project_id:
    raise ValueError("GOOGLE_CLOUD_PROJECT environment variable is not set")

mcp_headers = {
    "Content-Type": "application/json",
    "Accept": "application/json, text/event-stream",
} | get_auth_headers()

# Configure BigQuery Tools via MCP
bq_tools = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://bigquery.googleapis.com/mcp",
        headers=mcp_headers,
    )
)

# Initialize the LLM Agent
root_agent = LlmAgent(
    name="google_trends",
    model="gemini-3-flash-preview",
    tools=[get_todays_date, bq_tools],
    instruction=get_agent_instruction(project_id),
)

# Create the ADK App
app = App(name=root_agent.name, root_agent=root_agent)

4. เรียกใช้ Agent

ในขั้นตอนนี้ คุณจะตั้งค่าสภาพแวดล้อมเสมือน Python ในเครื่อง ติดตั้งการอ้างอิง และเรียกใช้เอเจนต์เพื่อยืนยันลักษณะการทำงานในเครื่อง (หรือ Google Cloud Shell)

  • ไปที่ไดเรกทอรีรากของแอปพลิเคชัน (google-trends-agent)
  • สร้างสภาพแวดล้อมเสมือน
python -m venv mcp_demo_env
source mcp_demo_env/bin/activate
  • ติดตั้งแพ็กเกจ Python ที่จำเป็น
pip install google-auth google-adk

เราจะใช้ ADK Web เพื่อทดสอบเอเจนต์ใหม่

สำหรับการพัฒนาและการทดสอบในเครื่อง ให้เรียกใช้คำสั่งต่อไปนี้

adk web

สำหรับการพัฒนาและการทดสอบภายใน Google Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

adk web --allow_origins="*"

ซึ่งจะเริ่มเว็บเซิร์ฟเวอร์ ADK คุณโต้ตอบกับตัวแทนได้โดยใช้อินเทอร์เฟซเว็บในเครื่อง (โดยปกติจะอยู่ที่ http://localhost:8000)

หมายเหตุ: คุณยังใช้คำสั่ง adk run google_trends ที่ง่ายกว่าเพื่อทดสอบเอเจนต์ได้ด้วย

5. ทำให้ใช้งานได้กับ Cloud Run

ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้งใช้งานเอเจนต์อย่างปลอดภัยใน Google Cloud Run

ให้สิทธิ์

Cloud Run ต้องมีสิทธิ์เข้าถึง Vertex AI และใช้เครื่องมือ MCP ของ BigQuery

# Get your project number automatically
PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format='value(projectNumber)')

# Vertex AI Access: To talk to the Gemini model
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
  --role="roles/aiplatform.user"

# MCP & BigQuery: To execute tools and run SQL jobs
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
  --role="roles/mcp.toolUser"

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
  --role="roles/bigquery.jobUser"

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
  --role="roles/bigquery.dataViewer"

สร้าง Dockerfile

ในรูทของโปรเจ็กต์ (google-trends-agent) ให้สร้างไฟล์ชื่อ Dockerfile แล้ววางเนื้อหาต่อไปนี้

FROM python:3.11-slim
WORKDIR /app

# Create a non-root user
RUN adduser --disabled-password --gecos "" myuser
USER myuser
ENV PATH="/home/myuser/.local/bin:$PATH"

# Copy the agent folder into the container
COPY --chown=myuser:myuser google_trends/ /app/agents/google_trends/

# Install the python packages
RUN pip install google-auth google-adk

# Set environment variables
ENV GOOGLE_GENAI_USE_VERTEXAI=1

# Expose port
EXPOSE 8080

# Run ADK web server
CMD ["adk", "web", "--port=8080", "--host=0.0.0.0", "/app/agents"]

ติดตั้งใช้งาน Agent

เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีราก ซึ่งจะเป็นการสร้างคอนเทนเนอร์และทำให้ Agent ใช้งานได้ใน Cloud Run

gcloud run deploy google-trends-agent \
  --source . \
  --region us-west1 \
  --allow-unauthenticated \
  --set-env-vars="GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}"

การยืนยันอย่างรวดเร็ว

เมื่อการติดตั้งใช้งานเสร็จสมบูรณ์ คอนโซลจะแสดงURL ของบริการ เปิด URL นี้ในเบราว์เซอร์ ซึ่งจะแสดง UI แบบอินเทอร์แอกทีฟเดียวกันกับที่คุณเห็นในเครื่อง แต่ตอนนี้ทำงานในระบบคลาวด์แล้ว

นอกจากนี้ คุณยังตรวจสอบบันทึกเพื่อให้มั่นใจว่าทุกอย่างทำงานได้อย่างราบรื่นได้ด้วย โดยทำดังนี้

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=google-trends-agent" --limit 10

6. ล้าง

โปรดลบทรัพยากรที่สร้างขึ้นระหว่างการทำ Codelab นี้เพื่อไม่ให้มีการเรียกเก็บเงินอย่างต่อเนื่อง

ลบบริการ Cloud Run โดยทำดังนี้

gcloud run services delete google-trends-agent --region us-west1

หากสร้างโปรเจ็กต์สำหรับ Codelab นี้โดยเฉพาะ คุณสามารถลบทั้งโปรเจ็กต์ได้โดยทำดังนี้

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}

นอกจากนี้ คุณยังลบไฟล์ทั้งหมดที่เกี่ยวข้องกับ Codelab นี้ได้ด้วย โดยทำดังนี้

deactivate
cd ..
rm -rf google-trends-agent

7. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างและติดตั้งใช้งานเอเจนต์นักวิเคราะห์ Google เทรนด์เรียบร้อยแล้ว

สิ่งที่คุณได้เรียนรู้

  • วิธีใช้ MCP เพื่อขยายความสามารถของเอเจนต์แบบไดนามิก
  • วิธีสร้างและให้บริการ LLM Agent ด้วย Google ADK
  • วิธีติดตั้งใช้งานและปรับขนาดเอเจนต์ใน Cloud Run

ขั้นตอนถัดไป

  • ลองแก้ไขเอเจนต์เพื่อค้นหาชุดข้อมูล BigQuery อื่นๆ
  • เพิ่มเครื่องมือ MCP เพื่อขยายความสามารถของ Agent

เอกสารอ้างอิง