
Что сделать: поднять изолированный стенд, куда модель будет писать патчи, и зафиксировать базовую линию тестов.
Зачем: аудит без изолированной ветки и без «зелёного» прогона тестов до начала работы не даёт отличить поломку от находки. Если тесты падали до аудита, вы не поймёте, что сломал патч модели.
Как проверить: тесты зелёные, ветка создана, ключи лежат в .env, который не попадёт в git.
git clone <ваш-репозиторий> audit-stand && cd audit-stand
git switch -c ai-audit/run-01
mkdir -p .aisec/reports
pytest -q | tail -3
# ожидаемый вывод: 12 passed in 4.31s
Чек-лист перед первым запросом к модели:
python3 -V)jq и curl доступны (jq --version).env добавлен в .gitignorecat > .env <<'EOF'
AISEC_API_KEY=<ваш-api-ключ>
AISEC_BASE_URL=<базовый-url-api>
MODEL_ID=<model-id>
EOF
grep -q '^\.env$' .gitignore || echo '.env' >> .gitignore
set -a; . ./.env; set +a
echo "$MODEL_ID"
<model-id> — идентификатор модели из консоли провайдера: для Gemini 4 Carbon и для GPT-6 Astra он разный, точное значение сверьте с документацией. <базовый-url-api> — endpoint оттуда же. set -a экспортирует переменные из файла в окружение, поэтому они видны curl без ручного export.
Пример: объём аудита ограничиваем списком файлов, иначе прогон по всему репозиторию упрётся в квоту:
git ls-files '*.py' | head -20 > .aisec/scope.txt
wc -l < .aisec/scope.txt
# ожидаемый вывод: 20
Если у вас пока нет выстроенного процесса вокруг ИИ-помощников, начните с обзора ИИ для программистов: помощники для кода в 2026 — там разобрано, чем ассистент в редакторе отличается от отдельной модели для аудита.
| Критерий | Gemini 4 Carbon | GPT-6 Astra |
|---|---|---|
| Профиль | Один профиль — безопасность: найти, подтвердить, отремонтировать | Профиль в аудите безопасности в наших постах не описан — сверьтесь с документацией |
| Обнаружение уязвимости | Google отчиталась о преимуществе в этой проверке | Замеров в постах нет |
| Подтверждение эксплуатируемости | Заявлено как отдельный навык модели | Замеров в постах нет |
| Ремонт кода | Заявлено: пишет патч | Замеров в постах нет |
| Доступ | «В открытую розницу не выкидывают» — условия сверяйте с документацией | Контекст по модели — в [гайде по GPT-6 Astra](https://ai-release.org/guides/gpt-6-astra-ili-gpt-6-1-sol-chto-vybrat-dlya-raboty-cha.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide) |
| Цена | В наших постах не публиковалась | В наших постах не публиковалась |
Контекст релиза: две недели назад Google расширяла доступ к Gemini 4 Argon для платящих пользователей и разработчиков — это отдельная модель, не путайте её с Carbon. Carbon выходит вне открытой розницы, поэтому первым шагом проверяйте, что у вашего аккаунта вообще есть доступ к нужному <model-id>.

Что сделать: разбить аудит на три отдельных вызова модели — обнаружение, подтверждение, патч. Формат ответа задаётся JSON-схемой.
Зачем: смешивать стадии в одном запросе нельзя. Находка без воспроизведения — это гипотеза, а патч без подтверждённой находки ломает код на ровном месте. Три стадии дают три разных артефакта, каждый из которых проверяется отдельно.
Как проверить: на выходе каждой стадии появляется валидный JSON, а команда воспроизведения реально падает на уязвимом коде.
Схема находки, на которую опираемся:
{
"findings": [
{
"id": "F-001",
"file": "app/api/orders.py",
"line": 42,
"cwe": "CWE-639",
"severity": "high",
"claim": "GET /orders/<id> не проверяет tenant_id",
"repro": "pytest tests/test_authz.py::test_tenant_isolation",
"patch_diff": "<унифицированный diff>"
}
]
}
Стадия 1 — обнаружение:
FILE=app/api/orders.py
jq -n --arg model "$MODEL_ID" --rawfile code "$FILE" '{
model: $model,
temperature: 0,
response_format: {type: "json_object"},
messages: [
{role: "system", content: "Ты аудитор безопасности. Верни только JSON: findings[] с полями id, file, line, cwe, severity, claim, repro, patch_diff. Если уязвимостей нет — findings: []."},
{role: "user", content: ("Файл: " + $code)}
]
}' > .aisec/request.json
curl -sS "$AISEC_BASE_URL" \
-H "Authorization: Bearer $AISEC_API_KEY" \
-H "Content-Type: application/json" \
--data @.aisec/request.json \
| jq -r '.choices[0].message.content' > .aisec/reports/F-orders.raw.json
jq -e '.findings | length' .aisec/reports/F-orders.raw.json
# ожидаемый вывод: 2
Поля messages/choices — конверт OpenAI-совместимого API; если у вашего провайдера другой формат ответа, сверьтесь с документацией и поправьте jq-путь. temperature: 0 убирает разброс между прогонами, иначе один и тот же файл даёт разные находки.
Стадия 2 — подтверждение. Команда repro должна падать на уязвимом коде: упавший тест и есть доказательство, что дыра рабочая.
for t in $(jq -r '.findings[].repro' .aisec/reports/*.raw.json | sort -u); do
if $t >/dev/null 2>&1; then echo "NOT CONFIRMED: $t"; else echo "CONFIRMED: $t"; fi
done
# ожидаемый вывод:
# CONFIRMED: pytest tests/test_authz.py::test_tenant_isolation
# NOT CONFIRMED: pytest tests/test_orders.py::test_total
Стадия 3 — патч только по подтверждённым находкам:
jq -r '.findings[] | select(.severity=="high") | .patch_diff' .aisec/reports/*.raw.json > .aisec/patches.diff
git apply --check .aisec/patches.diff && git apply .aisec/patches.diff
pytest -q
git apply --check сначала проверяет применимость diff без изменения файлов — это дешевле, чем откатывать наполовину применённый патч.

Что сделать: собрать сводку по всем отчётам и прогнать приёмочный чек-лист.
Зачем: «модель что-то нашла» — не результат. Результат — таблица находок, где у каждой есть файл, строка, CWE и воспроизведение, а после патчей тесты снова зелёные.
Как проверить: сводка по severity и git diff --stat совпадают с ожиданиями, полный прогон тестов проходит.
jq -s '[.[].findings[]] | group_by(.severity) | map({severity: .[0].severity, n: length})' .aisec/reports/*.raw.json
# ожидаемый вывод: [{"severity":"high","n":2},{"severity":"medium","n":3}]
git diff --stat
# ожидаемый вывод: app/api/orders.py | 14 ++++++----
Приёмочный чек-лист прогона:
file, line, cwe, reprorepro падал до патча и проходит послеpytest -q после патчей зелёныйNOT CONFIRMED помечены как ложноположительные и не патчилисьpatch_difftime прогона записан — он понадобится для сравнения Carbon и GPT-6 Astra на вашем кодеПример: успех выглядит так — сводка high: 2, оба repro в статусе CONFIRMED, после git apply строка 12 passed.
Проблема. Модель вернула прозу вместо JSON
jq: error (at <stdin>:0): Cannot index string with numbertemperature: 0 и response_format: {"type": "json_object"}, проверить результат перед разбором:jq -e . .aisec/reports/F-orders.raw.json >/dev/null && echo OK
Проблема. Прогон упирается в квоту на середине репозитория
{"error":{"code":429,"message":"Resource has been exhausted (e.g. check quota).","status":"RESOURCE_EXHAUSTED"}}cat .aisec/scope.txt | xargs -P 2 -I{} bash -c 'sleep 2; ./audit_one.sh {}'
Если 429 повторяется — проверьте квоту в консоли провайдера, лимиты сверьте с документацией.
Проблема. Патч не применяется
error: patch failed: app/api/orders.py:42 / error: app/api/orders.py: patch does not applygit show HEAD:app/api/orders.py > /tmp/current.py
git apply -3 .aisec/patches.diff
git diff --stat
Для аудита безопасности кода берите Gemini 4 Carbon, если у вашего аккаунта есть к нему доступ: это единственная модель в наших материалах с заявленным циклом «найти → подтвердить → написать патч». GPT-6 Astra проверяйте тем же стендом и сравнивайте по числу подтверждённых находок, а не по описаниям.
Gemini 4 Carbon — это режим Gemini 4 или отдельная модель?
Отдельная модель с одним профилем — безопасность. Google описывает её как инструмент, который находит уязвимость, подтверждает её эксплуатируемость и пишет патч, а не как «модель умнее в чате».
GPT-6 Astra находит уязвимости лучше, чем Gemini 4 Carbon?
В наших постах нет ни одного замера GPT-6 Astra по аудиту безопасности. Google отчиталась о преимуществе Carbon в трёх проверках, но состав участников сравнения и цифры не приводятся, поэтому вопрос решается только собственным прогоном на вашем репозитории.
Можно ли купить Gemini 4 Carbon в открытой продаже?
По нашему посту — нет, версию «в открытую розницу не выкидывают». Каналы доступа и условия использования сверьте с документацией Google.
Сколько стоит прогон аудита на Carbon или GPT-6 Astra?
Цены обеих моделей в наших материалах не публиковались — сверьтесь с документацией провайдера и задайте лимит расходов в консоли до запуска.