Phát triển tác nhân ADK dựa trên thông số kỹ thuật bằng Antigravity và Spec-kit

1. Giới thiệu

Việc thêm các tính năng vào một tác nhân hiện có (một chức năng mới dựa trên cơ sở dữ liệu) thường có nghĩa là bạn phải viết mã khởi tạo, thiết lập các tích hợp và đảm bảo mọi thứ nhất quán với các mẫu đã có trong cơ sở mã. Antigravity đẩy nhanh mọi giai đoạn của quy trình này: phân tích cơ sở mã của bạn để xây dựng bối cảnh cần thiết, tạo ra các quy cách có cấu trúc và kế hoạch triển khai để bạn xem xét, đồng thời thực hiện các thay đổi về mã – tất cả đều được hướng dẫn bằng kiến thức chuyên môn mà công cụ này giúp bạn nắm bắt dưới dạng các kỹ năng có thể tái sử dụng và một quy tắc dự án nhằm thực thi các nguyên tắc không thể thương lượng. Lớp học lập trình này giới thiệu một cách để tăng cường mô hình Phát triển dựa trên quy cách của Antigravity bằng cách giới thiệu một chu kỳ mới để tăng cường tài liệu quy cách tham chiếu nhiều đến spec-kit

Sản phẩm bạn sẽ tạo ra

Một ứng dụng trợ lý nhà hàng chạy cục bộ có tính năng đặt chỗ được thêm thông qua một chu kỳ SDD hoàn chỉnh:

  • Đặt chỗ – khách đặt bàn và kiểm tra thông tin đặt chỗ, được hỗ trợ bởi các công cụ cơ sở dữ liệu mới của Bộ công cụ MCP và bảng reservations Cloud SQL
  • (Thử thách) – phát triển giao diện người dùng của riêng bạn cho trợ lý
  • (Thử thách) – triển khai lên Google Cloud với sự trợ giúp của tác nhân Antigravity

Mã khởi đầu cung cấp một tác nhân ADK đang hoạt động với tính năng tìm kiếm trong trình đơn (từ khoá + ngữ nghĩa thông qua Bộ công cụ MCP) và theo dõi lựa chọn ưu tiên về chế độ ăn (thông qua ToolContext). Bạn có thể mở rộng ứng dụng này mà không cần viết mã xử lý ứng dụng theo cách thủ công. Antigravity sẽ xử lý việc triển khai dựa trên các thông số kỹ thuật của bạn.

404869b603fff6ab.png

Kiến thức bạn sẽ học được

  • Cách khởi động ngữ cảnh dự án để Antigravity hiểu một cơ sở mã hiện có
  • Cách tạo các kỹ năng Antigravity đóng gói kiến thức về miền (ví dụ: các mẫu lớp học lập trình ADK) để sử dụng lại
  • Cách thiết lập quy tắc dự án mà quy trình SDD xác thực trong quá trình lập kế hoạch và phân tích
  • Cách sử dụng quy trình Phát triển dựa trên quy cách (SDD) trong Antigravity để thêm các tính năng một cách có hệ thống
  • Cách mở rộng một tác nhân ADK bằng các công cụ mới dựa trên cơ sở dữ liệu thông qua Bộ công cụ MCP

Điều kiện tiên quyết

2. Thiết lập môi trường

Bước này sao chép kho lưu trữ khởi động, xác thực bằng Google Cloud, cung cấp cơ sở dữ liệu Cloud SQL và chuẩn bị môi trường Antigravity cục bộ.

Cài đặt các điều kiện tiên quyết

Đảm bảo hệ thống của bạn có tệp thực thi CLI sau:

Hướng dẫn cài đặt sẽ khác nhau tuỳ theo Hệ điều hành của máy.

Sao chép kho lưu trữ khởi đầu

Mở một cửa sổ dòng lệnh trong Antigravity (hoặc cửa sổ dòng lệnh của hệ thống). Nhân bản kho lưu trữ đồng hành và nhập thư mục:

git clone https://github.com/alphinside/sdd-adk-antigravity-starter.git sdd-adk-agents-agy
cd sdd-adk-agents-agy

Mở kho lưu trữ đã sao chép trong Antigravity. File (Tệp) -> Open Folder (Mở thư mục) -> chọn thư mục đã sao chép sdd-adk-agents-agy

Xoá kho lưu trữ từ xa ở nguồn. Quy trình làm việc SDD tạo các nhánh git cho thông số kỹ thuật của tính năng – việc xoá kho lưu trữ từ xa sẽ ngăn chặn việc vô tình đẩy vào kho lưu trữ khởi động:

git remote remove origin

Xác thực bằng Google Cloud

Chạy hai lệnh xác thực. Cả hai đều mở một trình duyệt để xác thực bằng OAuth:

gcloud auth login
gcloud auth application-default login

Vì bạn đang làm việc cục bộ với Antigravity, nên bạn sẽ xác thực theo cách thủ công. auth login xác thực CLI gcloud. application-default login xác thực các SDK Google Cloud mà ứng dụng của bạn sử dụng – cả lệnh gọi Vertex AI của ADK và trình kết nối Cloud SQL Python đều dựa vào Thông tin xác thực mặc định của ứng dụng.

