Зачем заказывать стейки на Temu?

Обозревателю кулинарного сайта пришлось как-то оказаться на Temu и он увидел доставку мяса. Он и сам понимал, что это немного необычное место для заказа еды, но она вроде бы была местная (то есть из Нью-Йорка, точнее, Брайтон Бич), поэтому решил заказать.

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

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

Стейк, пожаренный критиком

Общий вывод — не заказывайте мясо на Temu.

Вывод странный, поскольку у заказа был вполне определенный подрядчик и это стильная миллениальная компания с красивыми фоточками. Судя по фотографиям в обзоре, я бы сказал, что это вообще не рибай, а больше похоже на Round — это очень постный стейк, компактной формы, который, вообще-то, категорически нельзя жарить на сковороде. Котлеты тоже не очень похожи на обещанные wagyu burgers, но критик их назвал “ничего особенного”.

А в целом, да, вполне закономерный вопрос — зачем заказывать стейки на китайской платформе дешевых распродаж?

Перенес трансляцию из телеграм-канала

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

Telegram: 19 марта 2026

Сегодня в Telegram-канале:

Как запустить большую LLM на ноутбуке

tl;dr — никак.

Для тех, кто желает знать подробности, давайте разбираться.

На днях по твиттеру прошли сразу две волны. Во-первых, Андрей Карпати (один из основателей OpenAI, автор термина vibe-coding и вообще практически культовая личность, без иронии) опубликовал свой фреймворк Autoresearch, который изначально разрабатывал для обучения моделей. Суть проекта в том, чтобы дать AI-агенту на базе Claude или Codex пайплайн для тренировки небольшой модели и оставить его на ночь экспериментировать. Агент, соответственно, ставит эксперимент, модифицируя код для обучения модели, прогоняет обучение в течение 5 минут, если качественный показатель val_bpb (validation bits per byte) улучшился, то есть стал меньше, то коммитит код и начинает цикл сначала, если нет — откатывает изменение и опять начинает цикл.

Этот подход потом применил CEO Shopify Тоби Лютке для оптимизации фреймворка Liquid, который используется на фронтенде Shopify, и получил 53% сокращения времени на парсинг и рендеринг. В общем, довольно понятно — есть определенные измеряемые параметры, агенту задается направление работы, он итеративно и систематически ставит эксперименты, оптимизируя целевые показатели. Правда, результаты еще не пошли в продакшн — много упавших тестов и конфликтов.

Во-вторых, один из специалистов пошел дальше, взял большую модель Qwen 3.5-397B, статью сотрудников Apple про технику запуска LLM, когда система позволяет использовать SSD как расширение памяти, оставил Claude Code экспериментировать на ночь и после 90 экспериментов получил работающую версию большой LLM на MacBook Pro M3 Max с 48 гигабайтами памяти. Вроде бы ура, победа, правда, сначала была скорость 1 токен в секунду, потом улучшили до 5 токенов, но ведь настоящая большая модель работает на довольно скромном уже ноутбуке.

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

Что сделал Claude Code, оптимизируя модель? Прежде всего — применил агрессивную квантизацию экспертов. Qwen 3.5 — это модель с Mixture-of-Experts (MoE), где каждый токен генерируется только частью факторов (17B из 397B) и частью экспертов. Исходная версия была квантизована до 4 бит, что позволила её сократить до 120 гигабайт. В данном случае экспертов квантизовали до 2 бит, что очень агрессивно и обычно плохо сказывается на точных рассуждениях и математике. Если квантизация до 4 бит действительно приводит к потере 1-3% от 8-битной версии, то дальше зависимость нелинейная.

Кроме того, оригинальная конфигурация предусматривает выбор 10 экспертов на каждый токен. Здесь в результате оптимизации их количество урезали до 4 — то есть модель реально думает примерно третью “мозга” на каждом шаге. Опять же, Claude, занимавшийся оптимизацией, уверяет, что качество заметно не ухудшилось, но это буквально проверка на трех простых примерах, а не по результатам бенчмарков.

Было бы интересно сравнить получившийся результат с младшими моделями Qwen, например, с помещающейся в памяти без подобных оптимизаций qwen 3.5-30B-A3B, то есть с 30 млрд параметров, из которых активны 3. Если на стандартных бенчмарках “оптимизированный” вариант большой модели лучше маленькой — это практический успех. Если нет — надо оптимизировать дальше.

А если такого сравнения нет — то это маркетинг и proof-of-concept с действительно интересной, но непроверенной гипотезой. Нет, автор не запустил Qwen 3.5-397B на ноутбуке, он запустил что-то другое.

Telegram: 18 марта 2026

Сегодня в Telegram-канале:

