Сообщество - Лига программистов

Лига программистов

2 399 постов • 12 007 подписчиков

Популярные теги в сообществе:

Новое поколение софта с недетерминированным кодом. Или как я начал разговаривать со своими программами, дописывая их прямо на ходу⁠⁠

У каждого айтишника есть свое личное кладбище домашних проектов. Тебе приходит в голову отличная идея автоматизировать какую-нибудь рутину или творческую штуку. Ты садишься за редактор, пару вечеров бодро пилишь ядро и это начинает работать и решать какой-то частный случай нужной задачи. Но потом понимаешь, что есть еще куча случаев когда это не работает по 1001 причине и надо дописывать поддержку все новых и новых деталей. На третьи выходные запал пропадает, потому что вместо самой задачи ты уже две недели строишь к ней панели управления и делаешь софт а не ту задачу ради которой он предназначен. Проект отправляется в долгий ящик, а ты остаешься на полудоделаных костылях и оставляешь попытки все это довести до ума и загораешься чем-то другим.

Последние несколько месяцев я живу в совершенно другой реальности. Мои новые программы вообще не имеют кнопок, окошек и меню настроек. У них у всех один интерфейс - микрофон, строка ввода текста с кнопкой отправить и терминал. Более того, у них нет даже строго детерминированного кода, который можно запустить и получить результат. Нет момента релиза, когда можно выдохнуть и сказать - ну все, программа дописана, теперь просто пользуемся. Я открываю окно терминала, запускаю там pi, и дальше мы с ним в одном текстовом чате одновременно делаем дело и тут же проектируем и пишем саму программу или обрывки кода и функции программы, которые делают части дела. Ощущение от этого довольно странное - будто ты сначала едешь на велосипеде и прямо на полном ходу он постепенно трансформируется сначала в скутер, потом в внедорожник, потому что решил свернуть с асфальта на кукурузное поле.

Что за софт такой?

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

Сначала ты надеваешь каску разработчика. Ты сидишь в среде разработки, пишешь код, продумываешь логику, пытаешься заранее угадать все случаи жизни, собираешь проект. В момент сборки происходит магия превращения живой мысли в застывший бетон. Получается готовый файл или сервис - по сути, замороженный артефакт. В нем уже ничего само не изменится, он умеет ровно то, что в него заложили пять минут или пять лет назад.Потом ты снимаешь каску строителя и надеваешь шляпу обычного пользователя. Ты берешь этот застывший артефакт и начинаешь с ним работать. И вот тут всегда начинается самое интересное. Ровно в середине работы ты понимаешь, что в одном месте логика жмет, в другом не хватает маленькой галочки, а на третьем шаге программа делает откровенную глупость, которую ты просто не мог предвидеть, пока не столкнулся с реальными данными.

Что приходится делать в классическом мире? Правильно, бросать свою задачу на полпути. Ты закрываешь программу, выходишь из рабочего потока, снова лезешь в исходники, вспоминаешь, как там все устроено, правишь код, пересобираешь этот бетонный куб заново и запускаешь его с начала. Пока ты этим занимался, творческое настроение уже улетучилось, а что именно ты хотел сделать в самом начале - забылось. Разделение на время создания софта и время его использования кажется нам настолько естественным, что мы даже не замечаем, сколько сил съедает это постоянное переключение контекста.

В агентном софте, в котором я сейчас поселился, этой стены нет. Все три процесса - использование программы, ее написание и переделка - схлопнулись в один процесс и происходят одновременно. Внутри одного и того же разговора с системой.

Устроено это на удивление просто, без всякой космической магии. Вместо монолитного приложения у тебя есть папка с проектом. В этой папке лежат небольшие рабочие скрипты на условном питоне, которые умеют делать конкретные атомарные действия - например, нарезать аудио, сходить по сети в какую-нибудь модель или склеить картинки. А рядом с ними лежат обычные текстовые файлы с инструкциями на человеческом языке - как этими скриптами пользоваться, в каком порядке их запускать, какие правила соблюдать и чего делать категорически нельзя. И, что интересно, ни один из этих артефактов ты не пишешь сам. Они появляются и преобразуются исходя из логики решаемой конкретной задачи.

Поверх этой папки живет агент. Когда ты к нему приходишь, ты не нажимаешь кнопку старт. Ты просто пишешь ему в чат обычными словами, какую задачу нужно провернуть сегодня. Он читает свои текстовые инструкции, сам находит нужные скрипты или соображает где их взять и как изготовить, запускает их, смотрит на результат и двигается дальше. То есть на этом уровне ты просто пользуешься софтом, отдавая команды голосом или текстом. Но самое главное начинается через пару минут, когда ты видишь промежуточный результат и понимаешь, что хочется иначе. Ты не прерываешь работу, не открываешь другой редактор и не идешь править код руками. В том же самом диалоге, прямо следующей репликой ты говоришь агенту что не так с текущим процессом и каким он должен быть. Агент пытается переписать программу так чтобы процесс стал таким как тебе нужно.

Буквально пишешь ему: слушай, на этом шаге получилось кривовато, давай-ка открой свой скрипт сборки, поменяй там логику выравнивания текста, запиши себе в инструкцию больше никогда так не лепить строчки впритык, и сразу же перезапусти этот шаг на наших текущих файлах. И он идет, правит свой собственный код, обновляет свою документацию и тут же продолжает выполнять твою рабочую задачу уже обновленным инструментом.

