Месяц назад OpenAI запустила свою флагманскую модель GPT-6 Astra, которую оценили за сложные навыки: управление компьютером в сложных программах, разработка сайтов, создание 3D‑моделей с нуля.
Это первый ИИ, который OpenAI продвигает как безопасного агента для почти безграничного использования на своём личном компьютере.
Однако GPT‑6 Astra – очень дорогая модель и быстро поглощает лимиты даже на платных тарифах.
Неделю назад вышла GPT-6.1 Sol, которая при почти идентичном уровне интеллекта с GPT‑6 Astra в пять раз дешевле.
Совсем недавно базовой моделью для общения в ChatGPT была не такая смышлёная GPT‑5.6 Sol.
В этом посте я сравнил в GPT‑6 Astra и GPT‑5.6 Sol в простых запросах, а затем дал новой GPT-6.1 Sol четыре задачи прямо с моим Mac, которые не доверял ранним моделям.
Но давайте сначала наведём порядок в многочисленных версиях ChatGPT, которые сейчас на слуху.
КРАТКО ▾
Где доступны топовые модели ChatGPT. Сколько стоят

OpenAI делит модели по поколениям (числа) и классам (имена) в одном названии.
Есть следующие классы (цена за 1 млн токенов на вход / выход):
- Astra ($10 / $50) – флагман, самая умная и дорогая
- Sol ($2 / $10) – баланс навыки/цена в сложных задачах
- Terra ($2 / $12) – баланс навыки/цена в простых задачах
- Luna ($0,1 / $0,5) – самая быстрая и дешёвая
Поколения GPT‑6 и GPT‑6.1 самые свежие.
Так, GPT 6.0 Astra – самая мощная модель, но GPT‑6.1 Sol – самая новая.
Модель GPT‑6 доступа во всех классах кроме Terra, а GPT‑6.1 есть только в классе Sol, поскольку Astra на неё основе оказалась слишком опасной для запуска.
Доступность моделей в ChatGPT зависит от уровня подписки и режима общения «Чат» и «Работа».
У меня подписка Plus за $20. Для работы с ChatGPT использовал приложение Codex.
Сравнение простых ответов делал между GPT‑5.6 Sol и GPT‑6 Astra в режиме «Работа» на среднем уровне размышлений.
Тест сложных навыков делал у модели GPT‑6.1 Sol в режиме «Работа» на среднем уровне размышлений.
Поскольку GPT‑6 Astra и GPT‑6.1 Sol умеют примерно одно и то же, просто GPT‑ 6.1 Sol дешевле, далее смотрим, чем они отличаются от популярной GPT‑5.6 Sol.
Что изменилось в GPT-6 Astra против GPT 5.6 Sol

GPT-6 Astra лучше всех моделей способен проявить навыки творчества и создать 3D объекты на уровне 3D-художника по референсу
На релизе OpenAI вывела четыре сферы, в которых нейросеть стала сильнее: работа агентом, комплексные задачи, создание сложных продуктов и кодинг.
OpenAI заявляет, что Astra лучше сохраняет связность в длительных задачах и точнее следует инструкциям. Так выглядит сравнение, если опираться на документацию.
Источник: OpenAI | GPT‑6 Astra: A new generation of intelligence.
На релизе OpenAI вывела четыре сферы, в которых нейросеть стала сильнее: работа агентом, комплексные задачи, создание сложных продуктов и кодинг.
- Новая модель работает круче в качестве агента. Она может заполнять формы, организовать календарь, редактировать фотографии, обновлять записи о клиентах, автономно устанавливать программы и начинать в них работать. В теории модель заменяет любую механическую работу, связанную с контекстом.
- Стала лучше работа в комплексных задачах. Включает исследования в интернете, веб-разработку, проверку качества кода, создание презентаций, структурирование документов, корректуру под стиль текста.

По умению решать незнакомые задачи GPT-6 Astra почти перешёл отметку AGI (общего искусственного интеллекта)
- Теперь лечге создавать творческие проекты с нуля. Этот навык по сути объединяет первые два. GPT‑6 Astra может создать 3D-модель интерьера в Blender и рендеры к нему прямо у вас на компьютере или разработать целую игру. Это потратит большой объём токенов, на работа будет сделана.
- Ещё сильно прокачали кодинг, называя модель лучшей. В тесте Terminal Bench 4.0, где проверяют практические задачи в терминале, она набрала 57,9% против 37,3% у GPT-5.6 Sol. В том же тесте она обходит флагманскую модель Anthropic Claude Fable 5.1, точность которой составила 55,8% при стоимости на 63% выше.
Отдельно OpenAI сделала упор на безопасность.
Безопасность и стоимость. Это очень дорогая модель

