สร้างตัวแทน ADK ข้อมูลเชิงลึกด้านสถานที่ตั้งด้วยเซิร์ฟเวอร์ MCP สำหรับ BigQuery และ Google Maps

1. บทนำ

ใน Codelab นี้ คุณจะได้สร้าง Agent ด้วย ADK ที่ขับเคลื่อนโดย Gemini 3.1 Pro Agent จะมีเครื่องมือจากเซิร์ฟเวอร์ MCP ระยะไกล 2 เครื่อง (โฮสต์โดย Google) เพื่อเข้าถึง BigQuery อย่างปลอดภัยสำหรับข้อมูลด้านประชากรศาสตร์ ราคา และยอดขาย รวมถึง Google Maps สำหรับการวิเคราะห์และการตรวจสอบตำแหน่งในโลกจริง

Agent จะจัดระเบียบคำขอระหว่างผู้ใช้กับบริการของ Google Cloud เพื่อแก้ปัญหาทางธุรกิจที่เกี่ยวข้องกับชุดข้อมูลร้านเบเกอรี่สมมติ

82dd7bd2823a821b.png

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

  • ตั้งค่าข้อมูล: สร้างชุดข้อมูลร้านเบเกอรี่พื้นฐานใน BigQuery
  • พัฒนา Agent: สร้าง Agent อัจฉริยะโดยใช้ Agent Development Kit (ADK)
  • ผสานรวมเครื่องมือ: ติดตั้งฟังก์ชันการทำงานของ BigQuery และ Maps ให้กับ Agent ผ่านเซิร์ฟเวอร์ MCP
  • วิเคราะห์ตลาด: โต้ตอบกับเอเจนต์เพื่อประเมินแนวโน้มตลาดและความอิ่มตัว

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

  • เว็บเบราว์เซอร์ เช่น Chrome
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน หรือบัญชี Gmail

Codelab นี้มีไว้สำหรับนักพัฒนาแอปทุกระดับ รวมถึงผู้เริ่มต้น คุณจะใช้อินเทอร์เฟซบรรทัดคำสั่งใน Google Cloud Shell และโค้ด Python สำหรับการพัฒนา ADK คุณไม่จำเป็นต้องเป็นผู้เชี่ยวชาญด้าน Python แต่ความเข้าใจพื้นฐานเกี่ยวกับวิธีอ่านโค้ดจะช่วยให้คุณเข้าใจแนวคิดต่างๆ ได้

2. ก่อนเริ่มต้น

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

  1. ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud

a3dd2e6dddc8f691.png

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

เริ่มต้น Cloud Shell

Cloud Shell คือสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud ซึ่งโหลดเครื่องมือที่จำเป็นไว้ล่วงหน้า

  1. คลิกเปิดใช้งาน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud

404e4cce0f23e5c5.png

  1. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้เรียกใช้คำสั่งนี้เพื่อยืนยันการตรวจสอบสิทธิ์ใน Cloud Shell
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันว่าได้กำหนดค่าโปรเจ็กต์ให้ใช้กับ gcloud แล้ว
gcloud config get project
  1. ยืนยันว่าโปรเจ็กต์เป็นไปตามที่คาดไว้ จากนั้นเรียกใช้คำสั่งด้านล่างเพื่อตั้งค่ารหัสโปรเจ็กต์
export PROJECT_ID=$(gcloud config get project)

3. รับโค้ด

โคลนที่เก็บ

  1. โคลนที่เก็บไปยังสภาพแวดล้อม Cloud Shell
git clone https://github.com/google/mcp.git
  1. ไปที่ไดเรกทอรีการสาธิต
cd mcp/examples/launchmybakery

ตรวจสอบสิทธิ์

เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบสิทธิ์ด้วยบัญชี Google Cloud คุณต้องทำเช่นนี้เพื่อให้ ADK เข้าถึง BigQuery ได้

gcloud auth application-default login

