Вчера просмотрел интервью с создателем Claude Code (крутым технарем по имени Борис с лицом чувака из соседнего подъезда). Интервью одновременно легкое и инженерное, но при этом очень емко упакованное смыслами.
https://www.youtube.com/watch?v=AmdLVWMdjOk
Свои полные заметки с комментариями хочу отрефлексировать и превратить в статью позже, но почти с первых минут была произнесена мысль, максимально резонирующая со мной и агентизацией. Борис говорит, что ему очень нравится работать с "универсалами". Сейчас в основном иерархия в мире построена на разделении ролей, и многие вообще не знают (и не хотят знать!) что делают парни в соседней комнате и их специфику. Универсалы же могут как поделать что-то в инфре, так и в продукте, да и в столовой покастдевить коллег. Да, за пределами ключевой компетенеции будет хуже, но это вообще не важно, тем более сейчас.
Я всю жизнь занимался всем подряд: и фронт, и бэк и продуктами и железо банкомата поковырял, и чего только не было. Когда-то лет 9 назад я захотел сделать еще и мобильную аппку, но вообще ничего про них не знал. Месяца за два кое-как разобрался, причем отфоркался от maps.me, где была как куча легаси из c++, завернутого в objective-c и java, так и бридж от них на свежий код на swift и многое другое. Мой код был очень так себе, а помимо него пришлось поделать ASO, юнитку, изучить аппстор, изучать картографию, писать тексты, искать иллюстраторов, переводчика и много всего неприятного, чего я не знал и не умел. Но аппка в итоге была сделана, даже Apple в свой московский офис на закрытую вечеринку позвал.
Я многое делал сам, но были вещи, которые невозможно было доделать самому просто в силу экспертных навыков. Сейчас "найти подходящие спецов" - уже больше не преграда и не стопер, а огромное количество задач агентизируются и смещаются из уровня "невозможно" на "ну да, придется позаморачиваться и посидеть недельку". При должной технической сноровке, желании и дисциплине, конечно же.
Иногда я все же задавал себе грустный вопрос "ну как у людей получается заниматься ТОЛЬКО Х столько лет, а я постоянный оркестр из всего и вся", но сейчас...Сейчас универсальность превратилась в супер силу, и я давно не испытывал такого воодушевления, это что-то феноменальное. А интервью - очень хорошее, рекомендую! Про сам Claude Code там не супер много, но майндсет у гостя интересный👍
https://www.youtube.com/watch?v=AmdLVWMdjOk
Свои полные заметки с комментариями хочу отрефлексировать и превратить в статью позже, но почти с первых минут была произнесена мысль, максимально резонирующая со мной и агентизацией. Борис говорит, что ему очень нравится работать с "универсалами". Сейчас в основном иерархия в мире построена на разделении ролей, и многие вообще не знают (и не хотят знать!) что делают парни в соседней комнате и их специфику. Универсалы же могут как поделать что-то в инфре, так и в продукте, да и в столовой покастдевить коллег. Да, за пределами ключевой компетенеции будет хуже, но это вообще не важно, тем более сейчас.
Я всю жизнь занимался всем подряд: и фронт, и бэк и продуктами и железо банкомата поковырял, и чего только не было. Когда-то лет 9 назад я захотел сделать еще и мобильную аппку, но вообще ничего про них не знал. Месяца за два кое-как разобрался, причем отфоркался от maps.me, где была как куча легаси из c++, завернутого в objective-c и java, так и бридж от них на свежий код на swift и многое другое. Мой код был очень так себе, а помимо него пришлось поделать ASO, юнитку, изучить аппстор, изучать картографию, писать тексты, искать иллюстраторов, переводчика и много всего неприятного, чего я не знал и не умел. Но аппка в итоге была сделана, даже Apple в свой московский офис на закрытую вечеринку позвал.
Я многое делал сам, но были вещи, которые невозможно было доделать самому просто в силу экспертных навыков. Сейчас "найти подходящие спецов" - уже больше не преграда и не стопер, а огромное количество задач агентизируются и смещаются из уровня "невозможно" на "ну да, придется позаморачиваться и посидеть недельку". При должной технической сноровке, желании и дисциплине, конечно же.
Иногда я все же задавал себе грустный вопрос "ну как у людей получается заниматься ТОЛЬКО Х столько лет, а я постоянный оркестр из всего и вся", но сейчас...Сейчас универсальность превратилась в супер силу, и я давно не испытывал такого воодушевления, это что-то феноменальное. А интервью - очень хорошее, рекомендую! Про сам Claude Code там не супер много, но майндсет у гостя интересный
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Boris Cherny (Creator of Claude Code) On What Grew His Career And Building at Anthropic
Boris Cherny is the Creator of Claude Code but few people know his full career story. I interviewed him about everything he learned growing at Meta and for insights from his time building Claude Code at Anthropic.
𝗣𝗼𝗱𝗰𝗮𝘀𝘁 𝗹𝗶𝗻𝗸𝘀:
• Transcript: https://…
𝗣𝗼𝗱𝗰𝗮𝘀𝘁 𝗹𝗶𝗻𝗸𝘀:
• Transcript: https://…
👍8🔥2🤔2❤1🤡1🌚1
Пятничное
p.s.: мое мнение таково, что какая именно циферка у opus, glm или gpt роли особо не играет, все это вкусовщина и достаточно минорные улучшения - у каждой флагманской модели есть свой вайб и "характер" и под него надо подстраиваться, но каждая из них хороша уже продолжительное время. Появление Cursor - вот это был феномен, появление Claude Code/Codex (т.е. нативки) - феномен, а посты "OPUS 4.6 ИЗМЕНИЛ ВСЕ" - индуцированный техношум и повод для отписки 😀
Всем хороших выходных и много хорошо сгенеренного кода 🤙
p.s.: мое мнение таково, что какая именно циферка у opus, glm или gpt роли особо не играет, все это вкусовщина и достаточно минорные улучшения - у каждой флагманской модели есть свой вайб и "характер" и под него надо подстраиваться, но каждая из них хороша уже продолжительное время. Появление Cursor - вот это был феномен, появление Claude Code/Codex (т.е. нативки) - феномен, а посты "OPUS 4.6 ИЗМЕНИЛ ВСЕ" - индуцированный техношум и повод для отписки 😀
Всем хороших выходных и много хорошо сгенеренного кода 🤙
👍8😁5👨💻2👀1
Идеальный DX
Одна из самых мощных фичей агентов, за которую мы их так любим, - это планирование. Можно проектировать законченные по смыслу фичи (двигаясь итерациями) или же просто бабахнуть верхнеуровневое описание чего-либо и затем получить нечто готовое, что надо аккуратно довести до ума. Любой более-менее умный агент имеет функцию предварительной оценки поставленной задачи - "мне идти ее делать сейчас или сначала стоит немного подумать".
Как правило, с планом результат получается сильно лучше, но я люблю разрабатывать именно фичами, поэтому даже если планирование и включается, то требует лишь визуального ревью и с которым я сходу согласен.
Но тут я влез в большой рефакторинг и наткнулся на феноменальную фичу в Claude Code. CC разработал план, но в некоторых пунктах он засомневался над тем, как сделать лучше - и прерывается на обратную связь, предлагаю варианты и кратко описывания плюсы/минусы каждого из них.
Это очень круто само по себе, но я обратил там внимание на не самую заметную штуку "Chat about this" и это просто нереальный DX (это как UX, только именно developer experience): вот CC спрашивает у меня хочу ли я дропнуть какую-то таблицу в рефакторинге. А? Что? Какая таблица? Я вообще не помню что это за таблица и когда была заведена.
Мы переходим в "chat about this" без отрыва от производства и дальше временно создается отдельный чистенький тред, в который прокинута основная инфа и заполнен контекст по теме, и который готов к тому, что вы можете углубиться в данный вопрос вот прям сразу. Как только вопрос решен - тред удаляется, а решение по выбору следующего шага уже в сто раз более осмысленное.
Все это настолько круто, что возвращаться во времена IDE уже решительно не хочется. Но есть огромный минус - мы не заметили, как наше любимое программирование сделали платным, а на 23 февраля теперь хочется попросить уже не носки и бритву, а подписку на CC Max с безлимитным овердрафтом🤩
Одна из самых мощных фичей агентов, за которую мы их так любим, - это планирование. Можно проектировать законченные по смыслу фичи (двигаясь итерациями) или же просто бабахнуть верхнеуровневое описание чего-либо и затем получить нечто готовое, что надо аккуратно довести до ума. Любой более-менее умный агент имеет функцию предварительной оценки поставленной задачи - "мне идти ее делать сейчас или сначала стоит немного подумать".
Как правило, с планом результат получается сильно лучше, но я люблю разрабатывать именно фичами, поэтому даже если планирование и включается, то требует лишь визуального ревью и с которым я сходу согласен.
Но тут я влез в большой рефакторинг и наткнулся на феноменальную фичу в Claude Code. CC разработал план, но в некоторых пунктах он засомневался над тем, как сделать лучше - и прерывается на обратную связь, предлагаю варианты и кратко описывания плюсы/минусы каждого из них.
Это очень круто само по себе, но я обратил там внимание на не самую заметную штуку "Chat about this" и это просто нереальный DX (это как UX, только именно developer experience): вот CC спрашивает у меня хочу ли я дропнуть какую-то таблицу в рефакторинге. А? Что? Какая таблица? Я вообще не помню что это за таблица и когда была заведена.
Мы переходим в "chat about this" без отрыва от производства и дальше временно создается отдельный чистенький тред, в который прокинута основная инфа и заполнен контекст по теме, и который готов к тому, что вы можете углубиться в данный вопрос вот прям сразу. Как только вопрос решен - тред удаляется, а решение по выбору следующего шага уже в сто раз более осмысленное.
Все это настолько круто, что возвращаться во времена IDE уже решительно не хочется. Но есть огромный минус - мы не заметили, как наше любимое программирование сделали платным, а на 23 февраля теперь хочется попросить уже не носки и бритву, а подписку на CC Max с безлимитным овердрафтом
Please open Telegram to view this post
VIEW IN TELEGRAM
✍5😁5🤔3👨💻2❤1
sam-khinkaltman.mp4
8.6 MB
Пока готовлю большой пост о своих экспериментах с промышленным агентик кодингом (будет интересно!), поделюсь забавностью - в какой-то момент ChatGPT-5.3-Codex решил частично перейти на грузинский. Эта штука зовется language leakage и случается из-за того, что трансформеры мультиязычны и в одном и том же эмбединг-пространстве живут одинаковые по смыслу слова из разных языков. В какой-то момент LLM решила ̶с̶ъ̶е̶с̶т̶ь̶ ̶х̶и̶н̶к̶а̶л̶е̶й̶ провалиться в грузинский, а потом резко вернулась обратно. Регулярно вижу китайский и прочий миссленгвидж во внутреннем ризонинге многих моделей, но грузинский - вижу первый раз.
Решил погенерить, что могло быть за кадром: Qwen-Image и Seedance 1.5 😅 Как же это все чертовски увлекательно, а 🤖💥
Решил погенерить, что могло быть за кадром: Qwen-Image и Seedance 1.5 😅 Как же это все чертовски увлекательно, а 🤖💥
🔥6😁6❤2🐳1💅1
Context automatically compacted 🦾
Все мы знаем, что у модели есть контекстное окно, но это - очень непростая вещь. Заявляется, что оно, например, один миллион токенов, но на деле только около половины из них эффективны, поскольку после этого начинается контекстный дрейф или вообще деградация. Это ожидаемое поведение трансформеров, но замеры там очень интересные - у меня есть в бэклоге перевод классной статьи, где такое замеряли, скоро доберусь.
При работе с фанатичной кодогенерацией контекст забивается достаточно быстро, поэтому для продолжения работы требуется процесс, который называется компактизация - это когда все накопленное сжимается до определенного уровня. Существуют разные механизмы компактизации: вычленение фактов, суммаризация, скользящее окно, грубое обрезание и многие другие под задачу. Очень важно знать, какая именно компактизация происходит, а в идеале - не доводить до этого, либо контролировать процесс самостоятельно.
Когда мы заканчиваем задачу и переходим к новой, проблем зачастую не возникает, так как у нас нет предыдущего контекста. Самый жесткий случай компактизации, который у меня был, произошел, когда я так увлекся, что накидал много мелких задачек в чатике и затем дал делать сложную задачу про шифрование сообщений. Агент пыхтел 12 минут, дозабил все окно, затем сделал сжимание контекста, а затем благополучно продолжил работать над задачей еще 14 минут.
Он изменил 31 файл, но на выходе сообщил, что изменил цвет кнопки и увеличил шрифт. Я сначала не мог понять о чем речь, но потом все быстро понял: я действительно в самом начале чата просил это сделать и на сломе контекстного окна эта задача стала самой важной и приоритетной и в итоге получилось не шифрование, а мусор.
Поэтому лучше не доводить до компактизации, особенно до той, про которую мы детально не знаем как именно она делается.
P.S.: мем с собаками - один из моих любимых, обожаю вставлять его в серьезные презы 😀
Все мы знаем, что у модели есть контекстное окно, но это - очень непростая вещь. Заявляется, что оно, например, один миллион токенов, но на деле только около половины из них эффективны, поскольку после этого начинается контекстный дрейф или вообще деградация. Это ожидаемое поведение трансформеров, но замеры там очень интересные - у меня есть в бэклоге перевод классной статьи, где такое замеряли, скоро доберусь.
При работе с фанатичной кодогенерацией контекст забивается достаточно быстро, поэтому для продолжения работы требуется процесс, который называется компактизация - это когда все накопленное сжимается до определенного уровня. Существуют разные механизмы компактизации: вычленение фактов, суммаризация, скользящее окно, грубое обрезание и многие другие под задачу. Очень важно знать, какая именно компактизация происходит, а в идеале - не доводить до этого, либо контролировать процесс самостоятельно.
Когда мы заканчиваем задачу и переходим к новой, проблем зачастую не возникает, так как у нас нет предыдущего контекста. Самый жесткий случай компактизации, который у меня был, произошел, когда я так увлекся, что накидал много мелких задачек в чатике и затем дал делать сложную задачу про шифрование сообщений. Агент пыхтел 12 минут, дозабил все окно, затем сделал сжимание контекста, а затем благополучно продолжил работать над задачей еще 14 минут.
Он изменил 31 файл, но на выходе сообщил, что изменил цвет кнопки и увеличил шрифт. Я сначала не мог понять о чем речь, но потом все быстро понял: я действительно в самом начале чата просил это сделать и на сломе контекстного окна эта задача стала самой важной и приоритетной и в итоге получилось не шифрование, а мусор.
Поэтому лучше не доводить до компактизации, особенно до той, про которую мы детально не знаем как именно она делается.
P.S.: мем с собаками - один из моих любимых, обожаю вставлять его в серьезные презы 😀
💯3👍2🤔2🌚1
HIGH EFFORT и за все надо платить
Вчера Антропику поплохело - в их датацентр в ОАЭ что-то прилетело. Об этом я узнал достаточно интересным образом: я делал микро-задачку в вебе - вот прям буквально заменить пару блоков в верстке. Это была финальная микро-правка и поэтому режим "high effort" уже снимать не стал. Написал задачу, отправил, и переключился на дела в кодексе. Вернувшись минут через 10 я увидел до сих пор крутящийся слайдер. Обновил - крутится. Гугланул новости - "в aws что-то прилетело", ну ок, ждем, я никуда не спешил. Спустя еще какое-то время выдалось сообщение о проблемах с контейнером (на их стороне бэка), после чего слайдер опять начал безмолвно крутиться.
Я очень увлеченно делал дела с кодексом, и спустя, наверное, еще минут 20 решил проверить что же там было.
"Бро, у меня проблема с докером, проблему так и не починил, правки внести не могу и я их потерял, перепробовал все что мог. Кстати, я на эту микро-правку в процессе добил 30% твоего недельного лимита, приходи в субботу теперь"
P.S.: я нашел для вас эксклюзивные фотографии объекта, прилетевшего в ДЦ
Вчера Антропику поплохело - в их датацентр в ОАЭ что-то прилетело. Об этом я узнал достаточно интересным образом: я делал микро-задачку в вебе - вот прям буквально заменить пару блоков в верстке. Это была финальная микро-правка и поэтому режим "high effort" уже снимать не стал. Написал задачу, отправил, и переключился на дела в кодексе. Вернувшись минут через 10 я увидел до сих пор крутящийся слайдер. Обновил - крутится. Гугланул новости - "в aws что-то прилетело", ну ок, ждем, я никуда не спешил. Спустя еще какое-то время выдалось сообщение о проблемах с контейнером (на их стороне бэка), после чего слайдер опять начал безмолвно крутиться.
Я очень увлеченно делал дела с кодексом, и спустя, наверное, еще минут 20 решил проверить что же там было.
"Бро, у меня проблема с докером, проблему так и не починил, правки внести не могу и я их потерял, перепробовал все что мог. Кстати, я на эту микро-правку в процессе добил 30% твоего недельного лимита, приходи в субботу теперь"
P.S.: я нашел для вас эксклюзивные фотографии объекта, прилетевшего в ДЦ
😁9🤯2🐳1🤣1
Дописал большую статью, которую пытался дописать последние 2 недели 🍺
В ней рассуждения на тему того, как изменится продуктовая разработка после появления инструментов типа Claude Code/Codex и похожих. Просто рассуждать - скучно, поэтому я провел эксперимент по созданию продукта с нуля, немного позалезал внутрь claude code, обвесил телеметрией и замерил - но не все собранное пока переварил, потому что все ожидаемо оказалось не просто, но на эту тему точно буду писать дальше.
Следующий заход будет про стоимость фичеразработинга и вообще экономику AI-assisted кодинга 🤖💸
В безумно интересное время живем, оторваться просто невозможно
Приятного чтения, буду рад лайкам на хабре и тут 🤗
https://habr.com/ru/articles/1006912/
В ней рассуждения на тему того, как изменится продуктовая разработка после появления инструментов типа Claude Code/Codex и похожих. Просто рассуждать - скучно, поэтому я провел эксперимент по созданию продукта с нуля, немного позалезал внутрь claude code, обвесил телеметрией и замерил - но не все собранное пока переварил, потому что все ожидаемо оказалось не просто, но на эту тему точно буду писать дальше.
Следующий заход будет про стоимость фичеразработинга и вообще экономику AI-assisted кодинга 🤖💸
В безумно интересное время живем, оторваться просто невозможно
Приятного чтения, буду рад лайкам на хабре и тут 🤗
https://habr.com/ru/articles/1006912/
Хабр
Разработка после разработчиков. Что оставит AI?
За последние полгода произошел большой слом — написание кода с AI перестало быть забавой и стало серьезным инструментом, способным писать хороший код, проектировать архитектуру и принимать сложные...
👍17⚡5🐳4❤1🔥1
Парсинг тех, кто этого очень не хочет, или внутренности Cloudflare
Решил на выходных реанимировать один проектик, который потрошит целиком большой сайт с футбольной статистикой. Они поставили Cloudflare в максимально жестком режиме и пройти его — по-настоящему сложный квест. Клаудфлер стронг.
Большую часть защиты на роботность в мире можно обойти заранее прогретой фабрикой браузеров. То есть, когда мы серверно запускаем браузер, ходим в гугл, гуляем из него по сайтам, двигаем по ним мышкой — в общем, создаём "историю", как будто мы человек. Но большая часть защиты построена на принципе "чтоб не мешали": сначала нас чекают мягко и пропускают даже с высоким скором роботности, а затем по мере нарастания подозрения повышают чекалку до максимальной. Прогрев и малый объем парсинга в таких ситуациях отводит большинство подозрений, и всё работает замечательно.
История с просто хождением через прокси, открытием в инкогнито и прочими трюками — работает, но на по-настоящему больших сайтах оно пускает лишь потому, что это разрешили. Если проблема роботов стоит остро, то под каждого юзера собирается сложный слепок его данных (т.н. "ml-фингерпринт"), который в себя включает как настоящие браузерный fingerprint на пару с ссетевым fingerpint, так и большое множество параметров юзера вообще. При желании найти того, кого уже задетектили, но он открыл еще один браузер — не очень сложно.
Клаудфлер особо силен тем, что у него такие фингерпринты сквозные через весь интернет — они делают слепки юзеров со всей своей базы и могут с ней же сверяться.
Это больно! Большинство вариантов обрубает даже до чекбокса (он не показывается, только загрузка). Если пробиться, то просто кликнуть мало — там очень хитрый shadow DOM.
Что пробовал
Перепробовал практически все стандартные подходы, которые обычно используют для обхода антиботов:
— Headless браузеры со stealth-патчами (Playwright + stealth, Camoufox)
— TLS-имперсонация с куками без браузера (curl_cffi)
— Альтернативные библиотеки автоматизации (DrissionPage + Chromium)
— Запуск через виртуальный дисплей (xvfb)
— undetected-chromedriver
— Клики по экрану через xdotool
— Полностью чистый Chrome без CDP/WebDriver вообще
— Попытки исправить WebGL окружение (SwiftShader)
Результат у всех вариантов по сути одинаковый: страница крутит "Just a moment...", либо чекбокс появляется, но не реагирует на клики (точнее клик как js-событие случается, но это не тот клик). Что-то из этого завелось, но на один раз - следующая показ чекбокса через несколько страниц уже снова отсекал такого клиента.
Вывод
Главный урок из всей этой истории — современные антиботы ушли ооочень далеко вперед и это огромная система корреляции сигналов, где одновременно анализируются: сетевой и браузерный fingerprint, tls, gpu/webgl, canvas, ip-репутация (не дай боже вам иметь подсеть IP хетцнера) и многое-многое другое.
Каждый сигнал можно подделать, но когда они начинают их склеивать и играть в вероятности - это становится инженерно очень больно и, честно говоря, никому с таким столкнуться не желаю 🤗😀
Решил на выходных реанимировать один проектик, который потрошит целиком большой сайт с футбольной статистикой. Они поставили Cloudflare в максимально жестком режиме и пройти его — по-настоящему сложный квест. Клаудфлер стронг.
Большую часть защиты на роботность в мире можно обойти заранее прогретой фабрикой браузеров. То есть, когда мы серверно запускаем браузер, ходим в гугл, гуляем из него по сайтам, двигаем по ним мышкой — в общем, создаём "историю", как будто мы человек. Но большая часть защиты построена на принципе "чтоб не мешали": сначала нас чекают мягко и пропускают даже с высоким скором роботности, а затем по мере нарастания подозрения повышают чекалку до максимальной. Прогрев и малый объем парсинга в таких ситуациях отводит большинство подозрений, и всё работает замечательно.
История с просто хождением через прокси, открытием в инкогнито и прочими трюками — работает, но на по-настоящему больших сайтах оно пускает лишь потому, что это разрешили. Если проблема роботов стоит остро, то под каждого юзера собирается сложный слепок его данных (т.н. "ml-фингерпринт"), который в себя включает как настоящие браузерный fingerprint на пару с ссетевым fingerpint, так и большое множество параметров юзера вообще. При желании найти того, кого уже задетектили, но он открыл еще один браузер — не очень сложно.
Клаудфлер особо силен тем, что у него такие фингерпринты сквозные через весь интернет — они делают слепки юзеров со всей своей базы и могут с ней же сверяться.
Это больно! Большинство вариантов обрубает даже до чекбокса (он не показывается, только загрузка). Если пробиться, то просто кликнуть мало — там очень хитрый shadow DOM.
Что пробовал
Перепробовал практически все стандартные подходы, которые обычно используют для обхода антиботов:
— Headless браузеры со stealth-патчами (Playwright + stealth, Camoufox)
— TLS-имперсонация с куками без браузера (curl_cffi)
— Альтернативные библиотеки автоматизации (DrissionPage + Chromium)
— Запуск через виртуальный дисплей (xvfb)
— undetected-chromedriver
— Клики по экрану через xdotool
— Полностью чистый Chrome без CDP/WebDriver вообще
— Попытки исправить WebGL окружение (SwiftShader)
Результат у всех вариантов по сути одинаковый: страница крутит "Just a moment...", либо чекбокс появляется, но не реагирует на клики (точнее клик как js-событие случается, но это не тот клик). Что-то из этого завелось, но на один раз - следующая показ чекбокса через несколько страниц уже снова отсекал такого клиента.
Вывод
Главный урок из всей этой истории — современные антиботы ушли ооочень далеко вперед и это огромная система корреляции сигналов, где одновременно анализируются: сетевой и браузерный fingerprint, tls, gpu/webgl, canvas, ip-репутация (не дай боже вам иметь подсеть IP хетцнера) и многое-многое другое.
Каждый сигнал можно подделать, но когда они начинают их склеивать и играть в вероятности - это становится инженерно очень больно и, честно говоря, никому с таким столкнуться не желаю 🤗😀
👍9✍3😱2👾1
This media is not supported in your browser
VIEW IN TELEGRAM
Кто узнал себя? Всех с пятницей и побольше сгенеренного кода на выходных 🤙
P.S.: Claude Code/Codex вышли совсем недавно, а уже непонятно, как вообще без них жили 😀 и готовлю материал про телеметрию и экономику agentic разработки, скоро🚀
P.S.: Claude Code/Codex вышли совсем недавно, а уже непонятно, как вообще без них жили 😀 и готовлю материал про телеметрию и экономику agentic разработки, скоро
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍5🤣4🥱1🐳1
Написал крайне залипательный пост про генерацию русского культурного нейрослопа, много гифок и просто крутых картиночек, читается очень легко.
Nano Banana по прежнему непревзойденный лидер, но многие топовые модели очень хорошо понимают наш культурный код и способны генерировать нереальные по своему качеству картинки.
Приятного чтения!
https://habr.com/ru/articles/1011192/
Nano Banana по прежнему непревзойденный лидер, но многие топовые модели очень хорошо понимают наш культурный код и способны генерировать нереальные по своему качеству картинки.
Приятного чтения!
https://habr.com/ru/articles/1011192/
Хабр
Русский культурный код как оценка генеративных моделей
Привет! Когда вышла Nano Banana, я из любопытства попросил её нарисовать сюр на фоне советских панелек — и она нарисовала до безумия залипательную картинку. Она не просто нарисовала панельки, не...
🔥7👍4❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Terminal POWER |
Всю жизнь я был терминальщиком - безумно люблю консольку большой любовью, и когда вел классическую жизнь управления разработкой, у части моих пацанов это постоянно вызывало вопросы вида "А ЧЕГО НЕ В IDE?". Ну типа, выдели функцию, нажми комбо клавиш, вжух и - вот ваш код, пожалуйста. Но зачем все это нужно, если grep -nirh "func_name" --include="*.py" -A 30 дает тебе ответ прямо вот здесь и сейчас?
Когда приходилось что-то вместе раздебаживать странное, до нужного куска кода я добирался чаще быстрее, потому что терминал безумно эффективен. И составить некую картинку про происходящее в терминале гораздо проще. Потому что ты не тратишь время на смену контекста - всякие вкладки, интерфейсы и прочий обвес. Еще у консольки есть просто невероятная суперсила - все, что ты можешь сделать в консольке - можно переиспользовать автономно, скрыв за любым интерфейсом (вот я сильно верю в будущее voice-first).
Единственное, что я в консольке делать не любил - это писать код (хотя vimовцы это каким-то образом делают успешно). Но большая часть кодинга уже мертва, именно писать код больше не нужно, а вот все остальное вокруг кода стало еще сильнее живее всех живых. И здесь с моим terminal-mind кажется, что революция уже произошла.
Claude Code своим выходом показал, что в терминале можно делать дела. И дело тут не в том, что внутри можно теперь делать почти все, и не в том что можно держать параллельно открытыми 20 вкладок (зачем, кстати?), а в том что любая консольная команда это in, out и PID. Когда эта консольная команда внутри себя может делать все что угодно и писать любой код, а ее stdin/stdout/stderr/PID мы можем перехватить и до их содержимого дотянуться, то значит вокруг них можно пробовать построить все что угодно.
Например, весь классический флоу разработки целиком и весь SDLC вообще. Я не зря писал, что вокруг кода в консольке можно было делать многое еще до появления агентов, а магию пайплайнов в никсах придумали задолго до первой версии ленгчейна. Не нравится код, который агенты пишут? А как мы раньше его убивали еще до прода? Кто сказал "жесткая стейт-машина и тикеты в jira?" 🤔
Пока я провожу этот безумно интересный эксперимент, узнал что для консольки есть целые фреймворки, в которых можно наколупать вообще интерфейсы любой сложности. Например, good old times лоадер: сначала танцуем, потом лунная походка, потом нижний брейк, потом колесо в сторону🤩 🤩 🕺👯♀️
Ну какой кайф!
Всю жизнь я был терминальщиком - безумно люблю консольку большой любовью, и когда вел классическую жизнь управления разработкой, у части моих пацанов это постоянно вызывало вопросы вида "А ЧЕГО НЕ В IDE?". Ну типа, выдели функцию, нажми комбо клавиш, вжух и - вот ваш код, пожалуйста. Но зачем все это нужно, если grep -nirh "func_name" --include="*.py" -A 30 дает тебе ответ прямо вот здесь и сейчас?
Когда приходилось что-то вместе раздебаживать странное, до нужного куска кода я добирался чаще быстрее, потому что терминал безумно эффективен. И составить некую картинку про происходящее в терминале гораздо проще. Потому что ты не тратишь время на смену контекста - всякие вкладки, интерфейсы и прочий обвес. Еще у консольки есть просто невероятная суперсила - все, что ты можешь сделать в консольке - можно переиспользовать автономно, скрыв за любым интерфейсом (вот я сильно верю в будущее voice-first).
Единственное, что я в консольке делать не любил - это писать код (хотя vimовцы это каким-то образом делают успешно). Но большая часть кодинга уже мертва, именно писать код больше не нужно, а вот все остальное вокруг кода стало еще сильнее живее всех живых. И здесь с моим terminal-mind кажется, что революция уже произошла.
Claude Code своим выходом показал, что в терминале можно делать дела. И дело тут не в том, что внутри можно теперь делать почти все, и не в том что можно держать параллельно открытыми 20 вкладок (зачем, кстати?), а в том что любая консольная команда это in, out и PID. Когда эта консольная команда внутри себя может делать все что угодно и писать любой код, а ее stdin/stdout/stderr/PID мы можем перехватить и до их содержимого дотянуться, то значит вокруг них можно пробовать построить все что угодно.
Например, весь классический флоу разработки целиком и весь SDLC вообще. Я не зря писал, что вокруг кода в консольке можно было делать многое еще до появления агентов, а магию пайплайнов в никсах придумали задолго до первой версии ленгчейна. Не нравится код, который агенты пишут? А как мы раньше его убивали еще до прода? Кто сказал "жесткая стейт-машина и тикеты в jira?" 🤔
Пока я провожу этот безумно интересный эксперимент, узнал что для консольки есть целые фреймворки, в которых можно наколупать вообще интерфейсы любой сложности. Например, good old times лоадер: сначала танцуем, потом лунная походка, потом нижний брейк, потом колесо в сторону
Ну какой кайф!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🐳3😁2👨💻2🔥1
Сделал перевод статьи про устройство кодинг-агентов от Себастьна Рашки, чьи статьи и обзоры я очень люблю. Для тех кто уже протер до дыр исходники клод кода нового ничего не будет, но как стартовая статья, на которую можно сослаться, чтобы самому не объяснять про харнесс и почему в консольке все круче, чем в чатике - хорошо.
Приятного чтения!
Как кодинг-агенты используют инструменты, память и контекст репозитория, чтобы писать код лучше
https://habr.com/ru/articles/1021168/
Приятного чтения!
Как кодинг-агенты используют инструменты, память и контекст репозитория, чтобы писать код лучше
https://habr.com/ru/articles/1021168/
Хабр
Как кодинг-агенты используют инструменты, память и контекст репозитория, чтобы писать код лучше
Это перевод хорошей статьи про базу того, как устроены кодинг-ассистенты и что для них важно: что такое харнесс и харнесс-инжиниринг , в чем разница просто агентной обвязки и кодинговой, что такое...
👍8👏3🐳2🔥1
💁♂️ Это просто перевод
Я сделал достаточно много переводов различных статей на хабре и там регулярно прилетает несколько минусов или даже комментов, что это "всего лишь перевод". Казалось бы, иди просто дальше, но нет. И, мне кажется, это супер классная тема для отдельного поста.
Задача перевода подарила нам архитектуру трансформера, при этом сам перевод является отличным прокси-примером на весь AI.
У нас у всех есть кнопочка автоперевода для всех типов контента и качества этой кнопочки хватает для большинства быстрых задач. По условной аналогии с Канеманом, у нас есть быстрый контент и медленный контент: первый мы потребляем автоматически и нам его абсолютно достаточно. В первый год после выхода ChatGPT в видео-переводах он часто переводился как "чичипт". Это было забавно, но этого хватало, чтобы послушать интервью, все понять и тем самым решить задачу - тут все ок.
Но есть как бы медленный контент, который мы потребляем по другому и где нюансов слишком много и автоперевод превращается в карикатурный. Игра слов, непереводимые или устоявшиеся термины, культурные различия и много всякого разного, что руинит смысл или даже повышает когнитивную нагрузку от прочтения.
Я говорю, пишу и думаю на русском, весь мой трейсинг и внутренний ризонинг происходят на русском, и несмотря на то, что с английским у меня нет никаких проблем, статьи на английском я читаю гораздо медленнее и откладываю их на дольше, поэтому наличие хорошего перевода меня всегда радует. Читать оригинал техрепорта квена без погружения сложно, но читать его в автопереводе невозможно в принципе, потому что конструкции вида "off‑policy sequence masking when they reuse rollout data" превращаются в бебебе мумуму.
Чем проще задача перевода сводится к общечеловеческой, тем лучше она закрывается автопереводом. Но сериальчик мы лучше посмотрим от профессиональной студии озвучки, а комментировать футбол любимой команды лучше тому, кто знает наш менталитет.
И так везде про весь AI. У нас у всех профессиональные камеры в руках, но на важное событие мы позовем фотографа с большим фотоаппаратом, у нас есть дорогие и оочень умные роботы-пылесосы (которые на самом деле такие тупые, что даже хуже алисы), но все равно иногда хочется заказать клининг, побазарить за анализы можно и с клодом, но если он что-то найдет, то только дорогой врач и без вариантов.
AI заберет всю работу, которую можно свести к общечеловеческой, но нюансы и специфика вообще беспощадны, к ним он тоже будет подбираться, но на несколько порядков медленее. А "просто перевод" - он вообще нифига не "просто"🤩
Я сделал достаточно много переводов различных статей на хабре и там регулярно прилетает несколько минусов или даже комментов, что это "всего лишь перевод". Казалось бы, иди просто дальше, но нет. И, мне кажется, это супер классная тема для отдельного поста.
Задача перевода подарила нам архитектуру трансформера, при этом сам перевод является отличным прокси-примером на весь AI.
У нас у всех есть кнопочка автоперевода для всех типов контента и качества этой кнопочки хватает для большинства быстрых задач. По условной аналогии с Канеманом, у нас есть быстрый контент и медленный контент: первый мы потребляем автоматически и нам его абсолютно достаточно. В первый год после выхода ChatGPT в видео-переводах он часто переводился как "чичипт". Это было забавно, но этого хватало, чтобы послушать интервью, все понять и тем самым решить задачу - тут все ок.
Но есть как бы медленный контент, который мы потребляем по другому и где нюансов слишком много и автоперевод превращается в карикатурный. Игра слов, непереводимые или устоявшиеся термины, культурные различия и много всякого разного, что руинит смысл или даже повышает когнитивную нагрузку от прочтения.
Я говорю, пишу и думаю на русском, весь мой трейсинг и внутренний ризонинг происходят на русском, и несмотря на то, что с английским у меня нет никаких проблем, статьи на английском я читаю гораздо медленнее и откладываю их на дольше, поэтому наличие хорошего перевода меня всегда радует. Читать оригинал техрепорта квена без погружения сложно, но читать его в автопереводе невозможно в принципе, потому что конструкции вида "off‑policy sequence masking when they reuse rollout data" превращаются в бебебе мумуму.
Чем проще задача перевода сводится к общечеловеческой, тем лучше она закрывается автопереводом. Но сериальчик мы лучше посмотрим от профессиональной студии озвучки, а комментировать футбол любимой команды лучше тому, кто знает наш менталитет.
И так везде про весь AI. У нас у всех профессиональные камеры в руках, но на важное событие мы позовем фотографа с большим фотоаппаратом, у нас есть дорогие и оочень умные роботы-пылесосы (которые на самом деле такие тупые, что даже хуже алисы), но все равно иногда хочется заказать клининг, побазарить за анализы можно и с клодом, но если он что-то найдет, то только дорогой врач и без вариантов.
AI заберет всю работу, которую можно свести к общечеловеческой, но нюансы и специфика вообще беспощадны, к ним он тоже будет подбираться, но на несколько порядков медленее. А "просто перевод" - он вообще нифига не "просто"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3👏3⚡1
Стрррррраайк! 🤩
Вчера забанили мой 200$ акк. Когда банят разовые, то пропускаешь мимо себя, а здесь был хороший качественный акк с историей в полтора года платной подписки. Но claude -p не щадит никого! Пришлось рефлексировать 🤔
Поделал выводы как с этим жить на хабре, приятного чтения 🤗
https://habr.com/ru/articles/1021936/
Вчера забанили мой 200$ акк. Когда банят разовые, то пропускаешь мимо себя, а здесь был хороший качественный акк с историей в полтора года платной подписки. Но claude -p не щадит никого! Пришлось рефлексировать 🤔
Поделал выводы как с этим жить на хабре, приятного чтения 🤗
https://habr.com/ru/articles/1021936/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁4🌚3😱2😢2🔥1
Ушла эпоха 🤩
13 октября 2012 года я арендовал себе свой первый bare metall хостить маленький сайтик, вообще не понимая какую махину я себе арендовал, что это вообще такое и зачем. Это была рабочая лошадка, которой с запасом хватило на следующий 10+ лет и которая беспрекословно вывозила любую нагрузку всех моих пет-проектов и экспериментов с чем угодно.
За это время с ним чего только не происходило - горели диски, память, отказывали все компоненты по частям. Потом были мягкие апгрейды железок - докидывалось немного тут и там. За это время через этот барик прошла, наверное, половина техрадара всего интернета - если мне надо было что-то поизучать, будь это либа для плюсов или миникубер, то я разворачивался там и тыкал, или же если нужно было поднять новый проектик на сокетах на новой нодежс или что-то еще.
За это время на нем накопилось столько всего, что я уже несколько лет хотел переехать на другой - потому что технологии беспощадны, новые поколения железа быстрее - там больше ядер, скорости и всего, они за меньшую стоимость выдают буст в 2-3 раза просто за счет своего существования.
Но меня безумно тяготило, что нужно разворачивать несколько проектов на совершенно разных стеках, большинство из которых было сделано в додокерную эпоху, вот эти все конфиги, чарты, базы, кроны, нжинксы с уникорнами и прочей радостью. У одного только вот этого проекта было 230гб офлайн-карт. По прикидам переезд не мог занять никак меньше недели полного погружения ̶а̶ ̶з̶а̶ ̶н̶е̶д̶е̶л̶ю̶ ̶в̶ ̶A̶I̶ ̶в̶с̶е̶ ̶м̶е̶н̶я̶е̶т̶с̶я̶ ̶и̶ ̶я̶ ̶в̶с̶е̶ ̶п̶р̶о̶п̶у̶щ̶у̶ ̶(̶ш̶у̶т̶к̶а̶)̶
На этих выходных я заказал новый барик, подключился, установил claude code, попросил прокинуть ssh ключ на тот хост, дальше просто "тут rsync всей папки", "забери вот этот конфиг", "развернись на поддомене", "забери базу и конвертни ее попутно в utf8mb" и тд. Два вечера на лайте с перерывом на посидеть у костра, три бутылочки бельгийского пива, и все готово🍺 Он сам ходил с одного хоста на другой, чекал дифф чего надо, устанавливал зависимости типа конкретной версии ffmpeg, изолировал проекты, сам создал unix юзеров под каждый проект, раскидал прав и ВООБЩЕ СДЕЛАЛ ВСЕ. Я писал командочки и потом менял A-записи.
Мир изменился. Я безвозвратно потушил свой любимый сервачок - ушла эпоха не просто моего барика, ушла эпоха вот этого низкоуровнего ВСЕГО. Тебе не нужно полвечера читать про lua, чтобы написать хитрый перехват-обработчик в nginx, это теперь вопрос одной минуты и 1 команды. И так - со всем.
При этом, вокруг все еще полно людей, который не верят и не хотят верить в то, что сейчас происходит. Да этот ваш AI галлюцинировывает, да это стохастический попугай, да это вообще и не интеллект вовсе и вообще сначала докажи мне, а потом я, может быть, соглашусь. После этого переезда я просто больше не буду спорить с этими людьми - не работает, окей, не просите потом отзыв после поездки оставить 🥹🤣
Могу за них лишь поднять бокальчик - не чокаясь и не сочувствуя, всем остальным - добро пожаловать в новый мир🤩 👍
13 октября 2012 года я арендовал себе свой первый bare metall хостить маленький сайтик, вообще не понимая какую махину я себе арендовал, что это вообще такое и зачем. Это была рабочая лошадка, которой с запасом хватило на следующий 10+ лет и которая беспрекословно вывозила любую нагрузку всех моих пет-проектов и экспериментов с чем угодно.
За это время с ним чего только не происходило - горели диски, память, отказывали все компоненты по частям. Потом были мягкие апгрейды железок - докидывалось немного тут и там. За это время через этот барик прошла, наверное, половина техрадара всего интернета - если мне надо было что-то поизучать, будь это либа для плюсов или миникубер, то я разворачивался там и тыкал, или же если нужно было поднять новый проектик на сокетах на новой нодежс или что-то еще.
За это время на нем накопилось столько всего, что я уже несколько лет хотел переехать на другой - потому что технологии беспощадны, новые поколения железа быстрее - там больше ядер, скорости и всего, они за меньшую стоимость выдают буст в 2-3 раза просто за счет своего существования.
Но меня безумно тяготило, что нужно разворачивать несколько проектов на совершенно разных стеках, большинство из которых было сделано в додокерную эпоху, вот эти все конфиги, чарты, базы, кроны, нжинксы с уникорнами и прочей радостью. У одного только вот этого проекта было 230гб офлайн-карт. По прикидам переезд не мог занять никак меньше недели полного погружения ̶а̶ ̶з̶а̶ ̶н̶е̶д̶е̶л̶ю̶ ̶в̶ ̶A̶I̶ ̶в̶с̶е̶ ̶м̶е̶н̶я̶е̶т̶с̶я̶ ̶и̶ ̶я̶ ̶в̶с̶е̶ ̶п̶р̶о̶п̶у̶щ̶у̶ ̶(̶ш̶у̶т̶к̶а̶)̶
На этих выходных я заказал новый барик, подключился, установил claude code, попросил прокинуть ssh ключ на тот хост, дальше просто "тут rsync всей папки", "забери вот этот конфиг", "развернись на поддомене", "забери базу и конвертни ее попутно в utf8mb" и тд. Два вечера на лайте с перерывом на посидеть у костра, три бутылочки бельгийского пива, и все готово🍺 Он сам ходил с одного хоста на другой, чекал дифф чего надо, устанавливал зависимости типа конкретной версии ffmpeg, изолировал проекты, сам создал unix юзеров под каждый проект, раскидал прав и ВООБЩЕ СДЕЛАЛ ВСЕ. Я писал командочки и потом менял A-записи.
Мир изменился. Я безвозвратно потушил свой любимый сервачок - ушла эпоха не просто моего барика, ушла эпоха вот этого низкоуровнего ВСЕГО. Тебе не нужно полвечера читать про lua, чтобы написать хитрый перехват-обработчик в nginx, это теперь вопрос одной минуты и 1 команды. И так - со всем.
При этом, вокруг все еще полно людей, который не верят и не хотят верить в то, что сейчас происходит. Да этот ваш AI галлюцинировывает, да это стохастический попугай, да это вообще и не интеллект вовсе и вообще сначала докажи мне, а потом я, может быть, соглашусь. После этого переезда я просто больше не буду спорить с этими людьми - не работает, окей, не просите потом отзыв после поездки оставить 🥹🤣
Могу за них лишь поднять бокальчик - не чокаясь и не сочувствуя, всем остальным - добро пожаловать в новый мир
Please open Telegram to view this post
VIEW IN TELEGRAM
App Store
Приложение «CityWalks.me — путеводитель» — App Store
Загрузите приложение «CityWalks.me — путеводитель» от этого разработчика (Dmitry Antipov) в App Store. См. скриншоты, оценки и отзывы, советы пользователей и…
💯14🔥10❤4🤡2🤯1
Вчера вышла OpenAI Privacy Filter - локальная опенсорсная моделька, которая ищет и маскирует персональные данные. Сделал бенчик на русском и обзор архитектуры. На русской синтетике у них в репорте все неплохо, а в жизни - беда. Но, к слову, они открыто пишут, что под себя ее стоит файнтюнить (я пока нет, но штука интересная, потестю).
Но как феномен - локальная 1.5B MoEшка, которая работает на любом чайнике без GPU, быстрая и специализированная под конкретную задачу, которая упакована в cli - кажется, это наше ближайшее будущее, которое окажет нормальное такое влияние на архитектуру наших агентиков и систем.
https://habr.com/ru/articles/1027266/
Но как феномен - локальная 1.5B MoEшка, которая работает на любом чайнике без GPU, быстрая и специализированная под конкретную задачу, которая упакована в cli - кажется, это наше ближайшее будущее, которое окажет нормальное такое влияние на архитектуру наших агентиков и систем.
https://habr.com/ru/articles/1027266/
Хабр
Разбор архитектуры и тест-драйв OpenAI Privacy Filter на бенчмарке персональных данных на русском
22 апреля 2026 OpenAI выложила Privacy Filter — маленькую открытую модель, которая ищет и маскирует персональные данные прямо на устройстве. Без облаков, утечек и горы регулярок. В анонсе — 97% F1,...
👍8👏5❤3👎1🔥1🥰1
Провел стрим на тему "Как выбрать LLM для приложения или AI-агента"
Я постоянно сталкиваюсь с вопросами какую же ллмку себе выбрать и как именно. Постарался впихнуть наиболее частые ответы и в целом максимум структурированной инфы в видосик на час с небольшим. Вышло, на мой вкус, очень неплохо.
В видосике - про свою инфру, народный кластер, характеристики моделей, что общего у контекстного окна и алкоголя, квантизацию, целеполагание, ну и итоговый чеклист, конечно.
Рекомендую. Приятного просмотра!
https://www.youtube.com/watch?v=IYfEd_nIfGM
Я постоянно сталкиваюсь с вопросами какую же ллмку себе выбрать и как именно. Постарался впихнуть наиболее частые ответы и в целом максимум структурированной инфы в видосик на час с небольшим. Вышло, на мой вкус, очень неплохо.
В видосике - про свою инфру, народный кластер, характеристики моделей, что общего у контекстного окна и алкоголя, квантизацию, целеполагание, ну и итоговый чеклист, конечно.
Рекомендую. Приятного просмотра!
https://www.youtube.com/watch?v=IYfEd_nIfGM
❤9🔥4👏3👍1
"LLMка вызвала инструмент". Нет, не вызывала 🤩 🪚
Мы ежедневно употребляем фразы про вызов тулов ллмками, но по факту это лишь инженерная абстракция, давайте разбираться почему 🤔
Шаг 1: инъекция тулов в промпт
Модель ничего не вызывает, у LLM нет рантайма, она не ходит в сеть и даже не исполняет код. Единственное, что она умеет (и этого хватило для AI-революции) - предсказывать следующий токен. Тулы - это просто текст в контексте: раннер движка инференса собирает описания инструментов и кладет их в промпт. Для самой модели "системное описание тулов" не является какой-то сущностью и ничем не отличается от "привет, как дела?" - все это тот же самый тензор input_ids.
Шаг 2: попадание в "нужный режим"
А вот способность "вызвать тул" - результат файнтюна, а не архитектуры. Чтобы модель умела такое делать - ее специально обучают на примерах таких диалогов. То есть, собирают обучающий пример "контекст->задача->вызов тула->результат". Скормив модели тысячи таких диалогов, мы добиваемся, что она статистически выучивает закономерность: при наличии <tools> в контексте и подходящем запросе высоковероятны токены вызова, а не какой-либо текст.
И здесь есть важный момент про гарантию правильности всей схемы. Есть вариант доверия - мы просто ждем от модели, что она вернет правильную схему вызова тула, но здесь начинаются галлюцинации, битый json и прочие нерадости. Вариант так себе.
Второй вариант - насильное ограничение, именуемое так же "constrained decoding". В этом подходе на каждом шаге сэмплинга выбираются только подходящие под грамматику токены, а логиты, ведущие в невалидное состояние, обнуляются до -inf еще до софтмакса и json schema инструмента компилируется в автомат, который на каждом шаге допускает только валидные продолжения. Условно, если мы ожидаем закрытие кавычки, то модель физически не может выдать что-то другое.
Шаг 3: момент остановки
Модель генерирует вызовы и в какой-то момент ей надо остановиться. И это так же делается через stop-токен (условный "<|tool_call_end|>"), после которого декодирование завершается. Инференс-раннер должен это распознать и прекратить генерацию, то есть мы просто сгенерировали моделью блочок с намерением что-то вызвать, а дальше все передается на слой выше.
Шаг 4: оркестратор выполняет тул
Раннер выполняет намерение, получает результат, а затем просто точно так же весь вывод подает в модель. С точки зрения модели, здесь нет никакого "вызова" функции, она видит текст намерения, потом текст результата, а затем продолжает только то, что умеет хорошо - предсказывает следующий токен.
Здесь есть важный нюанс. Каждый тул-кол - это новый префилл - результаты добавляются в конец контекста и его надо прогонять через все слои. KV-cache предыдущих токенов переиспользуется, но новые токены результат требуют полноценного префилла для дельты - а значит чем короче будет ответ тула (и сам диалог перед ним!), тем лучше.
Ну вот и все!
Поэтому фраза "LLM вызвала инструмент" на самом расшифровывается так: модель, дообученная на соответствующих траекториях, сгенерировала и, возможно, под жестким контролем грамматики — последовательность токенов, похожую на структурированный вызов; затем выдала стоп-токен; затем внешний оркестратор распарсил эти токены, нашел реальную функцию, исполнил ее и закинул результат обратно в контекст новой пачкой токенов.
Но мы, конечно, будем продолжать говорить как говорили🤩 🙂
Мы ежедневно употребляем фразы про вызов тулов ллмками, но по факту это лишь инженерная абстракция, давайте разбираться почему 🤔
Шаг 1: инъекция тулов в промпт
Модель ничего не вызывает, у LLM нет рантайма, она не ходит в сеть и даже не исполняет код. Единственное, что она умеет (и этого хватило для AI-революции) - предсказывать следующий токен. Тулы - это просто текст в контексте: раннер движка инференса собирает описания инструментов и кладет их в промпт. Для самой модели "системное описание тулов" не является какой-то сущностью и ничем не отличается от "привет, как дела?" - все это тот же самый тензор input_ids.
Шаг 2: попадание в "нужный режим"
А вот способность "вызвать тул" - результат файнтюна, а не архитектуры. Чтобы модель умела такое делать - ее специально обучают на примерах таких диалогов. То есть, собирают обучающий пример "контекст->задача->вызов тула->результат". Скормив модели тысячи таких диалогов, мы добиваемся, что она статистически выучивает закономерность: при наличии <tools> в контексте и подходящем запросе высоковероятны токены вызова, а не какой-либо текст.
И здесь есть важный момент про гарантию правильности всей схемы. Есть вариант доверия - мы просто ждем от модели, что она вернет правильную схему вызова тула, но здесь начинаются галлюцинации, битый json и прочие нерадости. Вариант так себе.
Второй вариант - насильное ограничение, именуемое так же "constrained decoding". В этом подходе на каждом шаге сэмплинга выбираются только подходящие под грамматику токены, а логиты, ведущие в невалидное состояние, обнуляются до -inf еще до софтмакса и json schema инструмента компилируется в автомат, который на каждом шаге допускает только валидные продолжения. Условно, если мы ожидаем закрытие кавычки, то модель физически не может выдать что-то другое.
Шаг 3: момент остановки
Модель генерирует вызовы и в какой-то момент ей надо остановиться. И это так же делается через stop-токен (условный "<|tool_call_end|>"), после которого декодирование завершается. Инференс-раннер должен это распознать и прекратить генерацию, то есть мы просто сгенерировали моделью блочок с намерением что-то вызвать, а дальше все передается на слой выше.
Шаг 4: оркестратор выполняет тул
Раннер выполняет намерение, получает результат, а затем просто точно так же весь вывод подает в модель. С точки зрения модели, здесь нет никакого "вызова" функции, она видит текст намерения, потом текст результата, а затем продолжает только то, что умеет хорошо - предсказывает следующий токен.
Здесь есть важный нюанс. Каждый тул-кол - это новый префилл - результаты добавляются в конец контекста и его надо прогонять через все слои. KV-cache предыдущих токенов переиспользуется, но новые токены результат требуют полноценного префилла для дельты - а значит чем короче будет ответ тула (и сам диалог перед ним!), тем лучше.
Ну вот и все!
Поэтому фраза "LLM вызвала инструмент" на самом расшифровывается так: модель, дообученная на соответствующих траекториях, сгенерировала и, возможно, под жестким контролем грамматики — последовательность токенов, похожую на структурированный вызов; затем выдала стоп-токен; затем внешний оркестратор распарсил эти токены, нашел реальную функцию, исполнил ее и закинул результат обратно в контекст новой пачкой токенов.
Но мы, конечно, будем продолжать говорить как говорили
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🐳3✍2❤1👏1🤯1🙏1