Thiết lập dự án trên đám mây của bạn

Ghi các biến vị trí vào .env trước khi chạy tập lệnh thiết lập dự án:

echo "GOOGLE_CLOUD_LOCATION=global" > .env
echo "REGION=us-central1" >> .env
  • GOOGLE_CLOUD_LOCATION=global được dùng cho các lệnh gọi Vertex AI / Gemini API.
  • REGION=us-central1 được dùng cho Cloud SQL và cơ sở hạ tầng khác của GCP

Tải xuống và chạy tập lệnh thiết lập dự án. Thao tác này sẽ tạo hoặc xác thực một dự án trên đám mây có tính năng thanh toán dùng thử và lưu mã dự án vào .env rồi lấy mã dự án đó:

curl -sL https://raw.githubusercontent.com/alphinside/cloud-trial-project-setup/main/setup_verify_trial_project.sh -o setup_verify_trial_project.sh

bash setup_verify_trial_project.sh && source .env

Bật API

Bật các API bắt buộc:

gcloud services enable \
  aiplatform.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudresourcemanager.googleapis.com

Cài đặt các phần phụ thuộc

Chúng ta sẽ sử dụng uv làm trình quản lý dự án Python. uv là một trình quản lý dự án và gói Python nhanh chóng được viết bằng Rust ( docs ). Lớp học lập trình này sử dụng uv để tăng tốc độ và đơn giản hoá. Cài đặt các phần phụ thuộc Python:

uv sync

Sau đó, hãy cập nhật tệp .env của tác nhân ADK bằng cấu hình dự án của bạn:

cat > restaurant_concierge/.env <<EOF
GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True
EOF

Chuẩn bị cơ sở hạ tầng cơ sở dữ liệu và dữ liệu

Đặt mật khẩu cơ sở dữ liệu rồi thêm mật khẩu đó vào .env:

export DB_PASSWORD=codelabpassword
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env

Sau đó, hãy chạy tập lệnh scripts/setup_database.sh để chuẩn bị tất cả cơ sở hạ tầng cần thiết. Thao tác này sẽ thực hiện những việc sau:

  • Tạo phiên bản Cloud SQL
  • Kiểm tra xem phiên bản đã sẵn sàng hay chưa
  • Cấp quyền cho Vertex AI
  • Tạo cơ sở dữ liệu
  • Cơ sở dữ liệu hạt giống
  • Chạy dịch vụ MCP Toolbox ở chế độ nền
chmod +x scripts/setup_database.sh
./scripts/setup_database.sh > database_setup.log 2>&1 &

Lệnh này sẽ chạy quá trình thiết lập ở chế độ nền, bạn có thể định kỳ kiểm tra đầu ra tại tệp database_setup.log

Giờ đây, chúng ta sẽ có tất cả kho lưu trữ tác nhân ADK khởi động cần thiết để làm việc. Bây giờ, hãy thảo luận thêm về Antigravity và quá trình phát triển dựa trên Đặc tả trong phần tiếp theo trong khi chờ mọi thứ sẵn sàng

3. Khám phá mã khởi đầu và tìm hiểu về phương pháp Phát triển dựa trên quy cách

Bước này trình bày cấu trúc mã khởi đầu, giới thiệu phương pháp luận Phát triển dựa trên đặc tả, gieo hạt cơ sở dữ liệu và xác minh rằng tác nhân cơ sở hoạt động trước khi bạn bắt đầu mở rộng tác nhân đó.

Cấu trúc dự án

Mở dự án kho lưu trữ được sao chép trong trình chỉnh sửa Antigravity và xem bố cục thư mục:

sdd-adk-agents-agy/
├── .agents/
│   ├── workflows/                 # SDD slash commands (/speckit.*) – manual trigger
│   │   ├── speckit.specify.md
│   │   ├── speckit.clarify.md
│   │   ├── speckit.plan.md
│   │   ├── speckit.tasks.md
│   │   ├── speckit.analyze.md
│   │   ├── speckit.implement.md
│   │   ├── speckit.checklist.md
│   │   └── speckit.constitution.md
│   ├── skills/                   # Antigravity skills (loaded on demand, agent determined)
│   │   ├── mcp-toolbox-postgres/
│   │   │   └── SKILL.md     # MCP Toolbox config skill
│   │   └── repo-research/
│   │       └── SKILL.md     # Repo analysis skill
│   └── rules/               # Always-active context
├── .specify/                # spec-kit SDD templates and memory
│   ├── memory/constitution.md
│   ├── templates/
│   └── scripts/
├── restaurant_concierge/    # ADK agent package
│   ├── __init__.py
│   ├── agent.py             # LlmAgent + ToolContext tools + Toolbox integration
│   └── .env                 # Vertex AI configuration
├── server.py                # FastAPI server wrapping the agent
├── tools.yaml               # MCP Toolbox tool definitions
├── scripts/                 # Setup scripts
└── pyproject.toml

Tệp khoá

