AI и грабли
7.21K subscribers
149 photos
19 videos
4 files
189 links
Строил HR продукты для американского бигтеха. Внедряю AI в чужой бизнес, делаю свой, косячу и пишу про подноготную

@nikolay_sheyko
Download Telegram
2024 auto reflection.pdf
126.7 KB
Неочевидный плюс ведения канала и личного дневника – можно закинуть все записи за год в GPT и попросить анализ "со стороны".

Правда пришлось постараться, чтобы не было графомании. Claude, кстати, гораздо меньше воды льет по сравнению с GPT и Google Gemini

Есть моменты, которые прям неприятно читать, но жиза 🤷‍♂️

P.s. Промпты в комментах
11👏3🥰1
Один из самых мощных паттернов в работе с LLM из моего 2024 года

Еще в 2023 я использовал в продакше Chain of Thought и Chain of Prompts (цепочка мыслей и цепочка промптов).

Первое – это "думай по шагам", чтобы LLM не сразу давала ответ, а сначала подумала "вслух" (сейчас все модели уже сразу дообучены так делать).

Второе – разбиваем сложную задачу на несколько этапов и делаем их по очереди отдельными запросами (выдели логические блоки из текста и придумай названия → напиши саммари для каждого → переведи на русский)

Но тут несколько проблем:
1. Chain of Thought выбирает совсем разные шаги для похожих входных данных и вообще делает что хочет
2. Chain of Prompts жрет кучу денег, т.к. каждый этап делаем новый запрос (заново загружая токены контекст). Плюс занимает больше времени на выполнение (бывает критично).

А что делать то?

Custom Chain of Though – делаем один запрос, но четко указываем, какие шаги нужно сделать и формат результата

Упрощенный пример из двух шагов:
[тут у нас какой-то промт]...

Ответь сначала на английском. Потом переведи на русский

# output format

Response
<english response>

Translation
<перевод на русский>


Тут модель при генерации ответа "думает" на своем родном английском → нет просадки качества из-за чужого языка. При этом сразу получаем версию на русском. Так она еще и лучше по качеству, чем если просто в новом чате скинуть английский результат и попросить перевести. Есть идеи почему так? 🙃

Ну и че тут такого, все очевидно, где рокет саенс?

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

А если использовать structured output, то LLMка, даже если очень захочет, не сможет сгенерировать другие шаги. Ну и так можно не только линейный список шагов задавать, а еще и дерево с ветвлениями, которые выбираются прям во время генерации.

А это, я считаю, разъеб.
🔥121👍1
Срач в комментах по теме предыдущего поста.

Поучаствовал в душной дискуссии в комментах у Игоря Котенкова (@seeallochnaya) о том, какие проблемы есть у Custom Chain of Though про который пишу выше.

Что я понял, пока думал над аргументами за и против своей точки зрения:

Чтобы было проще и нагляднее – вот контекст в памяти модели в момент выполнения третьего шага в цепочке из 4 шагов:

Общие инструкции
Инструкция к шагу 1
Инструкция к шагу 2
Инструкция к шагу 3
Инструкция к шагу 4
Данные, с которыми работаем

(дальше, то что модель уже сгенерировала, это тоже попадает в контекст)
Результат шага 1
Результат шага 2
Резуль...(генеририуем тут)


1. Инструкции для других шагов в контексте, а значит, отвлекают модель от шага 3 👎

2. При этом, при генерации каждого нового токена, "карты внимания" нейронки пересчитываются (и че?)

3. => Если инструкция2 не важна для шага 3, то модель почти не будет обращать на нее внимания, когда генерирует результат3.
это важно – модель в динамике меняет фокус внимания


4. А если инструкция2 важна для шага 3, то модель будет обращать на нее внимание и выполнит шаг3 лучше, чем если бы не знала контекста
не баг, а фича


То же самое применимо не только к инструкциям, но и к результатам предыдущих шагов – если в них есть полезный контекст для нашего шага – результат будет лучше. И наоборот 🤷‍♂️