Как заставить LLM не врать про версии

Каждый, кто много работает с LLM, сталкивался с этим: ты обсуждаешь какое-то решение с LLM, получаешь ответ с конкретным кодом или фактами — а потом выясняется, что код устарел полгода назад, и модель настаивает на использовании решений годичной давности. Или хуже: ты пишешь код с правильным современным синтаксисом, а модель тебя «поправляет» на устаревший вариант. Самое печальное, когда современная модель настаивает на то, что её самой не существует — например, Claude Opus 4.6 может утверждать, что самая новая модель Anthropic — это Sonnet 3.5, а Gemini 3.0 Pro советовала использовать новейшую модель Gemini 1.5 Pro, у нее, мол, миллионный контекст.

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

К сожалению, масштаб проблемы не ограничивается смешными анахронизмами, когда модель не знает, что Трамп опять президент США. Использование старого API или незнание новых вызовов в библиотеках — это в лучшем случае изобретение велосипеда, когда модель пишет код, чтобы интерпретируемым скриптом заменить встроенную функцию, о которой она не знает. Но это может стоить денег — как-то модель тихонько заменила мне вызов gpt4.1-mini на gpt-4o (мол, не существует же никакой mini), и вместо долей цента за запрос у меня начали тратиться пара центов.

Telegram: 17 марта 2026

Сегодня в Telegram-канале:

График Starlink по Украине

Данные Cloudflare Radar. Попробуйте угадать дату блокировки незарегистрированных терминалов Starlink.

Правда, стоит учитывать, что это открытый трафик. То есть не через VPN, прежде всего.

График Starlink по Украине, с 1 февраля по 21 февраля 2026

Кроме того, это не тот трафик, который исходит из сети Starlink, а тот, который приходит к сайтам, закрытым Cloudlfare. Это тоже несколько искажает картину.

Но картинка все равно показательная.

Telegram: 13 марта 2026

Сегодня в Telegram-канале:

Telegram: 12 марта 2026

Сегодня в Telegram-канале:

QMD — поиск по Markdown

Периодически AI-комьюнити (в самом широком смысле) подвергается нашествию моды. В какой-то момент весь твиттер начинает писать про одно и то же решение или функцию, все советуют одно и то же и все от этого в восторге. Я не имею в виду типичный мусор вида “Recently {smth} released new feature and this changes everything…” — нет, речь о вполне интересных вещах, как, например, OpenClaw.

Вот так в очередной раз донеслась мода на qmd. Это проект CEO Shopify Тоби Люке, который выпустил его несколько месяцев назад — минипоисковик по локальным файлам (в основном markdown, не проверял, что он еще поддерживает), который работает в командной строке и может использоваться AI-агентами. Уже есть и плагины, например, к Obsidian. У меня много документов в Markdown, да и Obsidian использую, поэтому решил попробовать наконец.

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

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

В общем, всё знакомо и понятно, но, если честно, пользоваться этим сложно.

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

Поиск по эмбеддингам меня начал удивлять — во-первых, для того, чтобы эти эмбеддинги создать, движок загрузил модель и распух в памяти до 28 гигабайт. Если в первой итерации я ему подсунул около 10 тысяч документов, то потом решил тестировать более щадяще и дал только 300 — не помогло, свои 28 гигабайт он кушал в любом случае. Я честно не понимаю, зачем ему столько — для эмбеддингов используется модель с 600М параметров, ей даже с контекстом не нужно больше пары гигабайт памяти. 28 гигабайт — это больше половины вообще всей памяти на моем MacBook Pro и системе становится тяжело, то есть в фоне эту индексацию не проделаешь. Я решил потерпеть, все же индексация делается один раз. Но при поиске он опять распух до 28 гигабайт, впрочем, после ответа память освободил.

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

ОК, я запустил гибридный поиск. Движок привычно занял 28 гигабайт оперативной памяти и начал работу. Да, это классический RAG, я и сам так подошел в разработке — взять запрос пользователя, выделить ключевые слова, добавить синонимы, поискать по нескольким запросам, преобразовать их в векторы, поискать все векторы, все это переранжировать и выдать результат.

55 секунд на один небольшой запрос по очень небольшой коллекции. И, поскольку я такое делал, тут ничего особо не ускоришь — много операций, много транзакционных расходов (времени). Плюс к тому это все сделано на Typescript и node.js, что скорости не добавляет. К примеру, мой бот прокручивает на порядок больше информации — ищет в обоих поисках по 50 документов, результат (100 документов) отдает во внешнюю LLM для переранжирования, забирает Top25, отдает с большим промптом во внешнюю LLM для формулирования ответа и 95% ответов укладываются в 53 секунды.

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

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