ทำตามข้อความแจ้งเพื่อดำเนินการตรวจสอบสิทธิ์ให้เสร็จสมบูรณ์

4. กำหนดค่าสภาพแวดล้อมและ BigQuery

เรียกใช้สคริปต์การตั้งค่า

  1. เรียกใช้สคริปต์การตั้งค่าสภาพแวดล้อม สคริปต์นี้จะเปิดใช้ BigQuery และ Google Maps API รวมถึงสร้างไฟล์ .env ที่มีรหัสโปรเจ็กต์และคีย์ Maps API
chmod +x setup/setup_env.sh
./setup/setup_env.sh
  1. เรียกใช้สคริปต์การตั้งค่า BigQuery สคริปต์นี้จะสร้างที่เก็บข้อมูล Cloud Storage, อัปโหลดข้อมูล และจัดสรรชุดข้อมูลและตาราง BigQuery โดยอัตโนมัติ
chmod +x ./setup/setup_bigquery.sh
./setup/setup_bigquery.sh

เมื่อสคริปต์ทำงานเสร็จแล้ว ระบบจะสร้างmcp_bakeryชุดข้อมูลและป้อนข้อมูลลงในตารางต่อไปนี้

  • ข้อมูลประชากร - ข้อมูลการทำสำมะโนประชากรและลักษณะประชากรตามรหัสไปรษณีย์
  • bakery_prices - การกำหนดราคาของคู่แข่งและรายละเอียดสินค้าสำหรับขนมอบต่างๆ
  • sales_history_weekly - ประสิทธิภาพการขายรายสัปดาห์ (ปริมาณและรายได้) ตามร้านค้าและผลิตภัณฑ์
  • foot_traffic - คะแนนการเข้าชมหน้าร้านจริงโดยประมาณตามรหัสไปรษณีย์และช่วงเวลาของวัน
  1. ยืนยันว่าระบบได้สร้างชุดข้อมูลและตารางแล้วโดยไปที่คอนโซล BigQuery ในโปรเจ็กต์ Google Cloud

6bd0a0cd7522dd11.jpeg

5. ติดตั้ง ADK

เมื่อโครงสร้างพื้นฐานพร้อมแล้ว มาสร้างสภาพแวดล้อม Python เสมือนและติดตั้งแพ็กเกจที่จำเป็นสำหรับ ADK กัน

  1. สร้างสภาพแวดล้อมเสมือน
python3 -m venv .venv
  1. เปิดใช้งานสภาพแวดล้อมเสมือน
source .venv/bin/activate
  1. ติดตั้ง ADK โดยทำดังนี้
pip install google-adk==1.28.0
  1. ไปที่ไดเรกทอรีของ Agent โดยใช้คำสั่งต่อไปนี้
cd adk_agent/

6. ตรวจสอบแอปพลิเคชัน ADK

คลิกปุ่มเปิดเครื่องมือแก้ไขใน Cloud Shell เพื่อเปิด Cloud Shell Editor และดูที่เก็บที่โคลนไว้ในไดเรกทอรี mcp/examples/launchmybakery

a940b7eaf3c9f4b3.png

รหัสตัวแทนมีอยู่ในไดเรกทอรี adk_agent/ อยู่แล้ว มาดูโครงสร้างโซลูชันกัน

launchmybakery/
├── data/                        # Pre-generated CSV files for BigQuery
├── adk_agent/                   # AI Agent Application (ADK)
   └── mcp_bakery_app/          # App directory
       ├── agent.py             # Agent definition
       ├── tools.py             # Custom tools for the agent
       └── .env                 # Project configuration (created by setup script)
├── setup/                       # Infrastructure setup scripts
└── cleanup/                     # Infrastructure cleanup scripts

