Vibe Coding AI Agent: การจัดการวงจรของ Agent ด้วย Agents CLI และ ADK 2.0

1. ภาพรวม

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ Agents CLI เพื่อควบคุมวงจรการพัฒนา AI Agent ในเครื่องทั้งหมด ไม่ว่าคุณจะห่อหุ้มโมเดล Gemini ที่มีอยู่หรือสร้าง Agent ที่กำหนดเองตั้งแต่ต้นด้วย Agent Development Kit (ADK 2.0) Agents CLI ก็มีเครื่องมือในการจัดโครงสร้าง สร้าง Lint และทดสอบ Agent ในเครื่อง

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

  • วิธีติดตั้งและตั้งค่า agents-cli รวมถึงทักษะที่เกี่ยวข้อง
  • วิธีสร้างโครงร่างโปรเจ็กต์ Agent ใหม่
  • โครงสร้างและไฟล์สำคัญของโปรเจ็กต์เอเจนต์เวิร์กโฟลว์กราฟ ADK 2.0
  • วิธีเรียกใช้การตรวจสอบโค้ดอัตโนมัติและการล้างข้อมูลโค้ด
  • วิธีเปิดใช้และใช้เว็บเพลย์กราวด์ในเครื่องเพื่อการทดสอบแบบอินเทอร์แอกทีฟพร้อมการโหลดซ้ำอัตโนมัติ

สิ่งที่ต้องมี

  • Python 3.11 ขึ้นไป
  • เครื่องมือจัดการแพ็กเกจ uv
  • Node.js 18 ขึ้นไป (หากใช้ทักษะของ Agent การเขียนโค้ด)
  • Antigravity IDE (ติดตั้งและกำหนดค่าจาก Google Antigravity)

ข้อกำหนดเบื้องต้น

Codelab นี้ถือว่าคุณคุ้นเคยกับสิ่งต่อไปนี้

  • การใช้เทอร์มินัลและบรรทัดคำสั่ง

ไม่จำเป็นต้องมีประสบการณ์เกี่ยวกับ AI Agent หรือ ADK 2.0 มาก่อน

2. ตั้งค่าการตรวจสอบสิทธิ์และสภาพแวดล้อม

ระบุข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์เพื่อให้ Agent เรียกใช้โมเดล Gemini

ตัวเลือกที่ 1: คีย์ Gemini API (Google AI Studio)

หากคุณใช้คีย์ Gemini API มาตรฐาน (ซึ่งรับได้จาก Google AI Studio) ให้ส่งออกคีย์ในเซสชันเทอร์มินัล IDE

export GEMINI_API_KEY="your_api_key_here"
export GOOGLE_GENAI_USE_ENTERPRISE=FALSE

ตัวเลือกที่ 2: ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน Google Cloud

หากคุณใช้ Vertex AI ใน Google Cloud ให้ตรวจสอบสิทธิ์ด้วยข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน Google Cloud (ADC) และตั้งค่าโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่

gcloud auth application-default login
gcloud config set project <YOUR_PROJECT_ID>
export GOOGLE_GENAI_USE_ENTERPRISE=TRUE
export GOOGLE_CLOUD_PROJECT=REPLACE-WITH-YOUR-PROJECT_ID # Replace with your project ID
export GOOGLE_CLOUD_LOCATION=REPLACE-WITH-LOCATION # Replace the location

3. ตั้งค่า CLI ของ Agent และทักษะ

ขั้นตอนแรกคือการติดตั้งเครื่องมือ agents-cli เครื่องมือนี้จะช่วยจัดการโปรเจ็กต์ของเอเจนต์ที่ซับซ้อน

เมื่อติดตั้ง Antigravity แล้ว ให้เรียกใช้คำสั่งตั้งค่าในเทอร์มินัลโดยตรง

👉 เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้

uvx google-agents-cli setup

คำสั่งนี้จะติดตั้งโดยอัตโนมัติ

  1. เครื่องมือ CLI ของ Agent ทั่วโลกในระบบ
  2. ทักษะของผู้ช่วยเขียนโค้ดเฉพาะโดเมน 7 อย่างที่ Antigravity ใช้เพื่อช่วยคุณสร้าง จัดโครงสร้าง ประเมิน และติดตั้งใช้งานเอเจนต์ ระบบจะติดตั้งทักษะเหล่านี้ใน ~/.agents/skills/ ทั่วโลกเพียงครั้งเดียว และ Antigravity จะค้นพบทักษะเหล่านี้โดยอัตโนมัติ

หมายเหตุ: ระบบจะติดตั้งทักษะใน ~/.agents/skills/ และ Antigravity จะเลือกทักษะโดยอัตโนมัติ คุณยืนยันได้โดยใช้คำสั่ง /skills หรือการตั้งค่า Antigravity