Получается удивительный гибрид. Софт перестает быть мертвым молотком, которым ты либо бьешь по гвоздю, либо несешь его в кузницу на переплавку. Он становится живым и пластичным. Он дописывается и умнеет ровно в тот момент, когда ты им пользуешься, питаясь твоими замечаниями по ходу реального дела. Ты не проектируешь систему заранее на полгода вперед, пытаясь предусмотреть все края и углы. Ты начинаешь с пары кривых костылей и за десяток рабочих вечеров прямо в процессе разговоров выращиваешь из них идеально подогнанный под твои руки комбайн.

Как это живёт на практике

Чтобы это не звучало как сухая философия из мира далекого будущего, покажу на живом примере, который крутится у меня почти каждый вечер. Некоторое время назад я плотно подсел на генерацию музыки в Suno. Занятие это азартное - сидишь, крутишь стили, подбираешь тексты, и довольно быстро у тебя скапливаются тысячи треков, которые самому искренне нравятся. Хочется ими поделиться с миром или хотя бы красиво сложить в коллекцию чтобы слушать. Ну и если есть звук, то почему бы не сделать клип - с видеорядом интереснее? Садиться в полноценный видеоредактор, руками искать сотни картинок, двигать их по таймлайну под каждый куплет и настраивать вылеты титров - это верный способ возненавидеть свое хобби примерно ко вторнику. Писать под это дело классическую программу с графическим интерфейсом, ползунками и превьюшками - значит закопаться на полгода в верстку окошек. Поэтому у меня вырос живой агентный конвейер, который делает из музыки готовые видеоклипы.

Под капотом у этого конвейера с полдюжины шагов, и каждый шаг - это отдельный скрипт со своей подробной текстовой инструкцией для агента. В общих чертах маршрут выглядит так: сначала система заглядывает в мою музыкальную папку и находит группу треков, которым я поставил лайки и просит выбрать какой взять в работу. Причем я могу ему задать и не тот который он предложил, а тот что звучит сейчас у меня на телефоне, зная его название - это работает из коробки для этого ничего не надо было делать. Реальность такова, что агент понимает то, что ты ему говоришь человеческим языком и это дает большшие преимущества перед исполняемым кодом старого типа. Затем запускается модуль распознавания речи, который внимательно слушает песню и вытаскивает из нее текст с привязкой каждого слова ко времени до долей секунды. Это нифига не тривиальный процесс и он редко проходит как по маслу для каждой новой песни, агенту приходится изощряться с разбиением музыки на части и пробовать разные параметры, чтобы используя модель whisperX small получить точные таймстампы для строк из песни. И для тех строк которые не получились - подобрать значения "на глаз" исходя из известных таймстампов. Эту задачу мне не удавалось решать детерминированным софтом без привлечения толстых моделей, запускаемых на видюхах или платных облачных сервисов. Хотя.. насчет облачных сервисов надо будет проверить на лимиты триалов и пары-тройки их десятков может быть и хватит.

Дальше в дело вступает нейросетевой сценарист. Он берет этот размеченный по времени текст, слушает структуру песни и режет ее на логические сцены по несколько секунд. На каждую сцену он придумывает визуальный сюжет - что именно должно быть в кадре, какой там свет, какое настроение и как это связано со смыслом строчек. После этого промпты со сценарием улетают в генератор изображений, который рисует пачку картинок к каждому кадру. И в финале скрипт-монтажер берет эти статичные картинки, пускает по ним плавное движение виртуальной камеры с легкими наездами и покачиваниями, склеивает их через мягкие переходы точно под ритм, накладывает сверху аккуратные титры и выдает готовый видеофайл.

Звучит как обычный автоматический скрипт, где нажал одну кнопку и ушел пить чай, но вся соль в том, что с творческими задачами полная автоматика почти всегда выдает пластмассу. Тут нужен человек в процессе, но не загруженный дурацкой рутиной, которая убивает все желание это делать. Поэтому весь интерфейс к этой фабрике клипов - это обычный чат с агентом.

Выглядит наш сеанс примерно так. Я запускаю агента пока гуляю по парку и пишу ему: давай возьмем последний трек про геометрию, и начнем собирать по нему клип. Проходит пара минут. За это время он сам сходил в папку, нашел нужный файл, прогнал его через расшифровку звука, понял что получилась лажа - подогнал параметры whisper, получил правдоподобный результат, проверил все два раза, вызвал сценариста - наделал промптов, подготовил 4 варианта обложки и несколько пробных кадров. В чат вываливается отчет со ссылками на картинки. Я их смотрю - одна из обложек отличная. Но вижу что картинки для математической песни содержат каракули вместо формул.

В обычной программе я бы сейчас полез руками редактировать какой-нибудь огромный файл конфигурации или переписывать текст в окошках, что ясное дело, невозможно сделать гуля по парку. Здесь я просто пишу в чат одну фразу: ставь 2ю обложку первым кадром и генерируй иллюстрации через арену роутером Max для всех картинок где есть формулы, чтобы формулы нормально отображались на картинках и были осмысленными, а не каракулями.

И вот происходит слияние. Агент одновременно правит конкретный сценарий моего текущего клипа и тут же идет в системный файл конвейера, редактируя правила поведения для будущих запусков. Мне не нужно думать о том, что сейчас я пользователь, а через минуту разработчик. Я просто разговариваю с системой о том, что мне нужно получить, а она сама разбирается, что нужно подкрутить в текущих скриптах и как это лучше сделать.

