بدء استخدام المهارات في Google Antigravity

1. مقدمة

‫Google Antigravity (يُشار إليها باسم Antigravity في بقية المستند) هي بيئة تطوير متكاملة تستند إلى الذكاء الاصطناعي الوكيل من Google. في الدرس التطبيقي حول الترميز: بدء استخدام Antigravity، يمكنك التعرّف على أساسيات Antigravity. في هذا الدرس التطبيقي حول الترميز، سنستخدم Antigravity لإنشاء "مهارات الوكيل"، وهو تنسيق خفيف الوزن ومفتوح المصدر لتوسيع إمكانات وكيل الذكاء الاصطناعي باستخدام المعرفة وسير العمل المتخصصَين. ستتعرّف على مهارات الوكيل وفوائدها وطريقة إنشائها. ستنشئ بعد ذلك مهارات متعددة للوكيل، تتراوح بين أداة تنسيق Git وأداة إنشاء النماذج وأداة إنشاء بنية رمز الأدوات وغير ذلك، وكلها قابلة للاستخدام في Antigravity.

المتطلبات الأساسية:

2. أهمية المهارات

تطوّرت وكلاء الذكاء الاصطناعي الحديثة من مستمعين بسيطين إلى مستدلين معقّدين يتكاملون مع أنظمة الملفات المحلية والأدوات الخارجية (عبر خوادم MCP). ومع ذلك، يؤدي تحميل الوكيل بشكل عشوائي بقواعد بيانات كاملة ومئات الأدوات إلى تشبّع السياق و "تضخّم الأدوات". حتى مع نوافذ السياق الكبيرة، يؤدي إدخال 40,000 إلى 50,000 رمز مميز من الأدوات غير المستخدَمة إلى الذاكرة النشطة إلى حدوث تأخير كبير، وإهدار مالي، و "تدهور السياق"، حيث يصبح النموذج مشوّشًا بسبب البيانات غير ذات الصلة.

الحل: مهارات العملاء

لحلّ هذه المشكلة، قدّمت شركة Anthropic ميزة مهارات الوكيل، ما أدّى إلى تغيير البنية من تحميل السياق المتكامل إلى الإفصاح التدريجي. بدلاً من إجبار النموذج على "تذكُّر" كل سير عمل محدّد (مثل عمليات نقل البيانات أو عمليات تدقيق الأمان) في بداية الجلسة، يتم تجميع هذه الإمكانات في وحدات نمطية يمكن اكتشافها.

كيفية العمل

في البداية، لا يتم عرض النموذج إلا على "قائمة" بسيطة من البيانات الوصفية. لا يتم تحميل المعرفة الإجرائية الكبيرة (التعليمات والبرامج النصية) إلا عندما تتطابق نية المستخدم تحديدًا مع إحدى المهارات. يضمن ذلك حصول المطوّر الذي يطلب إعادة تصميم برنامج وسيط لمصادقة المستخدم على سياق الأمان بدون تحميل مسارات CSS غير ذات صلة، ما يحافظ على السياق بسيطًا وسريعًا وفعّالاً من حيث التكلفة.

d3f4bcb065a19fea.png

3- مهارات الوكيل وAntigravity

في منظومة Antigravity المتكاملة، إذا كان "مدير الوكلاء" هو العقل و"المحرّر" هو لوحة الرسم، تعمل المهارات كوحدات تدريب متخصّصة تسدّ الفجوة بين نموذج Gemini 3 العام وسياقك المحدّد. تسمح هذه الأدوات للوكيل "بتجهيز" مجموعة محدّدة من التعليمات والبروتوكولات، مثل معايير نقل البيانات أو عمليات التحقّق من الأمان، فقط عند طلب مهمة ذات صلة. من خلال التحميل الديناميكي لبروتوكولات التنفيذ هذه، تحوّل "المهارات" الذكاء الاصطناعي بشكل فعّال من مبرمج عام إلى متخصص يلتزم بدقة بأفضل الممارسات ومعايير الأمان المحدّدة في المؤسسة.

ما هي المهارة في لعبة Antigravity؟

في سياق Google Antigravity، المهارة هي حزمة مستندة إلى دليل تحتوي على ملف تعريف (SKILL.md) وأصول داعمة اختيارية (نصوص برمجية ومراجع وقوالب).