———

Это ответ на вопрос из предыдущего поста. Теперь понятно, почему перевод как второй шаг в цепочке качественнее, чем если сделать его в отдельном чате – у модели есть контекст про изначальную задачу и данные, а хороший перевод должен учитывает контекст.

Но у механизма пересчета "карт внимания" есть проблемы – про них следующий пост.
6👍2😨2👏1
Проблема с вниманием. Последний задротский пост на ближайшее время, налетай

Весь прошлый пост я писал про то, что нейронка вся такая умная – сама понимает, на что обращать внимание, а на что нет (точно лучше меня, хех).

И работает это потому, что когда мы генерируем новый токен, то пересчитываем "карты внимания" модели ко всем остальным токенам => можем выбрать только релевантные. Логично?

Не совсем. Вот 3 важных детали

1️⃣ Дисбаланс внимания

Модели склонны давать больший вес информации в начале и в конце промпта. Так, инструкции 2 и 3, находятся где-то в середине и идут нафиг.

2️⃣ Локальность

Есть такая штука как positional encoding – это когда в нейронку вместе с каждым токеном передается его положение. Неожиданно, в наших языках порядок букв и слов и предложений – очень важен.

И неожиданно, модели лучше связывают текст, который находится близко. А в нашем случае, между инструкцией 3 и генерацией 3 есть еще куча текста (инструкция 4, генерация 1, генерация 2, см. схему тут)

3️⃣ Видит невидимое

Нейронка может находить ложные связи там, где их нет (прям как люди). Так она может начать использовать слова из вашей инструкции к шагу 4 при генерации шага 1.

———

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

Прежде чем выполнять каждый шаг еще раз коротко сформулируй инструкции для него


Это дополнительно выделит релевантные инструкции для конкретного шага и сделает так, что генерация шага будет рядом с его инструкциями (см. positional encoding)
👍9🥱1
Как я перестал откладывать

Какая ваша основная причина прокрастинации важных задач? У меня – избегание проеба и ожидания доп работы, чтобы этого избежать

Как только я что-то сделал, это можно оценить и увидеть косяки. Хз откуда у меня взялся перфекционизм, учитывая как много в своей жизни я делал наотъебись 🤷‍♂️

А если ничего не делаешь, то и не проебешься. Надежно, как швейцарские часы 👍

А даже если я все-таки что-то делаю?
Какую работу я делаю, когда боюсь косяков?
Правильно, лишнюю. Полируя пока не будет идеально.

Есть у меня задача сделать X (написать сложное письмо, продумать архитектуру проекта, накидать дизайн приложения).

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

ЛАЙФХАААК. Я стал ставить себе задачи-черновики.

* Написать черновик поста
* Накидать черновик сообщения
* Сделать прототип приложения

Черновик стерпит любую неидеальность. Тут можно и нужно косячить.
Это расслабляет и дает свободу творчества.

Я теперь сильно проще (и главное быстрее) начинаю любые сложные задачи.

———

А когда черновик готов, оказывается, что в целом это уже на 80-90% ок. Немного полирнуть и, зажмурившись, отправить.

"Первый шаг самый сложный"
1👏3215👍9🔥41
Переговоры.pdf
1.1 MB
Вот уж действительно подноготная.

Ни разу не видел реальных примеров бизнес-коммуникации (кроме переписки Маска с OpenAI, которую опубликовали в рамках судебного дела)

Так что делюсь своей – проваленные переговоры за интересный контракт с одной из западных компаний

Боялся, что слишком длинно, но все, кому лично скидывал – с интересом читали до конца
❤‍🔥10🔥8
В AI чатике спросили классный вопрос

Может ли кто-то поделиться практикой составления definition-of-done если мы имеем дело с AI, а значит с вероятностными моделями -- где-то работает, где-то нет. Как договариваться с клиентом, что модель работает -- может быть кто-то выработал интересный подход для этого вопроса?