Tệp ứng dụng của nhân viên hỗ trợ

  • restaurant_concierge/agent.py – Tác nhân cốt lõi. Một LlmAgent kết hợp các công cụ cơ sở dữ liệu của Bộ công cụ MCP với tính năng theo dõi chế độ ăn uống dựa trên ToolContext. Tác nhân tải tất cả các công cụ từ máy chủ Hộp công cụ và thêm hai hàm Python (save_dietary_preference, get_dietary_preferences) sử dụng ToolContext để quản lý trạng thái.
  • tools.yaml – Định nghĩa về công cụ trong Hộp công cụ MCP. Có 3 công cụ tìm kiếm trong trình đơn được xác định: tìm kiếm từ khoá (search_menu), tìm kiếm ngữ nghĩa thông qua pgvector (semantic_search_menu) và bộ lọc danh mục (get_menu_by_category). Hiện chưa có công cụ đặt phòng – bạn sẽ thêm những công cụ đó sau
  • server.py – Một máy chủ FastAPI tối thiểu, minh hoạ cách bạn có thể truy cập vào ADK dưới dạng đối tượng FastAPI. get_fast_api_app() từ ADK cung cấp các điểm cuối tích hợp, bao gồm cả /run_sse cho API quản lý phiên và truyền phát trực tiếp SSE.

Antigravity Files

  • .agents/skills/mcp-toolbox-postgres/SKILL.md – Một kỹ năng hướng dẫn Antigravity cách tạo cấu hình tools.yaml phù hợp cho bộ công cụ MCP. Kỹ năng này sẽ dạy bạn cách định cấu hình liên quan đến cấu hình sources, toolsembeddingModels cần thiết để tạo pipeline RAG phù hợp. Kỹ năng này sẽ không được kích hoạt cho đến khi bạn thêm phần đầu YAML thích hợp để Antigravity nhận dạng
  • .agents/skills/repo-research/SKILL.md – Một kỹ năng giúp Antigravity phân tích kho lưu trữ theo từng bước và tạo ra một tài liệu ngữ cảnh dự án có cấu trúc. Công cụ này sử dụng phương pháp gồm 4 giai đoạn: quét bề mặt (chỉ cây thư mục), tệp cấu hình và siêu dữ liệu, điểm truy cập và mô hình dữ liệu, sau đó là các bước đi sâu có mục tiêu – mỗi giai đoạn dừng lại và ghi lại kết quả trước khi chuyển sang giai đoạn tiếp theo. Tệp này cũng sẽ không hoạt động cho đến khi bạn thêm phần đầu YAML sau này. Sau khi kích hoạt, hãy gọi tính năng này để tạo .agents/rules/project-context.md – một tài liệu toàn diện về quy trình tham gia, bao gồm kiến trúc, các phần phụ thuộc trong thời gian chạy, giao diện API và từ vựng theo miền.

Phát triển dựa trên quy cách: từ lập kế hoạch tích hợp của Antigravity đến SDD có cấu trúc

Trợ lý lập trình AI giúp bạn dễ dàng tạo mã từ một câu lệnh. Rủi ro: bạn mô tả một tính năng trong một câu, trợ lý viết hàng trăm dòng và bạn chấp nhận vì nó có vẻ đúng. Đôi khi, quá trình này được gọi là "lập trình theo cảm hứng" – bạn điều hướng theo cảm tính, chấp nhận hoặc từ chối đầu ra dựa trên việc đầu ra có vẻ hoạt động hay không. Ngôn ngữ này phù hợp với các nguyên mẫu và tập lệnh dùng một lần. Điều này sẽ không hiệu quả khi cơ sở mã tăng lên, khi các tính năng tương tác hoặc khi bạn xem lại mã sau vài tuần và không thể tái tạo lý do đưa ra quyết định.

b2a0753229d08ef3.png

Phát triển dựa trên quy cách (SDD) sẽ thêm cấu trúc vào vòng lặp này. Trước khi tạo bất kỳ mã nào, bạn sẽ viết một bản đặc tả: chức năng của tính năng, đối tượng mà tính năng phục vụ, tiêu chí thành công. Trợ lý AI hoạt động dựa trên quy cách đó và bạn cũng vậy khi xem xét kết quả của trợ lý. Đặc tả này trở thành nguồn đáng tin cậy duy nhất cho ý định. Nếu mã khác với quy cách, bạn sẽ phát hiện ra trong quá trình xem xét. Nếu các yêu cầu thay đổi, trước tiên, bạn hãy cập nhật thông số kỹ thuật, sau đó tạo lại. Các quyết định được ghi lại chứ không phải ứng biến.

Sự đánh đổi là có thật: SDD chậm hơn mỗi tính năng so với lập trình theo cảm hứng. Bạn viết tài liệu trước khi viết mã. Nhưng lợi ích sẽ tăng lên theo thời gian – mọi thay đổi trong tương lai đối với cơ sở mã đều có bối cảnh, mọi hoạt động triển khai do AI tạo đều có hợp đồng có thể xem xét và bạn có thể giới thiệu cho cộng tác viên (con người hoặc AI) bằng cách chỉ cho họ xem các quy cách thay vì giải thích các quyết định dựa trên trí nhớ.