Мы едем дальше. Я говорю: сценарий и картинки отличные - собирай видео. Еще через несколько минут я открываю готовый ролик. Картинки вышли отличные, формулы нарисованы правильно, камера движется, но я замечаю досадный косяк сборки. В паре мест строчки песни оказались слишком длинными, и титры вылезли почти к самым краям кадра, смотреть неудобно. А еще мне вдруг захотелось, чтобы на инструментальном проигрыше камера не просто ехала вбок, а медленно отдалялась назад, создавая ощущение простора.В скрипте сборки видео никакого отдаления на проигрышах вообще не было предусмотрено в коде - там просто чередовались легкие наезды и панорамы. Если бы это был классический пет-проект, я бы вздохнул, закрыл плеер, открыл документацию по библиотеке обработки видео, полчаса вспоминал математику масштабирования кадров, сломал бы по дороге наложение звука, починил обратно и только к полуночи увидел результат.

Вместо этого я возвращаюсь в наш диалог и пишу: слушай, картинки супер, перерисовывать их не надо, но давай допилим сам сборщик видео. Во-первых, научи скрипт автоматически бить длинные фразы титров на две строчки, если там больше пяти-шести слов, чтобы они не липли к краям экрана. Во-вторых, добавь в код сборщика новый тип движения камеры с плавным отдалением от центра и включи его для всех кадров, где в разметке нет слов. Как допишешь скрипт - просто пересобери финал из уже готовых картинок.

Агент задумывается на минуту, шуршит питоновским файлом, сам тестирует, не отвалился ли синтаксис, запускает быструю пересборку видео без повторной генерации графики и кладет передо мной обновленный клип. Титры аккуратно сложены в две строчки по центру, на гитарном соло камера красиво улетает назад над зимним лесом. А главное - мой конвейер только что стал чуточку умнее и обзавелся новой функцией, причем я не написал ни строчки кода руками и ни на секунду не отвлекся от создания конкретного ролика.

Готовый видеоклип в таком процессе получается почти как приятный побочный эффект от самой беседы. Ты просто идешь, общаешься с системой о музыке и картинках, на ходу подпиливаешь ей шестеренки обычными человеческими словами, а сбоку из этого разговора сам собой выпадает смонтированный ролик. И к десятому такому вечеру ты вдруг замечаешь, что замечаний к системе становится все меньше, потому что все твои вкусы и мелкие правки уже бережно вписаны в ее скрипты и инструкции во время прошлых посиделок.

Поймал себя на мысли, что после такого опыта смотреть на привычные тяжелые программы с сотнями вкладок и выпадающих меню становится как-то грустно. Очень быстро привыкаешь к тому, что софт - это не бетонная коробка, к которой ты должен приспосабливаться и учить расположение кнопок, а живой собеседник, который перестраивает сам себя под твою задачу прямо во время работы.

Если представить, что любой сложный инструмент можно превратить в такой живой разговорный конвейер, который сам себя дописывает по вашим замечаниям в чате - какую свою рутину, рабочую головную боль или творческую задачу вы бы перевели на такие рельсы в первую очередь? С каким софтом вам хотелось бы просто поговорить человеческим языком вместо того, чтобы сто раз тыкать мышкой по менюшкам?

Показать полностью
1

Запустил Pixal3D / TRELLIS.2 / hunyuan3D на AMD RX 9070 XT в Windows — без WSL и NVIDIA⁠⁠

Запустил Pixal3D / TRELLIS.2 на AMD RX 9070 XT в Windows — без WSL и NVIDIA

Привет, Пикабу!

Если у вас видеокарта AMD и вы когда-нибудь пытались запускать на ней нейросетевые 3D-инструменты, то наверняка видели этот бесконечный круг:

«Тут нужна CUDA».
«Поставь Linux».
«Попробуй WSL».
«Просто пересобери расширение».
«У нас вообще-то проверялось только на NVIDIA».

Мне это надоело, поэтому я решил проверить, можно ли нормально запустить Pixal3D / TRELLIS.2 на AMD прямо в Windows. Не через виртуалку, не через WSL и не с надеждой, что какая-нибудь CUDA-совместимость сама всё починит.

Коротко: получилось, но с важными оговорками. Я собрал установщик, HIP-расширения, проверки и рабочий пример для Radeon RX 9070 XT. Всё выложил на GitHub.

Что именно работает

Проверенная конфигурация такая:

  • Windows x64;

  • AMD Radeon RX 9070 XT (gfx1201);

  • ROCm 7.2.1;

  • PyTorch 2.9.1+rocm7.2.1;

  • CPython 3.12.

Для неё я собрал нативные Windows-колёса CuMesh, FlexGEMM и O-Voxel. CuMesh BVH заменён на cuBQL, для которого тоже есть GPU-проверки.

Установщик создаёт отдельный Python-runtime и не трогает системный Python. ROCm и PyTorch скачиваются с официального репозитория AMD, размер файлов и SHA-256 проверяются автоматически. Драйверы установщик не заменяет и не откатывает, перезагрузка не требуется.

После чистой установки прошли:

  • 9 из 9 базовых проверок;

  • 6 из 6 обязательных проверок HIP-расширений;

  • 44 из 44 Python-теста в AMD-окружении;

  • проверки sparse SDPA, NAF, FlexGEMM, O-Voxel, CuMesh и cuBQL BVH.

В репозитории есть пример модели Baton Standard 1024 с текстурой 2048 × 2048 и сохранённым результатом генерации.

А теперь без розовых соплей

Это не универсальная поддержка всех видеокарт AMD.

Я проверял только RX 9070 XT. Если у вас другая карта, я не буду кричать «всё поддерживается», пока кто-то реально не прогонит на ней весь комплект проверок.

Это также не готовый пакет со всеми нейросетевыми весами. Полные веса моделей в релиз не входят. Установка и зелёные проверки означают, что среда и расширения готовы, а не что после одного клика автоматически появятся все режимы генерации.

