Làm quen với các kỹ năng trong Google Antigravity

1. Giới thiệu

Google Antigravity (gọi tắt là Antigravity trong phần còn lại của tài liệu) là một IDE dựa trên tác nhân của Google. Trong Lớp học lập trình Bắt đầu sử dụng Antigravity, bạn có thể tìm hiểu những kiến thức cơ bản về Antigravity. Trong lớp học lập trình này, chúng ta sẽ sử dụng Antigravity để tạo Agent Skills (Các kỹ năng của tác nhân), một định dạng mở, gọn nhẹ để mở rộng các chức năng của tác nhân AI bằng kiến thức và quy trình làm việc chuyên biệt. Bạn sẽ có thể tìm hiểu về Kỹ năng của nhân viên hỗ trợ, lợi ích và cách xây dựng các kỹ năng này. Sau đó, bạn sẽ xây dựng nhiều Kỹ năng của Đặc vụ, từ trình định dạng Git, trình tạo mẫu, giàn giáo mã công cụ và nhiều kỹ năng khác, tất cả đều có thể sử dụng trong Antigravity.

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

  • Google Antigravity đã được cài đặt và định cấu hình.
  • Có kiến thức cơ bản về Google Antigravity. Bạn nên hoàn thành lớp học lập trình: Bắt đầu sử dụng Google Antigravity.

2. Lý do nên dùng Skills

Các tác nhân AI hiện đại đã phát triển từ những tác nhân chỉ có khả năng lắng nghe đơn giản thành những tác nhân có khả năng suy luận phức tạp, tích hợp với hệ thống tệp cục bộ và các công cụ bên ngoài (thông qua máy chủ MCP). Tuy nhiên, việc tải một tác nhân với toàn bộ cơ sở mã và hàng trăm công cụ một cách bừa bãi sẽ dẫn đến tình trạng Bão hoà ngữ cảnh và "Công cụ cồng kềnh". Ngay cả khi có các cửa sổ ngữ cảnh lớn, việc đổ 40–50 nghìn mã thông báo của các công cụ không dùng đến vào bộ nhớ đang hoạt động sẽ gây ra độ trễ cao, lãng phí tài chính và "sự suy giảm ngữ cảnh", trong đó mô hình bị nhầm lẫn bởi dữ liệu không liên quan.

Giải pháp: Kỹ năng của nhân viên hỗ trợ

Để giải quyết vấn đề này, Anthropic đã giới thiệu Kỹ năng của tác nhân, chuyển đổi cấu trúc từ tải ngữ cảnh nguyên khối sang Tiết lộ từng bước. Thay vì buộc mô hình "ghi nhớ" mọi quy trình cụ thể (chẳng hạn như di chuyển cơ sở dữ liệu hoặc kiểm tra bảo mật) khi bắt đầu một phiên, những chức năng này được đóng gói thành các đơn vị mô-đun, có thể khám phá.

Cách tính năng hoạt động

Ban đầu, mô hình này chỉ được cung cấp cho một "trình đơn" siêu dữ liệu đơn giản. Ứng dụng này chỉ tải kiến thức theo quy trình (hướng dẫn và tập lệnh) khi ý định của người dùng khớp với một kỹ năng cụ thể. Điều này đảm bảo rằng nhà phát triển yêu cầu tái cấu trúc phần mềm trung gian xác thực sẽ nhận được bối cảnh bảo mật mà không cần tải các quy trình CSS không liên quan, giúp bối cảnh tinh gọn, nhanh chóng và tiết kiệm chi phí.

d3f4bcb065a19fea.png

3. Kỹ năng của Đặc vụ và Phản trọng lực