Antigravity đã tuân theo các nguyên tắc phát triển dựa trên quy cách. Khi bạn đặt tác nhân ở Chế độ lập kế hoạch, tác nhân sẽ tạo ra hai cấu phần phần mềm trước khi viết bất kỳ mã nào:

  • Kế hoạch triển khai – thông tin tổng quan về phương pháp kỹ thuật được đề xuất, các thay đổi về tệp và quyết định về cấu trúc 632169a236bc62cc.png
  • Danh sách việc cần làm – bảng phân tích có cấu trúc về các mục công việc

795e47f4d98ae074.png

Antigravity yêu cầu bạn xem xét và phê duyệt các cấu phần phần mềm này trước khi thực thi. Vòng lặp lập kế hoạch rồi triển khai là cốt lõi của quá trình phát triển dựa trên quy cách: quy cách hướng dẫn mã chứ không phải ngược lại.

Lớp học lập trình này sẽ tiếp tục xây dựng nền tảng đó bằng một quy trình có ý kiến, được kiểm soát phiên bản dựa trên spec-kit – một khung phát triển dựa trên quy cách của GitHub. Mỗi tính năng đều trải qua một quy trình có chủ ý, trong đó mỗi cấu phần phần mềm là một tài liệu độc lập mà bạn có thể xem xét, chỉnh sửa và theo dõi trong git. Quy trình này bao gồm 2 giai đoạn kiểm tra chất lượng không bắt buộc (làm rõ và phân tích) để phát hiện các vấn đề trước khi chúng trở thành vấn đề triển khai:

Giai đoạn

Hiện vật

Mục đích

/speckit.specify

spec.md

Xác định NỘI DUNG cần xây dựng (dành cho người dùng, không phụ thuộc vào công nghệ)

/speckit.clarify (không bắt buộc)

Cập nhật vào spec.md

Xác định các khu vực chưa được chỉ định, đặt câu hỏi làm rõ có mục tiêu, mã hoá câu trả lời trở lại vào quy cách

/speckit.plan

plan.md, data-model.md, research.md

Thiết kế CÁCH xây dựng (phương pháp kỹ thuật, mô hình dữ liệu, nghiên cứu)

/speckit.tasks

tasks.md

Chia kế hoạch thành các bước có thứ tự và có thể thực hiện

/speckit.analyze (không bắt buộc)

Báo cáo phân tích

Xem xét các nhiệm vụ để tìm rủi ro, điểm thiếu sót hoặc trường hợp đặc biệt còn thiếu trước khi triển khai

/speckit.implement

Thay đổi mã

Thực hiện các nhiệm vụ và đánh dấu vào từng nhiệm vụ

c0164b540ee0afa1.png

Mọi cấu phần phần mềm đều được duy trì dưới dạng một tệp trong specs/<feature-branch>/, được kiểm soát phiên bản trong git và có thể sử dụng lại. Nếu cuộc trò chuyện bị gián đoạn hoặc bạn muốn xem lại các quyết định sau này, thì tài liệu đặc tả luôn có sẵn chứ không bị chôn vùi trong nhật ký trò chuyện.

Kho lưu trữ khởi đầu bao gồm các quy trình SDD này trong .agents/workflows/ và các mẫu trong .specify/templates/. Sau này, bạn sẽ dùng các hàm này để thêm các tính năng vào tác nhân.

4. Khởi động bối cảnh dự án bằng Antigravity

Bây giờ, hãy mô phỏng mọi thứ với một điều kiện "gần hơn" với công việc hằng ngày của chúng ta:

  • Kho lưu trữ không được quản lý đúng cách
  • README lỗi thời
  • Tài liệu không được cập nhật thường xuyên

Điều đầu tiên chúng ta muốn làm trong trường hợp này thường là tạo một bản đồ hoặc bối cảnh về dự án mà chúng ta muốn Antigravity thực hiện. Bước này cho thấy một ví dụ về cách giúp Antigravity hiểu rõ cơ sở mã hiện có bằng cách tạo một kỹ năng phân tích kho lưu trữ và tạo một tài liệu bối cảnh dự án.

Nó cũng thiết lập hiến pháp dự án – những nguyên tắc không thể thương lượng mà quy trình SDD xác thực. Nhờ đó, Antigravity có được bối cảnh và các ràng buộc cần thiết cho các chu kỳ SDD sau này

Hệ phân cấp ngữ cảnh Antigravity

Antigravity sử dụng 3 cấp độ bối cảnh, mỗi cấp độ có một phạm vi khác nhau:

  • Quy tắc (.agents/rules/): Hướng dẫn luôn hoạt động. Mọi cuộc trò chuyện trong không gian làm việc này đều thấy các quy tắc ( nếu bạn đã kích hoạt). Sử dụng các quy tắc cho bối cảnh trên toàn dự án, chẳng hạn như quyết định về cấu trúc, tiêu chuẩn mã hoá hoặc thông tin về ngăn xếp công nghệ.
  • Kỹ năng (.agents/skills/): Kiến thức theo yêu cầu. Antigravity chỉ tải một kỹ năng khi tác vụ hiện tại khớp với trường description của kỹ năng đó. Sử dụng các kỹ năng để tham khảo tài liệu đối chiếu dành riêng cho từng lĩnh vực.
  • Quy trình công việc (.agents/workflows/): Lệnh / sẽ kích hoạt các câu lệnh đã lưu. Sử dụng quy trình công việc cho các quy trình nhiều bước có thể lặp lại, chẳng hạn như quy trình SDD.

