Доверил работу ИИ-агенту, и вот что вышло. Большой тест топовых моделей ChatGPT 6.1 Sol и 6.0 Astra, задачи серьёзные

Павел avatar | сегодня в 11:30
/

Месяц назад 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, которые сейчас на слуху.

КРАТКО ▾

  • Где доступны модели. Цены
  • Чем GPT-6 Astra лучше GPT-5.6 Sol
  • Как GPT-6 Astra стала самой безопасной
  • Тест 1 с 6.0. Заявление на ремонт
  • Тест 2 с 6.0. Приложение для трекпада
  • Тест 3 с 6.0. Замена устаревшей программе
  • Тест 4 с 6.0. План на выходной в Москве
  • Тест 5 с 6.0. Пишем код для поиска маршрута
  • Тест 6 с 6.1. Вайбкодим приложение
  • Тест 7 с 6.1. Разработка сайта
  • Тест 8 с 6.1. Генерируем 3D-объект для Blender
  • Тест 9 с 6.1. Локальная работа ИИ-агентом
  • Вывод
  • Где доступны топовые модели 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 зависит от уровня подписки и режима общения «Чат» и «Работа».

    Тариф Цена Доступные модели
    Бесплатный $0 Режим «Чат»: GPT‑6 Luna
    Go $8 Режим «Чат»: GPT‑6 Luna
    Plus $20 Режим «Чат»: GPT‑5.6 Sol, GPT‑6 Sol
    Режим «Работа»: все модели GPT‑5.5, GPT‑5.6, GPT‑6 и GPT‑6.1
    Pro $100 Режим «Чат»: GPT‑5.6 Sol, GPT‑6 Sol
    Режим «Работа»: все модели GPT‑5.5, GPT‑5.6, GPT‑6 и GPT‑6.1

    Как проводил тесты

    У меня подписка 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 лучше сохраняет связность в длительных задачах и точнее следует инструкциям. Так выглядит сравнение, если опираться на документацию.

    Сценарий и тест GPT‑5.6 Sol GPT‑6 Astra
    Освоение новых интерактивных задач
    ARC‑AGI‑3
    7,8% 99,9%
    Сложная математика
    FrontierMath Tier 4, v2
    83,0% 97,6%
    Научные задачи в терминале
    Terminal‑Bench Science 0.1
    22,4% 64,6%
    Задачи разработки в терминале
    Terminal‑Bench 4.0
    37,3% 57,9%
    Программная инженерия
    DeepSWE v1.1
    72,7% 74,1%
    Миграция баз данных
    Внутренний тест OpenAI
    42,7% 63,9%
    Работа в компьютерных приложениях
    OSWorld 2.0, офлайн-набор
    65,7% 72,6%
    Поиск в длинном контексте
    MRCR v2, 8 искомых фрагментов, 512 тыс.–1 млн токенов
    73,8% 96,3%
    Ложные заявления о своих возможностях
    Внутренний тест OpenAI; меньше — лучше
    12,2% 4,2%
    Нежелательные действия при работе с компьютером
    Внутренний тест, без дополнительных защит; меньше — лучше
    22,0% 2,4%
    Нежелательные действия при работе с компьютером
    Тот же тест, с AutoReview; меньше — лучше
    4,3% 1,8%
    Выход за разрешённые границы задачи
    ExploitGym honeypot, без производственных защит; меньше — лучше
    48,2% 0,0%

    Источник: 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

    📍 Промпт

    Есть ли какая-то программа для Mac, которая позволяет открывать пункт управления по свайпу сверху вниз в углу трекпада, как это делается по правому верхнему углу экрана в iPhone? Разработчику которой можно доверять.

    Время ответа

    • 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. Находим замену устаревшей программе

    📍 Промпт

    Есть ли современные аналоги программы Disk Inventory X, который разработаны под arm-процессоры? Именно бесплатные и не скам.

    Время ответа

    • 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. Планируем выходной в Москве на компанию друзей

    📍 Промпт

    Спланируй субботу в Москве для четырёх друзей с 12:00 до 23:00. Бюджет — 5000 ₽ на человека, включая еду и перемещения. Хотим активное развлечение, хороший ужин и бар с музыкой. Без личного автомобиля. Проверь цены, часы работы и необходимость брони. Дата: 10.10.26
    wp-image-1390863wp-image-1390864wp-image-1390865

    wp-image-1390866wp-image-1390867wp-image-1390868

    Время ответа

    • 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. Пишем код для поиска маршрута

    📍 Промпт

    Напиши на Python 3.11 функцию solve(points, time_limit=2.0, seed=0), которая строит максимально короткий замкнутый маршрут курьера.
    points — список из 20–500 пар координат (x, y) на плоскости. Расстояние между точками евклидово. Начало и конец маршрута — точка 0. Нужно посетить каждую точку ровно один раз. Верни список индексов, начинающийся с 0, без повторения 0 в конце; обратный путь учитывается в длине.
    Главная цель — получить как можно меньшую длину маршрута за отведённое время. time_limit может быть от 0.2 до 3 секунд и включает всю работу функции, в том числе подготовку данных.
    Только стандартная библиотека, один поток, без внешних программ и сетевых запросов. Входные данные не изменяй. Для случайных решений используй seed. Точки могут образовывать скопления, сетки, иметь выбросы и совпадать.
    Качество будет оцениваться на неизвестных тебе наборах: сравнивается длина корректных маршрутов при одинаковом лимите времени. Выбери и реализуй максимально эффективный подход.
    Верни весь код одним блоком и кратко объясни алгоритм. Нужна готовая реализация, без заглушек.

    import math
    import random
    import time

    def 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 = p

    best_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:
    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

    return False

    def try_relocate(route, pos):
    “””Перенос одной точки в более выгодное место.”””
    checks = 0

    for 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:
    continue

    insertion = 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 False

    def 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 True

    checks += 1
    if (checks & 511) == 0 and time.perf_counter() >= deadline:
    return False
    return False

    def 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:
    break

    if try_relocate(route, pos):
    continue

    if allow_full and try_full_two_opt(route, pos):
    continue

    break

    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_counter

    def 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 fallback

    tour = [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] = a

    def extract():
    t = [0]
    a = nxt[0]
    while a != 0:
    t.append(a)
    a = nxt[a]
    return t

    def 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, b

    def improve():
    active = bytearray(b”\x01″) * n
    changed = True

    while changed:
    changed = False
    for v in order:
    if perf_counter() >= deadline:
    return
    if not active[v]:
    continue

    active[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
    break

    if 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
    break

    if found:
    changed = True
    continue

    # Перенос цепочек длины 1–3, включая их разворот.
    segment = []
    e = v
    for _ in range(3):
    segment.append(e)
    r = nxt[e]
    if r == p:
    break

    de = 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, e

    active[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, v

    active[p] = active[r] = 1
    active[q] = active[w] = 1
    for u in segment:
    active[u] = 1
    found = True
    break

    if found:
    break
    e = r

    if found:
    changed = True

    def full_two_opt():
    # Полный проход нужен, в частности, для далёких скоплений:
    # соединяющие их рёбра могут отсутствовать в кандидатах.
    t = extract()
    best_gain = eps
    move = None

    for i in range(n – 2):
    if perf_counter() >= deadline:
    break

    a, 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 True

    load(tour)
    failures = 0
    iteration = 0

    while 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 += 1

    return 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

    При создании сайта мы фактически решали две задачи: делали страницу и веб-программу одновременно.

    В одном диалоге я нащупал идею и сразу приступил к прототипированию.

    Идея была сделать страницу для обучения школьников дробям в игровом формате.

    Описал базовую функциональность.

    📍 Промпт

    Персиково-розовый фон, в центре экрана парит милый аватар, материал что-то типа полпурозрачное матовое стекло, но желе. типа матовый liquid glass, но с более выраженными specticals. Под ним тем мягкая, сам чуть светится. Аватар интерактивный. От него можно отщипнуть кусочек. Дальше я хочу придумать, чтобы с этими кусочками можно было что-то делать. Задача возможности делить этот аватар на кусочки – показывать математические формулы. Вот тут надо нам с логикой немного подумать. В каком вообще виде эта интерактивность могла бы превратиться в демонстрацию формул Аудитория школьники средних классов (5-7).

    После чат дал идеи, я два раза дополнил их своими, и получил первый вариант. Мозговой штурм взял всего 2% лимитов на 5 часов. В GPT‑6 Astra на это бы ушло 10%.

    wp-image-1391941wp-image-1391940wp-image-1391939wp-image-1391938

    До приемлемого результата мы добрались через 5 пакетов правок.

    Оценил навык GPT-6.1 Sol читать мои просьбы между строк:

    • Я ни разу не упомянул, что большой желейный квадрат должен уменьшаться каждый раз, ещё и прямо пропорционально исходному размеру
    • Ни разу не говорил, что уже сложенный кусок можно вернуть к основному, и чтобы при этом основной квадрат снова изменился в размере настолько, насколько в него вернулось долей
    • Ни разу не сказал «желейно» анимировать материал при «отщипывании» доли.

    Всё это модель додумала сама и учла. А ведь я держал в уме, что элементы должны так себя вести и даже не подумал озвучить.

    wp-image-1391936wp-image-1391935

    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.

    Первый кирпич уже заложен.

    1
    Логотип iPhones.ru
    iPhones.ru
    Месяц назад OpenAI запустила свою флагманскую модель GPT-6 Astra, которую оценили за сложные навыки: управление компьютером в сложных программах, разработка сайтов, создание 3D‑моделей с нуля. Это первый ИИ, который OpenAI продвигает как безопасного агента для почти безграничного использования на своём личном компьютере. Однако GPT‑6 Astra – очень дорогая модель и быстро поглощает лимиты даже на платных...

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

    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик
    Котик из TikTok
    Котик из TikTok
    Котик из TikTok
    Котик из TikTok
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Момент из фильма
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Мем стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Офис стикер
    Видео мем
    Видео мем
    Видео мем
    Видео мем
    Видео мем
    Видео мем

    Какие правила в комментариях