وهي آلية لتوسيع إمكانية الوصول عند الطلب.

  • عند الطلب: على عكس طلب النظام (الذي يتم تحميله دائمًا)، لا يتم تحميل "الأداة" في سياق الوكيل إلا عندما يحدّد الوكيل أنّها ذات صلة بطلب المستخدم الحالي. يؤدي ذلك إلى تحسين نافذة السياق ومنع الوكيل من التشتّت بسبب التعليمات غير ذات الصلة. في المشاريع الكبيرة التي تتضمّن عشرات الأدوات، يكون التحميل الانتقائي ضروريًا لتحسين الأداء ودقة الاستنتاج.
  • توسيع الإمكانات: يمكن للمهارات تنفيذ إجراءات، وليس فقط تقديم تعليمات. من خلال تجميع نصوص Python أو Bash البرمجية، يمكن أن تمنح "المهارة" الوكيل القدرة على تنفيذ إجراءات معقّدة ومتعددة الخطوات على الجهاز المحلي أو الشبكات الخارجية بدون أن يحتاج المستخدم إلى تنفيذ الأوامر يدويًا. ويحوّل هذا الإجراء الوكيل من مولّد نصوص إلى مستخدم أدوات.

المهارات مقابل المنظومة المتكاملة (الأدوات والقواعد وسير العمل)

بينما تعمل وظائف "بروتوكول سياق النموذج" (MCP) كـ "أيدي" الوكيل، حيث توفّر اتصالات قوية ومستمرة بأنظمة خارجية مثل GitHub أو PostgreSQL، تعمل "المهارات" كـ "عقول" توجّهها.

تتعامل "منصة MCP" مع البنية الأساسية التي تحتفظ بالحالة، بينما "المهارات" هي تعريفات مهام خفيفة الوزن ومؤقتة تحزم المنهجية لاستخدام هذه الأدوات. يتيح هذا الأسلوب الذي لا يتطلّب خادمًا للوكلاء تنفيذ مهام مخصّصة (مثل إنشاء سجلات التغيير أو عمليات نقل البيانات) بدون تكاليف تشغيلية إضافية لتشغيل العمليات المستمرة، ولا يتم تحميل السياق إلا عندما تكون المهمة نشطة ويتم إصداره فورًا بعد ذلك.

من الناحية الوظيفية، تحتلّ "المهارات" موقعًا وسيطًا فريدًا بين "القواعد" (ضوابط سلبية تعمل دائمًا) و"سير العمل" (وحدات ماكرو نشطة يتم تشغيلها من قِبل المستخدم). على عكس مهام سير العمل التي تتطلّب أوامر معيّنة (مثل /test)، المهارات يتم تفعيلها من خلال الوكيل: يرصد النموذج تلقائيًا نية المستخدم ويوفّر بشكل ديناميكي الخبرة المحددة المطلوبة. تتيح هذه البنية إمكانية إنشاء تركيبات قوية، على سبيل المثال، يمكن لقاعدة عامة فرض استخدام مهارة "نقل البيانات الآمن" أثناء إجراء تغييرات على قاعدة البيانات، أو يمكن لسير عمل واحد تنسيق مهارات متعددة لإنشاء مسار نشر قوي.

4. إنشاء مهارات

يتّبع إنشاء مهارة في Antigravity بنية دليل وتنسيق ملفات محدّدين. يضمن هذا التوحيد إمكانية نقل المهارات وأنّ بإمكان الوكيل تحليلها وتنفيذها بشكل موثوق. التصميم بسيط عمدًا، ويعتمد على تنسيقات مفهومة على نطاق واسع مثل Markdown وYAML، ما يقلّل من العوائق التي تحول دون دخول المطوّرين الذين يريدون توسيع إمكانات بيئة التطوير المتكاملة.

بنية الدليل

يمكن تحديد المهارات على مستويين، ما يتيح إجراء تخصيصات خاصة بالمشاريع والمستخدمين على حد سواء :

  1. نطاق Workspace: يقع في <workspace-root>/.agent/skills/. تتوفّر هذه المهارات فقط ضمن المشروع المحدّد. وهذا مثالي للبرامج النصية الخاصة بالمشاريع، مثل النشر في بيئة معيّنة أو إدارة قاعدة البيانات لهذا التطبيق أو إنشاء رمز نموذجي لإطار عمل خاص.
  2. النطاق العالمي: يقع في ~/.gemini/antigravity/skills/. تتوفّر هذه المهارات في جميع المشاريع على جهاز المستخدم. هذا الخيار مناسب للأدوات المساعدة العامة، مثل "تنسيق JSON" أو "إنشاء معرّفات UUID" أو "مراجعة نمط الرمز" أو الدمج مع أدوات الإنتاجية الشخصية.