Kích hoạt các kỹ năng

Kho lưu trữ khởi đầu có 2 kỹ năng được viết sẵn trong .agents/skills/. Các tệp này chứa hướng dẫn chi tiết nhưng bắt đầu bằng chú thích TODO(codelab) thay vì phần đầu YAML bắt buộc. Nếu không có phần đầu, Antigravity sẽ không thể phát hiện ra các tệp này.

Các kỹ năng Antigravity yêu cầu một khối frontmatter YAML ở đầu tệp có 2 trường:

  • name – giá trị nhận dạng duy nhất của kỹ năng
  • description – bản tóm tắt bằng ngôn ngữ tự nhiên mà Antigravity so khớp khi quyết định tải kỹ năng nào cho một yêu cầu nhất định

Mở .agents/skills/mcp-toolbox-postgres/SKILL.md trong trình chỉnh sửa. Thay thế các dòng nhận xét TODO(codelab) ở trên cùng bằng phần đầu sau:

---
name: mcp-toolbox-postgres
description: Configure MCP Toolbox for PostgreSQL  sources, tools, and embedding models
---

Mở .agents/skills/repo-research/SKILL.md trong trình chỉnh sửa. Thay thế các dòng nhận xét TODO(codelab) ở trên cùng bằng phần đầu sau:

---
name: repo-research
description: Analyze a repository's structure, technologies, and patterns to create or update a project context document. Use when asked to research, analyze, or understand a codebase.
---

Xác minh rằng cả hai kỹ năng đều có phần đầu hợp lệ:

head -4 .agents/skills/mcp-toolbox-postgres/SKILL.md
head -4 .agents/skills/repo-research/SKILL.md

Mỗi trường phải cho thấy dấu phân tách --- bao bọc các trường name:description:. Nếu thiếu dấu phân cách hoặc trường, Antigravity sẽ không nhận ra kỹ năng này.

Cả hai kỹ năng này đều được tải theo yêu cầu – Antigravity so khớp yêu cầu của bạn với trường description và chỉ lấy hướng dẫn đầy đủ khi có liên quan.

Cài đặt Kỹ năng được cung cấp công khai

ADK Cheatsheet Skills

Trước đây, chúng ta đã kiểm tra các kỹ năng mà chúng ta tự tạo ( các kỹ năng repo-researchmcp-toolbox-postgres). Tuy nhiên, có nhiều kỹ năng khác hữu ích cho việc hỗ trợ phát triển phần mềm và có thể dễ dàng cài đặt vào tác nhân lập trình của chúng tôi. Ví dụ: trong hướng dẫn này, bạn cần tương tác với ADK, do đó, bạn sẽ cần có kiến thức phù hợp về cách tạo bằng ADK. Hãy cài đặt kỹ năng tài liệu ADK bằng lệnh sau

npx skills add google/adk-docs

Sau đó, hệ thống sẽ nhắc bạn xác nhận việc cài đặt như hình bên dưới

b9caa6a8cb1cdbee.png

Nhấn y để tiếp tục với lời nhắc tiếp theo nhằm chọn kỹ năng cần cài đặt như minh hoạ bên dưới. Hiện tại, hãy chỉ chọn adk-cheatsheet (nhấn phím cách để chọn, sau đó nhấn phím enter để xác nhận)

eccdab31618ab6a2.png

Sau đó, chỉ cần nhấp vào Enter để chọn phương án khác nhằm bật chế độ cài đặt mặc định và cài đặt kỹ năng trong dự án hiện tại của bạn

Bạn sẽ thấy kỹ năng ADK mới được thêm vào thư mục .agents/skills, đó là adk-cheatsheet

Kỹ năng của người nguyên thuỷ

Một trong những kỹ năng hữu ích để giảm mức sử dụng mã thông báo là kỹ năng của người nguyên thuỷ . Kỹ năng này có thể cắt mã thông báo đầu ra từ tác nhân,tạo thành một tổ hợp tốt khi bạn sử dụng phương pháp phát triển dựa trên toàn bộ thông số kỹ thuật như hướng dẫn này

npx skills add JuliusBrussee/caveman

Tương tự như trước đây, hãy chọn kỹ năng caveman tại đây

7a5d9fdfb287837e.png

Sau đó, chỉ cần nhấp vào Enter để chọn phương án khác nhằm bật chế độ cài đặt mặc định và cài đặt kỹ năng trong dự án hiện tại của bạn

Giờ đây, chúng ta đã có 4 kỹ năng được định cấu hình và sẵn sàng bắt đầu hành trình SDD

.agents/skills/
├── adk-cheatsheet
├── caveman
├── mcp-toolbox-postgres
└── repo-research

Tạo bối cảnh dự án

Đảm bảo thư mục quy tắc tồn tại:

mkdir -p .agents/rules

Trong hộp Agent Manager/Chat (Trình quản lý/Trò chuyện của Antigravity) (nhấn ctrl + L ở chế độ chỉnh sửa), hãy bắt đầu một cuộc trò chuyện mới. Loại:

Research this repository and create a project context document, and communicate efficiently