И да, это не волшебный переводчик любой CUDA-программы в AMD. Пришлось разбираться с конкретными зависимостями, собирать нужные расширения под HIP и проверять, что они действительно работают, а не просто импортируются.

Покупать RX 9070 XT только ради этой сборки я бы не советовал. А вот если такая карта уже есть — можно попробовать.

Свежий релиз v0.1.3

Последний релиз в основном посвящён не самой генерации, а тому, чтобы проект нормально проверялся не только на моём компьютере.

Изначально часть тестов случайно ссылалась на мой локальный каталог afamd. У меня всё проходило, а GitHub Actions честно отвечал:

«Файл не найден».

Классическое «у меня работает».

Я убрал эти пути, разделил автономные тесты и тесты, которым действительно нужна AMD-карта, настроил CI на Windows и добавил бейдж статуса в README.

Теперь GitHub после каждого изменения запускает 20 автономных проверок, которым не нужны ROCm, PyTorch и GPU. Последний запуск полностью зелёный. Полный AMD-набор по-прежнему проверяется отдельно на видеокарте.

То есть в v0.1.3 колёса и runtime не изменились, зато проект стало проще проверять и развивать дальше.

1. Батон — пример Pixal3D на AMD

«Батон, созданный в Pixal3D / TRELLIS.2 на AMD RX 9070 XT. Четыре ракурса модели, текстура 2048 × 2048».

2. Земля — дневная сторона

«Отдельный эксперимент с игровым рендером Земли: облака без видеотекстуры».

3. Земля — граница дня и ночи

«Граница дня и ночи: облака, освещение и огни городов на тёмной стороне».

Как попробовать

Скачайте полный ZIP из релиза и распакуйте его. Затем откройте PowerShell в корне проекта.

Сначала сухой запуск — без скачивания и изменений:

powershellКопировать

powershell -NoProfile -ExecutionPolicy Bypass -File installer/amd/Pixal3DNative.ps1 -RuntimeRoot C:\AMD-AI\Pixal3D-ROCm -DryRun

Если всё устраивает, запускайте установку и проверки:

powershellКопировать

powershell -NoProfile -ExecutionPolicy Bypass -File installer/amd/Pixal3DNative.ps1 -RuntimeRoot C:\AMD-AI\Pixal3D-ROCm

Каталог назначения лучше указать новый и не смешивать эту среду с существующими NVIDIA- или WSL-установками.

https://github.com/tsubasaprogame/Pixal3D-TRELLIS.2-AMD-ROCm...

Зачем я это выкладываю

Потому что одно дело — показать картинку и написать «у меня запустилось», и совсем другое — оставить нормальную отправную точку для следующего человека.

В репозитории лежат установщик, исходники изменений, колёса, контрольные суммы, тесты, результаты проверок и пример модели. Лицензии сторонних компонентов тоже сохранены.

Показать полностью 3
9

Драма вокруг прогрессбаров⁠⁠

Знаете, от чего прям противно? Вот эти вот прогрессбары, которые движутся не от настоящего прогресса, а с предзаданной скоростью. Типа, чтобы пользователь не пугался.

В чем вообще идея прогрессбара? Вот у тебя есть N файлов, ты скопировал M из них, и показал на прогрессбаре M / N × 100%. Ну и ты видишь, сколько работы сделано, а сколько осталось. Некоторые прогрессбары даже время примерное до конца показывали!

Потом люди заметили, что иногда прогресс неравномерен. Например, с теми же файлами, большой файл копируется дольше, а прогресс мы считаем по количеству. Тогда на большом файле 1% прогресса будет продвигаться дольше, чем на маленьких. Или скачивание из интренета, там вообще непредсказуемо. Если ты начнешь тут считать время, оставшееся до конца, оно у тебя будет плясать — 30 секунд, полдня, неделя, о, снова 30! Пошли сразу шутки, про 99%, про квантовую природу прогрессбаров и так далее.

Но — что важно — отображаемый прогресс был связан хоть с чем-то реальным! Можно было поставить курсор мыши на текущее положение, и если оно через 15 минут сдвинулось, значит программа еще что-то делает, а не зависла.

Понятно, что прогресс можно предсказать не всегда. Какая-нибудь установка софта, или, не знаю, обработка фотки плагином, короче, какая-то операция, которая не бьется так легко на N шагов, и в которой не всегда понятно, что такое прогресс. Для таких случаев придумали крутилки и недетерминированные прогресс-бары — это такие, в которых полосы нет, а просто все закрашено паттерном и крутится бесконечно по циклу. Типа, идея та же, операция делается, но сколько там прошло и сколько осталось мы фиг его знает.

Это все нормальные идеи. Пока что все хорошо. Элементы используются по назначению, коммуникация честная, претензий нет.

А потом какой-то маркетолог, или, может, таролог или астролог, в общем, человек с выдуманной профессией, подумал: смотрите. Допустим, мы логиним пользователя. Это сколько-то времени займет. Сколько? Никто не знает. Может, секунду. Может, десять. Вряд ли больше десяти. Но и не мнгновенно. То есть подождать придется. Так? Так. Это значит что? Что пользователь будет переживать. Надо ему что-то показать. Давайте покажем ему детерминированный прогресс-бар! Программисты сразу такие: ну нет, мы прогресс не посчитаем, там сложно, или еще какое-то му-хрю, расписались в беспомощности.

