AI

Немного дегтя

Я, пожалуй, немного компенсирую вчерашний отзыв о работе OpenClaw — не то, чтобы ложкой дёгтя, но наблюдениями противоположного характера.

Внутри неплохо спроектированного продукта находятся все те же современные модели со всеми их недостатками. И на них я тоже уже наткнулся.

Например, как не ухищряйся и не придумывай новые прекрасные методы работы с памятью, перешибить собственные знания модели очень сложно. Я и в обычном использовании регулярно страдаю от того, как модель — совершенно все равно какая именно, хоть Opus 4.5, хоть Gemini 3 Pro, — настаивает, что её не существует, а актуальная версия либо Claude Haiku 3.5, либо Gemini Flash 2.0. У меня давно есть дополнение к промпту, где явно сказано, что перед упоминанием любой версии продукта, модели или библиотеки надо проверить фактически актуальную версию — даже в таком виде модель регулярно мне сообщает, что я ошибся и указал не вышедшую еще модель. В OpenClaw я сразу указал, что проверять надо и даже отдельно сказал “Заведи себе файл с версиями, запиши туда актуальные и раз в две недели проверяй” — и все равно в очередном скрипте он вписал google flash 2.0. Причем, когда я послал исправлять — он исправил в конфиге и оставил захардкоженной модель в скрипте. Когда я пнул еще раз — он исправил в скрипте и дописал fallback — до google flash 2.0!

Это, как понятно, я уже нарушил чистоту эксперимента, глазами глядя на каждую редакцию скрипта.

Вообще, модели фантастически плохо знают две вещи — собственный API и собственные возможности. И в очередной задаче это проявилось — сначала OpenClaw написал скрипт, который не учитывал параметры reasoning в запросе к LLM, а потом я понял, что агент решил не ту задачу. Я ставил задачу проверять пачку RSS и присылать мне дайджест, а он написал скрипт, который проверяет RSS и присылает дайджест — но это не agentic решение, с тем же успехом я мог бы написать такой скрипт и без него.

Собственно, с этим я сталкивался и в Claude Code — когда ему говоришь “сделай это скиллом”, он пишет очень правильный промпт, но это не скилл, поскольку он даже не оформлен правильно.

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

Выходные с OpenClaw

Два дня возился с OpenClaw (он же Moltbot, он же Clawdbot).

Я не стал его ставить на мак — у меня есть и mac mini, и mac Studio, которые можно задействовать, но пока я не готов давать ему доступ ко всем аккаунтам и логинам, а VPS в облаке справится не хуже. Пришлось, правда, повозиться — доступ к управлению ботом предусматривает либо ssh-туннель, либо использование Tailscale, а я давно для приватного доступа использую Cloudflare Tunnel. Но настроить получилось — и я оказался в очень знакомой ситуации, когда инструмент есть, а попробовать не на чем.

Бот, активно мне помогающий

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

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

С другой стороны, конечно, иногда в разгар боев с Claude Code ощущаешь себя героем мультика про крылья и ноги — “лучше день потерять, потом за два часа долететь”. На гораздо чаще получается наоборот.

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

Итоги года в вайб-кодинге

В общем, мне кажется конец года лучшим моментом, чтобы еще раз поговорить о вайб-кодинге. О нем пишут, ему учат и пытаются отучить, о нем говорят все подряд и даже выбрали словом года. Коллеги по подкасту Радио-Т весь год с угасающим энтузиазмом обещали, что вот-вот всё то, что не соответствующие высокому званию программиста навайбкодили, наконец-то перестанет работать и весь мир придет к ним на поклон за исправлениями — ну, и раз уж я закончил год выпуском уже третьей версии интересного проекта, где весь код написан и отлажен разными версиями AI, то вполне можно и подвести итоги.