Antigravity sẽ so khớp yêu cầu của bạn với kỹ năng repo-researchcaveman ( lệnh giao tiếp hiệu quả) rồi bắt đầu phân tích cơ sở mã một cách có hệ thống. Công cụ này đọc các tệp cấu hình, mã nguồn và tài liệu, sau đó điền thông tin vào mẫu ngữ cảnh dự án bằng những thông tin tìm được.

Sau khi hoàn tất, hãy mở .agents/rules/project-context.md trong trình chỉnh sửa. Tài liệu này chứa thông tin cụ thể về dự án: ngăn xếp công nghệ (Python 3.12, ADK, Bộ công cụ MCP, Cloud SQL), cấu trúc dự án, mô hình dữ liệu (bảng menu_items có pgvector) và các công cụ tích hợp bên ngoài.

9949388b3e1f401a.png

Đặt quy chế dự án

Quy trình công việc SDD tham chiếu đến một bản quy chế dự án tại .specify/memory/constitution.md trong quá trình lập kế hoạch và phân tích. Quy trình /speckit.plan sẽ chạy "Kiểm tra nội dung" đối với nội dung đó và /speckit.analyze sẽ gắn cờ các lỗi vi phạm là NGHIÊM TRỌNG. Nếu hiến pháp được để trống dưới dạng mẫu có mã thông báo phần giữ chỗ, thì các bước kiểm tra này sẽ không có gì để xác thực – các kế hoạch và phân tích sẽ chạy mà không có biện pháp bảo vệ.

Hiến pháp xác định các nguyên tắc không thể thương lượng của dự án. Đây là một kho lưu trữ nhỏ do một nhà phát triển duy trì, vì vậy, quy tắc này phải phản ánh phạm vi đó – giữ cho mọi thứ đơn giản, nhất quán và tránh thiết kế quá mức.

Trong Agent Manager của Antigravity, hãy bắt đầu một cuộc trò chuyện mới. Chạy quy trình làm việc về hiến pháp:

/speckit.constitution This is a small restaurant concierge ADK agent maintained by one developer. Set 3 principles: (1) All database operations go through MCP Toolbox tool definitions in tools.yaml  no raw SQL in Python code, no ORM. (2) Session state uses ADK ToolContext  no custom state management, no external state stores. (3) Keep it simple  follow existing file and naming conventions exactly.

Antigravity điền các nguyên tắc cụ thể vào mẫu hiến pháp, chỉ định một phiên bản (1.0.0) và chạy quy trình kiểm tra tính nhất quán trên các mẫu SDD.

Xem lại hiến pháp đã tạo tại .specify/memory/constitution.md. Xác minh rằng 3 nguyên tắc này có trong chính sách và được nêu rõ ràng.

276113749cd30834.png

5. SDD Cycle — Add Reservation Feature

Bước này hướng dẫn bạn thực hiện một chu kỳ SDD hoàn chỉnh để thêm tính năng đặt chỗ cho tác nhân nhà hàng. Bạn sẽ điều khiển Antigravity qua từng giai đoạn – xác định, làm rõ, lập kế hoạch, thực hiện các nhiệm vụ, phân tích, triển khai – quan sát cách từng cấu phần phần mềm được xây dựng dựa trên cấu phần phần mềm trước đó. Đây là trải nghiệm học tập cốt lõi của lớp học lập trình.

Chỉ định đối tượng

Trong Agent Manager của Antigravity, hãy bắt đầu một cuộc trò chuyện mới. Nhập lệnh /speckit.specify về quy trình làm việc kèm theo nội dung mô tả tính năng:

/speckit.specify Add reservation booking capability to the restaurant concierge agent. Guests should be able to make a table reservation by providing their name, party size, date, and time. They should also be able to check existing reservations. The agent should confirm reservation details before booking and handle special requests (e.g., "window seat", "birthday celebration").

Antigravity tạo một nhánh tính năng, tạo tài liệu đặc tả và chạy quy trình xác thực chất lượng. Nếu Antigravity đặt câu hỏi làm rõ, hãy trả lời dựa trên nội dung mô tả tính năng ở trên.

Quy cách này tập trung vào ĐIỀU GÌ và TẠI SAO chứ không phải CÁCH THỨC. Nội dung này mô tả trải nghiệm người dùng ("Khách có thể đặt chỗ bằng cách cung cấp tên, số người, ngày và giờ") mà không đề cập đến bảng SQL, tools.yaml hoặc API ADK. Thông tin chi tiết về cách triển khai sẽ có trong giai đoạn lập kế hoạch.

Xem lại quy cách đã tạo tại specs/<branch-name>/spec.md. Xác minh để đảm bảo tài liệu này ghi lại các yêu cầu về chức năng và tiêu chí thành công.

4ea3f72f9dfb4d35.png

Làm rõ quy cách (không bắt buộc)

Chạy quy trình làm rõ để xác định và giải quyết các khu vực không được chỉ định rõ trong quy cách:

/speckit.clarify

Antigravity quét quy cách để tìm những điểm mơ hồ, tiêu chí chấp nhận còn thiếu và các yêu cầu chưa được chỉ định rõ. Công cụ này đặt ra các câu hỏi làm rõ có mục tiêu – mỗi câu hỏi đều có thể trả lời bằng một lựa chọn hoặc cụm từ ngắn gọn. Câu trả lời của bạn được mã hoá trực tiếp trở lại bản đặc tả, giúp bản đặc tả chính xác hơn trước khi bắt đầu lập kế hoạch.