Trong hệ sinh thái Antigravity, nếu Trình quản lý tác nhân là bộ não và Trình chỉnh sửa là canvas, thì Kỹ năng sẽ đóng vai trò là các mô-đun huấn luyện chuyên biệt, giúp thu hẹp khoảng cách giữa mô hình Gemini 3 đa năng và ngữ cảnh cụ thể của bạn. Các công cụ này cho phép tác nhân "trang bị" một bộ hướng dẫn và giao thức xác định (chẳng hạn như các tiêu chuẩn di chuyển cơ sở dữ liệu hoặc kiểm tra bảo mật) chỉ khi có yêu cầu thực hiện một nhiệm vụ liên quan. Bằng cách tải động các giao thức thực thi này, Skills sẽ biến AI từ một lập trình viên chung chung thành một chuyên gia tuân thủ nghiêm ngặt các phương pháp hay nhất và tiêu chuẩn an toàn đã được hệ thống hoá của một tổ chức.

Kỹ năng trong Antigravity là gì?

Trong bối cảnh của Google Antigravity, Kỹ năng là một gói dựa trên thư mục, chứa một tệp định nghĩa (SKILL.md) và các tài sản hỗ trợ không bắt buộc (tập lệnh, tài liệu tham khảo, mẫu).

Đây là một cơ chế để mở rộng khả năng theo yêu cầu.

  • Theo yêu cầu: Không giống như Lệnh hệ thống (luôn được tải), Kỹ năng chỉ được tải vào ngữ cảnh của tác nhân khi tác nhân xác định rằng kỹ năng đó có liên quan đến yêu cầu hiện tại của người dùng. Điều này giúp tối ưu hoá cửa sổ ngữ cảnh và ngăn tác nhân bị phân tâm bởi các chỉ dẫn không liên quan. Trong các dự án lớn có hàng chục công cụ, việc tải có chọn lọc này là rất quan trọng đối với hiệu suất và độ chính xác của lý luận.
  • Tiện ích mở rộng về chức năng: Các kỹ năng có thể làm được nhiều việc hơn là chỉ hướng dẫn; chúng có thể thực thi. Bằng cách kết hợp các tập lệnh Python hoặc Bash, một Kỹ năng có thể giúp tác nhân thực hiện các hành động phức tạp, nhiều bước trên máy cục bộ hoặc mạng bên ngoài mà người dùng không cần chạy lệnh theo cách thủ công. Điều này sẽ biến tác nhân từ một trình tạo văn bản thành một người dùng công cụ.

Kỹ năng so với hệ sinh thái (Công cụ, Quy tắc và Quy trình công việc)

Trong khi Giao thức bối cảnh mô hình (MCP) hoạt động như "bàn tay" của tác nhân – cung cấp các kết nối bền bỉ, có hiệu suất cao cho các hệ thống bên ngoài như GitHub hoặc PostgreSQL – thì Kỹ năng đóng vai trò là "bộ não" chỉ đạo các kết nối đó.

MCP xử lý cơ sở hạ tầng có trạng thái, trong khi Skills là các định nghĩa về tác vụ tạm thời, đơn giản, đóng gói phương pháp sử dụng những công cụ đó. Phương pháp không cần máy chủ này cho phép các tác nhân thực thi các tác vụ đặc biệt (chẳng hạn như tạo nhật ký thay đổi hoặc di chuyển) mà không cần phải chạy các quy trình liên tục, chỉ tải bối cảnh khi tác vụ đang hoạt động và giải phóng bối cảnh ngay sau đó.

Về chức năng, Kỹ năng nằm ở vị trí trung gian giữa "Quy tắc" (hàng rào thụ động, luôn bật) và "Quy trình công việc" (macro chủ động, do người dùng kích hoạt). Không giống như những quy trình làm việc yêu cầu các lệnh cụ thể (ví dụ: /test), Kỹ năng là do tác nhân kích hoạt: mô hình tự động phát hiện ý định của người dùng và trang bị linh hoạt chuyên môn cụ thể cần thiết. Cấu trúc này cho phép khả năng kết hợp mạnh mẽ; ví dụ: một Quy tắc chung có thể thực thi việc sử dụng Kỹ năng "Di chuyển an toàn" trong quá trình thay đổi cơ sở dữ liệu hoặc một Quy trình duy nhất có thể điều phối nhiều Kỹ năng để xây dựng một quy trình triển khai mạnh mẽ.