ไฟล์สำคัญใน mcp_bakery_app

  • agent.py: ตรรกะหลักที่กำหนด Agent, เครื่องมือ และโมเดล (Gemini 3.1 Pro เวอร์ชันตัวอย่าง)
  • tools.py: มีคำจำกัดความเครื่องมือที่กำหนดเอง
  • .env: มีการกำหนดค่าโปรเจ็กต์และข้อมูลลับ (เช่น คีย์ API) ที่สร้างขึ้นโดยสคริปต์การตั้งค่า

1. การเริ่มต้นชุดเครื่องมือ MCP:

ตอนนี้ให้เปิด adk_agent/mcp_bakery_app/tools.py ในเอดิเตอร์เพื่อดูวิธีเริ่มต้นชุดเครื่องมือ MCP

หากต้องการให้ Agent สื่อสารกับ BigQuery และ Google Maps ได้ เราต้องกำหนดค่าไคลเอ็นต์ Model Context Protocol (MCP)

โค้ดจะสร้างการเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์ MCP ระยะไกลของ Google โดยใช้ StreamableHTTPConnectionParams

def get_maps_mcp_toolset():
    dotenv.load_dotenv()
    maps_api_key = os.getenv('MAPS_API_KEY', 'no_api_found')
    
    tools = MCPToolset(
        connection_params=StreamableHTTPConnectionParams(
            url=MAPS_MCP_URL,
            headers={    
                "X-Goog-Api-Key": maps_api_key
            }
        )
    )
    print("MCP Toolset configured for Streamable HTTP connection.")
    return tools


def get_bigquery_mcp_toolset():   
        
    credentials, project_id = google.auth.default(
            scopes=["https://www.googleapis.com/auth/bigquery"]
    )

    credentials.refresh(google.auth.transport.requests.Request())
    oauth_token = credentials.token
        
    HEADERS_WITH_OAUTH = {
        "Authorization": f"Bearer {oauth_token}",
        "x-goog-user-project": project_id
    }

    tools = MCPToolset(
        connection_params=StreamableHTTPConnectionParams(
            url=BIGQUERY_MCP_URL,
            headers=HEADERS_WITH_OAUTH
        )
    )
    print("MCP Toolset configured for Streamable HTTP connection.")
    return tools
  • ชุดเครื่องมือ Maps: กำหนดค่าการเชื่อมต่อกับเซิร์ฟเวอร์ MCP ของ Maps โดยใช้คีย์ API
  • ชุดเครื่องมือ BigQuery: ฟังก์ชันนี้จะกำหนดค่าการเชื่อมต่อกับเซิร์ฟเวอร์ BigQuery MCP โดยจะใช้ google.auth เพื่อดึงข้อมูลเข้าสู่ระบบของ Cloud โดยอัตโนมัติ สร้างโทเค็นผู้ถือ OAuth และแทรกลงในส่วนหัวการให้สิทธิ์

2. คำจำกัดความของ Agent

ตอนนี้ให้เปิด adk_agent/mcp_bakery_app/agent.py ในเครื่องมือแก้ไขเพื่อดูวิธีกำหนด Agent

ระบบจะเริ่มต้น LlmAgent ด้วยโมเดล gemini-3.1-pro-preview

maps_toolset = tools.get_maps_mcp_toolset()
bigquery_toolset = tools.get_bigquery_mcp_toolset()

root_agent = LlmAgent(
    model='gemini-3.1-pro-preview',
    name='root_agent',
    instruction=f"""
                Help the user answer questions by strategically combining insights from two sources:
                
                1.  **BigQuery toolset:** Access demographic (inc. foot traffic index), product pricing, and historical sales data in the  mcp_bakery dataset. Do not use any other dataset.
                Run all query jobs from project id: {project_id}. 

                2.  **Maps Toolset:** Use this for real-world location analysis, finding competition/places and calculating necessary travel routes.
                    Include a hyperlink to an interactive map in your response where appropriate.
            """,
    tools=[maps_toolset, bigquery_toolset]
)
  • วิธีการของระบบ: Agent จะได้รับวิธีการที่เฉพาะเจาะจงในการรวมข้อมูลเชิงลึกจากทั้ง BigQuery (สำหรับข้อมูล) และ Maps (สำหรับการวิเคราะห์ตำแหน่ง)
  • เครื่องมือ: ทั้ง maps_toolset และ bigquery_toolset จะได้รับการมอบหมายให้แก่ตัวแทน ซึ่งจะทำให้ตัวแทนเข้าถึงความสามารถของทั้ง 2 บริการได้