Lập kế hoạch triển khai

Chạy quy trình lập kế hoạch:

/speckit.plan Update the restaurant concierge agent to multi agent architecture which separate responsibilities for handling menu and reservations. Use your ADK and MCP toolbox skill to implement it properly

Antigravity tạo ra một kế hoạch kỹ thuật thông qua 2 giai đoạn:

  1. Giai đoạn nghiên cứu – giải quyết những điều chưa biết về cơ sở mã hiện có, tạo research.md
  2. Giai đoạn thiết kế – tạo data-model.md (định nghĩa thực thể đặt phòng) và cập nhật project-context.md

Antigravity nên sử dụng kỹ năng adk-agent-development trong quá trình lập kế hoạch. Kiểm tra các dữ liệu chính:

  • specs/<branch-name>/plan.md – phương pháp kỹ thuật: những tệp cần sửa đổi, những mẫu cần tuân theo
  • specs/<branch-name>/data-model.md – định nghĩa về thực thể đặt phòng (cột, loại, mối quan hệ)
  • specs/<branch-name>/research.md – quyết định đã đưa ra và lý do

d9996ccbb3211078.png

Tạo việc cần làm

Chạy quy trình công việc về các việc cần làm

/speckit.tasks

Antigravity chia kế hoạch thành một danh sách việc cần làm có thứ tự trong specs/<branch-name>/tasks.md. Các tác vụ tuân theo định dạng danh sách kiểm tra nghiêm ngặt có mã nhận dạng, dấu hiệu ưu tiên và đường dẫn tệp, ví dụ:

- [ ] [T001] [P] Create reservations table schema in scripts/seed_db.py
- [ ] [T002] [P] Add create_reservation tool to tools.yaml
- [ ] [T003] [P] Add list_reservations tool to tools.yaml
- [ ] [T004] [P] Update agent instruction in restaurant_concierge/agent.py

Các nhiệm vụ được sắp xếp theo giai đoạn: Thiết lập → Nền tảng → Câu chuyện người dùng → Hoàn thiện. Quét danh sách việc cần làm để hiểu rõ những nội dung sẽ được tạo và sửa đổi.

9fcdb822d8279ddf.png

Phân tích các việc cần làm (không bắt buộc)

Chạy quy trình phân tích để xem xét các nhiệm vụ về rủi ro và lỗ hổng:

/speckit.analyze

Antigravity kiểm tra danh sách việc cần làm dựa trên quy cách và kế hoạch, tìm các trường hợp biên bị thiếu, các việc có thể xung đột hoặc khoảng trống giữa các yêu cầu của quy cách và công việc đã lên kế hoạch. Giải quyết các vấn đề nghiêm trọng trước khi triển khai.

6. Triển khai

Chạy quy trình triển khai:

/speckit.implement

Antigravity trình bày kế hoạch triển khai cuối cùng và cấu phần phần mềm của nhiệm vụ. Xem xét và phê duyệt để tiếp tục

adc1e3d098bd1638.png

306448e70f61ab51.png

Antigravity sẽ thực hiện các nhiệm vụ và đánh dấu từng nhiệm vụ khi hoàn thành. Khi hoàn tất, hệ thống sẽ trình bày phần Hướng dẫn hoàn chỉnh

48cc7752817a54c7.png

Kiểm thử các thay đổi về mã

Sau khi hoàn tất quá trình triển khai, hãy xác minh rằng bạn đã thực hiện các thay đổi chính. Tên và nội dung chính xác của tệp có thể khác nhau, nhưng những mẫu này phải xuất hiện như trong tools.yamlagent.py:

# Verify reservation tools were added to tools.yaml
grep -i "reservation" tools.yaml

Bạn sẽ thấy một số kết quả như sau

...
get_reservations_by_name:
      Retrieve all reservations for a guest by their name. Uses case-insensitive
      SELECT id, guest_name, party_size, reservation_datetime, special_requests, created_at
      FROM reservations
      ORDER BY reservation_datetime DESC
...

Và đối với agent.py

# Verify agent instruction was updated
grep -i "reservation" restaurant_concierge/agent.py

# Check what files changed
git diff --name-only

Có thể bạn sẽ thấy những thay đổi như sau

...
- **Table Reservations**: Help guests book a table or check their existing reservations.
## Reservation Booking Rules
When a guest wants to make a reservation, collect ALL of the following before confirming:
**IMPORTANT**: Before calling `book_reservation`, you MUST:
- Only call `book_reservation` after the guest says "yes" or "confirm"
## Checking Reservations
When a guest asks to check their reservations:
- Use `get_reservations_by_name` to find their bookings
        book_reservation,
...

Các thay đổi sẽ ảnh hưởng đến tập lệnh cơ sở dữ liệu ban đầu. Tập lệnh đã cập nhật sẽ tạo bảng reservations nếu bảng này chưa tồn tại. Bạn sẽ thấy đầu ra xác nhận rằng bảng mới đã được tạo (dữ liệu menu_items hiện có vẫn được giữ nguyên).

