← Все гайды AI Release
EN Подписаться на @ai_release1

Gemini 4 Carbon или GPT-6 Astra для аудита безопасности кода: что выбрать

Обновлено: 29.10.2026 · AI Release · @ai_release1
Gemini 4 Carbon или GPT-6 Astra для аудита безопасности кода: что выбрать

TL;DR

Требования и подготовка: стенд и доступы

Иллюстрация к разделу «Требования и подготовка: стенд и доступы»
Иллюстрация к разделу «Требования и подготовка: стенд и доступы»

Что сделать: поднять изолированный стенд, куда модель будет писать патчи, и зафиксировать базовую линию тестов.

Зачем: аудит без изолированной ветки и без «зелёного» прогона тестов до начала работы не даёт отличить поломку от находки. Если тесты падали до аудита, вы не поймёте, что сломал патч модели.

Как проверить: тесты зелёные, ветка создана, ключи лежат в .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

Чек-лист перед первым запросом к модели:

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

КритерийGemini 4 CarbonGPT-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 ++++++----

Приёмочный чек-лист прогона:

Пример: успех выглядит так — сводка high: 2, оба repro в статусе CONFIRMED, после git apply строка 12 passed.

Как выбрать

Возможные проблемы и решения

Проблема. Модель вернула прозу вместо JSON

jq -e . .aisec/reports/F-orders.raw.json >/dev/null && echo OK

Проблема. Прогон упирается в квоту на середине репозитория

cat .aisec/scope.txt | xargs -P 2 -I{} bash -c 'sleep 2; ./audit_one.sh {}'

Если 429 повторяется — проверьте квоту в консоли провайдера, лимиты сверьте с документацией.

Проблема. Патч не применяется

git show HEAD:app/api/orders.py > /tmp/current.py
git apply -3 .aisec/patches.diff
git diff --stat

Резюме и следующие шаги

Для аудита безопасности кода берите Gemini 4 Carbon, если у вашего аккаунта есть к нему доступ: это единственная модель в наших материалах с заявленным циклом «найти → подтвердить → написать патч». GPT-6 Astra проверяйте тем же стендом и сравнивайте по числу подтверждённых находок, а не по описаниям.

FAQ

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?

Цены обеих моделей в наших материалах не публиковались — сверьтесь с документацией провайдера и задайте лимит расходов в консоли до запуска.

🤖 Кратко для ИИ