เอเจนต์จะปฏิบัติตามวิธีการและเครื่องมือที่กำหนดไว้ในที่เก็บ คุณสามารถเปลี่ยนแปลงวิธีการเพื่อดูว่าการเปลี่ยนแปลงดังกล่าวส่งผลต่อลักษณะการทำงานของเอเจนต์อย่างไร

7. แชทกับตัวแทน

กลับไปที่เทอร์มินัลใน Cloud Shell แล้วเรียกใช้คำสั่งนี้เพื่อไปยังไดเรกทอรี adk_agent (หากยังไม่ได้ดำเนินการ)

cd adk_agent/

เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มอินเทอร์เฟซเว็บของ ADK คำสั่งนี้จะเปิดเว็บเซิร์ฟเวอร์ที่มีน้ำหนักเบาเพื่อโฮสต์แอปพลิเคชันแชท

adk web --allow_origins 'regex:https://.*\.cloudshell\.dev'

เมื่อเซิร์ฟเวอร์เริ่มทำงาน คุณจะเห็นข้อความต่อไปนี้ใน Cloud Shell

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

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

คุณมี 2 ตัวเลือกในการเข้าถึง UI ของ ADK ดังนี้

ตัวเลือกที่ 1: คลิกลิงก์ในเครื่อง คลิกลิงก์ http://127.0.0.1:8000 ที่ปรากฏในเทอร์มินัล Cloud Shell

ตัวเลือกที่ 2: ใช้การแสดงตัวอย่างเว็บ

  1. คลิกปุ่มตัวอย่างเว็บที่มุมขวาบนของ Cloud Shell
  2. เลือกเปลี่ยนพอร์ต
  3. ป้อน 8000 เป็นหมายเลขพอร์ต แล้วคลิกเปลี่ยนและแสดงตัวอย่าง

ภาพหน้าจอแสดงวิธีเปิด UI ของ ADK

โต้ตอบกับ Agentโดยถามคำถามต่อไปนี้ใน Web UI คุณควรเห็นการเรียกใช้เครื่องมือที่เกี่ยวข้อง

  1. ค้นหาละแวกใกล้เคียง (มาโคร): "ฉันอยากเปิดร้านเบเกอรี่ในลอสแอนเจลิส ค้นหารหัสไปรษณีย์ที่มีคะแนนการเข้าชมหน้าร้านจริงในช่วงเช้าสูงสุด

5f2a48bebfc49709.png

เอเจนต์ควรใช้เครื่องมือ get_table_info และ execute_sql เพื่อค้นหาตาราง foot_traffic ใน BigQuery

  1. ตรวจสอบความถูกต้องของตำแหน่ง (ไมโคร): "คุณค้นหา "ร้านเบเกอรี่" ในรหัสไปรษณีย์นั้นเพื่อดูว่ามีการแข่งขันสูงหรือไม่ได้ไหม"

32796c9a8cefca7.png

เอเจนต์ควรใช้search placesเครื่องมือในชุดเครื่องมือของ Maps เพื่อตอบคำถามนี้