И тут мораль/сила воли/система ценностей, которой ни у кого из присуствующих и не было, дала слабину. «Давайте рисовать прогресс от балды!» — сказали они. За первую секунду закрасим 25%. Равномерно, будем добавлять 1% каждые 40 мс. За вторую закрасим, условно, 20%, за третью 15% и так далее. Как только загрузимся, то сразу дорисовываем до 100%, все же радуются, когда кажется, что куча времени еще осталась, а тут хоба и все сразу сделано! Ну а если не загрузимся за 10 секунд, то последние 5% будем тянуть сколько сможем, по какой-нибудь бесконечно приближающейся асимптоте (я уверен, что на том митинге, где это решили, прозвучало слово асимптота, мне нужно хоть что-то приятное про него представлять, иначе хана).

Так родилось самое противное изобретение современного интерфейсостроения — лживый прогрессбар. По сути своей он недетерминированный. Но выглядит как детерминированный. Он намеренно лжет и о совершенном прогрессе, и об оставшемся времени. Лжет прямо вам в лицо и не стесняется этого. Еще и выдает это под соусом заботы о пользователе.

А ничо тот факт, что мне, как пользователю, нравилось знать, что происходит? Что мне настоящий прогресс, сколь угодно неравновномерный, дороже любых лживых ваших мультфильмов? К настоящему можно было приспособиться, можно было выводы какие-то делать. Им можно было ПОЛЬЗОВАТЬСЯ. А со лживым можно только пить водку, грустно смотреть и плакать.

Хватит прятать от меня компьютер! Хватит кормить меня пустыми обещаниями! Я взрослый человек, я хочу знать, что происходит! Я готов принять любой прогресс, пока он правдивый.

А обещаниями своими в веб-интерфейсах друг друга кормите.

Автор: https://t.me/nikitonsky_pub/1050

Показать полностью
0

Как переехать с одного ИИ-агента на другой и не потерять историю работы⁠⁠

Как переехать с одного ИИ-агента на другой и не потерять историю работы

Недавно столкнулся с неприятной ситуацией. После проверки личности Anthropic заблокировала мне доступ к платной организации Claude Code. Подписка была Max 20x, пользовался активно, вёл сразу несколько проектов.

Ну заблокировали и заблокировали. Есть ведь Codex, Kimi, Cursor, OpenCode и другие инструменты. Казалось бы, бери другой и продолжай работать.

Но возникла проблема.

За несколько месяцев в Claude Code накопилась куча переписок по проектам. Мы обсуждали архитектуру, выбирали библиотеки, разбирали ошибки, отказывались от одних решений в пользу других. И далеко не всё это записывалось в документацию.

Как переехать с одного ИИ-агента на другой и не потерять историю работы

Код остался на компьютере, репозитории на GitHub тоже. А вот новый ИИ-агент понятия не имеет, почему программа устроена именно так и что мы планировали делать дальше.

Сначала попробовал встроенный импорт Claude Code в Codex. Часть истории перенеслась, но привязки диалогов к проектам получились кривыми, а некоторые данные потерялись. Результат не понравился.

Уже хотел написать собственную программу для переноса истории между агентами. Но сначала решил поискать готовые решения.

Так нашёл Hansard.

Что это такое

Hansard собирает историю работы разных ИИ-агентов в отдельный локальный архив и позволяет обращаться к ней из других инструментов.

Например, раньше работали с Claude Code, теперь используете Codex. Или решили перейти с Kimi Code на OpenCode. Или хотите найти старое обсуждение из Cursor.

Вместо того чтобы вручную переносить сотни диалогов, можно подключить Hansard и дать новому агенту возможность искать нужную информацию в старых сессиях.

Поддерживаются Claude Code, Codex, Cursor, Kimi Code, OpenCode, Antigravity и множество других инструментов. Историю Gemini CLI тоже можно импортировать, хотя полноценное подключение Recall непосредственно к Gemini CLI пока не предусмотрено.

И самое интересное: Hansard может не только искать старые разговоры, но и передавать контекст конкретной задачи другому агенту.

Как установить

Сайт программы: https://www.hansard.dev/

Для Windows и macOS есть графическое приложение.

Скачиваем установщик, запускаем. При первом открытии программа предложит найти историю установленных ИИ-агентов.

Выбираем нужные источники, указываем All history, чтобы собрать всю доступную историю, а не только последние 30 дней.

Затем выбираем, каким агентам разрешить пользоваться архивом. Например, Codex и OpenCode.

Запускаем импорт. Всё, остаётся проверить, что нужные разговоры появились в Hansard.

Для любителей командной строки есть другой вариант. Потребуется Node.js подходящей версии.

Устанавливаем:

npm install -g hansard

Запускаем настройку:

hansard init --since all

Проверяем результат:

hansard status

Если Codex не подключили во время настройки:

hansard integrations add-to codex

После этого перезапускаем Codex.

Как вернуть контекст проекта

Открываем в Codex нужный проект и пишем примерно следующее:

$recall Найди через Hansard историю этого проекта, в том числе диалоги из Claude Code. Изучи предыдущие решения, договорённости, выполненные и незавершённые задачи. Сравни найденное с текущими файлами проекта и историей Git. Расскажи, на чём мы остановились, что уже сделано и что планировалось дальше. Пока ничего не меняй.

Codex обращается к архиву, ищет связанные с проектом разговоры и восстанавливает контекст.

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

Кстати, в Claude Code для поиска используется /recall, в Codex — $recall. В некоторых других инструментах достаточно обычного запроса, если подключён MCP.

А можно перейти обратно?

Можно. И это, пожалуй, самое полезное.

Архив Hansard не принадлежит ни Claude, ни Codex. Сегодня можно работать в одном агенте, завтра в другом, а затем вернуться к первому.