يبدو دليل المهارات النموذجي على النحو التالي:

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)

تساعد هذه البنية في فصل المشاكل بفعالية. يتم فصل المنطق (scripts) عن التعليمات (SKILL.md) والمعرفة (references)، ما يعكس ممارسات هندسة البرامج العادية.

ملف التعريف SKILL.md

ملف SKILL.md هو أساس المهارة. فهي تحدّد للوكيل ماهية المهارة ومتى يجب استخدامها وكيفية تنفيذها.

وهي تتألف من جزأين:

  • YAML Frontmatter
  • نص Markdown

YAML Frontmatter

هذه هي طبقة البيانات الوصفية. وهي الجزء الوحيد من المهارة الذي يتم فهرسته بواسطة جهاز التوجيه عالي المستوى الخاص بالوكيل. عندما يرسل المستخدم طلبًا، يطابق الوكيل الطلب دلاليًا مع حقول الوصف الخاصة بجميع المهارات المتاحة.

---
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.
---

الحقول الرئيسية:

  • الاسم: هذا الحقل غير إلزامي. يجب أن يكون المعرّف فريدًا ضمن النطاق. يُسمح بالأحرف الصغيرة والواصلات (مثل ‫(postgres-query، pr-reviewer)، وإذا لم يتم توفيرها، سيتم استخدام اسم الدليل تلقائيًا.
  • الوصف: هذا الحقل إلزامي وهو الأهم. وهي تعمل كـ "عبارة التفعيل". يجب أن يكون وصفيًا بما يكفي لكي يتعرّف النموذج اللغوي الكبير على الصلة الدلالية. الوصف الغامض مثل "أدوات قاعدة البيانات" غير كافٍ. وصف دقيق مثل "تنفيذ طلبات بحث SQL للقراءة فقط في قاعدة بيانات PostgreSQL المحلية لاسترداد بيانات المستخدم أو المعاملات. يضمن استخدام هذا الخيار لتصحيح أخطاء حالات البيانات اختيار المهارة بشكلٍ صحيح.

The Markdown Body

يحتوي النص على التعليمات. هذه هي "هندسة الطلبات" التي يتم حفظها في ملف. عند تفعيل المهارة، يتم إدخال هذا المحتوى في نافذة السياق الخاصة بالوكيل.

يجب أن تتضمّن الرسالة ما يلي:

  1. الهدف: بيان واضح لما تحقّقه المهارة.
  2. التعليمات: منطق مفصّل.
  3. أمثلة: أمثلة على الطلبات والنتائج لتوجيه أداء النموذج
  4. القيود: قواعد "عدم" (مثلاً "عدم تنفيذ طلبات DELETE").

مثال على نص ملف 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.

دمج النصوص البرمجية

من أبرز ميزات Skills إمكانية تفويض تنفيذ المهام إلى البرامج النصية. يتيح ذلك للوكيل تنفيذ إجراءات يصعب أو يستحيل على النموذج اللغوي الكبير تنفيذها مباشرةً (مثل التنفيذ الثنائي أو العمليات الحسابية المعقّدة أو التفاعل مع الأنظمة القديمة).

يتم وضع النصوص في الدليل الفرعي scripts/. تشير SKILL.md إليها من خلال المسار النسبي.

5- مهارات التأليف

الهدف من هذا القسم هو إنشاء مهارات تتكامل مع Antigravity وعرض ميزات مختلفة بشكل تدريجي، مثل الموارد والنصوص البرمجية وما إلى ذلك.

يمكنك تنزيل المهارات من مستودع Github هنا: https://github.com/rominirani/antigravity-skills.

يمكننا التفكير في وضع كل من هذه المهارات داخل المجلد ~/.gemini/antigravity/skills أو المجلد /.agent/skills.

المستوى 1 : جهاز التوجيه الأساسي ( git-commit-formatter )

لنعتبر هذا المثال بمثابة "مرحبًا بالعالم" في Skills.

غالبًا ما يكتب المطوّرون رسائل إكمال كسولة، مثل "قيد التنفيذ" و"إصلاح خطأ" و"تحديثات". إنّ فرض استخدام "عمليات الإرسال التقليدية" يدويًا أمر ممل ويتم نسيانه غالبًا. لننفّذ مهارة تفرض مواصفات Conventional Commits. من خلال توجيه الوكيل بشأن القواعد، نسمح له بالتصرف كجهة تنفيذ.

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

يظهر الملف SKILL.md أدناه:

---
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`

كيفية تشغيل هذا المثال:

  1. أجرِ تغييرًا بسيطًا على أي ملف في مساحة العمل.
  2. افتح المحادثة واكتب: Commit these changes.
  3. لن ينفّذ الوكيل الأمر git commit فقط. سيتم أولاً تفعيل مهارة git-commit-formatter.
  4. النتيجة: سيتم اقتراح رسالة التزام بتنسيق Git التقليدي.

على سبيل المثال، طلبتُ من Antigravity إضافة بعض التعليقات إلى نموذج ملف Python، وانتهى الأمر برسالة Git commit على النحو التالي: docs: add detailed comments to demo_primes.py.

المستوى 2: استخدام مواد العرض (license-header-adder)

هذا هو نمط "المراجع".

قد يحتاج كل ملف مصدر في مشروع تابع لشركة إلى عنوان ترخيص Apache 2.0 محدّد يتألف من 20 سطرًا. إنّ وضع هذا النص الثابت مباشرةً في الطلب (أو SKILL.md) هو أمر غير فعّال. يستهلك الرموز المميزة في كل مرة تتم فيها فهرسة المهارة، وقد يرتكب النموذج أخطاء إملائية في النص القانوني.

نقل النص الثابت إلى ملف نص عادي في مجلد resources/ تطلب المهارة من الوكيل قراءة هذا الملف عند الحاجة فقط.

يتضمّن تحويل البيانات غير المنظَّمة (مثل استجابة JSON API) إلى رمز برمجي صارم (مثل نماذج Pydantic) عشرات القرارات. كيف يجب تسمية الفئات؟ هل يجب استخدام Optional؟ ‫snake_case أو camelCase؟ إنّ كتابة هذه القواعد الخمسين باللغة الإنجليزية أمر مملّ وعُرضة للأخطاء.

النماذج اللغوية الكبيرة هي محركات مطابقة أنماط.

غالبًا ما يكون عرض مثال ذهبي (الإدخال -> الإخراج) أكثر فعالية من التعليمات التفصيلية.

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

يظهر الملف SKILL.md أدناه:

---
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 `<!-- ... -->`.

كيفية تشغيل هذا المثال:

  1. أنشئ ملف Python وهميًا جديدًا: touch my_script.py
  2. النوع: Add the license header to my_script.py
  3. سيقرأ الوكيل license-header-adder/resources/HEADER_TEMPLATE.txt.
  4. سيتم لصق المحتوى تمامًا كما هو في ملفك.

المستوى 3: التعلّم من خلال الأمثلة (json-to-pydantic)

نمط "التلقين ببضع أمثلة"

يتضمّن تحويل البيانات غير المنظَّمة (مثل استجابة JSON API) إلى رمز برمجي صارم (مثل نماذج Pydantic) عشرات القرارات. كيف يجب تسمية الفئات؟ هل يجب استخدام Optional؟ ‫snake_case أو camelCase؟ إنّ كتابة هذه القواعد الخمسين باللغة الإنجليزية أمر مملّ وعُرضة للأخطاء.

النماذج اللغوية الكبيرة هي محركات مطابقة أنماط. غالبًا ما يكون عرض مثال ذهبي (الإدخال -> الإخراج) أكثر فعالية من التعليمات التفصيلية.

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

يظهر الملف SKILL.md أدناه:

---
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`.

في المجلد /examples، يوجد ملف JSON وملف الإخراج، أي ملف Python. يظهر كلاهما أدناه:

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

كيفية تشغيل هذا المثال:

  1. قدِّم للوكيل مقتطفًا من JSON (ألصِقه في المحادثة أو أشر إلى ملف).

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

  1. النوع: Convert this JSON to a Pydantic model
  2. ينظر الوكيل إلى زوج examples في مجلد المهارة.
  3. ينشئ هذا النموذج فئة Python تحاكي تمامًا أسلوب الترميز وعمليات الاستيراد والبنية في output_model.py، بما في ذلك التعامل مع المخزون الفارغ كقيمة اختيارية.

في ما يلي مثال على الناتج (product_model.py):

from pydantic import BaseModel
from typing import Optional

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

المستوى 4: المنطق الإجرائي (database-schema-validator)

هذا هو نمط "استخدام الأدوات".

إذا سألت نموذج لغة كبيرًا "هل هذا المخطط آمن؟"، قد يجيبك بأنّ كل شيء على ما يرام، حتى إذا كان هناك مفتاح أساسي مهم مفقود، وذلك ببساطة لأنّ SQL يبدو صحيحًا.

لنفوّض هذه العملية إلى نص برمجي مستند إلى بيانات محدّدة. نستخدم ميزة "المهارة" لتوجيه الموظف إلى تشغيل نص Python البرمجي الذي كتبناه. يوفّر النص البرمجي قيمة ثنائية (صحيح/خطأ).

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

يظهر الملف SKILL.md أدناه:

---
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.

يظهر الملف validate_schema.py أدناه:

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])