Иллюстрация того, как должна измениться работа программиста (prompt: Claude Opus 4.5, picture: IMAGEN 4
Иллюстрация того, как должна измениться работа программиста (prompt: Claude Opus 4.5, picture: IMAGEN 4

Гипотетически, ответ такой…

Я уже примерно год занимаюсь несколькими AI-проектами, в том числе RAG-ботом (Retrieval-Augmented Generation), и всё время выясняю для себя что-то новое. Почему бы не поделиться?

Разработка RAG-чатбота считается простой задачей — многие облачные платформы, от OpenAI до Cloudflare, предлагают даже готовые решения, где все можно настроить кликами в веб-интерфейсе. Да и для собственной разработки не заметно особых проблем — возьмите базу знаний, порежьте ее на небольшие фрагменты, однородные по смыслу (например, вопрос-ответ или раздел в большом документе), вычислите для этих фрагментов векторное представление (embeddings, в самом простом случае это очень дешево делается через запрос к API, например, OpenAI или Google), сохраните в специальный вид базы, которая называется “векторной” и ждите вопроса пользователя. Полученный вопрос тоже превращаете в эмбеддинг и теперь на запрос с ним векторная база вернет вам результаты, наиболее похожие (similar) на заданный вопрос. Остается сформулировать запрос к LLM буквально следующего содержания “Ты специалист службы поддержки (или консультант, смотря что за задача), вот вопрос пользователя, вот что мы знаем на эту тему, сформулируй ответ”.

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

Будущее SEO

На выходных попалась статья в блоге Semrush про то, что золотая эра SEO заканчивается, AI в результатах поиска Googel даёт всё больше ответов без клики на сайты, а AI-чаты (ChatGPT или Claude) предпочитают давать ссылки на крупные бренды. В результате малому бизнесу, который до сих пор уповал на поисковую оптимизацию и контент-маркетинг, достаётся все меньше трафика и что дальше делать — неизвестно.

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

Возможно, общость рекомендаций связана в том числе и с отсутствием у Semrush готового сервиса, в который можно ткнуть пальцем и сказать “пользуйтесь!”. Но в целом, я бы назвал развитие ситуации справедливым.

Чем, по сути, было поисковое продвижение для малого бизнеса последние, пожалуй, лет 10, если не больше? Буквально два направления, оба в меру сомнительные — расстановка ссылок и контент-маркетинг. Со ссылками примерно и так понятно — то, что начиналось с совершенно добровольного обмена или цитирования, давно выродилось в агрессивную тактику задалбывания предложениями разместить гостевой пост, разместить ссылку где-то в тексте, поменять ссылку в тексте 10 летней давности и поставить там вместо оригинала ссылку на другой сервис “почти такой же точно, но другой” — в общем, наверняка знаете, о чем речь. Но что не так с контент-маркетингом?

Да всё не так примерно. Вот есть сайт небольшого магазина или небольшой компании. Контента на нем в обычном случае не то, чтобы много — страницы товаров, оплата/доставка, “О нас”, что еще может быть в магазине? Но тут приходит контент-маркетолог и рассказывает, что не будет никаких продаж без контент-маркетинга — то есть новых статей пару раз в неделю на темы, связанные со сферой магазина. Без этого, авторитетно объясняет маркетолог, не будет ни репутации магазина, как выдающегося в своей нише, ни поискового трафика, поскольку что тут индексировать поиску?

Но поставьте себя на место владельца магазина. Где он возьмет материал на две статьи в неделю? О чем писать? Хорошую статью написать не очень просто, даже если у вас есть материал. А у какого количества магазинов и бизнесов вообще есть какой-то уникальный опыт, достойный статьи? Вы знаете, что получается в итоге — многочисленный статейный мусор “Топ-10 чего угодно”, где на первом месте приведен не имеющий недостатков продукт автора, а дальше всякие недостойные конкуренты, или “Советы начинающим кому угодно”, хоть сантехникам, хоть ядерным физикам. Пройдитесь по сайтам SaaS-продуктов — они все забиты регулярными статьями на совершенно общеобразовательные темы, часто скопированные либо у других, либо из википедии. Это была эпоха великого рерайта, что уж тут скрывать?

Вот теперь она справедливо заканчивается — если речь идет об ответе на вопрос, то AI хоть в чате, хоть в выдаче даст ответ лучше и быстрее, без излишней рекламы. А если продукт, сервис, магазин имеет что сказать, как обладатели уникального опыта, он не пропадет. Я вот в большом количестве поисков про клавиатуры встречаю один украинский магазин, у которого и хороший набор товаров, и глубокое знание темы, и много собственных тестов с подробными обзорами. Жаль, что он такой у нас один, но он заслужил свой поисковый трафик и меня в качестве покупателя.

Вот еще бы соцсети подобным образом очистить — но это прямо противоречит как бизнес-модели, так и интентам пользователей. Так что лучше туда просто не ходить. Шучу.

Редизайн блога

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

Собственно, рассказать стоит только то, что весь процесс — от макетирования до полной имплементации и исправления багов, — занял у меня часа полтора. Конечно, благодаря AI — я взял привычный Claude Code, применил уже проверенный на паре мелких задач скилл frontend-design и так всё и сделал. Claude расспросил, какие стили я предпочитаю, какой шрифт для чего лучше использовать, что лучше сохранить из существующей темы (а тут стояла Mainroad, довольно старая тема) и нарисовал три макета в разном стиле.

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

Не обошлось без казусов — например, исправляя ширину поста, он вдруг заявил “А еще я убрал красную линию в заголовке” и на самом деле её убрал. Пришлось сказать, чтобы вернул.

Но результат мне нравится. Надеюсь, аудитории тоже будет лучше.

P.S. На самом деле надо честно сказать, что еще полтора часа заняли попытки заставить комментарии отображаться корректно — то есть, используя те же цвета, что и на остальном блоге. Ну, потому что в мире Умпутуна владельцы сайтов не должны хотеть других цветов кнопок и ссылок. Но и это победили.

Не даем заснуть колонкам

На выходных задумался, что за последний год у меня сильно изменился шаблон поведения в совершенно стандартных сценариях использования продуктов. Если раньше, встречая какое-то мелкое неудобство, я пробовал его решить настройками или чьим-то готовым решением, то сейчас я начинаю думать — “А нельзя ли это устранить вообще? Что посоветует AI?”. И по результатам небольшого чата вполне может последовать радикальная перенастройка системы или даже написание программы, которая решит проблему.

История про долгую историю окупаемости

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

На четвертом курсе института нам читал лекции по экономике железнодорожного транспорта профессор Бондаренко и на лекции, посвященной расчету окупаемости капвложений (сейчас бы сказали — “инвестиций”), рассказал о том, что он входил в рабочую группу экономистов, занимавшихся разработкой ТЭО (технико-экономического обоснования) системы “Экспресс” — автоматизированной системы продаж билетов на пассажирские поезда в СССР. Кажется, речь шла о системе “Экспресс-2”, запущенной во всесоюзном масштабе в середине 80-х годов прошлого века.

Приятный сеанс вайбкодинга

Я в последнее время практически большую часть работы делаю с использованием AI-агентов, которые при этом что-то программируют. На меня за это регулярно сердятся “настоящие” программисты, мол, я ничего не понимаю, что там AI пишет, будет масса проблем потом, кто это сможет поддерживать и вообще… Я, правда, честно отвечаю, что меня не волнует, кто это сможет поддерживать, пока с этим справляется даже нынешний AI, тем более, что большинство вещей, которые в итоге получаются — это прототипы, которые используются для разовой или нерегулярной задачи. Если в итоге станет понятно, что идея, алгоритм или последовательность операций даёт нужный результат — “правильной” разработкой займутся живые люди, которые сделают “правильный” проект. Хотя при этом я неплохо представляю, что откуда берется, что с данными происходит и как проверить итоговый результат — а вот какой алгоритм сортировки применен или как не по канонам названы методы, меня и волновать не должно, я такого и про результат работы живых людей не знаю.

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

Контекст ненужных MCP

Если вы начали использовать MCP практически сразу, как я — сходите в конфиг и удалите оттуда первые референсные серверы типа fetch и filesystem. Claude во всех видах давно умеет обращаться к более современному web-fetch, который работает через серверы Anthropic, на порядок реже банится сайтами и нормально извлекает контент. Что касается filesystem, то на Claude Desktop он еще может использоваться, а вот Claude Code гораздо лучше справляется своими силами, а MCP только занимает контекст.

Достаточно стандартная картина при установленном SuperClaude

Что подводит нас к разговору о контексте и его использовании. Любой MCP занимает место в контексте, примерно так же, как любое приложение, запущенное на смартфоне и работающее в фоне, влияет на энергопотребление и заряд батареи. Еще место в контексте занимают сообщения в сессии, файлы вида CLAUDE.md (причем как локальный в проекте, так и общий, на уровне пользователя), агенты, которые настроены в Claude Code. Если при этом поставить что-то типа прекрасного фреймворка SuperClaude и вдобавок согласиться на все предложенные дополнения, включая MCP, то получившийся Claude Code, безусловно справится с немалым количеством задач больше и лучше, чем до этого, но вот свободного контекста останется мало. Если конкретно — поскольку я по этим граблям и прошелся, — можно обнаружить, что из общего контекста в 200k токенов несколько тысяч занято системным промптом, полтора десятка тысяч — системными tools, 68k(!) — всеми MCP, и еще 25k — всеми файлами памяти, от CLAUDE.md до десятка файлов с инструкциями для компонентов SuperClaude. И для собственно сообщений чата остается лишь четверть, а то и меньше общего объема.

В общем, настоятельно рекомендую для начала удалить ненужные вам MCP — начиная с упомянутых выше fetch и filesystem. Из всего, что ставит SuperClaude, я в общем конфиге (на уровне пользователя, он загружается всегда, хоть и последним) оставил sequential-thinking, serena (рекомендую, это полностью заменяет все собственные попытки что-то сохранить в файл, чтобы потом напомнить Claude Code, чем вы занимались в прошлую сессию), tavily (веб-поиск, но не обязательно) и context7 (поиск по документации библиотек, фреймворков и так далее). Если вам нужно что-то типа chrome-tools или playwright — ничто не мешает в корне нужного проекта положить файл .mcp.json, где дописать нужные. Именно в этом проекте они и будут работать. К сожалению, отключить на уровне проекта нельзя, хотя все установщики норовят прописаться именно на user-scope.

Тот же контекст после выключения ненужных в конкретном проекте MCP серверов

Результат подобной чистки контекста вполне достойный — у меня получилось довести MCP tools до 21,5k токенов, что более чем в три раза меньше дефолтного состояния, а объем свободного контекста — до почти 95k. К сожалению, Claude автоматически резервирует 45k в качестве буфера для автосжатия сессии и это тоже не отключается.

Не забудьте, что добавляемые вручную серверы также можно добавить только для текущего проекта — для этого нужно в команде claude mcp add не указывать -s user. Но не забывайте, что в этом случае сервер все равно пропишется в дефолтном .claude.json в контексте текущего проекта, а не отдельным файлом в его директории.

К предыдущему конфигу просто добавлен github-mcp-server

P.S. Напоследок хочу показать еще одну страшную картинку полностью забитого контекста. На ней в MCP tools из приведенных 70+k токенов более 50k занимает один сервер — github_mcp_server. Очень яркий пример того, что комфорт требует компромиссов и наоборот.

Национальная LLM: между политическими амбициями и технологическими реалиями

Последние несколько месяцев мы много слышим о создании национальной LLM. Эта цель была декларирована еще в феврале этого года, потом на DOU вышло интервью CTO Центра AI Excellence Дмитрия Овчаренко, а недавно прозвучало заявление министра цифровой трансформации Михаила Федорова, в котором даже был назван срок запуска первой версии LLM — конец этого года.

Все это время в любой дискуссии непременно встает вопрос — «А вообще нужна ли национальная LLM? Какова цель ее создания? Как ее можно будет использовать? Зачем ее создавать при наличии многих уже существующих моделей достаточно высокого уровня?». К сожалению, ответы представителей государства — это какая-то смесь технологических, безопасностных и политических аргументов, где последние занимают значительное, если не первое, место.

Хотел только спросить

Я всего лишь хотел спросить…

Взаимодействие с LLM иногда оборачивается непредсказуемо. Вчера, вспомнив про функцию в MyHeritage, которая раскрашивает старые фото, (и попробовав обработать пару фотографий), я решил поинтересоваться у AI, а есть ли другие варианты и вообще хорошие модели, которые это умеют делать.

ChatGPT был конкретен — возьмите GFP-GAN и DeOldify потому-то и потому-то.

А вот Claude решил отвечать иначе.

Зачем нужна национальная LLM

Full disclosure: Этот текст комментирует интервью одного из руководителей Минцифры Украины в области AI. Я участвовал в конкурсе на должность Chief AI Officer, который полгода назад проводило Минцифры.

На ДОУ опубликовано интервью с Дмитрием Овчаренко, CTO центра AI, недавно организованного Министерство цифровой трансформации, посвященное в основном вопросу разработки национальной LLM. Эта разработка была анонсирована при запуске центра и, честно скажу, сразу вызвала у меня недоумение. Интервью это недоумение совершенно не развеяло, скорее усилило.

Продолжаем писать вместе с AI

Я иногда задумываюсь, что слишком уж много вожусь с процессом прилаживания AI к ведению своего телеграм-канала, но на самом деле это для меня прекрасная тестовая площадка — много готового контента, причем с дополнительными материалами и черновиками, а на практической задаче всё новое изучается гораздо лучше.

На этой неделе мне попалась свежая статья исследователей из MIT, в которой они описывают свою новую систему Satori. Если упрощать, то существует несколько способов в обучении моделей рассуждениям — использование более мощной модели в качестве учителя, дистилляция модели, обучением с подкреплением на основе человеческих отзывов. Все это требует много ресурсов, поэтому исследователи решили пойти другим путем и попробовать научить модель самообучаться. Ученые придумали новый метод — Chain-of-Action-Though (COAT), то есть “Цепочка действий-мыслей”, чтобы помочь модели остановиться в рассуждениях, проверить себя и принять решение о продолжении.