Правда, есть нюанс: Hansard не переносит внутреннее состояние нейросети один в один. При продолжении конкретного диалога новый агент получает подготовленную сводку и при необходимости обращается к оригинальной истории.

Но для большинства задач мне как раз это и требовалось: не переносить интерфейс переписки, а сохранить накопленные знания о проекте.

Что стоит учитывать

Hansard не восстановит историю, если исходные файлы уже удалены и резервных копий нет.

Сам архив хранится локально, но в нём могут оказаться фрагменты кода, рабочие пути, токены и другая чувствительная информация. Поэтому перед использованием с корпоративными проектами стоит разобраться с настройками конфиденциальности.

Кроме того, когда новый агент читает старые разговоры через Recall, найденные фрагменты могут передаваться провайдеру используемой модели.

И ещё: восстановленный контекст желательно проверять. ИИ вполне может неправильно понять старое обсуждение или пропустить важное решение.

В общем, для меня история закончилась вполне удачно. Доступ к Claude Code потерял, зато нашёл способ перестать зависеть от истории одного конкретного агента.

Если тоже используете несколько ИИ-инструментов для разработки, возможно, пригодится.

А вы как переносите контекст между агентами? Или каждый раз начинаете разговор с чистого листа?

Показать полностью 1

PyCity: метавселенная, где Python строит город⁠⁠

Дисклеймер: это мой проект. Статья — разбор того, что уже работает, какие решения пришлось принять и где находятся основные узкие места. Без маркетинговых обещаний.

Дисклеймер: это мой проект. Статья — разбор того, что уже работает, какие решения пришлось принять и где находятся основные узкие места. Без маркетинговых обещаний.

Главный экран

Главный экран

Задача

Обучение программированию упирается в отсутствие физической обратной связи. Ученик пишет код, получает Hello, World! или Traceback, и на этом цикл заканчивается. Код не имеет веса, не рушится, не строится. Через две недели мотивация падает.

PyCity — попытка сделать так, чтобы каждая корректная строка на Python 3.11 материализовалась в 3D-городе. Написал функцию — надстроил этаж. Исправил ошибку — потушил пожар. Решил задачу — получил новый модуль для квартала. Это не геймификация ради геймификации, а способ дать коду визуальную плотность и мгновенную обратную связь.

Архитектурно город разбит на сектора 5×5, в каждом — ученик. Код исполняется в браузере через WebAssembly (CPython 3.11), результат передаётся в Three.js и отображается как геометрия.


Что реализовано

300 уроков, разбитых на уровни. Программа покрывает:

  • синтаксис, типы, условия, циклы, функции;

  • ООП, comprehensions, работу с файлами, исключения;

  • алгоритмы, Big-O, SQLite, паттерны проектирования;

  • асинхронность, сокеты, хэширование, JWT;

  • нейросети: от перцептрона до внимания QKV, LoRA и RAG;

  • распределённые системы: Raft/Paxos, фильтр Блума, LRU-кэш, WebSocket.

Финалы уровней — не тесты, а проекты: банковская система, ядро ИИ, «активация автономного сознания». Формулировки громкие, но по факту это набор задач, где нужно собрать работающий модуль.

Внутри урока открывается не просто редактор, а оконный менеджер: IDE с подсветкой, инспектор памяти, диспетчер процессов, имитация pip. Код исполняется локально в WASM, поэтому нет задержки на сервер. Есть ExecutionGuard, который прерывает бесконечные циклы, чтобы вкладка не зависала.

ИИ-ассистент объясняет ошибки компилятора человеческим языком: не «замените строку 4», а «ты забыл закрыть скобку в 4-й строке, поэтому интерпретатор ждёт продолжения».


Практические режимы

Код-дуэли 1 на 1. Два ученика получают одну задачу, ставят XP в эскроу. Кто первый отправляет корректное решение — забирает банк.

Код-дуэли

Код-дуэли

Охота на баги. Даётся реальный сломанный код: зависший светофор, утечка памяти из-за def add(item, q=[]), KeyError на сервере. Нужно найти и исправить.

Охота на баги

Охота на баги

SQL-майнфрейм. SQLite через WebAssembly, 4 связанные таблицы, 50 контрактов от SELECT до рекурсивных CTE и оконных функций.

SQL-майнфрейм

SQL-майнфрейм

Нейро-Колизей.
Режим, где ученик программирует ИИ боевого робота-меха. Пишет функцию make_decision(me, enemies, arena), которая на каждом такте возвращает действие. Дальше мех сражается сам — без ручного управления.

Нейро-Колизей

Нейро-Колизей


Инструменты преподавателя

У учителя есть 3D-стол с живыми статусами 25 учеников, электронный журнал, автоматическая посещаемость по «правилу 15 минут» и управление аномалиями. Последнее звучит необычно, но решает конкретную задачу: если ученик отвлёкся, учитель может наслать на его квартал кислотный дождь или поджечь здание. Пожар тушится решением текущей задачи. Это не наказание, а механизм возврата внимания.


3D-мегаполис

Вид от первого лица

Вид от первого лица

Город — не декорация, а основная система мотивации. Он разбит на сектора 5×5, каждый сектор занимает площадку 350×350 метров. Внутри сектора ученик строит свой квартал: этажность зданий, дороги, инфраструктура — всё это напрямую зависит от прогресса в уроках и потраченного XP.

Есть два режима взаимодействия:

  • Walk Mode (FPS). Ученик переключается в вид от первого лица, ходит по улицам, заглядывает в окна небоскрёбов, гуляет по кварталам одноклассников. Это не просто прогулка: так видно, кто продвинулся дальше, а кто застрял на стартовой вышке.

  • Режим проектора (кино-тур). Для школьного проектора или открытого урока. Камера взмывает в небо и запускает один из четырёх сценариев: тур по кадетам (7 секунд на квартал), бреющий полёт между небоскрёбами, круговую панораму всего мегаполиса или волнообразный дрейф над облаками.

Город живой: по дорогам ездят кибер-кары, останавливаются на светофорах, уступают друг другу дорогу. На высоте 65 метров курсирует монорельс на магнитной подушке. Это не статичная картинка — трафик и поезд работают постоянно.

Технически город собран на Three.js и React Three Fiber. Геометрия процедурная: здание не хранится как отдельная модель, а собирается из параметров (этажность, тип, материалы). Поэтому 25 кварталов по 350 метров не превращаются в гигабайты ассетов.


Кибер-Хаб


Экономический центр, где заработанный XP конвертируется в визуальное развитие квартала. Логика простая: опыт, полученный в дуэлях, рейдах и уроках, тратится на мегаструктуры.

Примеры объектов:

  • Салют Системы (5 000 XP) — неоновый фейерверк над крышами.

  • Неоновое Имя Архитектора (10 000 XP) — голограмма позывного в стратосфере.

  • Зенитные Прожекторы (12 000 XP) — четыре луча по углам квартала.

  • Золотые Магистрали (15 000 XP) — сияющий контур дорог вокруг сектора.

  • Монумент Python (20 000 XP) — обелиск с золотым обвивающим питоном.

  • Плазменный Купол (25 000 XP) — силовой купол над районом.

  • Башня Тесла (35 000 XP) — генератор плазменных дуг.

  • Зиккурат Данных (45 000 XP) — чёрная пирамида серверов.

  • Орбитальный Космо-Лифт (90 000 XP) — 2.6-километровый луч с движущейся кабиной.

  • Сфера Дайсона (250 000 XP) — рукотворная звезда в магнитных кольцах.

  • Квантовая Сингулярность (500 000 XP) — вращающаяся чёрная дыра над сектором.

  • Цитадель Гранд-Оверлорда (1 000 000 XP) — 200-метровый золотой шпиль.

Помимо мегаструктур есть апгрейды: спутниковый линк, оверклокинг виртуального процессора, золотые рамки аватара, эксклюзивные титулы для Зала Славы.

Смысл не в том, чтобы «купить красоту», а в том, чтобы дать XP материальный вес. Опыт не просто цифра в профиле — он меняет облик города, который видят все.


Алгоритмы и справочник Big-O

Три вида

Три вида

Визуализатор сортировок. Пошаговая демонстрация BubbleSort, InsertionSort, MergeSort и QuickSort. Сравниваемые элементы подсвечиваются красным, опорный элемент (pivot) — жёлтым, отсортированные позиции — зелёным. Ученик видит не результат, а процесс: как массив перестраивается на каждом шаге.

Интерактивное бинарное дерево поиска. Ученик вводит числа, наблюдает ветвление узлов, запускает поиск ключа за O(log N) с подсветкой пути. Отдельно можно вызвать балансировку по стандарту AVL и увидеть, как дерево перестраивается.

Справочник асимптотической сложности. Цветовая шкала от O(1) до O(2^N) с примерами из реальной разработки. Не абстрактные формулы, а конкретные операции: почему доступ к элементу списка — O(1), а поиск в неотсортированном массиве — O(N), и где в реальном коде это превращается в проблему.


Центр сертификации

Квалификация и сертификация

Квалификация и сертификация

Трёхуровневая система квалификации, привязанная к количеству пройденных уроков:

  • Уровень I — Junior Python Developer (150 уроков). Синтаксис, функции, ООП, базовые базы данных, основы математики перцептрона.

  • Уровень II — Middle Systems Architect (200 уроков). Алгоритмы на графах (BFS/DFS), асинхронные сокеты TCP/IP, упаковка байтов через struct, очереди, семафоры, паттерны GoF.

  • Уровень III — Senior AI & AGI Engineer (300 уроков). Трансформеры, механизм внимания QKV, квантование весов INT8, микросервисные саги, консенсус Raft, ядро AGI.

После сдачи теста ученик получает именной диплом с криптографическим идентификатором и возможностью экспорта в PDF. Это не «сертификат за прохождение курса», а привязка к конкретному объёму материала.


Итог

PyCity — работающий проект, а не концепт. Он решает конкретную проблему: даёт коду визуальную обратную связь и удерживает внимание за счёт игровых механик. Технически это связка Next.js, Three.js, WASM и Socket.IO, которая выдерживает одновременную работу группы.

Ссылка: pycity.ru. Если вы преподаёте Python или работаете с браузерным 3D — проект открыт для обсуждения архитектурных решений =)

Показать полностью 10

Написал скрипт распознания объектов с веб камеры⁠⁠

Написал скрипт распознания объектов с веб камеры

код прикладываю изображением ибо встроенное отображение в Пикабу очень неочень.

этот код загружает необходимые библиотеки, задействует веб камеру и считывая видеопоток с вебки обрабатывает его через нейросетевую medium модель, можно поставить и другую типа nano но для меня medium оптимальна (с моими жирнющими 8гб оперативки), завершение программы происходит через "q"

результат работы кода выглядит вот так:

по какой то причине камера после подключения успешно инициализируются только со второго запуска, но так или иначе работает эта вся система сносно, есть модель которая обводит по контуру найденный объекты, описание ниже

Основная линейка моделей (по размеру)