4. Tạo kỹ năng

Việc tạo một Kỹ năng trong Antigravity tuân theo một cấu trúc thư mục và định dạng tệp cụ thể. Việc chuẩn hoá này đảm bảo rằng các kỹ năng có thể chuyển đổi và tác nhân có thể phân tích cú pháp cũng như thực thi các kỹ năng đó một cách đáng tin cậy. Thiết kế này cố ý đơn giản, dựa vào các định dạng được hiểu rộng rãi như Markdown và YAML, giúp giảm rào cản gia nhập cho những nhà phát triển muốn mở rộng các chức năng của IDE.

Cấu trúc thư mục

Bạn có thể xác định kỹ năng ở hai phạm vi, cho phép cả tuỳ chỉnh theo dự án và theo người dùng :

  1. Phạm vi Workspace: Nằm trong <workspace-root>/.agent/skills/. Các kỹ năng này chỉ có trong dự án cụ thể. Điều này rất phù hợp với các tập lệnh dành riêng cho dự án, chẳng hạn như triển khai cho một môi trường cụ thể, quản lý cơ sở dữ liệu cho ứng dụng đó hoặc tạo mã chuẩn cho một khung độc quyền.
  2. Phạm vi toàn cầu: Nằm ở ~/.gemini/antigravity/skills/. Những kỹ năng này có sẵn trên tất cả các dự án trên máy của người dùng. Điều này phù hợp với các tiện ích chung như "Format JSON" (Định dạng JSON), "Generate UUIDs" (Tạo UUID), "Review Code Style" (Xem lại kiểu mã) hoặc tích hợp với các công cụ nâng cao hiệu suất cá nhân.

Một thư mục Kỹ năng điển hình sẽ có dạng như sau:

my-skill/
├── SKILL.md # The definition file
├── scripts/ # [Optional] Python, Bash, or Node scripts
     ├── run.py
     └── util.sh
├── references/ # [Optional] Documentation or templates
     └── api-docs.md
└── assets/ # [Optional] Static assets (images, logos)

Cấu trúc này tách biệt các vấn đề một cách hiệu quả. Logic (scripts) tách biệt với chỉ dẫn (SKILL.md) và kiến thức (references), phản ánh các phương pháp kỹ thuật phần mềm tiêu chuẩn.

Tệp định nghĩa SKILL.md

Tệp SKILL.md là bộ não của Kỹ năng. Tệp này cho biết nhân viên hỗ trợ cần làm gì, thời điểm sử dụng và cách thực hiện.

Nó bao gồm 2 phần:

  • YAML Frontmatter
  • Nội dung Markdown.

YAML Frontmatter

Đây là lớp siêu dữ liệu. Đây là phần duy nhất của kỹ năng được bộ định tuyến cấp cao của tác nhân lập chỉ mục. Khi người dùng gửi một câu lệnh, tác nhân sẽ so khớp ngữ nghĩa câu lệnh đó với các trường mô tả của tất cả kỹ năng hiện có.

---
name: database-inspector
description: Use this skill when the user asks to query the database, check table schemas, or inspect user data in the local PostgreSQL instance.
---

Trường khoá:

  • name: Không bắt buộc. Phải là duy nhất trong phạm vi. Được phép sử dụng chữ cái viết thường và dấu gạch nối (ví dụ: postgres-query, pr-reviewer). Nếu không được cung cấp, tên này sẽ mặc định là tên thư mục.
  • description: Đây là trường bắt buộc và quan trọng nhất. Đây là "cụm từ kích hoạt". Nội dung này phải có đủ thông tin mô tả để LLM nhận ra mức độ liên quan về ngữ nghĩa. Nội dung mô tả mơ hồ như "Công cụ cơ sở dữ liệu" là không đủ. Một nội dung mô tả chính xác như "Thực thi các truy vấn SQL chỉ đọc đối với cơ sở dữ liệu PostgreSQL cục bộ để truy xuất dữ liệu người dùng hoặc giao dịch. Sử dụng dữ liệu này để gỡ lỗi trạng thái dữ liệu" đảm bảo kỹ năng được chọn đúng cách.