Мой ответ на него и по совместительству подводка к завтрашнему посту:
👍1
Forwarded from Nikolay Sheyko
Если можно выделить часть системы (Ринат тут про это писал) с детерминированными ожидаемыми выходами, то на эту часть можно договариваться о классических ML метриках на тестовом датасете, разметку которого заказчик вам не отдает.

На вторую часть (или если нельзя выделить первую), можно договариваться о слепом тестировании. Выдаем оценщикам 50 пар, где один ответ от человека, второй от вашей системы, они не знают где какой. Спрашиваем, какой лучше. Если результат модели выбирают в 40% случаев, то успех (там сами договариваетесь о числе).

На практике такое если честно не применял, но если бы был нужен явный критерий, брал бы такое условие.

Можно заменить оценщиков LLM с другим промптом, но заказчик должен сам предоставить его (или провалидировать ваш) до того, как начнете работу.
9🔥4🤔2
Самый топовый инструмент на платформе OpenAI – Evals

В базовом варианте – загружаем табличку с двумя столбцами – примерами входных данных и правильными ответами. Это наш тестовый датасет. И для любого нашего промпта по нажатию кнопки получаем его качество – в скольки процентах сгенерированный ответ совпадает с правильным.

Понятно, что такое работает очень редко – когда нужно проверить полное совпадение ответов. Например, когда классифицируем текст - проверяем, отзыв позитивный (1), негативный (-1) или нейтральный (0).

А если мы делаем промпт для саммари созвона? Может быть бесконечное количество хороших саммари – не обязательно полное совпадение с "правильным" ответом в нашей табличке.

Для таких случаев, OpenAI добавили кучу разных режимов. Самые интересные кмк:

* Проверка фактической схожести (в отличие от повсеместной семантической схожести на ембеддингах). Это буквально "мне насрать как ответ сформулирован, но суть должна быть верная" – то, в чем часто косячат продукты поверх LLM.

* Кастомный критерий – буквально можно прописать любую меру похожести, любой вайбчек. Это просто разъеб!

А самый кайф в том, что критерии можно комбинировать.

———

Осталось понять, зачем это все, да?

Да просто мы оптимизируем то, что измеряем (и смотрим на измеренные числа, конечно). Это могут быть деньги на счете, время просранное в соц. сетях, количество подписчиков в канале или корректность фактов в ответах LLMки.

OpenAI сделали систему вообще бесшовной, так что наконец можно не городить свои костыли.

А что и как измеряете вы?
1🔥71
Анализ закрытых данных по использованию LLM

@kyrillic недавно проводил закрытый опрос об использовании LLM в личной жизни или в бизнесе и высылал результаты всем участвующим. Такой приватный краудсорсинг.

Инфы очень много, почти 300 разных кейсов. Я быстро задолбался читать однотипное и попросил GPT отобрать 50 самых интересных. Много чего можно забрать в свою жизнь. Есть и такие, которые можно обернуть в продукт.

Вот мой личный топ:

* AI как second brain для психотерапии
Анализ многолетних расшифровок сессий с психологом для создания персонализированной базы знаний о себе и получения контекстных рекомендаций. (мб как доп. инструмент для самого психотерапевта)

* Анализ кастдев-интервью с автоматической категоризацией болей
Система вытаскивает из транскриптов интервью боли, группирует их по категориям и оценивает частоту упоминания

* Конвертация медицинских назначений между странами
Находит аналоги лекарств в разных странах с учетом действующих веществ и местных особенностей

* Анализ call-центра с выявлением проблемных скриптов
Находит в записях разговоров места, где клиенты чаще всего "отваливаются" или злятся

* Автоматическая генерация PRD из обсуждений
Превращает длинные дискуссии команды в структурированный продуктовый документ

* Распознавание проблем оборудования по фото на производстве
Система помогает неопытным монтажерам ремонтировать прессформы - достаточно сфотографировать проблему и получить пошаговую инструкцию с картинками.

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

* Автоматизация работы с Upwork (прим.: крупнейшая фриланс биржа)
Отслеживает новые заказы, фильтрует их по критериям и автоматически генерирует персонализированные cover letters.

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

* AI для анализа собеседований (тоже пишите)
Система анализирует записи интервью, оценивает кандидатов по заданным критериям и генерирует структурированные отчеты.

* Создание квестов-приключений для детей на разных языках
ИИ генерирует персонализированные квесты со стихотворными подсказками превращая обычные активности (типа, поиск подарка) в увлекательные приключения.

* Автоматическое создание Brand Guardian для проектов
Бот проверяет соответствие всех материалов брендбуку, автоматически указывая на отклонения в логотипах, шрифтах и цветах.

Че думаете? Если есть идеи вопросов по этой базе, тоже пишите
🔥11👍4
Китайцы разрывают американский рынок.

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

Из-за наплыва пользователей уже временно ограничили регистрацию.

Уже вернули.

https://www.deepseek.com/
🔥13👍1
Дожимать или отпускать?

Всегда считал, что люди почти не проигрывают по-настоящему, а вместо этого просто сдаются – можно было бы еще попытаться, но уже нет сил, веры, куража, воли.

Коль, а может лучше просто отпускать, если не прет? Не пытаться оживить мертвую лошадь, а слезть с нее и искать живую?

Банальный пример из сегодня:

Решил получить водительское в Таиланде (в 2025ом лишний government issued ID другой страны – не лишний). По гайду в местном чатике на все про все – два дня (если есть международное водительское, а у меня есть).

А по факту? Оказывается, живая очередь больше не работает, ближайшая запись на через две недели (а я уже буду в ебенях, чтобы не отвлекаться от работы).

Ну, думаю, сейчас что-нибудь покрутим. Подошел еще раз, объяснил ситуацию, попросил понастойчивее, ноль результата.

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

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

И вот нахуя это все было – не понятно. Потратил больше половины рабочего дня впустую.

И сколько раз я еще так борюсь до последнего в ситуациях, когда можно было бы просто забить и ничего страшного бы не случилось?

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

Как вообще понимать, где нужно идти до конца, а где отпускать? В бизнесе, отношениях, спорте.

У меня ноль понимания, если честно
13💔7👍3
А теперь, что я вынес из этой ситуации. Не только же грустить и злиться.

1. Не делать в последний момент.

Это уже не в первый раз, когда я откладываю такие штуки на последние дни. И неожиданно, срабатывают риски, про которые я не подумал 🤷‍♂️

Вообще, удивляет насколько это тупо, учитывая, сколько я всего организовывал и менеджерил 🤦‍♂️

Что я решил: делать такие штуки заранее и ставить себе жесткий дедлайн. И, если продалбываюсь, просто выбрасывать задачу. Чтобы это правда было дедлайном.

2. Раньше идти к менеджеру.

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

3. Точка остановки

Решать заранее, сколько я готов потратить времени/денег/etc, чтобы получить результат задачи. Иначе очень легко попасть в ловушку невозвратных затрат.

Ловушка невозвратных затрат - это когда вам жалко бросать дело, потому что вы уже просрали на него кучу ресурсов и не хотите, чтобы это было «зря». Поэтому просираете ещё больше 🤷‍♂️


———