Nếu mọi thứ diễn ra suôn sẻ đến thời điểm này, chúng ta có thể kiểm thử tính năng này trên giao diện người dùng dành cho nhà phát triển của tác nhân ADK. Hãy di chuyển cơ sở dữ liệu để kết hợp bảng mới và khởi động lại Toolbox để chọn các định nghĩa công cụ mới trong tools.yaml. Dừng mọi quy trình Toolbox hiện có, sau đó bắt đầu một quy trình mới:

lsof -ti:5000 | xargs kill -9 2>/dev/null; echo "Done"
./scripts/setup_database.sh > database_setup.log 2>&1 &

Bạn có thể kiểm tra nhật ký đầu ra trong database_setup.log để biết Antigravity có tạo đúng mã và cấu hình hay không. Nếu bạn gặp lỗi, hãy thử tương tác với trợ lý ảo để khắc phục

Nếu mọi việc suôn sẻ, chúng ta có thể bắt đầu giao diện người dùng dành cho nhà phát triển ADK:

uv run adk web .

Mở http://localhost:8000 trong trình duyệt rồi thử nghiệm với các câu lệnh sau:

I'd like to book a table for 4 people on Friday at 7pm under the name Timmy
Do I have any upcoming reservations?

d9815389df37ed1a.png

f38a944851e28c29.png

Bây giờ, hãy dừng giao diện người dùng dành cho nhà phát triển ADK bằng cách nhấn Ctrl+C hai lần.

7. Thử thách (Không bắt buộc)

Giờ đây, bạn đã biết toàn bộ quy trình SDD. Hãy thử nghiệm:

  • Chạy chu kỳ SDD thứ hai để tạo giao diện trò chuyện trên web cho nhân viên hỗ trợ khách hàng của nhà hàng – lần này không có hướng dẫn từng bước.
  • Triển khai tác nhân của bạn lên Cloud Run cho trường hợp sử dụng thực tế

Gợi ý

  • Dự án này không có khung giao diện người dùng. Antigravity nên đề xuất HTML/CSS/JS thuần tuý – nếu đề xuất React hoặc các thư viện tương tự, hãy hướng dẫn Antigravity theo hướng đơn giản (nguyên tắc "đơn giản" trong hiến pháp của bạn sẽ nắm bắt được điều này).
  • Máy chủ ADK hiển thị /run_sse để truyền phát trực tiếp và /apps/{app_name}/users/{user_id}/sessions để quản lý phiên. Antigravity phát hiện những thông tin này từ bối cảnh dự án.
  • Sau khi triển khai, hãy khởi động máy chủ bằng uv run uvicorn server:app --host 0.0.0.0 --port 8080 (không phải adk web) để hoạt động gắn tệp tĩnh.
  • Kiểm thử tại http://localhost:8080/static/index.html.
  • Các lớp học lập trình tham chiếu đã cho thấy cách triển khai và duy trì tác nhân ADK, hãy tham khảo Antigravity về vấn đề này!

8. Xin chúc mừng!

Bạn đã mở rộng một tác nhân ADK của nhân viên hỗ trợ nhà hàng bằng tính năng đặt chỗ – hoàn toàn thông qua quy trình làm việc SDD của Antigravity, mà không cần viết mã xử lý ứng dụng theo cách thủ công.

Sản phẩm bạn đã tạo

  • Một tác nhân ADK của nhân viên hỗ trợ nhà hàng có chức năng tìm kiếm thực đơn, tìm kiếm ngữ nghĩa, theo dõi lựa chọn ưu tiên về chế độ ăn uống và đặt chỗ
  • Một kỹ năng Antigravity để nghiên cứu kho lưu trữ, tạo và duy trì tài liệu bối cảnh dự án
  • Một bản quy tắc dự án nhằm thực thi các nguyên tắc không thể thương lượng trong quá trình lập kế hoạch và phân tích
  • Một chu trình SDD hoàn chỉnh minh hoạ quy trình chỉ định → làm rõ → lập kế hoạch → nhiệm vụ → phân tích → triển khai

Kiến thức bạn học được

  • Cách sử dụng quy trình phát triển dựa trên quy cách trong Antigravity để thêm các tính năng vào cơ sở mã hiện có một cách có hệ thống
  • Cách tạo các kỹ năng Antigravity đóng gói kiến thức về miền để sử dụng lại trong các cuộc trò chuyện
  • Cách khởi động bối cảnh dự án để Antigravity đưa ra quyết định sáng suốt về kiến trúc, mẫu và lựa chọn công nghệ
  • Cách thiết lập quy tắc dự án mà quy trình công việc SDD xác thực
  • Cách mở rộng một tác nhân ADK bằng các công cụ mới dựa trên cơ sở dữ liệu thông qua Bộ công cụ MCP

Dọn dẹp

Dừng mọi quy trình cục bộ đang chạy (Toolbox):

pkill -f toolbox 2>/dev/null

Xoá phiên bản Cloud SQL để không bị tính phí liên tục:

gcloud sql instances delete restaurant-db --quiet

Bạn có thể xoá toàn bộ dự án:

gcloud projects delete $GOOGLE_CLOUD_PROJECT