ผลลัพธ์ที่คาดไว้ (ตัดทอน):

█▀█ █▀▀ █▀▀ █▄ █ ▀█▀ █▀ █▀▀ █ █`
`█▀█ █▄█ ██▄ █ ▀█ █ ▄█ █▄▄ █▄ █`

`Your coding agent just got an upgrade.`

`1. Authentication`

`─────────────────`

`✓ Authenticated with Google Cloud`

`2. CLI Installation`

`───────────────────`

`▸ uv tool install google-agents-cli`

`✓ Installed google-agents-cli`

`3. Skills Installation`

`──────────────────────`

`▸ npx -y skills add https://github.com/google/agents-cli -y --all -g`

`◇ Found 7 skills`

`~/.agents/skills/google-agents-cli-adk-code`

`~/.agents/skills/google-agents-cli-deploy`

`~/.agents/skills/google-agents-cli-eval`

`~/.agents/skills/google-agents-cli-observability`

`~/.agents/skills/google-agents-cli-publish`

`~/.agents/skills/google-agents-cli-scaffold`

`~/.agents/skills/google-agents-cli-workflow`

4. สร้างโปรเจ็กต์ Agent

ในส่วนนี้ คุณจะสร้างไดเรกทอรีโปรเจ็กต์ที่มีโครงสร้างสมบูรณ์โดยใช้เทมเพลตต้นแบบ

👉 พรอมต์ Antigravity:

Use ADK 2.0 to create a new graph workflow agent project called
customer-support-agent. I don't want to deploy this agent, so you can skip
the deployment files. The workflow should act as a customer support
representative for a shipping company. It should first classify if the user
query is related to shipping (rates, tracking, delivery, returns) or
unrelated. If it is related to shipping, route to a shipping FAQ agent to
answer the question. If it is unrelated, route to a node that politely
declines to answer.

Antigravity จะเรียกใช้คำสั่ง Scaffolding (agents-cli scaffold create customer-support-agent --prototype --yes) โดยอัตโนมัติและตั้งค่าไฟล์โปรเจ็กต์ให้คุณ

5. สำรวจรหัส Agent

👉 ขอให้ Antigravity อธิบายโค้ดที่สร้างขึ้น

Read and explain the project structure of my new agent project. Walk me
through how `app/agent.py` is configured, highlighting the role of the
tools, nodes, edges, and the root Workflow.

ใน Antigravity IDE ไฟล์โปรเจ็กต์และอาร์ติแฟกต์ที่สร้างขึ้นใหม่จะแสดงในแผงเสริม (ด้านซ้าย) โดยตรง คุณดูapp/agent.pyได้ที่นั่น หรือเปิดจากตัวสำรวจไฟล์ IDE เพื่อสำรวจโค้ดที่สร้างขึ้น

# app/agent.py

from __future__ import annotations

from typing import Any, Literal

from google.adk.agents.context import Context
from google.adk.apps.app import App
from google.adk.events.event import Event
from google.adk.workflow import Edge
from google.adk.workflow import Workflow
from google.adk.workflow.agents.llm_agent import LlmAgent
from google.adk.workflow.node import node
from pydantic import BaseModel
from pydantic import Field


class InquiryCategory(BaseModel):
  category: Literal['shipping', 'unrelated'] = Field(
      description=(
          'Determine if the user query is related to shipping (rates, tracking,'
          ' delivery times, returns) or unrelated.'
      )
  )


def save_query(node_input: str):
  """Saves user query in state for downstream nodes."""
  yield Event(data=node_input, state={'user_query': node_input})


categorize_agent = LlmAgent(
    name='categorize',
    model='gemini-3.1-flash-lite',
    instruction='You are an expert classifier. Categorize the user query.',
    output_key='inquiry_category',
    output_schema=InquiryCategory,
)


@node
def route_inquiry(ctx: Context, node_input: Any):
  """Routes the workflow based on the classified category."""
  category_data = ctx.state.get('inquiry_category', {})
  category = category_data.get('category', 'unrelated')
  query = ctx.state.get('user_query', '')
  yield Event(data=query, route=category)


faq_agent = LlmAgent(
    name='shipping_faq',
    model='gemini-3.1-flash-lite'',
    instruction="""You are a customer support representative for a shipping company. Answer user questions based ONLY on the shipping FAQ below. Do not answer questions outside of the FAQ.
    
    SHIPPING FAQ:
    - Rates: Standard shipping is $5.99. Express shipping is $12.99. Orders
      over $50 qualify for free standard shipping.
    - Tracking: You can track your order by entering your tracking number on
      our website's tracking page.
    - Delivery Times: Standard delivery takes 3-5 business days. Express
      delivery takes 1-2 business days.
    - Returns: We offer free returns within 30 days of delivery. Please make
      sure the item is in its original condition.
    """,
)