В тесте на общий искусственный интеллект ARC-AGI-3 модель GPT-6 Astra достигла результата в 99,9% эффективности. Этот тест проверяет, насколько агенты способны решать задачи, с которыми не были знакомы. Человек справляется на 48%, а GPT 5.6 Sol на 7,8%.
Сила GPT-6 Astra в более продуманной глубокой работе и в роли ИИ-агента. Вместе с GPT-5.6 Sol они выступают примерно на одном уровне в обычном общении, и вероятно, по этой причине GPT-6 Astra до сих пор не появилась на вкладке бытового чата.
Что касается «послушности», после взлома платформы Hugging Face OpenAI якобы научилась делать так, чтобы ИИ не выходил за пределы своей задачи. По заверениям компании опыт помог сделать GPT-6 Astra безопасной.
❗️ Вопреки логике прогресса GPT-6 Astra дороже 5.6 Sol в два с половиной раза. Запрос на 100 тысяч входных и 20 тысяч выходных токенов обойдётся на новой модели в $2 против $0,8.
Однако 6 октября вышла модель 6.1 Sol, которая почти столь же умная, как Astra, но стоит в пять раз дешевле.
Теперь посмотрим, как модели сравнимы в простых и сложных запросах.
1. Заявление на исправление ремонта
📍 Промпт
Составь официальную претензию подрядчику после капитального ремонта квартиры. Обнаружены пять недостатков: протекают скрытые трубы, нагреваются розетки, плитка на кухне отходит от основания пола, вода из встроенных стенок душа просачивается, вентиляция работает в обратную сторону. Ремонт полностью оплачен, подрядчик затягивает исправления. Потребуй бесплатно устранить недостатки и согласовать сроки. Пиши твёрд, но без угроз, не выдумывай факты, пока ссылки на законы не используем, ссылаемся на договор о качественных услугах.
ПРЕТЕНЗИЯ об устранении недостатков выполненных работ
Кому: [наименование / Ф. И. О. подрядчика] От: [Ф. И. О. заказчика] Адрес объекта: [адрес квартиры] Договор: № [номер] от [дата]
В соответствии с указанным договором вами были выполнены работы по капитальному ремонту квартиры по адресу: [адрес]. Стоимость работ оплачена мной в полном объёме.
После завершения ремонта были обнаружены следующие недостатки:
1. Протекают скрытые трубы.
2. Нагреваются электрические розетки.
3. Плитка на кухне отходит от основания пола.
4. Вода просачивается из встроенных в стены элементов душевой.
5. Вентиляция работает в обратном направлении.Перечисленные недостатки свидетельствуют о ненадлежащем качестве выполненных работ и препятствуют нормальной и безопасной эксплуатации квартиры. Несмотря на обращения с моей стороны, их устранение затягивается.
На основании условий договора, предусматривающих качественное выполнение работ, требую:
1. Бесплатно устранить все перечисленные недостатки в полном объёме.
2. Согласовать со мной конкретные даты начала и окончания работ по каждому недостатку.
3. До начала исправлений сообщить порядок проведения работ и обеспечить их выполнение без необоснованных задержек.
4. После завершения работ провести совместную проверку результата и оформить подтверждение устранения недостатков.Прошу не позднее [дата / количество рабочих дней] с момента получения настоящей претензии направить письменный ответ и предложить график устранения недостатков.
Я готов(а) обеспечить доступ в квартиру в предварительно согласованные даты и время.
Рассчитываю на оперативное и добросовестное выполнение обязательств по договору.
Приложения при наличии:
1. Копия договора.
2. Документы, подтверждающие оплату.
3. Фотографии и видеозаписи обнаруженных недостатков.
4. Копии переписки и обращений к подрядчику.Дата: «» __________ 20 г.
Подпись: __________________ / [Ф. И. О.] Контактный телефон: [номер] Электронная почта: [адрес]
Подрядчику: [наименование / Ф. И. О.] От заказчика: [Ф. И. О.] Контактные данные: [телефон, электронная почта]
ПРЕТЕНЗИЯ об устранении недостатков капитального ремонта квартиры
Между нами заключён договор [номер и дата] на выполнение капитального ремонта квартиры по адресу: [адрес]. Работы по договору полностью оплачены.
После проведения ремонта обнаружены следующие недостатки:
1. Протекают скрытые трубы.
2. Нагреваются розетки.
3. Плитка на кухне отходит от основания пола.
4. Вода просачивается из встроенных стенок душа.
5. Вентиляция работает в обратную сторону.Перечисленные недостатки не соответствуют предусмотренному договором требованию о качественном оказании услуг. Несмотря на обращения по вопросу их устранения, исправления затягиваются, недостатки остаются неустранёнными.
Требую без дополнительной оплаты устранить все пять недостатков, включая необходимые для этого работы и материалы, а также восстановить отделку, затронутую при исправлении. Устранение должно охватывать причины недостатков, а не только их внешние проявления.
Прошу в течение [количество] рабочих дней с даты получения настоящей претензии направить письменный ответ и согласовать со мной:
* дату осмотра квартиры;
* перечень работ по каждому недостатку;
* конкретные даты начала и завершения исправлений;
* порядок проверки результата и приёмки выполненных работ.Прошу уделить первоочередное внимание протечкам скрытых труб и нагреву розеток.
Готов(а) предоставить доступ в квартиру в предварительно согласованное время. Ожидаю конкретного графика устранения всех недостатков и его соблюдения. Дальнейшее затягивание исправлений считаю неприемлемым.
Ответ прошу направить по адресу: [электронная почта / почтовый адрес].
Дата: [дата] Подпись: _____________ / [Ф. И. О.]
Время ответа
- 5.6 Sol: мгновенно
- 6 Astra: мгновенно
Ответы достаточно похожи, и оба варианта можно использовать.
Но мне понравилось, что GPT‑5.6 Sol составила список требований, в то время как GPT‑6 Astra наметала лишь план совместных с подрядчиком действий.
То есть модель GPT‑5.6 Sol сразу перешла к исправлению проблемы, а GPT‑6 Astra предлагает начать лишь планирование того, как это можно сделать.
⚖️ GPT‑5.6 Sol против GPT‑6 Astra: 1:0
2. Ищем способ прокачать трекпад на Mac
📍 Промпт


