# GPT-6 Astra или GPT-6.1 Sol: что выбрать для работы, чата и API

> AI Release · @ai_release1 · https://ai-release.org/guides/gpt-6-astra-ili-gpt-6-1-sol-chto-vybrat-dlya-raboty-cha.html

## TL;DR

- Время выполнения: 40–60 минут (подготовка окружения + один прогон двух моделей по трём задачам).
- Уровень сложности: Intermediate.
- Понадобится: Python 3.11+, `curl`, `jq`, API-ключ и базовый URL из вашей панели доступа, идентификаторы моделей GPT-6 Astra и GPT-6.1 Sol из документации (в постах канала они не публикуются), пустая папка `~/bench`.
- Результат: файл `~/bench/score.csv` с шестью строками замеров и конфиг `routes.json`, где для каждой задачи задана основная модель и резервная.

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/gpt-6-astra-ili-gpt-6-1-sol-chto-vybrat-dlya-raboty-cha-ru-1.jpg?v=1792961983)


- ОС: macOS 14+, Ubuntu 22.04+ или Windows 11 с WSL — команды ниже написаны для bash.
- Python 3.11+ (используется только для проверки JSON, не для SDK).
- Утилиты `curl` и `jq` в `$PATH`.
- Действующий API-ключ и базовый URL API из панели вашего провайдера.
- Идентификаторы обеих моделей — берутся из документации, не из постов и не из чатов.
- Права на запись в домашний каталог (создаём `~/bench`).

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

| Критерий | GPT-6 Astra | GPT-6.1 Sol |
|---|---|---|
| Бенчмарк ARC AGI 3 | 99,95%, бенчмарк «исчерпан» | данных в постах нет |
| Тест адаптивности | почти 100% там, где средний человек даёт около 48% | данных в постах нет |
| Агентная работа | Ramp: одна строка запроса «add routing controls for individual API keys» → нашла настройки, внесла изменения, проверила себя через computer use; Notion: работа в Codex в роли инженера-коллеги; Figma: дизайн системы полётного контроля | данных в постах нет |
| Ограничение | Figma: разрыв между генерацией интерфейса и проектированием системы «massive» | — |
| Цена, лимиты, id модели | в постах не приводятся — сверьтесь с документацией | в постах не приводятся — сверьтесь с документацией |

GPT-6.1 Sol в постах канала не описан ни разу: единственное упоминание линейки — в соседнем разборе. Поэтому по Sol вы опираетесь только на свой замер и на документацию: [GPT-5.5 Instant или GPT-6.1 Sol: что выбрать для чата, API и повседневных задач](https://ai-release.org/guides/gpt-5-5-instant-ili-gpt-6-1-sol-chto-vybrat-dlya-chata.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

Чек-лист подготовки:

- [ ] `python3 --version` выдаёт 3.11 или новее
- [ ] `jq --version` выдаёт номер версии, а не «command not found»
- [ ] `AI_API_KEY` и `AI_BASE_URL` экспортированы в текущей сессии
- [ ] `MODEL_A` и `MODEL_B` заполнены идентификаторами из документации
- [ ] Запрос к `/models` возвращает 200

## Шаг 1. Готовим папку и переменные окружения

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

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

**Как проверить:** тестовый запрос к списку моделей должен вернуть код 200.

```bash
mkdir -p ~/bench && cd ~/bench
python3 --version
jq --version

export AI_API_KEY='<ваш-ключ>'
export AI_BASE_URL='<базовый-URL из панели или документации>'
export MODEL_A='<id модели GPT-6 Astra из документации>'
export MODEL_B='<id модели GPT-6.1 Sol из документации>'
```

Проверка:

```bash
printf 'key=%s\nbase=%s\nA=%s\nB=%s\n' "${AI_API_KEY:+set}" "$AI_BASE_URL" "$MODEL_A" "$MODEL_B"
curl -s -o /dev/null -w '%{http_code}\n' "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY"
```

Ожидаемый вывод: `key=set`, затем три строки с вашими значениями и в конце `200`.

**Пример:** если `AI_BASE_URL` не задан, `curl` напечатает `000` — это значит, что запрос ушёл в никуда, а не что ключ плохой.

Почему это работает: `/models` — самый дешёвый запрос, он проверяет связку «ключ + URL» до того, как вы потратите время на прогон задач.

## Шаг 2. Прогоняем одну и ту же тройку задач через обе модели
![Иллюстрация к разделу «Шаг 2. Прогоняем одну и ту же тройку задач через обе модели»](https://ai-release.org/guides/img/gpt-6-astra-ili-gpt-6-1-sol-chto-vybrat-dlya-raboty-cha-ru-2.jpg?v=1792961990)


**Что сделать:** создать три текстовых файла с задачами (чат, работа, API) и прогнать каждый через обе модели одинаковым запросом.

**Зачем:** если промпты разные, разница в ответах принадлежит промпту, а не модели. Одинаковый вход — единственный способ сравнить.

**Как проверить:** в папке появится 6 файлов `out_*.json` и 2 лога `time_*.log`.

```bash
cat > task_chat.txt <<'EOF'
Объясни за пять предложений, что такое маршрутизация запросов между двумя LLM.
EOF

cat > task_work.txt <<'EOF'
Добавь управление маршрутизацией для отдельных API-ключей: опиши план изменений,
перечисли файлы, которые правишь, и в конце проверь результат.
EOF

cat > task_api.txt <<'EOF'
Верни строго JSON: {"model":"<имя>","tasks":["chat","work","api"],"verified":true}
EOF
```

Запуск (функция шлёт один запрос и пишет время):

```bash
run_one () {  # $1 = модель, $2 = задача
  local M="$1" T="$2"
  curl -sS "$AI_BASE_URL/chat/completions" \
    -H "Authorization: Bearer $AI_API_KEY" \
    -H 'Content-Type: application/json' \
    --max-time 300 \
    -d "$(jq -nc --arg m "$M" --rawfile t "task_${T}.txt" \
          '{model:$m,messages:[{role:"user",content:$t}]}')" \
    -o "out_${M}_${T}.json" \
    -w "%{http_code} %{time_total}\n" | tee -a "time_${M}.log"
}

for M in "$MODEL_A" "$MODEL_B"; do
  for T in chat work api; do run_one "$M" "$T"; done
done
```

Проверка:

```bash
ls out_*.json | wc -l
jq -r '.error.message // "ok"' out_*.json
column -t time_*.log
```

Ожидаемо: `6`, шесть строк `ok`, затем две колонки — HTTP-код и время в секундах.

**Пример:** задача `work` намеренно повторяет кейс Ramp — в нём Astra сначала нашла нужные настройки, потом внесла изменения и проверила свою работу через computer use. Поэтому в промпте есть требование «в конце проверь результат»: без него вы сравниваете не агентную работу, а генерацию текста.

Почему это работает: `jq -nc` собирает JSON-тело, а `--rawfile` подставляет содержимое файла с экранированием — кавычки и переводы строк в промпте не ломают запрос.

Если ваша задача — тексты, переводы и суммаризация, набор промптов удобнее брать из [гайда по работе с текстом](https://ai-release.org/guides/nejroseti-dlya-teksta.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide); для офисных сценариев сравните подходы в [ChatGPT Office или Microsoft 365 с Copilot](https://ai-release.org/guides/chatgpt-office-ili-microsoft-365-s-copilot-chto-vybrat.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## Шаг 3. Сводим замеры и закрепляем выбор в конфиге маршрутизации
![Иллюстрация к разделу «Шаг 3. Сводим замеры и закрепляем выбор в конфиге маршрутизации»](https://ai-release.org/guides/img/gpt-6-astra-ili-gpt-6-1-sol-chto-vybrat-dlya-raboty-cha-ru-3.jpg?v=1792961995)


**Что сделать:** собрать `score.csv`, выбрать победителя по каждой задаче и записать выбор в `routes.json`.

**Зачем:** выбор «на глаз» не воспроизводится. Файл `score.csv` — ваш аргумент при следующем пересмотре модели, а `routes.json` — то, что читает ваш сервис.

**Как проверить:** `jq -e` подтвердит структуру конфига, а `column` покажет шесть строк замеров.

```bash
printf 'model,task,seconds,json_valid\n' > score.csv
for M in "$MODEL_A" "$MODEL_B"; do
  for T in chat work api; do
    f="out_${M}_${T}.json"
    ok=$(jq -e . "$f" >/dev/null 2>&1 && echo yes || echo no)
    sec=$(awk -v t="$T" '$0 ~ t {print $2}' "time_${M}.log" | tail -n 1)
    printf '%s,%s,%s,%s\n' "$M" "$T" "$sec" "$ok" >> score.csv
  done
done
column -s, -t score.csv
```

Ожидаемый вывод — таблица из шести строк, например:

```text
model          task  seconds  json_valid
<id-astra>     chat  2.314    yes
<id-astra>     work  58.902   yes
<id-astra>     api   1.988    yes
<id-sol>       chat  2.101    yes
<id-sol>       work  64.770   yes
<id-sol>       api   2.245    yes
```

Конфиг маршрутизации (подставьте победителей из `score.csv`):

```json
{
  "routes": {
    "chat": { "primary": "<id-победителя по task_chat>", "fallback": "<второй id>", "timeout_s": 60 },
    "work": { "primary": "<id-победителя по task_work>", "fallback": "<второй id>", "timeout_s": 300, "require_self_check": true },
    "api":  { "primary": "<id-победителя по task_api>",  "fallback": "<второй id>", "timeout_s": 60 }
  }
}
```

Проверка конфига:

```bash
jq -e '.routes | keys == ["api","chat","work"]' routes.json
```

Ожидаемо: `true`.

Как читать результат: если по `work` выигрывает Astra — это согласуется с кейсами Ramp, Notion и Figma, где модель вела многошаговую работу и проверяла себя. По `chat` и `api` данных о GPT-6.1 Sol в постах нет: primary ставьте по своему `score.csv`, а расхождения по цене, лимитам и названиям параметров — сверьтесь с документацией.

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

**Проблема. Первый же запрос возвращает 401**

- Ошибка: `{"error":{"message":"Incorrect API key provided","type":"invalid_request_error","code":"invalid_api_key"}}`, HTTP 401
- Причина: переменная `AI_API_KEY` задана в другом окне терминала или не экспортирована — `export` действует только в текущей сессии.
- Решение: выполнить `export AI_API_KEY='<ваш-ключ>'` в том же окне и повторить `curl -s -o /dev/null -w '%{http_code}\n' "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY"` — должно быть `200`.

**Проблема. Модель «не существует или нет доступа»**

- Ошибка: `{"error":{"message":"The model '<id>' does not exist or you do not have access to it"}}`, HTTP 404
- Причина: идентификатор скопирован из поста или чата, а не из документации; либо у ключа нет доступа к этой модели.
- Решение: `curl -s "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY" | jq -r '.data[].id'` — посмотреть доступные id и подставить найденные в `MODEL_A`/`MODEL_B`. Если нужной модели в списке нет — сверьтесь с документацией провайдера.

**Проблема. Задача `work` обрывается по таймауту**

- Ошибка: `curl: (28) Operation timed out after 300001 milliseconds`
- Причина: многошаговый прогон (найти настройки → внести правки → проверить себя) дольше лимита `--max-time 300`; в кейсе Ramp это именно цепочка шагов, а не один ответ.
- Решение: поднять лимит до `--max-time 600` в `run_one` и поставить `"timeout_s": 600` в `routes.json`; прогонять `work` первым, `chat` и `api` — после него.

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

Для агентной работы берите модель, которая прошла ваш прогон `task_work` с самопроверкой, — по постам это сильная сторона GPT-6 Astra (кейсы Ramp, Notion, Figma), а по чату и API решение принимайте только по своему `score.csv`. Дальше перенесите `routes.json` в сервис, добавьте fallback-модель и перезапускайте прогон при каждом обновлении документации.

## FAQ

**GPT-6 Astra — это AGI?**
По постам канала модель набрала 99,95% на ARC AGI 3 и «исчерпала» бенчмарк, а Дженсен Хуанг и OpenAI заявляют о достижении AGI; для инженерного выбора это означает только одно — высокий результат на конкретном тесте, а не гарантию на вашей задаче, поэтому нужен собственный прогон.

**Чем Astra полезна именно в работе, а не в чате?**
В кейсе Ramp она по одной строке запроса нашла нужные настройки, внесла изменения и проверила себя через computer use; в Notion работала в Codex как инженер-коллега, когда ей передали цель и контекст.

**Есть ли у Figma ограничение по Astra?**
Да, в разборе кейса прямо сказано, что разрыв между генерацией интерфейса и проектированием системы «massive» — то есть сгенерировать экран и спроектировать систему полётного контроля не одно и то же.

**Сколько стоят Astra и Sol и как называются их id в API?**
В постах канала нет ни цен, ни идентификаторов моделей — сверьтесь с документацией провайдера и подставьте найденные значения в `MODEL_A` и `MODEL_B`.