@node
def handle_unrelated(ctx: Context, node_input: Any):
  """Handles unrelated inquiries politely."""
  yield Event(
      data=(
          'I am sorry, I am a shipping customer support assistant and can only'
          ' answer questions related to our shipping FAQ.'
      )
  )


root_agent = Workflow(
    name='customer_support_workflow',
    edges=[
        *Edge.chain('START', save_query, categorize_agent, route_inquiry),
        (route_inquiry, faq_agent, 'shipping'),
        (route_inquiry, handle_unrelated, 'unrelated'),
    ],
)

app = App(
    name='customer_support_agent',
    root_agent=root_agent,
)

หัวข้อสำคัญ

  • เวิร์กโฟลว์และ Edge: ใน ADK 2.0 แอปพลิเคชัน Agent จะได้รับการจัดระเบียบเป็นกราฟโดยใช้ Workflow edges รายการจะกำหนดโฟลว์การดำเนินการ โดยเชื่อมโยงโหนดเข้าด้วยกันจาก START และเปิดใช้การแยกสาขาแบบมีเงื่อนไขตามเส้นทาง (เช่น การกำหนดเส้นทางไปยัง faq_agent ใน "shipping" หรือ handle_unrelated ใน "unrelated")
  • LlmAgent: โหนดแบบประกาศที่กำหนดงานที่ทำงานด้วย LLM พร้อมคำสั่ง โมเดล และเอาต์พุตที่มีโครงสร้างที่เฉพาะเจาะจง (output_schema)
  • โหนดและบริบท: ฟังก์ชัน Python ที่ตกแต่งด้วย @node (หรือฟังก์ชันมาตรฐาน) ซึ่งดำเนินการตรรกะ เข้าถึงสถานะการดำเนินการผ่าน Context และส่งคืนออบเจ็กต์ Event เพื่อส่งข้อมูลและสัญญาณการกำหนดเส้นทางไปตามกราฟ
  • โมเดล: `gemini-3.1-flash-lite' จะใช้เป็นโมเดลการให้เหตุผลที่รวดเร็วเริ่มต้น
  • App Wrapper: ออบเจ็กต์ App ระดับบนสุดจะห่อหุ้มเวิร์กโฟลว์รูท เครื่องมือภายนอก เช่น สนามเด็กเล่นในพื้นที่, เครื่องมือประเมิน ADK และ Agent Runtime จะค้นหาและดำเนินการเวิร์กโฟลว์ผ่านappอินเทอร์เฟซที่ได้มาตรฐานนี้

6. การตรวจสอบโค้ดอัตโนมัติ

ก่อนที่จะเรียกใช้หรือทดสอบเอเจนต์ คุณควรตรวจสอบว่าโค้ดสะอาดและจัดรูปแบบอย่างถูกต้อง

👉 พรอมต์ Antigravity:

Run linting on my agent project to verify its health.

Antigravity จะดำเนินการ agents-cli lint เบื้องหลังเพื่อเรียกใช้การตรวจสอบที่กำหนดค่าไว้ล่วงหน้า โดยจะตรวจสอบการนำเข้า ไวยากรณ์ และความสอดคล้องของการจัดรูปแบบในไฟล์

7. การทดสอบแบบอินเทอร์แอกทีฟด้วย Playground

สนามเด็กเล่นบนเว็บในเครื่องเป็นวิธีที่เร็วที่สุดในการยืนยันลักษณะการทำงานของเอเจนต์ โดยมีอินเทอร์เฟซแชทแบบอินเทอร์แอกทีฟที่คุณสามารถแชทกับ Agent และตรวจสอบการดำเนินการของเครื่องมือได้แบบเรียลไทม์

👉 Prompt Antigravity:

Launch the local development playground for my agent.

Antigravity จะเริ่มเซิร์ฟเวอร์การพัฒนาในเครื่อง (agents-cli playground) เปิด URL ที่ระบุ (โดยปกติคือ http://127.0.0.1:8080/dev-ui/?app=app) ในเว็บเบราว์เซอร์ เลือกโฟลเดอร์ app จากเมนูแบบเลื่อนลงเพื่อเริ่มแชทกับเอเจนต์

เริ่มแชทกับเจ้าหน้าที่ในอินเทอร์เฟซเว็บ ลองถามคำถามเกี่ยวกับการจัดส่ง

How much is standard shipping?

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

What is the weather like?

ทดสอบการโหลดซ้ำอัตโนมัติแบบเรียลไทม์

คุณจะเห็นว่าการแก้ไข Agent แบบเรียลไทม์แสดงใน Playground อย่างไร

  1. แก้ไขfaq_agentคำสั่งในapp/agent.pyโดยถาม Antigravity ดังนี้
    Modify the faq_agent instruction in app/agent.py to make the shipping rates
    response more playful and enthusiastic. Add some emojis and highlight the
    free shipping threshold.
    
  2. ส่งข้อความใหม่ไปยัง Agent ใน Playground เพื่อทดสอบการโหลดซ้ำอัตโนมัติ
    How much is standard shipping?
    
    Playground จะโหลดซ้ำและเรียกใช้โค้ดที่อัปเดตโดยอัตโนมัติแบบเรียลไทม์โดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ ตอนนี้คุณควรเห็นอีโมจิบางรายการในคำตอบ

8. การดำเนินการบรรทัดคำสั่ง

หากต้องการทดสอบอย่างรวดเร็ว การทำงานอัตโนมัติ หรือการเขียนสคริปต์ คุณสามารถขอให้ Antigravity เรียกใช้เอเจนต์จากเทอร์มินัลได้โดยตรง

👉 Prompt Antigravity:

Run a CLI query asking my agent how long standard delivery takes.

Antigravity จะเรียกใช้คำสั่งค้นหา (agents-cli run "How long does standard delivery take?") ซึ่งจะเรียกใช้การอนุมานแบบเทิร์นเดียวอย่างรวดเร็วและพิมพ์คำตอบสุดท้ายของเอเจนต์พร้อมรายละเอียดการดำเนินการของเครื่องมือ

9. ล้างข้อมูล

หากไม่ต้องการให้มีทรัพยากรที่ไม่ต้องการอยู่ในสภาพแวดล้อมในเครื่อง ให้ทำตามขั้นตอนการล้างข้อมูลต่อไปนี้

  1. หยุดเซิร์ฟเวอร์ภายใน: หากเซิร์ฟเวอร์ agents-cli playground ยังทำงานอยู่ ให้หยุดเซิร์ฟเวอร์ในเทอร์มินัลโดยกด Ctrl + C
  2. นำไฟล์โปรเจ็กต์ในเครื่องออก: ลบไดเรกทอรีโปรเจ็กต์เอเจนต์ที่สร้างขึ้นจากเครื่องของคุณ
rm -rf customer-support-agent

10. สรุปและขั้นตอนถัดไป

ยินดีด้วย คุณได้จัดการวงจรการพัฒนา AI Agent ในเครื่องตั้งแต่ต้นจนจบโดยใช้ Agents CLI และ ADK 2.0 เรียบร้อยแล้ว

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

  • ตั้งค่าเครื่องมือ: ติดตั้ง Agents CLI และกำหนดค่าทักษะเวิร์กโฟลว์เฉพาะโดเมนสำหรับ Antigravity
  • สร้างโครงร่างโปรเจ็กต์: สร้างโปรเจ็กต์ customer-support-agent ที่มีโครงสร้างสมบูรณ์โดยใช้เทมเพลตมาตรฐาน
  • โครงสร้าง ADK 2.0 ที่วิเคราะห์แล้ว: สำรวจเวิร์กโฟลว์กราฟ, เอเจนต์ LLM, โหนด, ขอบ และการกำหนดเส้นทางแบบมีเงื่อนไข
  • Managed Local Health: เรียกใช้การตรวจสอบคุณภาพโค้ดอัตโนมัติโดยใช้ agents-cli lint
  • พฤติกรรมที่ได้รับการยืนยัน: ทดสอบ Agent แบบอินเทอร์แอกทีฟด้วยการโหลดซ้ำแบบเรียลไทม์ผ่าน Playground และทำการทดสอบอย่างรวดเร็วในบรรทัดคำสั่ง

ขั้นตอนต่อไปคือ

ตอนนี้คุณได้เชี่ยวชาญวงจรการพัฒนาในเครื่องแล้ว ต่อไปนี้คือวิธีขยายและนำเอเจนต์ไปใช้จริง

  • การประเมิน: ให้คะแนนเอเจนต์เทียบกับชุดการประเมินโดยใช้ agents-cli eval run เพื่อวัดความแม่นยำและค้นหาการถดถอย
  • การทำให้ใช้งานได้และความสามารถในการสังเกตระดับองค์กรในระบบคลาวด์: จัดแพ็กเกจและทำให้ใช้งานได้เอเจนต์ในสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ เช่น Agent Runtime หรือ Cloud Run โดยใช้ agents-cli deploy ตั้งค่าการวัดระยะไกลของเวอร์ชันที่ใช้งานจริงเพื่อสตรีมบันทึกและร่องรอยการดำเนินการไปยัง Cloud Trace และ BigQuery

แหล่งข้อมูลเพิ่มเติม