Каждую модель можно загрузить, просто меняя последнюю букву в названии (например, yolov8n.pt, yolov8s.pt и т.д.):

  • yolov8n.pt (Nano): Самая маленькая и быстрая модель.

    • Описание: Разработана для микроконтроллеров, мобильных телефонов и Edge-устройств (например, Raspberry Pi). Минимально нагружает процессор, но может пропускать мелкие или перекрытые объекты.

  • yolov8s.pt (Small): Легкая модель, сбалансированная под CPU.

    • Описание: Хороший компромисс между скоростью и качеством. Идеальна, если инференс нужно запускать на обычном процессоре ноутбука без мощной видеокарты, сохранив адекватную точность.

  • yolov8m.pt (Medium): Средняя модель. (Используется у меня)

    • Описание: Золотой стандарт для большинства коммерческих задач. Требует наличия GPU среднего уровня для стабильного реалтайма, отлично распознает сложные сцены.

  • yolov8l.pt (Large): Большая модель.

    • Описание: Высокая точность детекции, стабильно держит мелкие детали. Из-за веса существенно снижает FPS на слабых устройствах, требует хороших видеокарт (серии RTX).

  • yolov8x.pt (Extra Large): Максимальная точность архитектуры.

    • Описание: Самая тяжелая, но и самая точная модель в линейке. Применяется там, где критически важна безошибочность (например, в медицине или анализе спутниковых снимков), а скорость обработки кадра вторична.


Специализированные суффиксы (под конкретные задачи)

Если вам нужна не просто детекция объектов рамками (по умолчанию), к названию весов добавляются суффиксы задач. Все они так же поддерживают градации от n до x:

  • -seg (Segmentation / Сегментация): Например, yolov8m-seg.pt.

    • Описание: Вместо квадратных рамок обводит объекты по их реальному контуру пиксель за пикселем.

  • -pose (Pose Estimation / Скелет): Например, yolov8n-pose.pt.

    • Описание: Находит человека и определяет ключевые точки его тела (суставы, глаза, уши) для анализа позы или движений.

  • -cls (Classification / Классификация): Например, yolov8s-cls.pt.

    • Описание: Не ищет координаты объектов, а просто выдает ответ, что в целом изображено на картинке (например, «кошка» или «собака»).

  • -obb (Oriented Bounding Boxes / Повернутые рамки): Например, yolov8m-obb.pt.

    • Описание: Выделяет объекты рамками, которые могут быть наклонены под любым углом (часто используется для поиска автомобилей или кораблей на аэрофотосъемке).

Показать полностью 1 1
95

Ответ на пост «С чего начать учить программирование, если бесплатных материалов слишком много: порядок важнее ресурса»⁠⁠2

Нужно начинать с математики. Не с заучивания формул, а с логики, множеств, функций, доказательств и умения последовательно рассуждать. Это фундамент, который не устареет с появлением очередного языка или нейросети.

Потом - один язык программирования, чтобы понять, как устроены вычисления. Дальше алгоритмы, структуры данных, разные парадигмы, архитектура и спецификации.

Тем более что программирование уже движется от ручного написания кода к описанию моделей и требований. Примеры разных подходов: GitHub Spec Kit (https://github.github.com/spec-kit/), JetBrains MPS (https://www.jetbrains.com/mps/), Smart1Spec для 1С (https://smart1spec.com/), OpenSpec (https://openspec.dev/), TLA+ (https://lamport.azurewebsites.net/tla/tla.html).

ИИ всё лучше справляется с реализацией. Но точно сформулировать задачу, обнаружить противоречие, построить абстракцию и проверить корректность результата — это уже математическое мышление.

Поэтому мой порядок: математика → один язык → алгоритмы и парадигмы → модели и спецификации → разработка с ИИ. Причём ИИ можно использовать на всех этапах обучения, но не вместо собственного мышления.

Продолжение поста про UIscript⁠⁠

Серия Мой UIscript, личный опыт

Ещё раз привет, друзья, не ожидал такого количества комментариев (как негативных, так и позитивных) — всем спасибо.

Но я хочу ответить на несколько самых популярных вопросов: во-первых, мне пишут, что русский синтаксис не нужен и чтоб привыкали начинающие к английскому, я с вами, наверно, соглашусь, но хочу сказать, что, может, кому-то будет удобнее русский синтаксис, в любом случае, как я и говорил в посте — я заложил поддержку сразу двух языков: английского и русского.

Калькулятор на UIscript. Русский и английский код - одинаковый результат

Также калькулятор с идентичным интерфейсом, но на HTML, CSS и JavaScript

Также калькулятор с идентичным интерфейсом, но на HTML, CSS и JavaScript

Во-вторых, я говорил, что делаю с ИИ, но чётко разграничил, что не «написал промпт дипсику и выложил на GitHub», нет, я придумал проект, синтаксис, общую архитектуру, все фичи (двуязычность, например), а также тестировал и исправлял баги, которые нашёл в коде. В-третьих, зачем ещё один язык? Как по мне для супер простого создания интерфейсов с лёгким синтаксисом (как по мне) языков либо нет, либо я не знаю, Yoptascript ну не приличный, как по мне, хотя крутой.

И ещё хочу сказать, что цель языка — не только обучение, но и как побочный эффект — подходит для быстрого прототипирования, то есть легко набросать калькулятор, интерфейс и разные мелкие программки.

Ссылка на прошлый пост для тех кто не читал: Создал язык программирования на русском (и не только) для обучения детей и новичков. Оцените UIscript плиз

P.S. Старался ответить на каждый комментарий, даже негативный, но их набралось много, и поэтому решил сделать отдельным постом (этот пост)

Показать полностью 3
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества