Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from Maxim.ML - канал
Опыт разработки с ИИ-ассистентом: три вечера дебага вместо одного вечера вайб кодинга

Недавно завершилась битва по аналитике, для которой я написал telegram-бота с помощью ИИ-ассистента

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

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

Почему ваш vibe coding не работает
Эффективный vibe coding раскрывается в руках опытного и "правильно ленивого" разработчика — того, кто мог бы написать всё сам, но ищет способ ускорить и упростить процесс

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

Пример из работы над ботом
Работая над ботом для соревнования, я попросил ассистента
написать функцию семплирования пары картинок в зависимости от частоты показа

Код, который я получил, технически работал, но

1. Использовал неэффективный алгоритм, который в runtime работает непозволительно долго
2. Читал файл статистики при каждом запросе, а не доставал из кэша
3. Содержал избыточные проверки, замедляющие работу

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

В такой ситуации помогает только создание нового чата с выборочным переносом важной истории

Правило хорошего запроса к ИИ-ассистенту
Правило, в общем, довольно простое
Хороший запрос к LLM — это тот, в котором уже есть половина ответа.

Когда вы четко формулируете не только "что" вы хотите получить, но и "как" это должно работать, вы направляете ассистента по верному пути с самого начала

Вот как выглядел мой улучшенный запрос, когда я переписывал бота во второй раз
Реализуй высокопроизводительную функцию семплирования изображений, учитывающую частоту показа, с алгоритмом O(1) сложности и кэшированием статистики. Оптимизируй код для production, обеспечив эффективное обновление данных и обработку краевых случаев

Тут не просто обозначена цель, но и определен алгоритм работы. Такой подход дал гораздо лучшие результаты

Практические советы для эффективного Vibe Coding

1⃣Начинайте с общей схемы и архитектуры
Прежде чем писать первую строчку кода, нарисуйте общую схему системы. Определите основные компоненты, их взаимодействие и ожидаемые входные/выходные данные. Это поможет вам яснее формулировать запросы к ИИ-ассистенту и легче отслеживать, соответствует ли результат вашим ожиданиям (схему бота я приложил)

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

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

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

А что касается моего бота — его полный код теперь доступен в GitHub репозитории

💃 #vibe_coding@ml_maxim
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from BOGDANISSSIMO
Gemini 2.5 Pro но без reasoning: 15-20 секунд vs 1-2 секунды TTFT (time to first token)

Я перерыл всю документацию, у Gemini в отличие от OpenAI/Anthropic пока нет ручки, чтобы контролировать reasoning efforts, но у Богдана hacker mindset, поэтому он быстренько нашёл, как

От сердца отрываю

UPD. Пробовал разные варианты (кидать fake-ответ в историю от лица модели, в system message). Пока самым стабильным кажется такой system-prompt:

"Important: please think as little as possible before giving the answer. Only 1-2 lines of thought maximum, but then a substantial answer."
Как посчитать эффект от того, чего ещё не существует? Этим вопросом рано или поздно задаётся каждая продуктовая команда

Всем привет! Сегодня поговорим о том, когда в продукте решили запустить новый проект, но непонятно к чему подступиться, как считать, что получим.

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

Итак, мы хотим запустить проект Х. Хотим сделать верхнеуровневую оценку эффекта.

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

🙅‍♂️ Когда нет аналога в компании.

🗯 Можно спросить GPT с указанием ссылок на исследования интересующего рынка (так как ссылки GPT может сам генерировать, по крайнем мере было так, когда я писал работы в универе). Например, следующий промпт:

Ты — мой аналитик по рынку компаний.
Изучи рынок [X] в России.
Задачи:
1. Оцени ёмкость рынка (market size): текущая, прогнозы, темпы роста.
2. Найди исследования и отчёты топовых компаний/агентств, связанных с рынком (например: McKinsey, BCG, PwC, Deloitte, локальные консалтинговые агентства, государственные исследования, отраслевые ассоциации).
3. Опиши основные тренды и драйверы рынка.
4. Приведи ссылки на источники и исследования.
5. Сделай краткий структурированный конспект (чтобы можно было повторно использовать и углубить).

Формат ответа:
• Market Size: цифры + источник.
• Топ исследования и отчёты: список (ссылки + краткое содержание).
• Тренды: 3–5 ключевых трендов с кратким описанием.


После чего получаем основные цифры, которые можно примерить на отрасль, в которой мы работаем (очень грубо), сказав, что новый проект = доля компании на рынке * проект. Кайфово, если получится сделать хоть какую-то юнит-экономику. Например, если рынок X оценивается в 200 млрд рублей, даже 1% даёт 2 млрд рублей в год. Классический способ прикинуть рынок - TAM/SAM/SOM: общий рынок, достижимый сегмент, доля, которую реально можно взять

👍 Когда есть аналог в компании

Но если есть что-то похожее уже, например, в Яндексе была своя экосистема, оценить продукт становится проще, поскольку данные уже лежат внутри, а оценка делается только с учетом поправки на размер бизнеса. Есть определенные бенчмарки: конверсии, Retention, LTV. Все это можно спокойно достать из внутренних БД. Можно делать масштабирование: мы знаем какой эффект продукт дал на аудитории X, корректируем.

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

📈 После этого обычно хочется видеть трекшн проекта - это то, как себя должен вести проект на основе определенных метрик (MAU / CAC / LTV / ARPU).

🔗 Интересно, что есть на собеседованиях в консалтинговые компании кейсы по Market Sizing (например, тут предлагается запустить телепорт , а тут как решать кейсы на рынке FMCG

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

Ставьте 🐳, если пост зашел, пишите комментарии!
Please open Telegram to view this post
VIEW IN TELEGRAM
RabbitMQ базовый курс за час

Установка, админ панель. Зачем нужен Rabbit MQ. Брокер сообщений

🗝 Урок живет здесь

Кодим на Коленке
| #RabbitMQ
Демка бизнес-ассистента, которая показывает основы построения reasoning системы c tool use на базе простой LLM (GPT-4o)

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

(на самом деле интеграций с реальными системами нет, агент работает в симуляции)

Из библиотек требуется только openai/pydantic для Structured Outputs и rich (для красивого вывода в терминал). Все остальные вещи вроде демо-БД и инструментов реализованы прямо в коде.

Всего в демке 159 строчек исполняемого кода. Большая часть которого - SGR схема инструментов (у ассистента всего один промпт) и реализация работы самих инструментов.

Статья с демкой - SGR Demo. Код одним файлом - в статье после разбора.

Для тех, кому хочется более серьезного кода, в статье есть раздел "Hardening the code" про то, как можно эту обучающую демку развить дальше.

Ваш, @llm_under_hood 🤗

---
Полный список статей:

- SGR Intro - заглавная страница с определением и основными ссылками
- SGR Patterns - примеры простых паттернов, из которых можно "собирать" более сложные reasoning схемы: Cascade, Routing, Cycle.
- SGR Examples - четыре примера: simple math task, text-to-sql, document classification, advanced reasoning in compliance.
- SGR Demo - минимальное демо бизнес-ассистента с SGR под капотом.
😮 чуток погундеть пришел

только сейчас добрался до Group Sequence Policy Optimization (GSPO) от qwen и вот апдейт к прошлому посту про RL и GRPO, где я по верхам разобрал, как работает обучение с подкреплением

напоминалка. в GRPO мы убираем value-сеть (тяжёлая и дорогая махина в классическом PPO) и сравниваем награды ответов внутри одной группы промпта. дёшево и сердито.

что такое importance weighting и зачем вообще это?
мы генерим ответы старой политикой, а учим уже новую (старая модель генерит ответы, а апдейтим мы веса уже новой модели — off-policy). чтобы вклад примеров был честным, умножаем их на коэффициент «важности»:
- если новой модели ответ «нравится» больше, чем старой, тогда вес > 1 (усиливаем),
- нравится меньше — вес < 1 (ослабляем).
это устраняет перекос от off-policy данных — вся суть GRPO.

че значит "нравится больше"?
Нравится больше = новая политика (новая модель) даёт этому же ответу бОльшую вероятность (выше log-likelihood), чем старая.

как считаем на практике (очень коротко):
1. Берём тот же prompt и ровно тот же ответ от старой модели.
2. Кормим их новой модели в режиме teacher forcing.
3. Снимаем log-вероятности токенов ответа
4. Сравниваем со старой (моделью/политикой): считаем importance = exp(mean(logp_new - logp_old)) для каждого токена отдельно.

- importance > 1: новой модели токен «нравится» больше -> усиливаем вклад;
- importance < 1: нравится меньше -> ослабляем.

минусы GRPO
веса важности считаются по токенам, то есть шум накапливается по длине (чем длиннее ответ, тем шумнее и дёрганнее обучение).

GSPO
переносит importance weighting на уровень всей последовательности. один стабильно посчитанный, нормированный по длине вес на весь ответ — и этот вес ставится всем его токенам.

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

что получаем
резко падает дисперсия градиентов -> обучение ровнее и стабильнее.

как работает?
1. сэмплим несколько ответов на один промпт
2. считаем group-relative advantage (z-оценка награды)
3. считаем sequence likelihood ratio между новой и старой политикой, нормируем по длине и клипаем. (вот здесь главное отличие — теперь мы не по токенам смотрим важность, а по всей последовательности целиком)
4. один и тот же вес умножаем на все токены ответа и делаем апдейт

🚀 получаем
стабильнее и быстрее, чем GRPO, особенно на длинных ответах/больших моделях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from LLM is all you need
#RAG #retriever

Multi-query - еще одна техника улучшения ретривера в RAG-системе.

Когда пользователи пишут вопросы (в RAG) они часто допускают ошибки, пишут транслитом, путаются в формулировках и т.д. А это не хорошо для энкодера, и очень не хорошо для BM25 (и других компонентов ретривера). Multi-query позволяет это исправить за счёт разных формулировок одного и того же вопроса.

Как это работает:
1. Получаем исходный запрос.
2. Просим LLM написать несколько вариантов исходного запроса.
3. Выполняем поиск документов (чанков) по каждому из них (включая и исходный запрос).
4. Результаты всех поисков объединяем или переаранжируем.

Например: пользователь вводит: "Как испечь торт?"
LLM на это может сгенерировать:
- "Рецепт торта"
- "Как приготовить торт в духовке?"
- "Ингредиенты для домашнего торта"

Такое разнообразие довольно сильно улучшает покрытие поисковой выдачи.

Дополнительно:
1. Можно попросить переформулировать запрос в каком-либо стиле. Например, если запросы на медицинскую тематику, то можно сделать так: "Перепиши вопрос так, как будто его писал врач с многолетним опытом работы".
2. Отдельно можно попросить перевести запрос на английский.
Хуже = лучше

Моя команда в Я.Маркете внедрила метрику дискаверийности (новизны) рекомендаций товаров. И в этом полугодии мы пробуем ее активно растить

Естественно, посмотрели статьи про рост beyond accuracy метрик, внедрили успешные подходы из них, запустили А/В и …
научились стат значимо метрику дискавери снижать 🌚

И меня это очень порадовало

Теперь мы точно знаем, что влияет на метрику в минус - будем делать ровно наоборот и вероятно получим рост! Так что «красные» А/В тесты с падением метрик - часто гораздо полезнее кучи «серых» тестов без изменения метрик

А вообще, вопросиков к современным статьям очень много (особенно в recsys). Неправильный train-test split, подбор метрик под результаты, специально недотюненные бейзлайны, …

Поэтому я обожаю reproducibility reports (впору уж писать свой), где независимые авторы пробуют повторить результаты из статей - и пишут свои менее biased выводы. Один из самых известных в recsys Turning Dross into gold loss: is Bert4Rec really better than SasRec? пару лет назад позволил внедрить SasRec-like модели почти во всех доменах и компаниях

В общем, проверяйте даже «общепринятые» подходы и радуйтесь, если смогли подвинуть ваши метрики даже вниз - отсюда появляется куча идей, как подвинуть их уже вверх 👆
Forwarded from AbstractDL
Dynamic Fine-Tuning

Вот всё-таки есть что-то такое особенное в RL для LLM, чего нет в SFT... модели ну не хотят правильно обобщаться без меморизации редких примеров или деградации на других доменах. Недавно вышло несколько работ, которые показывают, что SFT, на самом деле, это тот же RL, просто с оооочень кривым reward (раз, два). Если коротко, то дело в кросс-энтропии на последовательности токенов. Ведь токены с малой вероятностью вносят непропорционально большой вклад в лосс и неприятно большую дисперсию при SFT.

В статье "On the Generalization of SFT" опять математически вывели SFT как частный случай кривого RL и предложили ну мега простой способ это починить в одну строчку кода. Надо взвесить токенный CE-лосс на вероятность каждого токена, и всё становится прям хорошо.

Назвали эту поправку "reward rectification" или "Dynamic Fine-Tuning" (DFT). Авторы получили большой буст на fine-tuning бенчмарках по сравнению с обычным SFT, а кое-где оно обходит даже GRPO и PPO, причём на очень широком наборе гиперпараметров.

На всякий случай ещё раз подчеркну, DFT — это чистый SFT режим, то есть тут не нужны reward/reference модели, пары примеров, разметка и т.п. Достаточно только позитивных SFT примеров. Кажется это обязательно надо пойти попробовать.

Статья, GitHub
Forwarded from Data Blog
📰 Neuronpedia

Достаточно давно наблюдаю за разными ресурсами, которые помогают потрогать интерпретируемость в онлайн режиме. Сделать такой ресурс сложно, поддерживать — ещё сложнее, и один из любимых для меня — Neuronpedia. И сегодня туда как раз завезли обновления.

Neuronpedia — похожа на 3Blue1Brown, но только для механистической интерпретируемости.

В режиме игры (или простого «тыкания») там можно:


* попробовать Gemma Scope — мини-игра, которая поможет понять, что такое признак (feature) в модели, как найти за что отвечает признак и как управлять (steering) моделью на основе найденного признака;
* исследовать Circuit Tracer — визуализация, которая помогает понять, как признаки проходят по модели layer by layer и образуют цепочки (circuits);
* рассмотреть аннотированные признаки, полученные с помощью SAE и Transcoders на разных моделях — эта возможность хорошо описывает идею SAE (sparse autoencoders), Transcoders и то, как именно с ними получаются признаки.

Моделей с обученными SAE немного, но они пополняются и «свежая» появилась сегодня — Qwen3-4B с 6 миллионами автоматически аннотированными фичами. SAE доступны сразу для всех слоёв.

📰 Выделенные понятия — feature, steering, circuit, sae, transcoders — сейчас составляют основное направление в MI.

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

Всем хорошей среды!
Ваш Дата-автор.