كيفية تشغيل هذا المثال:

  1. إنشاء ملف SQL غير صالح bad_schema.sql: CREATE TABLE users (name TEXT);
  2. النوع: Validate bad_schema.sql
  3. لا يخمن الوكيل الإجابة. سيتم استدعاء النص البرمجي الذي سيتعذّر تنفيذه (رمز الخروج 1)، وسيتم إبلاغنا بأنّ "عملية التحقّق تعذّرت لأنّ الجدول "users" لا يتضمّن مفتاحًا أساسيًا".

المستوى 5: المصمّم (adk-tool-scaffold)

يغطي هذا النمط معظم الميزات المتوفّرة في Skills.

غالبًا ما تتطلّب المهام المعقّدة سلسلة من العمليات التي تجمع كل ما رأيناه: إنشاء الملفات واتّباع النماذج وكتابة التعليمات البرمجية. يتطلّب إنشاء أداة جديدة لحزمة تطوير الوكيل (ADK) كل ما سبق.

نجمع بين:

  • نص برمجي (للتعامل مع إنشاء الملفات/الإنشاء الأساسي)
  • النموذج (للتعامل مع النص الأساسي في الموارد)
  • مثال (للمساعدة في إنشاء المنطق)
adk-tool-scaffold/
├── SKILL.md
├── resources/
   └── ToolTemplate.py.hbs (Jinja2 Template)
