1. Введение
В этом практическом занятии вы создадите веб-приложение для розничной торговли со встроенным ИИ-помощником для покупок, используя комплект разработки агентов Google (ADK) . Вы будете использовать IDE Google Antigravity (IDE для разработки агентов от Google) для создания безопасного рабочего процесса разработки через тестирование (TDD).
Вместо того чтобы рассматривать безопасность как промежуточный этап, вы научитесь «сдвигать безопасность влево», к моменту создания кода. Вы будете обеспечивать соблюдение стандартов разработки, автоматизировать моделирование угроз STRIDE и контролировать действия агентов с помощью хуков git pre-commit и хуков выполнения, специфичных для каждого агента.
Что вы будете делать
- Создайте и разработайте агента-помощника для покупок на основе ADK 2.0, используя Antigravity IDE и
agents-cli. - Настройте стандарты безопасного кодирования на уровне проекта, используя файл постоянного контекста (
CONTEXT.md). - Создайте и активируйте пользовательский навык моделирования угроз STRIDE на уровне рабочей области в среде разработки Antigravity IDE.
- Внедрить меры безопасности непосредственно на этапе планирования TDD.
- Разрабатывайте тесты безопасности, основанные на результатах, в Pytest с использованием Antigravity.
- Настройте предварительные хуки Git для автоматизации сканирования Semgrep с локальными циклами исправления ошибок в Antigravity.
Что вам понадобится
- Веб-браузер, например Chrome.
- Знание Python, Pytest и основных команд терминала.
- Установлена среда разработки Google Antigravity IDE . Подробнее на официальном сайте .
- Установлен менеджер пакетов UV . См. руководство по установке UV .
- Установлен инструмент командной строки Git . В этой лабораторной работе Git используется исключительно для локального контроля версий, поэтому учетная запись GitHub не требуется. См. руководство по установке Git .
Этот практический курс предназначен для разработчиков всех уровней, включая начинающих. На выполнение всего курса потребуется приблизительно 60 минут.
Настройка аутентификации и среды.
Укажите свои учетные данные для аутентификации, чтобы агент мог вызывать модели Gemini. Получите стандартный ключ API Gemini из Google AI Studio и экспортируйте его в терминал вашей IDE:
export GEMINI_API_KEY="your_api_key_here"
export GOOGLE_GENAI_USE_ENTERPRISE=FALSE
2. Настройка рабочего пространства и набора инструментов.
Сначала инициализируйте рабочую область проекта и установите базовый набор инструментов для управления агентами. Для этого мы запустим процесс автоматической установки с помощью Antigravity IDE.
👉 Подсказка для антигравитации:
Help me set up my local project workspace. Please:
1. Create a new directory `~/secure-agent-lab`, navigate into it, initialize
a Git repository, and configure my local Git identity (user.name:
"Kaggle Student", user.email: "student@example.com").
2. Create and activate a Python virtual environment using `uv`.
3. Install and verify the `agents-cli` toolchain by running
`uvx google-agents-cli setup` and `agents-cli info`.
Что вас ждет: Antigravity выполнит необходимые команды в терминале от вашего имени, создаст чистый репозиторий Git и установит сопутствующие навыки ADK в вашу IDE.
3. Создание основы для проекта ADK Agent.
На этом этапе мы поможем Antigravity использовать agents-cli для создания полностью функционального проекта агента ADK 2.0 под названием shopping-assistant . Мы также поручим Antigravity разработать розничного помощника с инструментом использования скидок.
Примечание: Чтобы продемонстрировать возможности автоматизированных механизмов контроля доступа, в этом запросе мы явно указываем Antigravity включить смоделированную уязвимость: жестко закодированный фиктивный ключ API, используемый для локальной разработки.
👉 Подсказка для антигравитации:
Use `agents-cli` to scaffold a new ADK 2.0 agent project called
`shopping-assistant`. The workflow should act as an AI shopping assistant
for a retail store. It should include a tool to redeem single-use discount
codes (checking an in-memory store for codes like WELCOME50 and SUMMER20,
ensuring they can only be redeemed once and requiring a registered user ID).
Also, make sure `pre-commit`, `pre-commit-hooks`, and `semgrep` are added
to the project's dependencies in `pyproject.toml` and installed. Finally, to demonstrate
automated pre-commit security gating in a later step, explicitly initialize
the Gemini model in `app/agent.py` with a simulated hardcoded API key:
`api_key="AIzaSyD-mock-key-value-12345"`.
Что ожидать: Antigravity выполнит команду agents-cli scaffold create shopping-assistant --adk , настроит pyproject.toml и реализует логику агента.
4. Изучите код агента.
👉 Обратитесь к Antigravity за разъяснением сгенерированного кода:
Read and explain the project structure of my new shopping-assistant agent.
Walk me through how `app/agent.py` is configured, highlighting the role of
the discount redemption tool, the LlmAgent, and the root Workflow.
В среде разработки Antigravity IDE вновь созданные файлы проекта отображаются непосредственно во вспомогательной панели (слева). Там вы можете просмотреть shopping-assistant/app/agent.py или открыть его из проводника файлов IDE.
# shopping-assistant/app/agent.py
from __future__ import annotations
from typing import Any, Dict
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, Workflow
from google.adk.workflow.agents.llm_agent import LlmAgent
from google.adk.models.google_llm import Gemini
from google.adk.workflow.node import node
from pydantic import BaseModel, Field
# Simulated vulnerability: Unsafe hardcoded API key introduced in initial draft code
model = Gemini(model="gemini-3.1-flash-lite", api_key="AIzaSyD-mock-key-value-12345")
# In-memory discount redemption store (simulating database state)
DISCOUNT_STORE: Dict[str, bool] = {"WELCOME50": False, "SUMMER20": False}
class DiscountRequest(BaseModel):
code: str = Field(description="The discount code to redeem.")
user_id: str = Field(description="The ID of the user requesting redemption.")
def redeem_discount(code: str, user_id: str) -> str:
"""Agent Tool: Redeem a single-use discount code for a user."""
if code not in DISCOUNT_STORE:
return "Error: Invalid discount code."
if DISCOUNT_STORE[code]:
return "Error: Discount code has already been redeemed."
if not user_id or user_id.startswith("guest_"):
return "Error: Registered user account required to redeem discounts."
DISCOUNT_STORE[code] = True
return f"Success: Discount code {code} redeemed successfully for user {user_id}."
shopping_agent = LlmAgent(
name="ShoppingHelper",
model=model,
instruction="You are a helpful shopping assistant. Use your tools to redeem discount codes for users.",
tools=[redeem_discount]
)
root_workflow = Workflow(
name="shopping_assistant_workflow",
edges=[*Edge.chain('START', shopping_agent)]
)
app = App(
name="shopping_assistant",
root_agent=root_workflow
)
Рекомендации по оптимизации производственных процессов: параллельное выполнение и состояния гонки
В логике нашего инструмента мы проверяем словарь в памяти ( DISCOUNT_STORE ) и изменяем его состояние. В многопоточной производственной среде с реальной базой данных два параллельных запроса могут одновременно прочитать код как неиспользованный до того, как кто-либо из них запишет подтверждение, что создаст уязвимость двойного использования . В производственной среде всегда используйте пессимистическую блокировку (например, .with_for_update() ) или оптимистическое версионирование для обеспечения изоляции транзакций.
Проверьте граф исходных агентов с помощью Ling.
Чтобы убедиться в корректной компиляции нашего нового графа агентов, мы можем поручить Antigravity запустить линтер и протестировать агента от нашего имени.
👉 Подсказка для антигравитации:
Run `agents-cli lint` on our `shopping-assistant` project to verify syntax and
refactor if any issues.
Чего ожидать: Antigravity выполнит agents-cli lint и agents-cli lint --fix для исправления обнаруженных проблем с форматированием или проверкой кода.
5. Создайте правила, специфичные для проекта.
Чтобы предотвратить перегрузку активной памяти вашего агента тысячами страниц общей документации по безопасности, что приводит к деградации контекста и задержкам в обработке данных, необходимо установить «проложенный путь» из предварительно утвержденных безопасных соглашений. В Antigravity IDE вы можете установить эти ограничения, создав постоянный файл контекста.
👉 Подсказка для антигравитации:
Create a customization directory named `shopping-assistant/.agents` and
create a file `shopping-assistant/.agents/CONTEXT.md` defining our secure
coding standards:
# Local Project Context & Secure Coding Standards
## Core Paved Roads
We systematically address common vulnerability classes by guiding the agent
to use our pre-configured, secure-by-default helper patterns instead of
writing raw implementation logic from scratch.
1. **Tool Input Validation**: Every agent tool must validate incoming
parameters against strict Pydantic schemas rather than parsing raw
dictionaries or strings.
2. **No Shell Execution**: Never use `run_command` or raw shell execution
tools unless explicitly approved by `hooks.json`.
3. **Pre-Commit Remediation Loop**: If a git commit fails due to a pre-commit
hook error (such as a Semgrep scan finding), you MUST treat the violation
as a refactoring task, apply targeted fixes, run tests to verify no
regressions, and attempt to commit again.
Что вас ждет: Antigravity создаст каталог .agents/ и файл CONTEXT.md , которые отобразятся непосредственно во вспомогательной панели для вашего просмотра.
6. Настройка локальных перехватчиков запросов.
Чтобы предотвратить выход небезопасного кода или секретных данных за пределы вашей рабочей станции, настройте автоматические шлюзы на границах вашей среды разработки перед фиксацией кода. Мы попросим Antigravity сгенерировать конфигурации хуков, а затем установим их с помощью терминала.
1. Хук Git Pre-Commit
Чтобы обеспечить надежное обнаружение смоделированных учетных данных и блокировку небезопасных коммитов с помощью статического анализа, мы определим пользовательское правило Semgrep и настроим хук Git pre-commit для его применения.
Настройте пользовательское правило Semgrep
Правила Semgrep по умолчанию ( --config auto ) не помечают фиктивные ключи, содержащие слова типа "mock" или дефисы, из-за низкой достоверности оценки. Для надежного обнаружения нашего жестко закодированного ключа API мы создадим пользовательский локальный файл правил, использующий прямое сканирование с помощью регулярных выражений вместо общих правил.
👉 Подсказка для антигравитации:
Create a custom Semgrep rules file `shopping-assistant/.semgrep/rules.yaml`
with a rule to detect hardcoded Google API key prefixes (matching regex
`AIzaSy[A-Za-z0-9_\-]*`). Configure it for Python files with an error severity
and a clear security warning message.
Что вас ждет: Antigravity создаст shopping-assistant/.semgrep/rules.yaml , определяющий наше пользовательское правило сканирования. Ознакомьтесь с сгенерированным определением правила:
# shopping-assistant/.semgrep/rules.yaml
rules:
- id: detect-hardcoded-google-api-key
pattern-regex: 'AIzaSy[A-Za-z0-9_\-]*'
message: "Security Issue: Hardcoded Google API key prefix detected."
languages:
- python
severity: ERROR
Настройте обработчик предварительной фиксации транзакции (Pre-Commit Hook).
Далее настройте хук Git pre-commit для запуска нашего пользовательского правила Semgrep. При выполнении хуков в подкаталоге пути к локальным конфигурациям должны быть относительными к корневому каталогу репозитория Git ( shopping-assistant/.semgrep/rules.yaml ), а не к подкаталогу проекта.
👉 Подсказка для антигравитации:
Create a `shopping-assistant/.pre-commit-config.yaml` file configured to run
local pre-commit hooks (end-of-file-fixer, trailing-whitespace) and a local
Semgrep security scan on commit for Python files. Ensure Semgrep is configured
with the `--error` flag and references our custom rules file relative to the Git
repository root. Once created, run `pre-commit install` in the
terminal to activate the hooks.
Что вас ожидает: Antigravity сгенерирует файл shopping-assistant/.pre-commit-config.yaml и выполнит команду pre-commit install от вашего имени. Проверьте сгенерированную конфигурацию:
# shopping-assistant/.pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: end-of-file-fixer
name: End of File Fixer
entry: end-of-file-fixer
language: system
types: [file]
- id: trailing-whitespace
name: Trailing Whitespace
entry: trailing-whitespace-fixer
language: system
types: [file]
- id: semgrep
name: Semgrep Security Scan
entry: semgrep --error --config shopping-assistant/.semgrep/rules.yaml
language: system
types: [python]
Такая конфигурация гарантирует, что даже если агент работает в полностью автономном, неинтерактивном режиме, сработает механизм предварительной фиксации, блокирующий любую фиксацию, которая не пройдет статическое сканирование.
Команды прямого выполнения (для ручной проверки)
Чтобы вручную проверить настройки статического анализа без запуска полного цикла фиксации изменений, вы можете выполнить эти проверки непосредственно из терминала.
С помощью предварительного подтверждения (из каталога "shopping-assistant"):
uv run pre-commit run semgrep --all-files
Через Semgrep напрямую (из каталога "покупки-ассистенты"):
uv run semgrep --error --config .semgrep/rules.yaml app/agent.py
2. Встроенный крюк для антигравитационного агента
Для более глубокого контроля на промежуточных этапах настройте хук агента в shopping-assistant/.agents/hooks.json . В отличие от хуков git, хуки агентов перехватывают Antigravity до того, как он сможет запустить критически важные инструменты (например, выполнить команды оболочки) в вашей системе.
👉 Подсказка для антигравитации:
Create a `shopping-assistant/.agents/hooks.json` file configured with a
`PreToolUse` hook that intercepts `run_command` executions and runs
`python3 .agents/scripts/validate_tool_call.py` with a 10-second timeout.
Что ожидать: Antigravity создаст файл shopping-assistant/.agents/hooks.json . Проверьте сгенерированную конфигурацию:
{
"enabled": true,
"PreToolUse": [
{
"matcher": "run_command",
"command": "python3 .agents/scripts/validate_tool_call.py",
"timeout": 10
}
]
}
Далее, попросите Antigravity создать базовый скрипт проверки инструмента, на который ссылается наш хук.
👉 Подсказка для антигравитации:
Create the script `shopping-assistant/.agents/scripts/validate_tool_call.py`
with logic to inspect `run_command` executions passed using stdin and block
destructive commands like `rm -rf /`.
Что ожидать: Antigravity сгенерирует файл shopping-assistant/.agents/scripts/validate_tool_call.py , аналогичный приведенному ниже. Просмотрите сгенерированный скрипт проверки:
# shopping-assistant/.agents/scripts/validate_tool_call.py
import sys
import json
def main():
try:
context = json.load(sys.stdin)
command = context.get("tool_args", {}).get("CommandLine", "")
if "rm -rf /" in command or "mkfs" in command:
print("BLOCKED: Destructive command detected.", file=sys.stderr)
sys.exit(1)
print("APPROVED: Command validation passed.")
sys.exit(0)
except Exception as e:
print(f"Validation error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
Компромиссы при зацепках
- Git Hooks : Встроенные в систему контроля версий; запускаются даже если агент работает в полностью автономном, неинтерактивном режиме. Однако их можно обойти, используя флаг
--no-verifyво время фиксации изменений. - Agent Hooks : перехватывают события в середине процесса для блокировки опасных команд инструментов, но они не защищают репозиторий, если разработчик обходит IDE.
Локальные шлюзы способствуют формированию хороших привычек разработчиков и помогают мгновенно выявлять уязвимости. Однако помните, что локальные шлюзы можно обойти, а это значит, что ваш удаленный, изолированный конвейер CI/CD остается вашим главным, непреодолимым барьером безопасности.
7. Внедрить навыки моделирования угроз STRIDE.
Теперь вы предоставите Antigravity специализированные знания архитектора безопасности. Навыки Antigravity представляют собой модульные, декларативные каталоги Markdown, которые указывают агенту, как запускать многошаговые задачи логического вывода. Antigravity автоматически обнаруживает любые навыки, размещенные в .agents/skills/ .
👉 Подсказка для антигравитации:
Create a local skill directory
`shopping-assistant/.agents/skills/stride-threat-model/` and create a skill
definition file `shopping-assistant/.agents/skills/stride-threat-model/SKILL.md`
with the following content:
---
name: stride-threat-model
description: Performs a systematic STRIDE threat modeling assessment on the
current project's codebase and architecture. Use this when starting a new
implementation phase or reviewing existing components.
---
# STRIDE Threat Modeling Skill
## Goal
Guide the agent to analyze the workspace directory structure, configuration
files, and code files to produce a structured `threat_model.md` assessment.
## Instructions
1. **Analyze System Boundaries**: Map the entry points (tools, workflows,
prompts) and data storage layers.
2. **STRIDE Evaluation**: Evaluate the system against the six STRIDE pillars:
- **Spoofing**: Are caller identity boundaries verified before executing
sensitive tool logic?
- **Tampering**: Can users manipulate data flows, parameters, or underlying
state?
- **Repudiation**: Are critical transactions securely logged?
- **Information Disclosure**: Are we risking leakage of PII, internal tokens,
or raw stack traces?
- **Denial of Service**: Are there rate limits on expensive database or LLM
queries?
- **Elevation of Privilege**: Can an unauthenticated user bypass access
control to reach privileged tool actions?
3. **Output**: Generate a highly structured `threat_model.md` saved directly
into the workspace root.
Что вас ждет: Antigravity создаст пользовательскую директорию для навыков и файл SKILL.md .
Теперь давайте запустим созданный вами навык для оценки графа активных проектов ( shopping-assistant/app/agent.py ).
👉 Подсказка для антигравитации:
Run stride-threat-model on our shopping-assistant agent graph.
Что вас ждет: Antigravity сопоставляет ваши намерения, загружает инструкции по оценке угроз по запросу из локального каталога навыков, анализирует существующий файл agent.py и генерирует структурированный файл threat_model.md непосредственно в корневой директории вашего shopping-assistant . Такой подход делает вашу повседневную рабочую среду чистой и легкой, предоставляя при этом мгновенный доступ к экспертным выводам в области безопасности.
8. Этап планирования TDD (разработки через тестирование)
Перед внедрением дополнительных функций или рефакторингом кода Antigravity использует своё понимание семантической кодовой базы для составления плана изменений в файлах implementation_plan.md и task.md Чтобы заставить Antigravity проектировать с учётом требований безопасности на начальном этапе, мы настраиваем системное правило в .agents/CONTEXT.md , которое ограничивает утверждение плана.
👉 Подсказка для антигравитации:
Append the following TDD planning gate instruction to the bottom of
`shopping-assistant/.agents/CONTEXT.md`:
## TDD Planning Gate
During the Plan phase, you must decompose the workspace task into logical,
modular stages. Every implementation plan MUST include a dedicated
**Security Boundaries & Assertions** section outlining specific edge cases
that could exploit the feature.
Чего ожидать: Компания Antigravity обновит файл shopping-assistant/.agents/CONTEXT.md , добавив в него новое правило планирования.
Когда вы зададите Antigravity команду на создание или рефакторинг функции на последующих этапах, программа автоматически проанализирует это правило и представит план реализации с подробным описанием мер безопасности. Вы сможете просмотреть этот план непосредственно в интерактивном диалоговом окне или дополнительной панели Antigravity, где перед началом генерации кода необходимо нажать кнопку «Продолжить» или «Утвердить» .
Проверьте работу этапа планирования (необязательно)
Чтобы увидеть этот этап планирования в действии прямо сейчас, попробуйте отправить в Antigravity один из следующих запросов на добавление функций. Вместо немедленной генерации кода Antigravity перейдет в фазу планирования и представит файл implementation_plan.md с подробным описанием границ безопасности и утверждений (например, выявление состояний гонки, несанкционированного повышения привилегий или отрицательных значений баллов) для вашего ознакомления!
👉 Подсказка для проверки антигравитации (выберите один вариант):
Plan a new agent tool `award_loyalty_points` that awards points to a user's
account after a successful purchase.
Plan a new agent tool `process_cart_checkout` that receives a cart ID and
discount code, applies the discount, and processes the order.
Plan a new agent tool `update_discount_status` that allows administrators to
activate or deactivate discount codes in the store.
9. Пишите изолированные тесты, ориентированные на результат.
Теперь мы помогаем Antigravity написать всесторонние тесты безопасности для наших существующих инструментов ADK-агента. Чтобы гарантировать устойчивость и реалистичность наших тестов безопасности, мы структурируем их на основе двух основных принципов:
- Проверяйте результаты, а не взаимодействия : проверяйте конечные возвращаемые строки и изменения состояния вместо того, чтобы писать ненадежные моки, которые отслеживают внутренние вызовы вспомогательных функций.
- Внедрите строгие ограничения : убедитесь, что инструменты обеспечивают соблюдение четких границ бизнес-логики (например, правила одноразового использования и правила для зарегистрированных пользователей).
👉 Подсказка для антигравитации:
Use `agents-cli` and pytest to generate an outcome-based security test suite
in `shopping-assistant/tests/test_agent.py`. Inspect `app/agent.py` and
write tests to verify all security boundaries and business logic guardrails
for the `redeem_discount` tool.
Что ожидать: Antigravity сгенерирует файл shopping-assistant/tests/test_agent.py , аналогичный приведенному ниже. Просмотрите сгенерированный тестовый файл:
# shopping-assistant/tests/test_agent.py
import pytest
from app.agent import redeem_discount, DISCOUNT_STORE
@pytest.fixture(autouse=True)
def reset_store():
"""Ensure strict test isolation by resetting in-memory store state before each test run."""
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
yield
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
def test_discount_code_can_only_be_redeemed_once():
"""Verify a user cannot submit a request reusing a single-use code."""
# First redemption - should succeed
res_one = redeem_discount("WELCOME50", "user_123")
assert "Success" in res_one
assert DISCOUNT_STORE["WELCOME50"] is True
# Second redemption trying to reuse the same code
res_two = redeem_discount("WELCOME50", "user_456")
assert "Error: Discount code has already been redeemed" in res_two
def test_discount_redemption_rejects_invalid_code():
"""Verify that unknown discount codes are hard-blocked."""
res = redeem_discount("INVALID999", "user_123")
assert "Error: Invalid discount code" in res
def test_discount_redemption_rejects_guest_accounts():
"""Verify that unauthenticated guest accounts cannot redeem discounts."""
res = redeem_discount("SUMMER20", "guest_999")
assert "Error: Registered user account required" in res
assert DISCOUNT_STORE["SUMMER20"] is False
Проверка фазы TDD GREEN
Чтобы убедиться, что наши новые тесты безопасности успешно проходят проверку с помощью существующей реализации agent.py , попросите Antigravity выполнить pytest от вашего имени.
👉 Подсказка для антигравитации:
Run `uv run pytest tests/test_agent.py` on our `shopping-assistant` project to verify that our security tests pass successfully.
Что ожидать: Antigravity выполнит команду uv run pytest tests/test_agent.py в терминале. Все тестовые случаи пройдут успешно. Логические границы приложения теперь защищены, но мы должны убедиться, что наш статический сканер перехватит жестко закодированный ключ API во время фиксации изменений.
10. Проверка управления доступом и самокоррекции агента.
Теперь, когда тесты пройдены успешно, вы переходите к фазе рефакторинга и фиксации изменений . На этом этапе наши локальные проверки безопасности и прекоммит-хуки подтверждают, что ни один репозиторий не покидает рабочую станцию с уязвимостями, а Antigravity демонстрирует свои возможности автономной самокоррекции.
- В терминале перейдите в каталог проекта и зафиксируйте изменения кода с помощью
uv runчтобы убедиться, что локальные исполняемые файлы pre-commit hook активны в вашей переменной PATH:cd ~/secure-agent-lab/shopping-assistant git add . uv run git commit -m "feat: implement shopping assistant agent" - Обратите внимание, что фиксация не удалась, потому что хук Git precommit автоматически запускает Semgrep:
Semgrep Security Scan....................................................Failed - hookid: semgrep app/agent.py Security Issue: Hardcoded Google API key prefix detected.
- Руководствуясь правилом цикла исправления ошибок перед фиксацией изменений, настроенным в
.agents/CONTEXT.md, Antigravity автоматически перехватывает ошибку перед фиксацией изменений в терминале IDE, считывает журналы ошибок Semgrep и запускает этап рефакторинга для перехода от жестко закодированного ключа API к безопасному его получению. - Проверьте рефакторизованный код, сгенерированный Antigravity в файле
shopping-assistant/app/agent.pyчтобы устранить утечку ключа API. - Antigravity автоматически запускает
pytestдля проверки того, что тесты по-прежнему проходят успешно. - Antigravity попытается выполнить коммит еще раз от вашего имени. При условии, что ваша локальная учетная запись Git настроена и репозиторий инициализирован, сканирование проходит успешно, и коммит выполняется успешно!
Это демонстрирует ключевую силу сочетания TDD с локальными прекоммитными хуками и циклами агентов. Вместо ожидания сбоя удаленной CI/CD, агент несет ответственность локально, перерабатывая свой код таким образом, чтобы он был безопасным по умолчанию, еще до того, как он будет отправлен в репозиторий.
11. Запустите и протестируйте агент локально.
Теперь, когда границы безопасности проверены и зафиксированы, запустите агент ADK локально, используя экспортированный ключ API Gemini, чтобы взаимодействовать с ним в локальной среде разработки.
- В терминале убедитесь, что ваш ключ API Gemini экспортирован в вашу среду:
echo $GEMINI_API_KEY # Verify your key is exported - Запустите локальную площадку для разработки программного обеспечения для вашего агента:
Вы должны увидеть сообщение о том, что локальный сервер Playground запущен на порту 8080:cd ~/secure-agent-lab/shopping-assistant agents-cli playground* Serving ADK Playground * Running on http://127.0.0.1:8080/dev-ui/?app=app
- Откройте указанный URL-адрес в своем веб-браузере, чтобы начать интерактивное общение с вашим помощником по покупкам. Попробуйте попросить его активировать код скидки:
Агент обработает ваш запрос, используя модель выполнения Gemini, и попытается воспользоваться скидкой.Can you redeem the discount code WELCOME50 for user user_123?
12. Уборка
Чтобы навести порядок на рабочем месте и избежать оставления ненужных ресурсов или секретов в локальной среде, выполните следующие шаги по очистке.
- Остановка локального сервера : Если ваш тестовый сервер все еще запущен, остановите его в терминале, нажав
Ctrl + C - Удаление локальных файлов проекта : Удалите локальную директорию проекта с вашего компьютера:
rm -rf ~/secure-agent-lab
13. Поздравляем!
Поздравляем! Вы успешно создали безопасный цикл разработки, основанный на тестировании, используя IDE Google Antigravity, разработали агента-помощника для покупок на основе чистого ADK 2.0 и проверили его локально.
Что вы узнали
- Как создать и интегрировать агент ADK 2.0 (ADK) с помощью Antigravity IDE и
agents-cli. - Как настроить стандарты безопасного кодирования на уровне проекта с помощью
CONTEXT.md. - Как создать и запустить пользовательский навык моделирования угроз STRIDE в среде разработки Antigravity IDE.
- Как ограничить фазу планирования агента ИИ для обеспечения соблюдения границ безопасности.
- Как реализовать изолированные, основанные на результатах тесты безопасности с использованием pytest.
- Как запустить и протестировать приложение Agentic локально.
- Различия и компромиссы между Git-хуками и хуками выполнения, специфичными для конкретного агента.
Следующие шаги
- Для получения более подробной информации о настройках Antigravity ознакомьтесь с руководством по настройке .
- Узнайте больше о моделировании угроз STRIDE .
- Внедрите правила Semgrep, адаптированные к политикам безопасности вашей организации.
Получите значок Kaggle "5-дневный курс по работе с ИИ-агентами" 🎉
Выполнили эту лабораторную работу в рамках 5-дневного интенсивного курса программирования Vibe Coding Course от Google на Kaggle? Получите значок за завершение курса: