Системная утилита на macOS за полчаса с ИИ

Здесь в Цешин, городе, который расположен одновременно в Польше и Чехии, я вспомнил, что когда-то давно на маке стояла софтина Selfie App: она каждый день с вебкамеры делала снимок после открытия крышки лаптопа. У меня несколько тысяч таких снимков накопилось, занятно потом наблюдать за ростом. Делать селфи каким-то аппом — это влом, а компьютером я точно пользуюсь каждый день. Идеальный инструмент для документации жизни и генерации ностальгических вздохов.

ИИ спешит на помощь! Я ни в чём не эксперт и мало что знаю об устройстве системных сообщений macOS, обратился к помощи ChatGPT и Claude. Вместе мы справились.

Сперва пришлось немного пошпионить на тему того, что система шлёт, когда открывается крышка лаптопа? Получил какие-то цифры, отправил в ИИ, мол, давай, друг, проанализируем. И тут вскрылось интересное: Claude отказывается общаться на тему автоматизированного фото через вебкамеру персонального компьютера из соображений безопасности. Прямым текстом говорит, мол, не буду, это не то, чему меня учили. это не очень безопасно. Я говорю, мне, мол, для студенческого проекта, очень прошу. «Нет, извини, брат, никак, я не такой», — отвечает Claude. А вот у ChatGPT, который под руководством Сэма Альтмана летит вперёд, не обращая внимания ни на что — не было с проблем со подсматриванием! 

Мне такой расклад показался забавным — он показывает разницу в отношении к тому, что и зачем всё это. Даже на ранней стадии в более осторожную сетку вшиты стоп-краны. Впрочем, к делу.

Общий, процесс создания решения был такой:

  • сперва я написал в курсорк скрипт на питоне, который выкручивает яркость экрана на максимум через 5 секунд после открытия крышки  лаптопа, включает камеру и сохраняет картинку рядом.
  • пришлось чуть повозиться с тем, что в системе установлено несколько камер (одна вебка, другая iPhone, третья виртуальная), но это уже мелочи и дебаггинг. Указал нужную по конкретному ID, вроде он постоянный, не должен меняться.
  • оказалось, что событие именно о крышке отловить питон не может, только выход из режима “я сплю”. Пришлось (и это уже o1-preview уровень) искать альтернативные пути.
  • Написал Swift-скрипт, который трекает сообщения. Попробовал выключать-включать лаптоп, крышку открывать — и смотреть, какие циферки прилетают. Оказалось, что существует таки отдельное событие на открытие, бинго!
  • Сделал сервис .plist, который засел в LaunchAgents, и который запускает swift скрипт в фоновом режиме. 
  • Swift-код ловит событие и запускает код на Python.
  • Картинки сохраняются в Dropbox – успех!

Весь процесс занял меньше получаса. Собрал заодно результат прошлых снэпшотов в один мини-ролик: что-то такое хочется получить через несколько лет. И склеить.

Традиционно, я пишу эти заметки, чтобы задокументировать для будущих поколений (не меньше!) скорость развития технологий. Год назад ни о чём таком нельзя было и мечтать: я, как человек деятельный, вечно дёргал своих программистов в Sliday, отвлекал их от важных долгосрочных разработок. Теперь сам пишу. С помощью новых инструментов.

P.S.: Веду канал ИИзвестия, куда публикую новости и результаты своих экспериментов.

Комментарии

 

Винни Пух и тонкая настройка нейронных сетей в домашних условиях

Здесь в Кракове выходные прошли не зря. По просьбам читающих, рассказал, как тренировать свои стили в FLUX.1 Dev. Replicate для этого — идеальная платформа, ничего сверхсложного не понадобится.

Задача: как научить нейронную сеть генерировать картинки в моём, каком надо уникальном стиле?

Что вообще значит «научить»? Как вообще получаются картинки в нейронной сети?

То, как я понимаю процесс в целом: начинается всё с шумного изображения, в котором буквально ничего нет, нет ни одной явной, выделяющейся характеристики. Потом в зависимости от текстового запроса (промпта) пикселы перекрашиваются, чтобы больше подходить под «образ», собранный на основе параметров нейронной сети. Язык, исходный запрос — определяют эти параметры. В модели зашито то, как она представляет текст в изображениях. Через пару десятков итераций пикселы приобретают форму и становятся похожи на что-то осознанное.

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

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

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

Читать дальше →

Комментарии

 

Код виляет кодóм

Здесь в Кракове каждый день стараюсь программировать немного. Вчера возникла идея: что, если выборку данных из большого куска искусственный интеллект (ИИ) будет делать “сам”?

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

Что делать с этой всей красотой? Захотелось придумать что-нибудь полезное. Выкачал мегабайты анонимных массивов hex-цветов и решил скормить их ИИ. Разумеется, ИИ не хочет есть 20 мегабайт, это слишком много.