├── scripts/
   └── scaffold_tool.py    (Generator Script)
└── examples/
    └── WeatherTool.py      (Reference Implementation)

يظهر ملف SKILL.md أدناه. يمكنك الرجوع إلى مستودع المهارات للاطّلاع على الملفات في مجلد النصوص البرمجية والمراجع والأمثلة. بالنسبة إلى هذه المهارة المحدّدة، انتقِل إلى مهارة 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.

كيفية تشغيل هذا المثال:

  1. النوع: Create a new ADK tool called StockPrice to fetch data from an API
  2. الخطوة 1 (إنشاء البنية الأساسية): ينفّذ الوكيل نص Python البرمجي. يؤدي ذلك إلى إنشاء StockPriceTool.py على الفور مع بنية الصف الصحيحة وعمليات الاستيراد واسم الصف StockPriceTool.
  3. الخطوة 2 (التنفيذ): "يقرأ" الوكيل الملف الذي أنشأه للتو. يمكنه الاطّلاع على # TODO: Implement logic.
  4. الخطوة 3 (إرشادات): لستُ متأكدًا من كيفية تحديد مخطط JSON لوسيطات الأداة. يتحقّق من examples/WeatherTool.py.
  5. الإكمال: يعدّل الملف لإضافة requests.get(...) ويحدّد وسيطة شريط الأخبار في المخطط، مع مطابقة نمط ADK تمامًا.

6. تهانينا

لقد أكملت بنجاح الدرس التطبيقي حول مهارات Antigravity وأنشأت المهارات التالية:

  • أداة تنسيق رسائل Git
  • أداة إضافة عناوين التراخيص
  • تحويل JSON إلى Pydantic
  • مدقّق مخطط قاعدة البيانات
  • إنشاء بنية أساسية لأداة ADK

تُعدّ "مهارات الوكيل" طريقة رائعة للاستفادة من Antigravity في كتابة الرموز البرمجية بالطريقة التي تريدها، واتّباع القواعد، واستخدام أدواتك.

المستندات المرجعية