ลองเลย ลองดูคำถามตัวอย่างเหล่านี้เพื่อดูการทำงานของเอเจนต์ ADK

  • "ฉันกำลังมองหาทำเลที่ตั้งร้านเบเกอรี่แห่งที่ 4 ในลอสแอนเจลิส ฉันต้องการย่านที่มีกิจกรรมตั้งแต่เช้า ค้นหารหัสไปรษณีย์ที่มีคะแนนการเข้าชมหน้าร้านจริงในช่วงเช้าสูงสุด
  • "คุณค้นหา "ร้านเบเกอรี่" ในรหัสไปรษณีย์นั้นได้ไหมเพื่อดูว่ามีการแข่งขันสูงหรือไม่ หากมีร้านกาแฟมากเกินไป ให้มองหาร้าน'กาแฟพิเศษ' เพื่อให้ฉันได้ตั้งร้านใกล้ๆ กับร้านเหล่านั้นเพื่อดึงดูดการเข้าชมหน้าร้านจริง
  • "โอเค และฉันต้องการวางตำแหน่งให้เป็นแบรนด์พรีเมียม "ราคาสูงสุดของ "ขนมปังซาวโดว์" ในเขตเมโทรของลอสแอนเจลิสคือเท่าใด"
  • ตอนนี้ฉันต้องการการคาดการณ์รายได้สำหรับเดือนธันวาคม 2025 ดูประวัติการขายของฉันและนำข้อมูลจากร้านค้าที่มีประสิทธิภาพดีที่สุดมาใช้กับ "ขนมปังซาวโดว์" เรียกใช้การคาดการณ์สำหรับเดือนธันวาคม 2025 เพื่อประมาณจำนวนที่ฉันจะขาย จากนั้นคำนวณรายได้รวมที่คาดการณ์โดยใช้ราคาที่ต่ำกว่าราคาพรีเมียมที่เราพบเล็กน้อย (สมมติว่าใช้ราคา $18)"
  • เงินนั้นจะพอจ่ายค่าเช่า สุดท้าย มายืนยันโลจิสติกส์กัน หาร้าน "Restaurant Depot" ที่ใกล้ที่สุดกับพื้นที่ที่เสนอ และตรวจสอบว่าใช้เวลาขับรถไม่เกิน 30 นาทีสำหรับการเติมสต็อกรายวัน"

เมื่อทดสอบ Agent เสร็จแล้ว คุณสามารถปิดอินเทอร์เฟซเว็บ ADK ได้โดยกด Ctrl+C ในเทอร์มินัล Cloud Shell

8. ล้าง

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

เรียกใช้สคริปต์การล้างข้อมูล สคริปต์นี้จะลบชุดข้อมูล BigQuery, Bucket ของ Cloud Storage และคีย์ API ที่สร้างขึ้นระหว่างการตั้งค่า

chmod +x ../cleanup/cleanup_env.sh
./../cleanup/cleanup_env.sh

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

ภารกิจสำเร็จ! คุณสร้าง Location Intelligence Agent โดยใช้ Agent Development Kit (ADK) เรียบร้อยแล้ว

การเชื่อมช่องว่างระหว่างข้อมูล "องค์กร" ใน BigQuery กับบริบทตำแหน่งในโลกจริงจาก Google Maps ทำให้คุณได้สร้างเครื่องมืออันทรงพลังที่สามารถให้เหตุผลทางธุรกิจที่ซับซ้อนได้ โดยทั้งหมดนี้ขับเคลื่อนด้วย Model Context Protocol (MCP) และ Gemini

สิ่งที่คุณทำสำเร็จ

  • โครงสร้างพื้นฐานเป็นโค้ด: คุณจัดสรรสแต็กข้อมูลโดยใช้เครื่องมือ Google Cloud CLI
  • การผสานรวม MCP: คุณเชื่อมต่อ AI Agent กับเซิร์ฟเวอร์ MCP ระยะไกลที่แตกต่างกัน 2 เครื่อง (BigQuery และ Maps) โดยไม่ต้องเขียน Wrapper API ที่ซับซ้อน
  • การให้เหตุผลแบบรวม: คุณสร้างเอเจนต์เดียวที่สามารถรวมข้อมูลเชิงลึกจาก 2 โดเมนที่แตกต่างกันอย่างมีกลยุทธ์เพื่อแก้ปัญหาทางธุรกิจ

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