У меня плохо получается учиться на чужих ошибках, так что выжимаю из своих все что могу
👍191
Nikolay Sheyko
Если можно выделить часть системы (Ринат тут про это писал) с детерминированными ожидаемыми выходами, то на эту часть можно договариваться о классических ML метриках на тестовом датасете, разметку которого заказчик вам не отдает. На вторую часть (или если…
LLMки хуже всего при программировании справляются с поиском багов и рефакторингом архитектуры.

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

И еще меньше примеров забагованного кода с объяснениями, что в нем не так и как это исправить. Большая часть кода на GitHub'е либо корректная, либо с багами, про которые никто не знает 🤷‍♂️

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


———

Один из паттернов, которые я все чаще использую, чтобы все-таки искать баги не вручную – прошу модель рассуждать по шагам. Но не как обычно (Chain of Thought), когда она просто делает логические шаги.

А так, как я предлагал искать баги своим студентам – когда они в уме делают работу дебаггера и мысленно проходят по флоу исполнения программы, наблюдая за состоянием переменных.

P.s. reasoning сети (типа o1 или нашумевшей DeepSeek R1) справляются сильно лучше, потому что как раз научились делать отход от своих предыдущих размышлений (RL + вероятно, дообучение на данных с рассуждениями такого типа)
👍105
Сгенерированные резюме уже не удивляют. Да и AI анализ этих резюме работодателем - тоже.

А вот тут мне что-то новенькое прилетело. Ребята из Crossover рассылают приглашения поработать, персонализированные под конкретные пункты из моего линкедин профиля.

Ребята красавчики. Уверен, они нормально так подняли конверсию - всегда приятно послушать про себя любимого.
🔥111👌1
Вершина моей бизнес-коммуникации 🙈
😁232
Что такое structured output, почему это база и как это использовать (ч.1, ч2, ч3)

#технический_четверг

Чтобы не душнить теорией, давайте выведем из практического кейса

Кейс: Делаем чат бота для госухи. Хотим, чтобы он не отвечал на вопросы про политику

Как это сделать?

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

Но это:
1. Добавляет когнитивную сложность для LLM => ухудшает качество основной задачи
2. Спокойно обходится разными хитрыми запросами

Тогда вынесем проверку в отдельный запрос в самом начале!
если пользователь задает вопрос про политику, ответь 1, иначе ответь 0


И сделаем проверку в коде, типа:

if verdict == "1": reset_chat(with_message="айайай")

Поможет? Да – у LLM теперь одна конкретная задача. Но нет никакой гарантии, что если мы сказали отвечать 0 или 1 то модель так и будет делать 🤷‍♂️ (см. соревнование по "взлому" моделей)

А можно как-то жестко ограничить возможные ответы модели?

Тут пригодится тайное знание о том, как LLM работают под капотом. На самом деле, LLMка не генерирует токены (если не знаете, что это, для простоты считайте символами – буквами, цифрами, знаками препинания – все рассуждения останутся валидными).

Она генерирует чиселки (веса) для всех возможных токенов, которые вообще есть в её словаре. Потом рандомно выбирается один из токенов, используя веса как вероятности. Чем больше вес, тем больше вероятность, что возьмет именно этот токен.

Если пользователь правильно попросит, то у каких-то других токенов вес может быть больше, чем у токенов "1" или "0".

Как использовать это знание?

Смотреть не на то, что модель генерирует, а только на веса конкретных токенов ("1" и "0"). И если вес токена "1" оказывается достаточно большим в сравнении с "0", значит модель считает, что вопрос скорее про политику, чем нет. Даже если веса каких-то других токенов выше.

По сути, мы "виртуально" ограничили то, что получаем от модели. Хотим узнать 0 или 1 - так что смотрим на веса только этих токенов. (параметр top_logprobs у OpenAI API)

Это ключевая идея structured_output.

Во второй части мы раскачаем ее до любого наперед заданного формата вместо 1/0. А в третьей разберем примеры использования.
19🔥5👍1
AI собес меня.

Вчера меня собеседовал ИИ-аватар.

Мои ощущения:

* Хорошо понимает технические ответы и задает уточняющие вопросы в тему (на порядок лучше средней девочки HR)

* Плохо ведет собес – не будет перебивать, если у тебя словесный понос. В итоге собес уйдет в никуда

* Всего пару секунд задержки после конца твоей фразы. Решайте сами, насколько это ок

* Супер неестественно улыбается, когда молчит. Когда говорит – норм.

* Можно проходить собес в любое удобное время – киллер фича.

Попробовать киберпанк, пока он не стал обыденностью можно тут (только на английском, но никто не осудит за ошибки).

P. S. Кроме собеса во время регистрации, у них там еще куча разных в личном кабинете.
🔥125👍5