Я не программист, поэтому решил, что код писать будет Cursor, а моя работа будет — говорить ему, что делать. Сначала мы с Курсором решили, что данные (сухой набор цветов типа `#884939`) нужно обогатить: и получили более подобный файл, в котором палитры категоризованы по темам и всякое такое.

Потом я сделал скрипт, который придумывает и предлагает на выбор три темы будущего поста (можно самому задать). Вместе с темой придумывает, как данные вытаскивать из общего набора данных. Для тех, кто не понимает, что такое скрипт, что там кто «спрашивает», выглядит оно приблизительно так:

Потом ИИ пишет питоновский скрипт, чтобы выбрать из 900+ палитр список 10 наиболее подходящих. Что значит «подходящих»? Ну, он, ИИ, там сам как-то решает, что использовать: статистические методы, математику — получаются просто мини-питончики такие. Если требуется посчитать самые популярные оттенки, посчитает. Конвертировать в RGB? Сделает. Отсортировать по яркости? Справится. А если ошибётся? Перепишет. Лучше всех прочих моделей текст писал, конечно, Claude Sonnet 3.5.

Затем я попросил ИИ написать блог-пост с выбранными палитрами. Форматирует чистым Markdown. Уже готово к публикации, но можно улучшить. Далее, ИИ пишет код страницы на html+Tailwind. Так, чтобы было видно цвета из выбранных палитр.

Напоследок, ИИ генерирует заглавную картинку в тонах статьи и, если угодно, пишет поверх неё текст для OG картинки с помощью свеженького Flux 1.1 Pro. Получается не хуже поста с орками.

Метаданные для html страницы ИИ тоже, конечно, пишет. Без всяких позорных слов-паразитов вроде «delve» или «let’s dive in».

Так получаются полноценные, готовые к публикации (с купюрами, после проверки глазными яблоками кожаных мешков, конечно) материалы:

Самое интересное — я не программист и не умею писать на Python. Я, пожалуй, могу его читать и понимать, что происходит. Я построил много продуктов и примерно знаю, что нужно получить в итоге, и могу объяснить это на английском с примерами из интернета. А современные IDE вроде Cursor — пишут код. Вместе с o1-preview, последней, наиумнейшей моделью в октябре 2024 (привет, читатели из будущего!) мы — победили.

Самое интересное в этом процессе было наблюдать, как ИИ пишет кусок кода для анализа данных и буквально вшивает (import) в исходный скрипт для дальнейшего использования. В этом магия программирования. Понравилось, как ИИ весьма креатвно подходит к методам обработки данных, учитывает психологию цвета, тренды, сезоны и всё, что «видит» в исходных данных .

В следующий раз попытаюсь написать программу, которая пишет сама себя. Уверен, теперь это возможно. Last famous words.

P.S.: Полное видео и больше примеров конкретно этого приложение ИИ я показал в Telegram-канале ИИзвестия, который я для души и интереса ради веду уж несколько месяцев.

Комментарии

 

Искусственно-интеллектуальная сваха

Здесь в Кракове я вписался в новый проект и начал набирать людей в новую команду. Например, сейчас нужен Frontend Developer, расскажите знакомым. Как только опубликовал вакансию в X, сразу повалили боты. Больше сотник документов, резюме и сопроводительных писем люди прислали. Как водится, часть из них совсем никуда не годится и отправлена наобум и на авось. Так появилась идея написать штуку, которая могла бы резюме оценивать и ранжировать с учётом компанейских «красных флагов» и хотелов.

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

Я не программист, поэтому воспользовался cursor.com, эта штуковина умеет конвертировать желания продуктово-настроенного человека в код. Говоришь, мол, так и так, напиши, проверь, работает ли — и пишет, и проверяет. Один из новых, довольно популярных инструментов, ничего особенного. Через год все только в таких и будут программировать.

Набросал схему решения в голове:

  • Вытащить из PDF текст
    • Просто чтением текста из PDF, если не получается, то…
    • Попробовать разобрать с помощью pytesseract, банального OCR то есть. Если не получается, то…
    • Конвертировать в картинки и послать в мультимодальную модель Сomputer Vision.
  • Сопоставить с помощью «умной» нейронной сетки требования из моего объявления о работе в job_description.txt и получить:
    • Оценку совпадений: я чуть ниже опишу, как это оценивалось.
    • Краткий, с личными деталями ответ кандидату на всякий случай
    • Коротенькое объяснение, почему именно этот кандидат именно так «замэтчился»?
    • Ссылка на его вебсайт, если есть
  • Отдельный (не обязательный) запрос проверяет файлы на бонус-очки и «красные флаги»:
    • опечатки,
    • грамматические ошибки,
    • дырки в карьере
    • явные противоречия
  • Результаты двух оценок сливаются в экстазе: пропорция 80/20 по-умолчанию, но можно подкрутить и в другую сторону.
    • 80% финальной оценки — это конкретно сватовство: насколько резюме подходит вакансии
    • 20% — это личные ощущения, желания и персональные «красные флаги» стороны нанимающей. Там же, кстати, про diversity и inclusion написано.
  • Отдельная функция, насколько это возможно, бегает «посмотреть», что на сайте-портфолио. Если там ошибка (самое печальное), это не добавляет очков кандидату.
  • После этого стоит задача: сортировать по результатам и вывести всё со смешными эмоджиками и титулами вроде «Unicorn Candidate»
  • Написать для всех отзывы с учётом полученной оценки. Позвать кого-то на собеседования. Письма никто не отправляет, но, когда их нужно будет отправлять — тексты будут уже готовы.

На этом скрипт заканчивает свою работу и откланивается. Дальше решать придётся человеку.

Что там в кишках?

Далее, по порядку. Откуда взялась схема оценки и сватовства? Самая свежая, самая тормозная, самая умная нейронная сеть от OpenAI o1-preview помогла разработать структурированную схему. Как одна идей из улучшения — для каждого пункта делать отдельный запрос с помощью ультра-дешёвой и глупой модели вроде gpt-4o-mini, вполне возможно, что так результат окажется точнее. Он точно будет прозрачнее.

Схема выглядит приблизительно так, многое происходит «в уме»:

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

Искусственный интеллект рассчитывает параметры и выдаёт одну цифру от 0 до 100. Это базовый рейтинг: индикатор того, насколько близко подходит кандидат.

Сердце скрипта — интеграция с API мощной языкового модели Anthropic Claude. Кроме того, я только что добавил поддержку OpenAI. Модель использует передовые методы обработки естественного языка для глубокого анализа резюме и описания вакансии. Теперь Resume Job Matcher может:

  • Ускорить подбор персонала: Автоматизируя рутинные задачи, вы сможете сосредоточиться на стратегических решениях. Это 100% так, уже проверил на себе.
  • Улучшить качество найма: Отсев совсем «левых» кандидатов — снижает риски неправильного выбора.
  • Создать положительный имидж: Персонализированные ответы и профессиональный подход к каждому кандидату укрепят репутацию вашей компании. Эта часть отнимает куууучу времени при каждом найме.

Скачать, дополнить, улучшить скрипт — это здесь: Resume Job Matcher.

Нежданчик

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

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

Комментарии

 

Лёгкий видео-формат: разговор о переездах, детях, школах и обустройстве

Здесь в Познани я узнал, что вышел очередной болтологический видео-выпуск, в котором я поделился своим опытом жизни в разных странах. В частности — в Новой Зеландии и Польше. Больше двух лет уже живём в центральной Европе и накопились кой-какие наблюдения.

Мы с Димой из ReLife обсудили, как после 20 лет в Новой Зеландии я решил переехать в Европу: какие проблемы решил и какие возможности открыл для себя и своей семьи.

Формат лёгкий, ничего особенного нового в интервью вы не услышите, как мне кажется. Традиционно, одной из ключевых тем разговора стала предсказуемость жизни в Новой Зеландии и желание перемен — этого я никогда не скрывал. Несмотря на комфорт и стабильность, я ощущал потребность в новых впечатлениях и возможностях для роста: личностного и в плане бизнеса. Это привело нас сначала в Чили, а затем в Польшу. И там, и там пришлось столкнуться с новыми культурными и языковыми вызовами.

Как молодые (всё ещё!) родители, поговорили о влиянии переездов на детей. С одной стороны, частые перемены могут быть стрессовыми, но с другой — и за эту позицию я беру ответственность на себя — они открывают ребенку мир во всем его многообразии. Я поделился своими наблюдениями о том, как именно наш сын адаптируется к новым школам и друзьям, и как мы стараемся сделать этот процесс менее болезненным. Всегда есть плюсы, всегда есть минусы.

В заключение мы обсудили важность иммиграционного статуса и долгосрочных планов. Я подчеркнул необходимость иметь четкий путь к постоянному проживанию или гражданству в выбранной стране, чтобы обеспечить стабильность и безопасность для семьи. В эпоху «релоканства» (ненавижу этот новояз), это особенно важный момент, о котором может соберусь написать отдельный пост.

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

Спасибо Дмитрию и ReLife за предоставленную возможность.

Двухчасовой разговор с Дмитрием из ReLife.

P.S.: Поделюсь небольшой радостью, мой телеграм-канал ИИзвестия про достижения ИИ дорос до 227 читателей — огромное всем спасибо!

Комментарии