Время ответа
- 5.6 Sol: 41 секунду
- 6 Astra: 23 секунды
Модели посоветовали одинаковую программу.
GPT‑6 Astra оказался более ёмким и коснулся только вопросов из промпта, а GPT‑5.6 Sol стал подробно выдавать детали и почти сразу дал инструкцию по настройке.
Разницу в подходе к ответу можно назвать разве что философской.
Поскольку GPT‑6 Astra была лаконичнее, её ответ понравился больше.
⚖️ GPT‑5.6 Sol против GPT‑6 Astra: 1:1
3. Находим замену устаревшей программе
📍 Промпт


Время ответа
- 5.6 Sol: 33 секунды
- 6 Astra: 15 секунд
Обе модели посоветовали установить GrandPerspective в первую очередь, но по-разному указали причины.
GPT‑5.6 Sol постарался «убедить» скачать программу разными доводами, а GPT‑6 Astra сразу сравнила с другим вариантом.
Дополнительные опции оказались разными, причём GPT‑5.6 Sol привёл сразу два варианта.
Мне понравился ответ GPT‑5.6 Sol, поскольку он чётко объясняет сильные стороны предлагаемой программы и добавил ещё две опции, обе более качественные, чем у GPT‑6 Astra.
⚖️ GPT‑5.6 Sol против GPT‑6 Astra: 2:1
4. Планируем выходной в Москве на компанию друзей
📍 Промпт






Время ответа
- 5.6 Sol: 2 минуты 10 секунд
- 6 Astra: 1 минута 41 секунда
GPT‑6 Astra предложила менее экстремальный и более приближенный к реальности сценарий. Модель правильно нашла цену на поездку метро, а вот GPT‑5.6 Sol ошиблась.
GPT‑5.6 Sol подобрала места, где строго нужна предварительная запись, что неудобно.
GPT‑6 Astra справилась безоговорочно лучше. Ещё и быстрее.
⚖️ GPT‑5.6 Sol против GPT‑6 Astra: 2:2
5. Пишем код для поиска маршрута
📍 Промпт
points — список из 20–500 пар координат (x, y) на плоскости. Расстояние между точками евклидово. Начало и конец маршрута — точка 0. Нужно посетить каждую точку ровно один раз. Верни список индексов, начинающийся с 0, без повторения 0 в конце; обратный путь учитывается в длине.
Главная цель — получить как можно меньшую длину маршрута за отведённое время. time_limit может быть от 0.2 до 3 секунд и включает всю работу функции, в том числе подготовку данных.
Только стандартная библиотека, один поток, без внешних программ и сетевых запросов. Входные данные не изменяй. Для случайных решений используй seed. Точки могут образовывать скопления, сетки, иметь выбросы и совпадать.
Качество будет оцениваться на неизвестных тебе наборах: сравнивается длина корректных маршрутов при одинаковом лимите времени. Выбери и реализуй максимально эффективный подход.
Верни весь код одним блоком и кратко объясни алгоритм. Нужна готовая реализация, без заглушек.
import math
import random
import timedef solve(points, time_limit=2.0, seed=0):
“””
Возвращает циклический маршрут как перестановку индексов, начинающуюся с 0.
Возвращение из последней точки в точку 0 подразумевается.
“””
started = time.perf_counter()
limit = max(0.0, float(time_limit))
# Небольшой запас снижает вероятность выхода за лимит из-за последней итерации.
deadline = started + max(0.0, limit – min(0.003, limit * 0.0125))n = len(points)
if n <= 1: return list(range(n)) xs = [float(p[0]) for p in points] ys = [float(p[1]) for p in points] hypot = math.hypot # Полная матрица расстояний: при n <= 500 она ускоряет все последующие # локальные преобразования маршрута. dist = [[0.0] * n for _ in range(n)] for i in range(n): xi, yi = xs[i], ys[i] row_i = dist[i] for j in range(i): value = hypot(xi - xs[j], yi - ys[j]) row_i[j] = value dist[j][i] = value def route_length(route): total = dist[route[-1]][route[0]] for i in range(n - 1): total += dist[route[i]][route[i + 1]] return total def nearest_neighbor(start): unused = bytearray(b"\x01") * n unused[start] = 0 route = [start] current = start for _ in range(n - 1): row = dist[current] best = -1 best_d = math.inf for j in range(n): if unused[j] and row[j] < best_d: best_d = row[j] best = j unused[best] = 0 route.append(best) current = best return route def convex_hull(): order = sorted(range(n), key=lambda i: (xs[i], ys[i], i)) def cross(a, b, c): return ((xs[b] - xs[a]) * (ys[c] - ys[a]) - (ys[b] - ys[a]) * (xs[c] - xs[a])) lower = [] for p in order: while len(lower) >= 2 and cross(lower[-2], lower[-1], p) <= 0.0: lower.pop() lower.append(p) upper = [] for p in reversed(order): while len(upper) >= 2 and cross(upper[-2], upper[-1], p) <= 0.0: upper.pop() upper.append(p) hull = lower[:-1] + upper[:-1] if not hull: return [0] # При совпадающих координатах удаляем возможные повторы индексов. seen = bytearray(n) result = [] for p in hull: if not seen[p]: seen[p] = 1 result.append(p) return result def farthest_insertion(): route = convex_hull() inside = bytearray(n) for p in route: inside[p] = 1 if len(route) == 1: # Чтобы на каждом шаге существовало обычное ребро цикла. q = max(range(n), key=dist[route[0]].__getitem__) if q != route[0]: route.append(q) inside[q] = 1 nearest = [math.inf] * n for p in range(n): if not inside[p]: nearest[p] = min(dist[p][q] for q in route) while len(route) < n: selected = -1 farthest = -1.0 for p in range(n): if not inside[p] and nearest[p] > farthest:
farthest = nearest[p]
selected = pbest_pos = 0
best_delta = math.inf
m = len(route)
for i in range(m):
a = route[i]
b = route[(i + 1) % m]
delta = dist[a][selected] + dist[selected][b] – dist[a][b]
if delta < best_delta: best_delta = delta best_pos = i + 1 route.insert(best_pos, selected) inside[selected] = 1 nearest[selected] = 0.0 row = dist[selected] for p in range(n): if not inside[p] and row[p] < nearest[p]: nearest[p] = row[p] return route # Два существенно разных конструктивных алгоритма. route_a = farthest_insertion() route_b = nearest_neighbor(0) if route_length(route_b) < route_length(route_a): best_route = route_b else: best_route = route_a # Дополнительный NN-старт полезен для кластерных данных. if n <= 320 or time.perf_counter() < deadline - 0.025: farthest_from_zero = max(range(n), key=dist[0].__getitem__) route_c = nearest_neighbor(farthest_from_zero) if route_length(route_c) < route_length(best_route): best_route = route_c if time.perf_counter() >= deadline:
zero = best_route.index(0)
return best_route[zero:] + best_route[:zero]# Ближайшие соседи используются как набор перспективных ребер.
candidate_count = 24 if n <= 180 else (20 if n <= 350 else 16) candidates = [] for i in range(n): ordered = sorted(range(n), key=dist[i].__getitem__) candidates.append([j for j in ordered if j != i][:candidate_count]) def make_positions(route): pos = [0] * n for i, p in enumerate(route): pos[p] = i return pos def reverse_segment(route, pos, left, right): route[left:right + 1] = reversed(route[left:right + 1]) for k in range(left, right + 1): pos[route[k]] = k def try_two_opt(route, pos): """Один первый улучшающий 2-opt ход по кандидатным ребрам.""" checks = 0 for i in range(n): a = route[i] b = route[(i + 1) % n] old_ab = dist[a][b] # В первой фазе коротким кандидатным ребром является a-c. for c in candidates[a]: j = pos[c] d = route[(j + 1) % n] if c == b or d == a: continue old = old_ab + dist[c][d] gain = old - dist[a][c] - dist[b][d] if gain > 1e-12 * (1.0 + old):
if i < j: reverse_segment(route, pos, i + 1, j) else: reverse_segment(route, pos, j + 1, i) return True checks += 1 if (checks & 255) == 0 and time.perf_counter() >= deadline:
return False# Во второй фазе коротким кандидатным ребром является b-d.
for d in candidates[b]:
j = (pos[d] – 1) % n
c = route[j]if c == a or c == b or d == a:
continueold = old_ab + dist[c][d]
gain = old – dist[a][c] – dist[b][d]
if gain > 1e-12 * (1.0 + old):
if i < j: reverse_segment(route, pos, i + 1, j) else: reverse_segment(route, pos, j + 1, i) return True checks += 1 if (checks & 255) == 0 and time.perf_counter() >= deadline:
return Falsereturn False
def try_relocate(route, pos):
“””Перенос одной точки в более выгодное место.”””
checks = 0for i in range(n):
a = route[i]
prev_a = route[(i – 1) % n]
next_a = route[(i + 1) % n]
removal = dist[prev_a][a] + dist[a][next_a] – dist[prev_a][next_a]# Рассматриваем вставку как после близкой точки, так и перед ней.
for near in candidates[a]:
near_pos = pos[near]
after_nodes = (near, route[(near_pos – 1) % n])for c in after_nodes:
if c == a or c == prev_a:
continue
j = pos[c]
d = route[(j + 1) % n]
if d == a:
continueinsertion = dist[c][a] + dist[a][d] – dist[c][d]
old_scale = removal + dist[c][d]
if removal – insertion > 1e-12 * (1.0 + old_scale):
route.pop(i)
if i < j: j -= 1 route.insert(j + 1, a) for k, p in enumerate(route): pos[p] = k return True checks += 1 if (checks & 255) == 0 and time.perf_counter() >= deadline:
return False
return Falsedef try_full_two_opt(route, pos):
“””Редкая полная проверка: находит улучшения вне списка соседей.”””
checks = 0
for i in range(n – 2):
a = route[i]
b = route[i + 1]
old_ab = dist[a][b]upper = n if i != 0 else n – 1
for j in range(i + 2, upper):
c = route[j]
d = route[(j + 1) % n]
old = old_ab + dist[c][d]
gain = old – dist[a][c] – dist[b][d]if gain > 1e-12 * (1.0 + old):
reverse_segment(route, pos, i + 1, j)
return Truechecks += 1
if (checks & 511) == 0 and time.perf_counter() >= deadline:
return False
return Falsedef local_search(route, allow_full=False):
pos = make_positions(route)while time.perf_counter() < deadline: while time.perf_counter() < deadline and try_two_opt(route, pos): pass if time.perf_counter() >= deadline:
breakif try_relocate(route, pos):
continueif allow_full and try_full_two_opt(route, pos):
continuebreak
return route
# Основной спуск к локальному минимуму.
best_route = local_search(best_route, allow_full=True)
best_length = route_length(best_route)# Iterated local search: несколько сильных 4-opt встрясок с последующим
# повторным локальным поиском. Лучший маршрут всегда сохраняется.
rng = random.Random(seed)while n >= 8 and time.perf_counter() < deadline: cuts = sorted(rng.sample(range(1, n), 4)) a, b, c, d = cuts trial = ( best_route[:a] + best_route[c:d] + best_route[b:c] + best_route[a:b] + best_route[d:] ) local_search(trial, allow_full=False) trial_length = route_length(trial) if trial_length < best_length: best_route = trial best_length = trial_length zero = best_route.index(0) return best_route[zero:] + best_route[:zero]
from math import hypot
from random import Random
from time import perf_counterdef solve(points, time_limit=2.0, seed=0):
start = perf_counter()
# Запас на сборку результата и освобождение памяти.
reserve = min(0.008, time_limit * 0.03)
deadline = start + max(0.0, time_limit – reserve)fallback = list(range(len(points)))
if len(points) < 3: return fallback # Совпадающие точки выгодно посещать подряд. ids = {} coords = [] groups = [] for i, (x, y) in enumerate(points): key = (x, y) v = ids.get(key) if v is None: ids[key] = len(coords) coords.append(key) groups.append([i]) else: groups[v].append(i) n = len(coords) def finish(t): z = t.index(0) return [i for v in t[z:] + t[:z] for i in groups[v]] if n < 3: return finish(list(range(n))) rng = Random(seed) # Симметричная матрица расстояний. dist = [[0.0] * n for _ in range(n)] for i in range(n): x, y = coords[i] row = dist[i] for j in range(i): xj, yj = coords[j] value = hypot(x - xj, y - yj) row[j] = value dist[j][i] = value if perf_counter() >= deadline:
return fallback# Начальный маршрут: вставка наиболее удалённой от цикла точки.
far = max(range(1, n), key=dist[0].__getitem__)
if dist[0][far] == 0.0:
return fallbacktour = [0, far]
remaining = [i for i in range(1, n) if i != far]
near = [min(dist[0][i], dist[far][i]) for i in range(n)]while remaining:
v = max(remaining, key=near.__getitem__)
row = dist[v]
best_cost = float(“inf”)
place = 0
a = tour[-1]
for pos, b in enumerate(tour):
cost = row[a] + row[b] – dist[a][b]
if cost < best_cost: best_cost, place = cost, pos a = b tour.insert(place, v) remaining.remove(v) for u in remaining: if row[u] < near[u]: near[u] = row[u] if perf_counter() >= deadline:
tour.extend(remaining)
return finish(tour)if n <= 3: return finish(tour) def length(t): return sum(dist[t[i - 1]][t[i]] for i in range(n)) best = tour[:] best_length = length(best) eps = best_length * 1e-13 / n # Короткие списки кандидатов для основного локального поиска. k = min(24, n - 1) candidates = [] for i, row in enumerate(dist): neighbors = sorted(range(n), key=row.__getitem__) candidates.append([j for j in neighbors if j != i][:k]) if perf_counter() >= deadline:
return finish(best)# Двусвязный цикл: перенос короткой цепочки занимает O(1).
nxt = [0] * n
prv = [0] * n
order = list(range(n))
rng.shuffle(order)def load(t):
for i, a in enumerate(t):
b = t[(i + 1) % n]
nxt[a] = b
prv[b] = adef extract():
t = [0]
a = nxt[0]
while a != 0:
t.append(a)
a = nxt[a]
return tdef reverse(a, b, c, d):
# Заменить рёбра a-b, c-d на a-c, b-d.
u = b
while True:
v = nxt[u]
nxt[u], prv[u] = prv[u], v
if u == c:
break
u = v
nxt[a], prv[c] = c, a
nxt[b], prv[d] = d, bdef improve():
active = bytearray(b”\x01″) * n
changed = Truewhile changed:
changed = False
for v in order:
if perf_counter() >= deadline:
return
if not active[v]:
continueactive[v] = 0
p, b = prv[v], nxt[v]
dv = dist[v]
found = False# 2-opt: проверяем обе ориентации рёбер.
for w in candidates[v]:
c, q = nxt[w], prv[w]if w != b and c != v:
gain = (
dv[b] + dist[w][c]
– dv[w] – dist[b][c]
)
if gain > eps:
reverse(v, b, w, c)
active[v] = active[b] = 1
active[w] = active[c] = 1
found = True
breakif w != p and q != v:
gain = (
dist[p][v] + dist[q][w]
– dist[p][q] – dv[w]
)
if gain > eps:
reverse(p, v, q, w)
active[p] = active[v] = 1
active[q] = active[w] = 1
found = True
breakif found:
changed = True
continue# Перенос цепочек длины 1–3, включая их разворот.
segment = []
e = v
for _ in range(3):
segment.append(e)
r = nxt[e]
if r == p:
breakde = dist[e]
saving = dist[p][v] + de[r] – dist[p][r]for w in candidates[v]:
if w in segment:
continue
c, q = nxt[w], prv[w]# Вставить v…e после w без разворота.
if w != p:
gain = (
saving + dist[w][c]
– dv[w] – de[c]
)
if gain > eps:
nxt[p], prv[r] = r, p
nxt[w], prv[v] = v, w
nxt[e], prv[c] = c, eactive[p] = active[r] = 1
active[w] = active[c] = 1
for u in segment:
active[u] = 1
found = True
break# Вставить e…v перед w с разворотом.
if w != r:
gain = (
saving + dist[q][w]
– de[q] – dv[w]
)
if gain > eps:
nxt[p], prv[r] = r, p
for u in segment:
nxt[u], prv[u] = prv[u], nxt[u]
nxt[q], prv[e] = e, q
nxt[v], prv[w] = w, vactive[p] = active[r] = 1
active[q] = active[w] = 1
for u in segment:
active[u] = 1
found = True
breakif found:
break
e = rif found:
changed = Truedef full_two_opt():
# Полный проход нужен, в частности, для далёких скоплений:
# соединяющие их рёбра могут отсутствовать в кандидатах.
t = extract()
best_gain = eps
move = Nonefor i in range(n – 2):
if perf_counter() >= deadline:
breaka, b = t[i], t[i + 1]
da, db = dist[a], dist[b]
ab = da[b]for j in range(i + 2, n):
c, d = t[j], t[(j + 1) % n]
gain = ab + dist[c][d] – da[c] – db[d]
if gain > best_gain:
best_gain = gain
move = (a, b, c, d)if move is None:
return False
reverse(*move)
return Trueload(tour)
failures = 0
iteration = 0while perf_counter() < deadline: improve() if iteration == 0 or iteration % 8 == 0: while perf_counter() < deadline and full_two_opt(): improve() tour = extract() value = length(tour) if value < best_length: best, best_length = tour[:], value failures = 0 else: failures += 1 if perf_counter() >= deadline:
break# Double-bridge: разрываем четыре ребра и переставляем
# части цикла, затем снова запускаем локальный поиск.
tour = best[:]
strength = 1 + min(4, failures // 6)
for _ in range(strength):
a, b, c, d = sorted(rng.sample(range(n), 4))
tour = (
tour[:a]
+ tour[c:d]
+ tour[b:c]
+ tour[a:b]
+ tour[d:]
)load(tour)
iteration += 1return finish(best)
Время ответа
- 5.6 Sol: 1 минута 6 секунд
- 6 Astra: 4 минуты 6 секунд
Сразу видно гигантский разрыв во времени. Решения модели нашли похожие, поэтому есть вопросы.
В коде не разбираюсь, поэтому промпт и анализ ответа я собрал вместе с GPT-6 Astra в режиме «Очень высокого» рассуждения.
Если коротко, в этой небольшой задаче GPT-6 Astra справляется чуть лучше, но без сильного разрыва.
GPT-6 Astra написала код, который на пару процентов точнее работает при небольшом лимите времени и который позволяет модифицировать маршрут.

Размышления GPT‑6 Astra во время анализа ответов. Провёл обширную работу, которая вызывает доверие
Интереснее было запустить сам анализ двух ответов. GPT-6 Astra провела большое количество тестов, проанализировала большой объём данных и сделала выводы на их основе.
Правда, у такого качественного ответа была цены: GPT-6 Astra в режиме «Очень высокого» рассуждения за 12 минут размышлений потратила 80% лимита, который OpenAI выделяет на 5 часов использования ChatGPT на тарифе Plus.
Нет сомнений, что отлично справляется со сложными задачами, хоть и потребляет пока непредсказуемо большое количество токенов.
⚖️ GPT‑5.6 Sol против GPT‑6 Astra: 2:3
Далее я проверил уровень исполнения сложных навыков в GPT-6.1 Sol.
6. Разработка приложения для Mac с GPT‑6.1 Sol

Приложение Corner Swipe позволяет открывать и закрывать Пункт управления Mac свайпом в углу трекпада. Добавил небольшую анимацию от грани экрана как на iPhone
Система macOS позволяет смахнуть двумя пальцами по правой части трекпада, чтобы открыть Пункт уведомлений.
По аналогии давно была идея найти приложение, которое позволяет открывать Пункт управления на Mac по свайпу из угла трекпада как с угла экрана iPhone.
Второй тест в этом посте был адресован теме, но решил проверить, а смогу ли я собрать его с помощью ChatGPT.
📍 Промпт
Давай сделаем приложение, единственная задача которого – это по свайпу в правом верхнем углу открывать пункт управления Mac. То есть по тому же принципу, что на iPhone. Но добавим одну забавную вещь – во время жеста на верхней грани экрана появляется анимация чёрной рамки, будто она продолжает рамку экрана. На iOS такая анимация есть, когда на кнопки нажимаешь, я думаю, ты понял, о чём я. Эта анимация должна появляться там, где расположена кнопка пункта управления в строке меню. Перед разработкой задай мне уточняющие вопросы, которые помогут тебе сделать быстро и эффективно ровно такое приложение, которое я хочу.
Далее модель задала уточняющие вопросы, и через три ответа запустила создание приложения.
Codex самостоятельно проверяет работоспособность приложения по ходу разработки
Первый прототип не заработал, поскольку модель хотела нажимать на кнопку Пункта управления, а не вызывать его через системное сочетание клавиш Fn+C.
Я на это указал, и уже следующим ответом получил полностью функционирующее приложение.

Сначала приложение не работало, указал на это, и модель всё поправила
Зато GPT‑6.1 Sol абсолютно самостоятельно придумала окно настроек, его структуру, метод установки разрешений с первой попытки. Я внёс правки по мелким недочётам вроде возможности отключать анимацию у края экрана, вёрстки настроек и названия приложения.
Пользуюсь приложением каждый день, уже ощущается как вшитое в macOS. При «разработке» код я не видел ни разу.
На выполнение задачи модель потратила 22% лимитов на 5 часов или 3% недельных лимитов.
▶︎ Скачать приложение Corner Swipe для вызова пункта управления на Mac
7. Разработка сайта с GPT-6.1 Sol
При создании сайта мы фактически решали две задачи: делали страницу и веб-программу одновременно.
В одном диалоге я нащупал идею и сразу приступил к прототипированию.
Идея была сделать страницу для обучения школьников дробям в игровом формате.
Описал базовую функциональность.
📍 Промпт
После чат дал идеи, я два раза дополнил их своими, и получил первый вариант. Мозговой штурм взял всего 2% лимитов на 5 часов. В GPT‑6 Astra на это бы ушло 10%.




До приемлемого результата мы добрались через 5 пакетов правок.
Оценил навык GPT-6.1 Sol читать мои просьбы между строк:
- Я ни разу не упомянул, что большой желейный квадрат должен уменьшаться каждый раз, ещё и прямо пропорционально исходному размеру
- Ни разу не говорил, что уже сложенный кусок можно вернуть к основному, и чтобы при этом основной квадрат снова изменился в размере настолько, насколько в него вернулось долей
- Ни разу не сказал «желейно» анимировать материал при «отщипывании» доли.
Всё это модель додумала сама и учла. А ведь я держал в уме, что элементы должны так себя вести и даже не подумал озвучить.


GPT-6.1 Sol быстро и беспрекословно выполняла все мои правки. В общей сложности у нас было 5 пула, всего 33 штуки. Они включали в себя комментарии сразу во всех областях: дизайн, логика, баги, фичи, вёрстка. Всё происходило налету.
Зная, как бывает непросто донести человеку идею и сколько времени занимает рисование одного только дизайна, не говоря о его исполнении фронтэндом, я не переставал удивляться, в какой невероятной степени подобные задачи стали проще.
От идеи до пятой итерации прототипа, которая уже более-менее понравилась, ушло 12% лимитов, которые ChatGPT выделает на 5 часов. Или 3% недельных лимитов Не мог поверить в такой низкий расход кредитов.
GPT‑6 Astra тратит в пять раз больше, то есть только на эту задачу ушло 60% лимитов на 5 часов или 15% недельных лимитов.
▶︎ Скачать веб-приложение для обучения дробям
8. Генерация 3D-объекта по фото с GPT-6.1 Sol
За почти семь лет работы в айфонсе я несколько раз пытался освоить навык 3D-моделирования, чтобы создавать реалистичные концепты и броские иллюстрации.
Blender, будучи бесплатной программой, для этого подходил идеально, но дальше простой модели транзистора в этом материале моё терпение не давало зайти.
GPT‑6 Astra завирусилась тем, что локально смогла моделировать объекты прямо у пользователя на глазах. Правда, за большой объём кредитов: на сложную модель уходило по $100.
Раз GPT-6.1 Sol должна быть похожа по навыкам, решил попробовать.
Попросил модель сделать 3D-модель iPhone 18 Pro.
📍Промпт
Сделай 3D-модель айфона (прилагаю референс), чтобы я мог загрузить эту модель в blender и затем в нём через cycles отрендерить её. Это iPhone 18 Pro. Его размеры: 150 на 71,9 на 8,75 мм. Размер блока камер и выступа самих камер посмотри в интернете. Цвет как на фото нужен, который официально apple назвала burgundy. Дай результат для blender в таком виде, который отнимет меньше всего лимитов. Но модель должна быть такой, чтобы после рендеринга она выглядела как официальное изображение, а не жалкая попытка повторить.
И приложил три официальных изображения iPhone с разны сторон вместе с модулем камеры ракурсом в три четверти.
Через 22 минуты GPT-6.1 Sol выдала абсолютно рабочий файл, в который я не стал вносить правок.

С точки зрения моего поверхностного опыта владения Blender идеально было почти всё:
- Качественная топология (когда грани и полигоны логично стыкуются)
- Есть четыре правильно настроенных камеры для рендеринга с разных ракурсов
- Оптимизированы настройки для корректного и быстрого рендеринга
- Слои объекта логично структурированы
- Изображение на экране легко заменить

В готовый файл с 3D-моделью ChatGPT добавил предустановленные ракурсы, но не этот. За счёт уже вшитых в сцену виртуальных камер и примеров освещения я отредактировал их на свой вкус и получил творческое решение, которое хотел
Отличается только текстура алюминия, которую наверняка можно было бы подтянуть правками, но на фоне остальной точности это мелкий момент.
Модели в гораздо худшем качестве продаются за 1000, 2000 рублей, а тут полноценный готовый объект по одному запросу, максимально похожий на оригинал.
GPT-6.1 Sol потратила 16% лимитов на 5 часов или 3% недельных лимитов.
▶︎ Скачать 3D-модель iPhone 18 Pro для Blender (cycles)
9. Локальная работа агентом с GPT-6.1 Sol

Это изображение ChatGPT собрал на моём Mac вручную в Pixelmator Pro
Последним заданием протестировал, как модель может управлять моим компьютером.
Тест с Astra показал, что это самый ресурсоёмкий тип сложной работы нейросетей.
Я попросил в фоторедакторе Pixelmator Pro объединить два рендера из задания выше с моделью iPhone, добавить им водяной знак iPhones.ru и сохранить получившееся изображение так, чтобы оно было шириной 1400 пикселей и весом до 300 КБ.
📍Промпт
В приложении Pixelmator Pro на моём Mac объедини две картинки в один коллаж, добавь к ним водяной знак в центр внизу и оптимизируй размер финального изображения до ширины в 1400 пикелей и весом не более 300 КБ
Ускоренная запись агентской работы GPT‑6.1 Sol
Было странно наблюдать, как призрачный курсор Codex управляет моим компьютером.
Mac значком «поделиться экраном» показывал, что приложение имеет доступ к Pixelmator Pro и в реальном времени считывает всё происходящее на экране.
Результат был ровно такой, какой я и ждал, даже водяной знак правильно масштабирован.
Модель справилась с задачей за 3 минуты 26 секунд. На выполнение ушло 7% лимитов на 5-часов или 1% недельных.
Время делать выводы.
Вывод. Перешёл на новый уровень доверия к нейросетям

Скорость размышления радует, но GPT-6 Astra стала первым ИИ-агентом, которому я доверил свой Mac
По ходу теста GPT-6 Astra стабильно была лучше GPT-5.6 Sol в скорости и ёмкости ответа.
В простых задачах модели выступали с примерно одним (высоким) качеством, но читать ответы GPT-6 Astra было приятнее за счёт из лаконичности.
Если смотреть с позиции конкуренции, навыки GPT-6 Astra впечатляют, но для большинства продвинутых пользователей она обходит Claude Fable 5.1 только ценой. А пользователи, которые просто общаются с нейросетями, вообще разницы не увидят.
А вот по‑настоящему огромный вклад GPT-6 Astra и GPT‑6.1 Sol сделали в популяризацию ИИ-агентов на домашнем ПК и Mac.
Ещё два месяца назад я собирался рассказать об OpenClaw, но не решился, поскольку он требовал кодом прописывать ограничения на доступ к файловой системе компьютера.
Зато при работе над этим постом я запросто доверил управление своим Mac ChatGPT и с детским удивлением наблюдал, как программа за меня пишет приложение, создаёт 3D-модель, разрабатывает сайт и редактирует фотографии.

Бесчисленные тесты, общение, разработка приложения, сайта, 3D-модели и работа агентом отняли всего 8% лимитов на неделю
Благодаря GPT-6 Astra OpenAI одним релизом сделала идею ИИ‑агентов базой. А GPT-6.1 Sol в пять раз увеличила объём задач, которые её агентами можно выполнить.
Компания внедрила достаточно рычагов безопасности и упростила установку, превратив потенциально опасное ПО в бытовой инструмент.
Опыт особенно хорошо выглядит на фоне свежего печального провала Claude. Который уж привёл к комментариям Apple по поводу будущих обновлений Maс.
Я же в полном восторге от релиза GPT-6.1 Sol.
Если ещё через год и пару крупных релизов мой компьютер за $20 в месяц научится делать монотонную работу по оптимизации картинок для нашего сайта без большого аппетита к лимитам, стану главным фанатом ChatGPT.
Первый кирпич уже заложен.




Будь первым, оставь комментарий