Nội dung Markdown

Nội dung chứa các hướng dẫn. Đây là "thiết kế câu lệnh" được lưu vào một tệp. Khi kỹ năng được kích hoạt, nội dung này sẽ được đưa vào cửa sổ ngữ cảnh của tác nhân.

Nội dung phải bao gồm:

  1. Mục tiêu: Một tuyên bố rõ ràng về những gì kỹ năng đạt được.
  2. Hướng dẫn: Logic từng bước.
  3. Ví dụ: Một vài ví dụ về dữ liệu đầu vào và đầu ra để hướng dẫn hiệu suất của mô hình.
  4. Các quy tắc hạn chế: Quy tắc "Không" (ví dụ: Không chạy truy vấn XOÁ").

Nội dung ví dụ của SKILL.md:

Database Inspector

Goal
To safely query the local database and provide insights on the current data state.

Instructions
- Analyze the user's natural language request to understand the data need.
- Formulate a valid SQL query.
 - CRITICAL: Only SELECT statements are allowed.
- Use the script scripts/query_runner.py to execute the SQL.
 - Command: python scripts/query_runner.py "SELECT * FROM..."
- Present the results in a Markdown table.

Constraints
- Never output raw user passwords or API keys.
- If the query returns > 50 rows, summarize the data instead of listing it all.

Tích hợp tập lệnh

Một trong những tính năng mạnh mẽ nhất của Skills là khả năng uỷ quyền thực thi cho các tập lệnh. Điều này cho phép tác nhân thực hiện những hành động mà LLM khó hoặc không thể thực hiện trực tiếp (chẳng hạn như thực thi tệp nhị phân, tính toán toán học phức tạp hoặc tương tác với các hệ thống cũ).

Các tập lệnh được đặt trong thư mục con scripts/. SKILL.md tham chiếu đến các tệp này theo đường dẫn tương đối.

5. Kỹ năng sáng tạo

Mục tiêu của phần này là xây dựng các Kỹ năng tích hợp vào Antigravity và dần dần cho thấy nhiều tính năng như tài nguyên / tập lệnh / v.v.

Bạn có thể tải các Kỹ năng xuống từ kho lưu trữ Github tại đây: https://github.com/rominirani/antigravity-skills.

Chúng ta có thể xem xét việc đặt từng kỹ năng này vào thư mục ~/.gemini/antigravity/skills hoặc thư mục /.agent/skills.

Cấp 1 : Bộ định tuyến cơ bản ( git-commit-formatter )

Hãy coi đây là "Hello World" của Skills.

Nhà phát triển thường viết tin nhắn cam kết lười biếng, ví dụ: "wip", "fix bug", "updates". Việc thực thi "Conventional Commits" theo cách thủ công rất tẻ nhạt và thường bị quên. Hãy triển khai một Kỹ năng thực thi quy cách Conventional Commits. Bằng cách chỉ cần hướng dẫn cho tác nhân về các quy tắc, chúng ta cho phép tác nhân đóng vai trò là người thực thi.

git-commit-formatter/
└── SKILL.md  (Instructions only)

Tệp SKILL.md được minh hoạ bên dưới:

---
name: git-commit-formatter
description: Formats git commit messages according to Conventional Commits specification. Use this when the user asks to commit changes or write a commit message.
---

Git Commit Formatter Skill

When writing a git commit message, you MUST follow the Conventional Commits specification.

Format
`<type>[optional scope]: <description>`

Allowed Types
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests or correcting existing tests
- **chore**: Changes to the build process or auxiliary tools and libraries such as documentation generation

Instructions
1. Analyze the changes to determine the primary `type`.
2. Identify the `scope` if applicable (e.g., specific component or file).
3. Write a concise `description` in an imperative mood (e.g., "add feature" not "added feature").
4. If there are breaking changes, add a footer starting with `BREAKING CHANGE:`.

Example
`feat(auth): implement login with google`

Cách chạy ví dụ này:

  1. Thực hiện một thay đổi nhỏ đối với bất kỳ tệp nào trong không gian làm việc của bạn.
  2. Mở cuộc trò chuyện rồi nhập: Cam kết thực hiện những thay đổi này.
  3. Tác nhân sẽ không chỉ chạy lệnh git commit. Thao tác này sẽ kích hoạt kỹ năng git-commit-formatter trước.
  4. Kết quả: Một thông báo cam kết Git thông thường sẽ được đề xuất.

Ví dụ: Tôi yêu cầu Antigravity thêm một số nhận xét vào một tệp Python mẫu và kết quả là Antigravity tạo ra một thông báo cam kết Git như docs: add detailed comments to demo_primes.py.

Cấp 2: Sử dụng tài sản (license-header-adder)

Đây là mẫu "Tham chiếu".

Mỗi tệp nguồn trong một dự án của công ty có thể cần một tiêu đề giấy phép Apache 2.0 cụ thể gồm 20 dòng. Việc đưa văn bản tĩnh này trực tiếp vào câu lệnh (hoặc SKILL.md) là không cần thiết. Công cụ này tiêu thụ mã thông báo mỗi khi kỹ năng được lập chỉ mục và mô hình có thể "ảo tưởng" lỗi chính tả trong văn bản pháp lý.

Chuyển văn bản tĩnh sang một tệp văn bản thuần tuý trong thư mục resources/. Kỹ năng này hướng dẫn nhân viên chỉ đọc tệp này khi cần.

Việc chuyển đổi dữ liệu rời rạc (chẳng hạn như phản hồi API JSON) thành mã nghiêm ngặt (chẳng hạn như các mô hình Pydantic) liên quan đến hàng chục quyết định. Chúng ta nên đặt tên cho các lớp như thế nào? Chúng ta có nên dùng Optional không? snake_case hoặc camelCase? Việc viết 50 quy tắc này bằng tiếng Anh rất tẻ nhạt và dễ xảy ra lỗi.

LLM là công cụ so khớp mẫu.

Việc cho họ xem một ví dụ hoàn hảo (Đầu vào -> Đầu ra) thường hiệu quả hơn so với hướng dẫn dài dòng.

license-header-adder/
├── SKILL.md
└── resources/
   └── HEADER_TEMPLATE.txt  (The heavy text)

Tệp SKILL.md được minh hoạ bên dưới:

---
name: license-header-adder
description: Adds the standard open-source license header to new source files. Use involves creating new code files that require copyright attribution.
---

# License Header Adder Skill

This skill ensures that all new source files have the correct copyright header.

## Instructions

1. **Read the Template**:
  First, read the content of the header template file located at `resources/HEADER_TEMPLATE.txt`.

2. **Prepend to File**:
  When creating a new file (e.g., `.py`, `.java`, `.js`, `.ts`, `.go`), prepend the `target_file` content with the template content.

3. **Modify Comment Syntax**:
  - For C-style languages (Java, JS, TS, C++), keep the `/* ... */` block as is.
  - For Python, Shell, or YAML, convert the block to use `#` comments.
  - For HTML/XML, use `<!-- ... -->`.

Cách chạy ví dụ này:

  1. Tạo một tệp python giả mới: touch my_script.py
  2. Loại: Add the license header to my_script.py.
  3. Nhân viên hỗ trợ sẽ đọc license-header-adder/resources/HEADER_TEMPLATE.txt.
  4. Thao tác này sẽ dán nội dung chính xác, nguyên văn vào tệp của bạn.

Cấp 3: Học qua ví dụ (json-to-pydantic)

Mẫu "Few-Shot".

Việc chuyển đổi dữ liệu rời rạc (chẳng hạn như phản hồi API JSON) thành mã nghiêm ngặt (chẳng hạn như các mô hình Pydantic) liên quan đến hàng chục quyết định. Chúng ta nên đặt tên cho các lớp như thế nào? Chúng ta có nên dùng Optional không? snake_case hoặc camelCase? Việc viết 50 quy tắc này bằng tiếng Anh rất tẻ nhạt và dễ xảy ra lỗi.

LLM là công cụ so khớp mẫu. Việc cho họ xem một ví dụ hoàn hảo (Đầu vào -> Đầu ra) thường hiệu quả hơn so với hướng dẫn dài dòng.

json-to-pydantic/
├── SKILL.md
└── examples/
   ├── input_data.json   (The Before State)
   └── output_model.py   (The After State)

Tệp SKILL.md được minh hoạ bên dưới:

---
name: json-to-pydantic
description: Converts JSON data snippets into Python Pydantic data models.
---

# JSON to Pydantic Skill

This skill helps convert raw JSON data or API responses into structured, strongly-typed Python classes using Pydantic.

Instructions

1. **Analyze the Input**: Look at the JSON object provided by the user.
2. **Infer Types**:
  - `string` -> `str`
  - `number` -> `int` or `float`
  - `boolean` -> `bool`
  - `array` -> `List[Type]`
  - `null` -> `Optional[Type]`
  - Nested Objects -> Create a separate sub-class.
 
3. **Follow the Example**:
  Review `examples/` to see how to structure the output code. notice how nested dictionaries like `preferences` are extracted into their own class.
 
  - Input: `examples/input_data.json`
  - Output: `examples/output_model.py`

Style Guidelines
- Use `PascalCase` for class names.
- Use type hints (`List`, `Optional`) from `typing` module.
- If a field can be missing or null, default it to `None`.

Trong thư mục /examples, có tệp JSON và tệp đầu ra, tức là tệp Python. Cả hai đều xuất hiện như bên dưới:

input_data.json

{
   "user_id": 12345,
   "username": "jdoe_88",
   "is_active": true,
   "preferences": {
       "theme": "dark",
       "notifications": [
           "email",
           "push"
       ]
   },
   "last_login": "2024-03-15T10:30:00Z",
   "meta_tags": null
}

output_model.py

from pydantic import BaseModel, Field
from typing import List, Optional

class Preferences(BaseModel):
   theme: str
   notifications: List[str]

class User(BaseModel):
   user_id: int
   username: str
   is_active: bool
   preferences: Preferences
   last_login: Optional[str] = None
   meta_tags: Optional[List[str]] = None

Cách chạy ví dụ này:

  1. Cung cấp cho tác nhân một đoạn mã JSON (dán vào cuộc trò chuyện hoặc trỏ đến một tệp).

{ "product": "Widget", "cost": 10.99, "stock": null }

  1. Loại: Convert this JSON to a Pydantic model.
  2. Tác nhân sẽ xem xét cặp examples trong thư mục kỹ năng.
  3. Thao tác này sẽ tạo ra một lớp Python mô phỏng hoàn hảo kiểu mã hoá, các lệnh nhập và cấu trúc của output_model.py, bao gồm cả việc xử lý kho hàng trống dưới dạng Optional.

Dưới đây là một kết quả đầu ra mẫu (product_model.py):

from pydantic import BaseModel
from typing import Optional

class Product(BaseModel):
   product: str
   cost: float
   stock: Optional[int] = None

Cấp 4: Logic theo quy trình (database-schema-validator)

Đây là mẫu "Sử dụng công cụ".

Nếu bạn hỏi một LLM "Giản đồ này có an toàn không?", thì LLM có thể trả lời là mọi thứ đều ổn, ngay cả khi thiếu khoá chính quan trọng, chỉ vì SQL có vẻ chính xác.

Hãy uỷ quyền kiểm tra này cho một Tập lệnh xác định. Chúng tôi sử dụng Kỹ năng này để định tuyến tác nhân chạy một tập lệnh Python mà chúng tôi đã viết. Tập lệnh cung cấp thông tin thực tế nhị phân (Đúng/Sai).

database-schema-validator/
├── SKILL.md
└── scripts/
   └── validate_schema.py  (The Validator)

Tệp SKILL.md được minh hoạ bên dưới:

---
name: database-schema-validator
description: Validates SQL schema files for compliance with internal safety and naming policies.
---

# Database Schema Validator Skill

This skill ensures that all SQL files provided by the user comply with our strict database standards.

Policies Enforced
1. **Safety**: No `DROP TABLE` statements.
2. **Naming**: All tables must use `snake_case`.
3. **Structure**: Every table must have an `id` column as PRIMARY KEY.

Instructions

1. **Do not read the file manually** to check for errors. The rules are complex and easily missed by eye.
2. **Run the Validation Script**:
  Use the `run_command` tool to execute the python script provided in the `scripts/` folder against the user's file.
 
  `python scripts/validate_schema.py <path_to_user_file>`

3. **Interpret Output**:
  - If the script returns **exit code 0**: Tell the user the schema looks good.
  - If the script returns **exit code 1**: Report the specific error messages printed by the script to the user and suggest fixes.

Tệp validate_schema.py được minh hoạ bên dưới:

import sys
import re

def validate_schema(filename):
   """
   Validates a SQL schema file against internal policy:
   1. Table names must be snake_case.
   2. Every table must have a primary key named 'id'.
   3. No 'DROP TABLE' statements allowed (safety).
   """
   try:
       with open(filename, 'r') as f:
           content = f.read()
          
       lines = content.split('\n')
       errors = []
      
       # Check 1: No DROP TABLE
       if re.search(r'DROP TABLE', content, re.IGNORECASE):
           errors.append("ERROR: 'DROP TABLE' statements are forbidden.")
          
       # Check 2 & 3: CREATE TABLE checks
       table_defs = re.finditer(r'CREATE TABLE\s+(?P<name>\w+)\s*\((?P<body>.*?)\);', content, re.DOTALL | re.IGNORECASE)
      
       for match in table_defs:
           table_name = match.group('name')
           body = match.group('body')
          
           # Snake case check
           if not re.match(r'^[a-z][a-z0-9_]*$', table_name):
               errors.append(f"ERROR: Table '{table_name}' must be snake_case.")
              
           # Primary key check
           if not re.search(r'\bid\b.*PRIMARY KEY', body, re.IGNORECASE):
               errors.append(f"ERROR: Table '{table_name}' is missing a primary key named 'id'.")

       if errors:
           for err in errors:
               print(err)
           sys.exit(1)
       else:
           print("Schema validation passed.")
           sys.exit(0)
          
   except FileNotFoundError:
       print(f"Error: File '{filename}' not found.")
       sys.exit(1)

if __name__ == "__main__":
   if len(sys.argv) != 2:
       print("Usage: python validate_schema.py <schema_file>")
       sys.exit(1)
      
   validate_schema(sys.argv[1])

Cách chạy ví dụ này:

  1. Tạo một tệp SQL không hợp lệ bad_schema.sql: CREATE TABLE users (name TEXT);
  2. Loại: Validate bad_schema.sql.
  3. Nhân viên hỗ trợ không đoán. Thao tác này sẽ gọi tập lệnh, nhưng không thành công (Mã thoát 1) và sẽ báo cáo cho chúng tôi rằng "Quá trình xác thực không thành công vì bảng "users" thiếu khoá chính".

Cấp 5: Kiến trúc sư (adk-tool-scaffold)

Mẫu này bao gồm hầu hết các tính năng có trong Skills.

Các tác vụ phức tạp thường đòi hỏi một chuỗi các thao tác kết hợp mọi thứ chúng ta đã thấy: tạo tệp, tuân theo mẫu và viết logic. Việc tạo một Công cụ mới cho ADK (Bộ công cụ phát triển tác nhân) đòi hỏi tất cả những điều này.

Chúng tôi kết hợp:

  • Tập lệnh (để xử lý việc tạo/dàn dựng tệp)
  • Mẫu (để xử lý mã chuẩn trong tài nguyên)
  • Ví dụ (để hướng dẫn quá trình tạo logic).
adk-tool-scaffold/
├── SKILL.md
├── resources/
   └── ToolTemplate.py.hbs (Jinja2 Template)
├── scripts/
   └── scaffold_tool.py    (Generator Script)
└── examples/
    └── WeatherTool.py      (Reference Implementation)

Tệp SKILL.md được minh hoạ bên dưới. Bạn có thể tham khảo kho lưu trữ các kỹ năng để kiểm tra các tệp trong thư mục tập lệnh, tài nguyên và ví dụ. Đối với Kỹ năng cụ thể này, hãy chuyển đến kỹ năng adk-tool-scaffold.

---
name: adk-tool-scaffold
description: Scaffolds a new custom Tool class for the Agent Development Kit (ADK).
---

# ADK Tool Scaffold Skill

This skill automates the creation of standard `BaseTool` implementations for the Agent Development Kit.

Instructions

1. **Identify the Tool Name**:
  Extract the name of the tool the user wants to build (e.g., "StockPrice", "EmailSender").
 
2. **Review the Example**:
  Check `examples/WeatherTool.py` to understand the expected structure of an ADK tool (imports, inheritance, schema).

3. **Run the Scaffolder**:
  Execute the python script to generate the initial file.
 
  `python scripts/scaffold_tool.py <ToolName>`

4. **Refine**:
  After generation, you must edit the file to:
  - Update the `execute` method with real logic.
  - Define the JSON schema in `get_schema`.
 
Example Usage
User: "Create a tool to search Wikipedia."
Agent:
1. Runs `python scripts/scaffold_tool.py WikipediaSearch`
2. Editing `WikipediaSearchTool.py` to add the `requests` logic and `query` argument schema.

Cách chạy ví dụ này:

  1. Loại: Create a new ADK tool called StockPrice to fetch data from an API.
  2. Bước 1 (Khung): Đặc vụ chạy tập lệnh Python. Thao tác này sẽ tạo ngay StockPriceTool.py với cấu trúc lớp, các mục nhập và tên lớp StockPriceTool chính xác.
  3. Bước 2 (Triển khai): Tác nhân "đọc" tệp mà tác nhân vừa tạo. Thông tin # TODO: Implement logic. thấy
  4. Bước 3 (Hướng dẫn): Không chắc chắn cách xác định giản đồ JSON cho các đối số của công cụ. Công cụ này kiểm tra examples/WeatherTool.py.
  5. Hoàn tất: Thao tác này sẽ chỉnh sửa tệp để thêm requests.get(...) và xác định đối số của mã chứng khoán trong giản đồ, khớp chính xác với kiểu ADK.

6. Xin chúc mừng

Bạn đã hoàn thành thành công phòng thí nghiệm về Kỹ năng chống trọng lực và xây dựng các Kỹ năng sau:

  • Trình định dạng cam kết Git.
  • Trình thêm tiêu đề giấy phép.
  • JSON sang Pydantic.
  • Trình xác thực giản đồ cơ sở dữ liệu.
  • Khung công cụ ADK.

Chắc chắn, Kỹ năng của trợ lý là một cách tuyệt vời để giúp Antigravity viết mã theo cách của bạn, tuân thủ các quy tắc và sử dụng các công cụ của bạn.

Tài liệu tham khảo