Дожимать или отпускать?
Всегда считал, что люди почти не проигрывают по-настоящему, а вместо этого просто сдаются – можно было бы еще попытаться, но уже нет сил, веры, куража, воли.
Коль, а может лучше просто отпускать, если не прет? Не пытаться оживить мертвую лошадь, а слезть с нее и искать живую?
Банальный пример из сегодня:
Решил получить водительское в Таиланде (в 2025ом лишний government issued ID другой страны – не лишний). По гайду в местном чатике на все про все – два дня (если есть международное водительское, а у меня есть).
А по факту? Оказывается, живая очередь больше не работает, ближайшая запись на через две недели (а я уже буду в ебенях, чтобы не отвлекаться от работы).
Ну, думаю, сейчас что-нибудь покрутим. Подошел еще раз, объяснил ситуацию, попросил понастойчивее, ноль результата.
Поехал в другое отделение – там оказывается вообще не делают права. Поехал в отделение в пригороде, они говорят, с моими бумажками только в городе. Поехал обратно в город, попытался еще раз, объяснил, что мне только что готовы были и без записи сделать, просто доки не подошли. Мне сказали, что это херня, с этими доками можно везде делать, а запись у нас все равно обязательная, до свидания, извините.
Тут бы уже успокоиться, но "еще же можно что-то сделать". Осталось еще одно отделение в другую сторону от города в часе езды, куда я успеваю до закрытия. И даже там я с первого раза не успокоился, написал в переводчике жалобный текст и попробовал еще раз. Безуспешно.
И вот нахуя это все было – не понятно. Потратил больше половины рабочего дня впустую.
И сколько раз я еще так борюсь до последнего в ситуациях, когда можно было бы просто забить и ничего страшного бы не случилось?
Но и сколько крутых ситуаций было, когда дожимал и в последний момент все получалось как нужно.
Как вообще понимать, где нужно идти до конца, а где отпускать? В бизнесе, отношениях, спорте.
У меня ноль понимания, если честно
Всегда считал, что люди почти не проигрывают по-настоящему, а вместо этого просто сдаются – можно было бы еще попытаться, но уже нет сил, веры, куража, воли.
Коль, а может лучше просто отпускать, если не прет? Не пытаться оживить мертвую лошадь, а слезть с нее и искать живую?
Банальный пример из сегодня:
Решил получить водительское в Таиланде (в 2025ом лишний government issued ID другой страны – не лишний). По гайду в местном чатике на все про все – два дня (если есть международное водительское, а у меня есть).
А по факту? Оказывается, живая очередь больше не работает, ближайшая запись на через две недели (а я уже буду в ебенях, чтобы не отвлекаться от работы).
Ну, думаю, сейчас что-нибудь покрутим. Подошел еще раз, объяснил ситуацию, попросил понастойчивее, ноль результата.
Поехал в другое отделение – там оказывается вообще не делают права. Поехал в отделение в пригороде, они говорят, с моими бумажками только в городе. Поехал обратно в город, попытался еще раз, объяснил, что мне только что готовы были и без записи сделать, просто доки не подошли. Мне сказали, что это херня, с этими доками можно везде делать, а запись у нас все равно обязательная, до свидания, извините.
Тут бы уже успокоиться, но "еще же можно что-то сделать". Осталось еще одно отделение в другую сторону от города в часе езды, куда я успеваю до закрытия. И даже там я с первого раза не успокоился, написал в переводчике жалобный текст и попробовал еще раз. Безуспешно.
И вот нахуя это все было – не понятно. Потратил больше половины рабочего дня впустую.
И сколько раз я еще так борюсь до последнего в ситуациях, когда можно было бы просто забить и ничего страшного бы не случилось?
Но и сколько крутых ситуаций было, когда дожимал и в последний момент все получалось как нужно.
Как вообще понимать, где нужно идти до конца, а где отпускать? В бизнесе, отношениях, спорте.
У меня ноль понимания, если честно
❤13💔7👍3
А теперь, что я вынес из этой ситуации. Не только же грустить и злиться.
1. Не делать в последний момент.
Это уже не в первый раз, когда я откладываю такие штуки на последние дни. И неожиданно, срабатывают риски, про которые я не подумал 🤷♂️
Вообще, удивляет насколько это тупо, учитывая, сколько я всего организовывал и менеджерил 🤦♂️
Что я решил: делать такие штуки заранее и ставить себе жесткий дедлайн. И, если продалбываюсь, просто выбрасывать задачу. Чтобы это правда было дедлайном.
2. Раньше идти к менеджеру.
Понятно, что линейный персонал с очень низкой вероятностью пойдет на какие-то отклонения от алгоритма.
3. Точка остановки
Решать заранее, сколько я готов потратить времени/денег/etc, чтобы получить результат задачи. Иначе очень легко попасть в ловушку невозвратных затрат.
———
У меня плохо получается учиться на чужих ошибках, так что выжимаю из своих все что могу
1. Не делать в последний момент.
Это уже не в первый раз, когда я откладываю такие штуки на последние дни. И неожиданно, срабатывают риски, про которые я не подумал 🤷♂️
Вообще, удивляет насколько это тупо, учитывая, сколько я всего организовывал и менеджерил 🤦♂️
Что я решил: делать такие штуки заранее и ставить себе жесткий дедлайн. И, если продалбываюсь, просто выбрасывать задачу. Чтобы это правда было дедлайном.
2. Раньше идти к менеджеру.
Понятно, что линейный персонал с очень низкой вероятностью пойдет на какие-то отклонения от алгоритма.
3. Точка остановки
Решать заранее, сколько я готов потратить времени/денег/etc, чтобы получить результат задачи. Иначе очень легко попасть в ловушку невозвратных затрат.
Ловушка невозвратных затрат - это когда вам жалко бросать дело, потому что вы уже просрали на него кучу ресурсов и не хотите, чтобы это было «зря». Поэтому просираете ещё больше 🤷♂️
———
У меня плохо получается учиться на чужих ошибках, так что выжимаю из своих все что могу
👍19❤1
Nikolay Sheyko
Если можно выделить часть системы (Ринат тут про это писал) с детерминированными ожидаемыми выходами, то на эту часть можно договариваться о классических ML метриках на тестовом датасете, разметку которого заказчик вам не отдает. На вторую часть (или если…
LLMки хуже всего при программировании справляются с поиском багов и рефакторингом архитектуры.
Понятно почему – они учились на данных, которые очень последовательны. В интернете почти нет текстов, в которых автор прям по ходу рассуждает, почему его предыдущий абзац был не верный. Наоборот, обычно каждый следующий абзац является логичным продолжением предыдущего, дополняет или усиливает его.
И еще меньше примеров забагованного кода с объяснениями, что в нем не так и как это исправить. Большая часть кода на GitHub'е либо корректная, либо с багами, про которые никто не знает 🤷♂️
Поэтому, неверные шаги в архитектуре модель обычно закрывает локальными костылями, вместо того, чтобы сделать шаг назад и сделать нормально.
———
Один из паттернов, которые я все чаще использую, чтобы все-таки искать баги не вручную – прошу модель рассуждать по шагам. Но не как обычно (Chain of Thought), когда она просто делает логические шаги.
А так, как я предлагал искать баги своим студентам – когда они в уме делают работу дебаггера и мысленно проходят по флоу исполнения программы, наблюдая за состоянием переменных.
P.s. reasoning сети (типа o1 или нашумевшей DeepSeek R1) справляются сильно лучше, потому что как раз научились делать отход от своих предыдущих размышлений (RL + вероятно, дообучение на данных с рассуждениями такого типа)
Понятно почему – они учились на данных, которые очень последовательны. В интернете почти нет текстов, в которых автор прям по ходу рассуждает, почему его предыдущий абзац был не верный. Наоборот, обычно каждый следующий абзац является логичным продолжением предыдущего, дополняет или усиливает его.
И еще меньше примеров забагованного кода с объяснениями, что в нем не так и как это исправить. Большая часть кода на GitHub'е либо корректная, либо с багами, про которые никто не знает 🤷♂️
Поэтому, неверные шаги в архитектуре модель обычно закрывает локальными костылями, вместо того, чтобы сделать шаг назад и сделать нормально.
———
Один из паттернов, которые я все чаще использую, чтобы все-таки искать баги не вручную – прошу модель рассуждать по шагам. Но не как обычно (Chain of Thought), когда она просто делает логические шаги.
А так, как я предлагал искать баги своим студентам – когда они в уме делают работу дебаггера и мысленно проходят по флоу исполнения программы, наблюдая за состоянием переменных.
P.s. reasoning сети (типа o1 или нашумевшей DeepSeek R1) справляются сильно лучше, потому что как раз научились делать отход от своих предыдущих размышлений (RL + вероятно, дообучение на данных с рассуждениями такого типа)
👍10❤5
Сгенерированные резюме уже не удивляют. Да и AI анализ этих резюме работодателем - тоже.
А вот тут мне что-то новенькое прилетело. Ребята из Crossover рассылают приглашения поработать, персонализированные под конкретные пункты из моего линкедин профиля.
Ребята красавчики. Уверен, они нормально так подняли конверсию - всегда приятно послушать про себя любимого.
А вот тут мне что-то новенькое прилетело. Ребята из Crossover рассылают приглашения поработать, персонализированные под конкретные пункты из моего линкедин профиля.
Ребята красавчики. Уверен, они нормально так подняли конверсию - всегда приятно послушать про себя любимого.
🔥11❤1👌1
Переосмыслил пост про вкатывание в AI и докрутил до статьи на хабре
Выжимка последних 2,5 лет + этапы с примерами из личного опыта
Выжимка последних 2,5 лет + этапы с примерами из личного опыта
Хабр
Как разработчику стать AI-разработчиком в 2025?
Поздравляю, вы уже AI-разработчик. Шутка. Вы только на 80% AI-разработчик. AI – теперь коммодити. Кто угодно может превратить свой древний saas в AI-driven за один HTTP запрос, а большая часть AI...
❤10👍5🔥2
Что такое structured output, почему это база и как это использовать (ч.1, ч2, ч3)
#технический_четверг
Чтобы не душнить теорией, давайте выведем из практического кейса
Кейс: Делаем чат бота для госухи. Хотим, чтобы он не отвечал на вопросы про политику
Как это сделать?
Можно добавить к системному промпту строчку "никогда не отвечай на вопросы про политику"
Но это:
1. Добавляет когнитивную сложность для LLM => ухудшает качество основной задачи
2. Спокойно обходится разными хитрыми запросами
Тогда вынесем проверку в отдельный запрос в самом начале!
И сделаем проверку в коде, типа:
А можно как-то жестко ограничить возможные ответы модели?
Тут пригодится тайное знание о том, как LLM работают под капотом. На самом деле, LLMка не генерирует токены (если не знаете, что это, для простоты считайте символами – буквами, цифрами, знаками препинания – все рассуждения останутся валидными).
Она генерирует чиселки (веса) для всех возможных токенов, которые вообще есть в её словаре. Потом рандомно выбирается один из токенов, используя веса как вероятности. Чем больше вес, тем больше вероятность, что возьмет именно этот токен.
Если пользователь правильно попросит, то у каких-то других токенов вес может быть больше, чем у токенов "1" или "0".
Как использовать это знание?
Смотреть не на то, что модель генерирует, а только на веса конкретных токенов ("1" и "0"). И если вес токена "1" оказывается достаточно большим в сравнении с "0", значит модель считает, что вопрос скорее про политику, чем нет. Даже если веса каких-то других токенов выше.
По сути, мы "виртуально" ограничили то, что получаем от модели. Хотим узнать 0 или 1 - так что смотрим на веса только этих токенов. (параметр
Это ключевая идея structured_output.
Во второй части мы раскачаем ее до любого наперед заданного формата вместо 1/0. А в третьей разберем примеры использования.
#технический_четверг
Чтобы не душнить теорией, давайте выведем из практического кейса
Кейс: Делаем чат бота для госухи. Хотим, чтобы он не отвечал на вопросы про политику
Как это сделать?
Можно добавить к системному промпту строчку "никогда не отвечай на вопросы про политику"
Но это:
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. Кроме собеса во время регистрации, у них там еще куча разных в личном кабинете.
Вчера меня собеседовал ИИ-аватар.
Мои ощущения:
* Хорошо понимает технические ответы и задает уточняющие вопросы в тему (на порядок лучше средней девочки HR)
* Плохо ведет собес – не будет перебивать, если у тебя словесный понос. В итоге собес уйдет в никуда
* Всего пару секунд задержки после конца твоей фразы. Решайте сами, насколько это ок
* Супер неестественно улыбается, когда молчит. Когда говорит – норм.
* Можно проходить собес в любое удобное время – киллер фича.
Попробовать киберпанк, пока он не стал обыденностью можно тут (только на английском,
P. S. Кроме собеса во время регистрации, у них там еще куча разных в личном кабинете.
🔥12❤5👍5
Взгляд на подписчиков
Не воспринимал число подписчиков до 1000 как что-то серьезное. Недавно мнение перевернулось:
Когда смотришь на чиселки, кажется, что это мелочь, но теперь я просто представляю, что каждый мой пост – выступление на сцене перед несколькими сотнями зрителей. Ощущения абсолютно другие.
Много бы я отдал за возможность транслировать свои мысли на такой сцене? Однозначно.
Спасибо за неё.
Не воспринимал число подписчиков до 1000 как что-то серьезное. Недавно мнение перевернулось:
Когда смотришь на чиселки, кажется, что это мелочь, но теперь я просто представляю, что каждый мой пост – выступление на сцене перед несколькими сотнями зрителей. Ощущения абсолютно другие.
Много бы я отдал за возможность транслировать свои мысли на такой сцене? Однозначно.
Спасибо за неё.
1❤32👍7❤🔥2
Стандартные саммари звонков от зума – полное говно (как и большинство ии-функций в не-ии-продуктах 🤷♂️).
Если много важных звонков, вы уже наверняка пользуетесь каким-то специальным продуктом для качественных саммари – вам пост не актуален.
А если звонков не так много, чтобы платить за отдельный продукт, то держите простой ручной способ с максимальной гибкостью:
1. Идем в aistudio.google.com
2. Описываем, какое саммари хотим в поле System Instructions (мой стандартный промпт – в комментах)
3. Загружаем аудио в первое сообщение
4. Выбираем модель Gemini Flash 2.0 Experimental и ставим температуру 0
Ждем.
Если чего-то не хватает, просто уточняем требования дополнительным сообщение снизу
Всё 🔥
Если много важных звонков, вы уже наверняка пользуетесь каким-то специальным продуктом для качественных саммари – вам пост не актуален.
А если звонков не так много, чтобы платить за отдельный продукт, то держите простой ручной способ с максимальной гибкостью:
1. Идем в aistudio.google.com
2. Описываем, какое саммари хотим в поле System Instructions (мой стандартный промпт – в комментах)
3. Загружаем аудио в первое сообщение
4. Выбираем модель Gemini Flash 2.0 Experimental и ставим температуру 0
Ждем.
Если чего-то не хватает, просто уточняем требования дополнительным сообщение снизу
Всё 🔥
👍15🔥2🤔2🗿1
– Что бы ты делал в следующей жизни, какое дело выбрал бы основным, от которого отказываешься в этой?
– Преподавал бы в школе и устраивал школьникам интересную внеучебную жизнь, как была у меня в лицее
—————————
Удивился такому своему ответу. А потом подумал, что это отличный референс, об который можно проверять все что я делаю или хочу делать. Круче оно ощущается или нет.
Где-то глубоко внутри, я правда считаю такую жизнь очень крутой. Я бы гордился ей. Но там же внутри, есть что-то, что заставляет меня верить – я могу делать штуки масштабнее. При этом, не менее значимые по моим внутренним ценностным ориентирам.
Зато теперь я могу любую траекторию жизни сравнивать с этим референсом. Если я вдруг делаю что-то масштабное, но мне это не ощущается важнее, чем научить чему-то классному пару десятков детей, то нахуй это
– Преподавал бы в школе и устраивал школьникам интересную внеучебную жизнь, как была у меня в лицее
—————————
Удивился такому своему ответу. А потом подумал, что это отличный референс, об который можно проверять все что я делаю или хочу делать. Круче оно ощущается или нет.
Где-то глубоко внутри, я правда считаю такую жизнь очень крутой. Я бы гордился ей. Но там же внутри, есть что-то, что заставляет меня верить – я могу делать штуки масштабнее. При этом, не менее значимые по моим внутренним ценностным ориентирам.
Зато теперь я могу любую траекторию жизни сравнивать с этим референсом. Если я вдруг делаю что-то масштабное, но мне это не ощущается важнее, чем научить чему-то классному пару десятков детей, то нахуй это
❤17👍1👎1
Правда все реально значимое для меня – все равно лежит где-то около образования. Ну либо в целом "расширения" человеческих способностей.
Так меня не отпускает идея ии-симуляторов по разным софтскиллам (продажи, управление конфликтами и т.д.). Онлайн образование сломано, потому что это почти всегда – пассивное потребление теории.
А навыки мы на порядки эффективнее учим на практике и на собственных ошибках. А если нужно перезаписать свои уже выученные косячные подходы, практика – единственный способ.
Пол Грэм (основатель YCombinator – главного стартап акселератора планеты) говорит do thing that don't scale (делай вещи, которые не масштабируются): на ранних этапах важно тестить все вручную, продавать напрямую и собирать фидбэк от пользователей, самому проходить по всем процессам.
Так что прежде чем переделывать CommuniCare под интерактивные тренинги по продажам или рабочей коммуникации, я проверю идею симулятора вручную.
Наберу группу на онлайн клуб переговоров. Будем играть разные конфликтные ситуации по ролям, вместе анализировать сильные и слабые места и пробовать новые подходы.
Я тут вообще не гуру, чтобы учить как делать правильно, но у меня точно достаточно насмотренности (руководил оффлайн командой волонтеров из 100 человек в ивентах, общался с людьми разных культур во время моей полукругосветки, полтора года гонял на клуб переговоров к Юре в SoftSkills Lab и побеждал в клубных чемпионатах ), чтобы замечать большую часть косяков и показывать, а как можно еще. Да и участники группы со стороны тоже много подсветят – проверено.
Я уже проводил такое трижды в прошлом году оффлайн в формате коротких интенсивов, теперь буду онлайн и дольше. Если интересно поучаствовать, оставьте контакт тут
Так меня не отпускает идея ии-симуляторов по разным софтскиллам (продажи, управление конфликтами и т.д.). Онлайн образование сломано, потому что это почти всегда – пассивное потребление теории.
А навыки мы на порядки эффективнее учим на практике и на собственных ошибках. А если нужно перезаписать свои уже выученные косячные подходы, практика – единственный способ.
Пол Грэм (основатель YCombinator – главного стартап акселератора планеты) говорит do thing that don't scale (делай вещи, которые не масштабируются): на ранних этапах важно тестить все вручную, продавать напрямую и собирать фидбэк от пользователей, самому проходить по всем процессам.
Так что прежде чем переделывать CommuniCare под интерактивные тренинги по продажам или рабочей коммуникации, я проверю идею симулятора вручную.
Наберу группу на онлайн клуб переговоров. Будем играть разные конфликтные ситуации по ролям, вместе анализировать сильные и слабые места и пробовать новые подходы.
Я тут вообще не гуру, чтобы учить как делать правильно, но у меня точно достаточно насмотренности (
Я уже проводил такое трижды в прошлом году оффлайн в формате коротких интенсивов, теперь буду онлайн и дольше. Если интересно поучаствовать, оставьте контакт тут
❤8🔥3
Что такое structured output, почему это база и как это использовать (ч.2)
#технический_четверг
ч.1 тут
ч.3 тут
В прошлой серии узнали – можно смотреть на веса, которые модель назначает интересным нам токенам. А на другие не смотреть и на результат генерации не смотреть тоже 🙈
Так забить на результат генерации можно, но только если нас интересует всего один токен.
Иначе нужно прям контролировать генерацию – не давать модели выбирать токены, которые нам не нужны. А то первый "некорректный" токен потянет за собой кривое распределение весов для второго, а тот для третьего и т.д.
Так что нужно вмешиваться в процесс генерации и "занулять" веса у всех токенов, которые не подходят под нужный формат. И уже потом выбирать только из оставшихся.
Например, если ответ должен быть целым числом – все токены, которые содержат в себе что-то кроме цифр – под запретом. (А для первого под запретом еще и "0")
Именно так работал json-режим в OpenAI – под запрет шли все токены, которые не давали ответу быть валидным json-ом (главный формат интернета, между прочим).
Вот как в этом формате может выглядеть разобранное LLMкой резюме:
И так же теперь работает structured output, только он идет еще дальше – позволяет описывать конкретный формат – какие поля должны быть в ответе, какие у них типы и т.д.
Например, что стаж – всегда целое число, а опыт работы – массив значений, каждое из которых включает компанию, должность и период.
Этот формат прописывается в виде json-schema (или pydantic классов на python). В комментах пара примеров
Почему это очень круто:
1. Сильно упрощается связка с остальным кодом, где все определено. Теперь мы точно знаем, что получим ответ в нужном формате в 100% случаев, и его бесшовно можно использовать в не-ии коде.
2. Это контринтуитивно, но ограничения позволяют получать более качественные ответы. Прописывая грамотную структуру ответа, мы как-бы направляем модель думать в нужном нам направлении (см. пост про custom CoT)
3. И еще страннее то, что это может ускорять генерацию, (даже если генерирует точно такой же текст как без ограничений 🤯). Тут объяснений – на отдельный пост, как-нибудь напишу.
———
Теперь совсем улетим в космос:
Для локальных моделей, есть полный контроль над выбором следующего токена – можно делать любые ограничения, а не только те, которые разрешает OpenAI со своей json-схемой.
А любой кастомный формат можно описать формальными грамматиками – будь то Python, sql, markdown или ваш собственный формат отчетов на работе.
И передать грамматику в outlines, чтобы модель всегда следовала формату 🫨
———
Фух, так много еще хочется рассказать, но кажется, даже это уже ту мач для поста в тг, так что хватит на сегодня.
В 3 части будут практические примеры и не так душно
#технический_четверг
ч.1 тут
ч.3 тут
В прошлой серии узнали – можно смотреть на веса, которые модель назначает интересным нам токенам. А на другие не смотреть и на результат генерации не смотреть тоже 🙈
Так забить на результат генерации можно, но только если нас интересует всего один токен.
Иначе нужно прям контролировать генерацию – не давать модели выбирать токены, которые нам не нужны. А то первый "некорректный" токен потянет за собой кривое распределение весов для второго, а тот для третьего и т.д.
Так что нужно вмешиваться в процесс генерации и "занулять" веса у всех токенов, которые не подходят под нужный формат. И уже потом выбирать только из оставшихся.
Например, если ответ должен быть целым числом – все токены, которые содержат в себе что-то кроме цифр – под запретом. (А для первого под запретом еще и "0")
Именно так работал json-режим в OpenAI – под запрет шли все токены, которые не давали ответу быть валидным json-ом (главный формат интернета, между прочим).
Вот как в этом формате может выглядеть разобранное LLMкой резюме:
{
"Имя": "Вася",
"Фамилия": "Иванов",
"Специализация": "Тестировщик",
"Стаж (лет)": 5,
"Образование": ["НГУ", "МГУ"],
"Опыт работы": [
{
"Компания": "Рога и копыта",
"Должность": "старший тестировщик",
"Период": [2023, 2025]
},
{
"Компания": "Просто копыта",
"Должность": "тестировщик",
"Период": [2020, 2023]
}
]
}Важно: генерация идет последовательно, поэтому такую штуку делают при генерации каждого следующего токена. А это не очевидная инженерная задача.
И так же теперь работает structured output, только он идет еще дальше – позволяет описывать конкретный формат – какие поля должны быть в ответе, какие у них типы и т.д.
Например, что стаж – всегда целое число, а опыт работы – массив значений, каждое из которых включает компанию, должность и период.
Этот формат прописывается в виде json-schema (или pydantic классов на python). В комментах пара примеров
Почему это очень круто:
1. Сильно упрощается связка с остальным кодом, где все определено. Теперь мы точно знаем, что получим ответ в нужном формате в 100% случаев, и его бесшовно можно использовать в не-ии коде.
2. Это контринтуитивно, но ограничения позволяют получать более качественные ответы. Прописывая грамотную структуру ответа, мы как-бы направляем модель думать в нужном нам направлении (см. пост про custom CoT)
3. И еще страннее то, что это может ускорять генерацию, (даже если генерирует точно такой же текст как без ограничений 🤯). Тут объяснений – на отдельный пост, как-нибудь напишу.
———
Теперь совсем улетим в космос:
Для локальных моделей, есть полный контроль над выбором следующего токена – можно делать любые ограничения, а не только те, которые разрешает OpenAI со своей json-схемой.
А любой кастомный формат можно описать формальными грамматиками – будь то Python, sql, markdown или ваш собственный формат отчетов на работе.
И передать грамматику в outlines, чтобы модель всегда следовала формату 🫨
———
Фух, так много еще хочется рассказать, но кажется, даже это уже ту мач для поста в тг, так что хватит на сегодня.
В 3 части будут практические примеры и не так душно
❤22👍7
AI и грабли
Правда все реально значимое для меня – все равно лежит где-то около образования. Ну либо в целом "расширения" человеческих способностей. Так меня не отпускает идея ии-симуляторов по разным софтскиллам (продажи, управление конфликтами и т.д.). Онлайн образование…
Удивительно, что это работает. Даже без лэндоса, группа набралась за день!
Почему я вообще это попробовал? Я тупо увидел 10-минутный видос Алекса Хормози, где он говорит супер очевидные вещи – если спросить 300 знакомых "из записной книжки", то вы точно наберете 5 первых пользователей. И особо не раздумывая решил попробовать, потому что заебало "катать вату"
Неочевидная мысль из видоса была, что первой когорте можно делать вообще бесплатно, но в обмен на фидбэк – время. И если не получается "продать" так, то это важный сигнал.
Мне это понравилось, потому что я всегда пробовал сразу продавать за деньги, хотя очевидно, что подробный хороший фидбэк – сейчас гораздо важнее.
Чтобы дать чуть больше ценности от поста, добавлю еще одну мысль из видоса, которая оказалась новой, хотя и супер очевидной:
Почему я вообще это попробовал? Я тупо увидел 10-минутный видос Алекса Хормози, где он говорит супер очевидные вещи – если спросить 300 знакомых "из записной книжки", то вы точно наберете 5 первых пользователей. И особо не раздумывая решил попробовать
Неочевидная мысль из видоса была, что первой когорте можно делать вообще бесплатно, но в обмен на фидбэк – время. И если не получается "продать" так, то это важный сигнал.
Мне это понравилось, потому что я всегда пробовал сразу продавать за деньги, хотя очевидно, что подробный хороший фидбэк – сейчас гораздо важнее.
Чтобы дать чуть больше ценности от поста, добавлю еще одну мысль из видоса, которая оказалась новой, хотя и супер очевидной:
Если бы я писал людям лично, то вместо того, чтобы спрашивать, есть ли у человека потребность/проблема, которую может закрыть мой продукт, я бы спрашивал, знает ли он кого-то, у кого она есть
👍4🔥4❤2👌1
Про что этот канал?
Когда я начинал тут писать, было вообще не понятно для кого и о чем, но было понятно, что если буду разбираться – никогда и не начну 🙈
Попытался примерно прикинуть и, кажется, есть аж 4 разных сегмента:
1. AI разработчики – те, кто прям строит что-то на базе нейронок. Для них #технический_четверг и другие душные посты
Примеры постов (1, 2)
2. Предприниматели – им не столько важны сами технологии, но важно как их они влияют на мир и какие задачи уже можно рашать
Примеры постов (1, 2, 3)
3. Широкий пласт well-educated людей. Кажется, пока тут таких большинство. Вряд ли тут из-за прямо пользы для своей работы. Скорее чтобы следить "чего там в мире делается" или почитать про чужие косяки и мысли впоследствии.
Примеры постов (1, 2, 3)
4. Активные пользователи ИИ. Примерно то же самое что и 3, но используют ИИ в своей ежедневной работе и хотят знать всякие фишечки.
Примеры постов: (1, 2)
———
Понимаю, что в какой-то момент нужно будет определяться, но не понимаю как 🤷♂️
А пока буду стараться писать лучше для каждой из категорий – потому что это все и про меня тоже, и мне пока в кайф экспериментировать.
Если вам тут что-то в кайф и комфортно поделиться – поделитесь, пожалуйста, мне интересно. Может это повлияет на будущее канала, хах 🙃
Когда я начинал тут писать, было вообще не понятно для кого и о чем, но было понятно, что если буду разбираться – никогда и не начну 🙈
Попытался примерно прикинуть и, кажется, есть аж 4 разных сегмента:
1. AI разработчики – те, кто прям строит что-то на базе нейронок. Для них #технический_четверг и другие душные посты
Примеры постов (1, 2)
2. Предприниматели – им не столько важны сами технологии, но важно как их они влияют на мир и какие задачи уже можно рашать
Примеры постов (1, 2, 3)
3. Широкий пласт well-educated людей. Кажется, пока тут таких большинство. Вряд ли тут из-за прямо пользы для своей работы. Скорее чтобы следить "чего там в мире делается" или почитать про чужие косяки и мысли впоследствии.
Примеры постов (1, 2, 3)
4. Активные пользователи ИИ. Примерно то же самое что и 3, но используют ИИ в своей ежедневной работе и хотят знать всякие фишечки.
Примеры постов: (1, 2)
———
Понимаю, что в какой-то момент нужно будет определяться, но не понимаю как 🤷♂️
А пока буду стараться писать лучше для каждой из категорий – потому что это все и про меня тоже, и мне пока в кайф экспериментировать.
Если вам тут что-то в кайф и комфортно поделиться – поделитесь, пожалуйста, мне интересно. Может это повлияет на будущее канала, хах 🙃
❤15👍5
Что такое structured output, почему это база и как это использовать (ч.3)
#технический_четверг
ч1, ч2
Как и обещал, сегодня про применение. Прямо сейчас участвую в Enterprise RAG Challenge от @llm_under_hood, так что будут прям примеры с полей.
Так, напомню, к чему мы пришли в предыдущих частях:
1. LLM генерирует токены по одному за раз
2. Можно смотреть на вероятности токенов, прежде чем она выберет какой-то один
3. А еще можно подшаманить эти вероятности, например занулить у некоторых токенов
4. Так можем на каждом шаге занулять у всех токенов, которые "ломают" наш формат.
5. У OpenAI это все есть под капотом, а для локальных моделей есть outline
———
Теперь задача с Enterprise Rag Challenge
Нужно отвечать на вопросы по бизнес отчеты больших компаний (пример в комментах)
Пример вопроса:
Чтобы понять, какой отчет подгружать, нужно понять, какой из 100 отчетов использовать.
Можно спросить у GPT: скажи, название компании в вопросе? Вопрос: "For Frankling Covey, what was..."
GPT: "Franklin Covey"
Пытаемся найти файл "Franklin Covey.pdf", но упс, не находим. Оказывается, отчет называется "Franklin Covey Co.pdf"
Передадим все названия pdf-ок в промпт, чтобы точно выбрала нужную. Отлично, но примерно на 10ом вопросе, вместо "Playtech plc.pdf" отвечает просто "Playtech plc". Чтобы жестко ограничить ответ, используем structured_output. Создаю Pydantic класс:
Дада, прям все 100 перечисляем. Ну либо пишем
———
Идем дальше. Вот нашли pdf-ку.
Можно задавать вопрос сразу по огромной pdf-ке, но это фигня. Будем умнее и сначала пробежимся по кускам pdf-ок, и вытащим оттуда все что нам может понадобиться. Например, мы знаем, что есть вопросы по финансовым метрикам. Чтобы модель не доставала вообще все, что хоть немного похоже на финансы, зададим ей рамки:
Тут мы даем LLMке выбирать сколько угодно данных со страницы, но только если они подходят под типы, которые перечислены в
———
Ок, мы вычленили нужные данные из всех отчетов, и нашли нужный отчет под конкретный вопрос. Я все данные из отчета добавляю в промпт с указанием страниц (нужно, по условию соревнований), а и прошу ответить на вопрос. На выходе вот такая структура:
Но заметил, некоторые данные повторяются в разном контексте с разными значениями. Поможем выбрать правильные, дав модели немного поразмышлять – выбрать из всех кусков информации только самые релевантные:
———
Получается, что ставя ограничения, мы только помогаем LLMке. Как то даже по-человечески
#технический_четверг
ч1, ч2
Как и обещал, сегодня про применение. Прямо сейчас участвую в Enterprise RAG Challenge от @llm_under_hood, так что будут прям примеры с полей.
Зачем я участвую – отдельный вопрос. Призовое место в таких штуках – норм валидация экспертности. Особенно для ноунеймов типа меня. Особенно, когда это не абстрактные соревнования, а супер практические задачи.
Ну и протестить свои идеи на практике всегда интересно.
Так, напомню, к чему мы пришли в предыдущих частях:
1. LLM генерирует токены по одному за раз
2. Можно смотреть на вероятности токенов, прежде чем она выберет какой-то один
3. А еще можно подшаманить эти вероятности, например занулить у некоторых токенов
4. Так можем на каждом шаге занулять у всех токенов, которые "ломают" наш формат.
5. У OpenAI это все есть под капотом, а для локальных моделей есть outline
———
Теперь задача с Enterprise Rag Challenge
Нужно отвечать на вопросы по бизнес отчеты больших компаний (пример в комментах)
Пример вопроса:
For Franklin Covey, what was the value of Year-end box office market share (if applicable) at the end of the period listed in annual report?
Чтобы понять, какой отчет подгружать, нужно понять, какой из 100 отчетов использовать.
Можно спросить у GPT: скажи, название компании в вопросе? Вопрос: "For Frankling Covey, what was..."
GPT: "Franklin Covey"
Пытаемся найти файл "Franklin Covey.pdf", но упс, не находим. Оказывается, отчет называется "Franklin Covey Co.pdf"
Передадим все названия pdf-ок в промпт, чтобы точно выбрала нужную. Отлично, но примерно на 10ом вопросе, вместо "Playtech plc.pdf" отвечает просто "Playtech plc". Чтобы жестко ограничить ответ, используем structured_output. Создаю Pydantic класс:
class FileName(BaseModel):
file_name: Literal[
"Playtech plc.pdf",
"Johns Lyng Group plc.pdf",
...
]
Дада, прям все 100 перечисляем. Ну либо пишем
file_name: Literal[tuple(file_names)], если адекватные.———
Идем дальше. Вот нашли pdf-ку.
Можно задавать вопрос сразу по огромной pdf-ке, но это фигня. Будем умнее и сначала пробежимся по кускам pdf-ок, и вытащим оттуда все что нам может понадобиться. Например, мы знаем, что есть вопросы по финансовым метрикам. Чтобы модель не доставала вообще все, что хоть немного похоже на финансы, зададим ей рамки:
class FinancialMetric(BaseModel):
metric_name: Literal["Total revenue", "Operating income", "Net income", ...]
value: float
currency: str = Field(description="Currency code if applicable (e.g. 'USD', 'EUR'). Leave empty if cannot be inferred.")
period: str = Field(description="Reporting period or end date.")
details: str = Field(description="Contextual information about the metric. Will be used to choose the correct one when multiple similar metrics are present.")
class PageReport(BaseModel):
financial_metrics: list[FinancialMetric]
...
Тут мы даем LLMке выбирать сколько угодно данных со страницы, но только если они подходят под типы, которые перечислены в
metric_name. Это очень мощный паттерн, который занял первое место в первой версии этого соревнования———
Ок, мы вычленили нужные данные из всех отчетов, и нашли нужный отчет под конкретный вопрос. Я все данные из отчета добавляю в промпт с указанием страниц (нужно, по условию соревнований), а и прошу ответить на вопрос. На выходе вот такая структура:
class FinalAnswer(BaseModel):
answer: str | None
page_number: int | None
Но заметил, некоторые данные повторяются в разном контексте с разными значениями. Поможем выбрать правильные, дав модели немного поразмышлять – выбрать из всех кусков информации только самые релевантные:
class FinalAnswer(BaseModel):
page_numbers_with_the_most_relevant_data: list[int]
statements_from_those_pages_containing_the_most_relevant_data: list[str]
reasoning_for_the_choice_of_the_final_answer: str
answer: str | None
page_number: int | None
———
Получается, что ставя ограничения, мы только помогаем LLMке. Как то даже по-человечески
❤11👍11🔥5
Самый полезный кейс применения gpt за последнюю неделю.
Он же самый банальный.
В Бангкоке много вкусных японских едален, но я вообще не разбираюсь в японской кухне, а по меню что-то понять – невозможно. Не говоря уже о том, как это что-то потом "правильно" есть.
Так вот, я просто фоткаю меню и прошу объяснить мне что из этого на самом деле что. И что мне взять, если я только вкатываюсь. Работает отлично.
Он же самый банальный.
В Бангкоке много вкусных японских едален, но я вообще не разбираюсь в японской кухне, а по меню что-то понять – невозможно. Не говоря уже о том, как это что-то потом "правильно" есть.
Так вот, я просто фоткаю меню и прошу объяснить мне что из этого на самом деле что. И что мне взять, если я только вкатываюсь. Работает отлично.
❤8👍5
Помните как маленькая команда китайцев за день обрушили рынок американских акций на 5%?
Так вот, эти ребята из deepseek устроили #OpenSourceWeek, и выложили 5 своих внутренних инструментов.
Самые интересные детали разберу на следующей неделе, а пока общие мысли:
1. Штуки, которые они делают – очень сложные инженерно + во многом уникальные
2. Deepseek AI – маленькое подразделение большой HFT фирмы (high-frequency trading – высокочастотная торговля)
3. Мой близкий друг – HFTшник, и подходы к оптимизациям, которые он мне рассказывал – очень находчивые. Обычным разрабам такое не снилось. Так что не удивительно, что стоимость запуска моделей у них в десятки раз ниже того, что есть у любой другой AI компании
4. Ждем повышенный интерес к найму разрабов из HFT в топовые AI лабы 🤷♂️
Бонус:
Ребята реально умеют в виральность.
1. Сначала все сми раскрутили историю, что они сделали свою ризонинг модель всего за 6 миллионов (после чего и упали акции компаний на вайбе "ааа, сотни миллиардов инвестиций в ИИ это пузыыыырь")
2. Теперь сми распространяют инфу про сумасшедшую маржу китайцев в 545%, хотя ребята честно пишут, что это верхняя оценка, если представить, что а) за бесплатные сервисы платят и б) платят по цене дорогой reasoning модели и в) не учитывают скидку на запуск в ночное время
Есть чему поучиться при выборе публичных цифр при этом сохраняя полную честность
Так вот, эти ребята из deepseek устроили #OpenSourceWeek, и выложили 5 своих внутренних инструментов.
Самые интересные детали разберу на следующей неделе, а пока общие мысли:
1. Штуки, которые они делают – очень сложные инженерно + во многом уникальные
2. Deepseek AI – маленькое подразделение большой HFT фирмы (high-frequency trading – высокочастотная торговля)
3. Мой близкий друг – HFTшник, и подходы к оптимизациям, которые он мне рассказывал – очень находчивые. Обычным разрабам такое не снилось. Так что не удивительно, что стоимость запуска моделей у них в десятки раз ниже того, что есть у любой другой AI компании
4. Ждем повышенный интерес к найму разрабов из HFT в топовые AI лабы 🤷♂️
Бонус:
Ребята реально умеют в виральность.
1. Сначала все сми раскрутили историю, что они сделали свою ризонинг модель всего за 6 миллионов (после чего и упали акции компаний на вайбе "ааа, сотни миллиардов инвестиций в ИИ это пузыыыырь")
2. Теперь сми распространяют инфу про сумасшедшую маржу китайцев в 545%, хотя ребята честно пишут, что это верхняя оценка, если представить, что а) за бесплатные сервисы платят и б) платят по цене дорогой reasoning модели и в) не учитывают скидку на запуск в ночное время
Есть чему поучиться при выборе публичных цифр при этом сохраняя полную честность
❤7🔥6👍3
Когда расставаться?
Чет мне видимо стремно было рассказывать, про то, как я "закончил партнерство" пару недель назад, раз я это столько откладывал.
Предыстория
* В ноябре я решаю потестить HR рынок в РФ с продуктом по автоматизации технических собесов(у меня есть нечестное конкурентное преимущество – я работал в американской компании, которая продавала такое бигтеху – Мете, Уберу, т.д.)
* Я залетаю на парочку звонков с прожаркой идей, после одного из мне пишет парень: мол, я работал в крупнейшем в СНГ HR агенстве, давай созвонимся
* За неделю делаем 4 созвона, он погружается в контекст, договариваемся работать вместе – он закрывает продажи, я техническую и продуктовую часть.
Напряжение
Ну а дальше начинается катание ваты. Написать двум людям за неделю и все в таком духе. Короче, я и сам умею проебываться с продажами, спасибо.
Пару полезных звонков мы все-таки получаем, но в целом, достаточно быстро становится очевидно – партнер не добавляет динамики. Да-да, тут декабрь и январские праздники, так что я себя убеждаю, что нужно еще посмотреть. И еще. И еще. Ну понятно, короче.
Послезнание
Сейчас очевидно, что чувствовал, что это не то – еще в середине декабря, просто у меня не было "валидных данных", чтобы обосновать (и себе и ему), почему хочу закончить.
Ну, накопил данных за пару месяцев. Ок. Стоит оно этих двух месяцев? Нет.
Хочу ли я быстрее расставаться с людьми, даже если это будет выглядеть "не красиво" или "не обоснованно". Да. Ок ли это? Хз, кажется, мне пофиг.
Не могу вспомнить, чтобы чуйка меня в случае с людьми обманывала, зато могу вспомнить много раз, где ее не слушаю, а потом чертыхаюсь. Жизненно?
Интересно, у кого-то есть противоположный опыт?
Чет мне видимо стремно было рассказывать, про то, как я "закончил партнерство" пару недель назад, раз я это столько откладывал.
Предыстория
* В ноябре я решаю потестить HR рынок в РФ с продуктом по автоматизации технических собесов
* Я залетаю на парочку звонков с прожаркой идей, после одного из мне пишет парень: мол, я работал в крупнейшем в СНГ HR агенстве, давай созвонимся
* За неделю делаем 4 созвона, он погружается в контекст, договариваемся работать вместе – он закрывает продажи, я техническую и продуктовую часть.
Напряжение
Ну а дальше начинается катание ваты. Написать двум людям за неделю и все в таком духе. Короче, я и сам умею проебываться с продажами, спасибо.
Пару полезных звонков мы все-таки получаем, но в целом, достаточно быстро становится очевидно – партнер не добавляет динамики. Да-да, тут декабрь и январские праздники, так что я себя убеждаю, что нужно еще посмотреть. И еще. И еще. Ну понятно, короче.
Послезнание
Сейчас очевидно, что чувствовал, что это не то – еще в середине декабря, просто у меня не было "валидных данных", чтобы обосновать (и себе и ему), почему хочу закончить.
Ну, накопил данных за пару месяцев. Ок. Стоит оно этих двух месяцев? Нет.
Хочу ли я быстрее расставаться с людьми, даже если это будет выглядеть "не красиво" или "не обоснованно". Да. Ок ли это? Хз, кажется, мне пофиг.
Не могу вспомнить, чтобы чуйка меня в случае с людьми обманывала, зато могу вспомнить много раз, где ее не слушаю, а потом чертыхаюсь. Жизненно?
Интересно, у кого-то есть противоположный опыт?
🍾9👍8❤6
Доступ к AI без VPN за 700 рублей в год
Perplexity сделали очень вкусное промо, видимо, чтобы приучить больше пользователей к своим PRO функциям
В комплекте:
* Модели на выбор от OpenAI, Anthropic, xAI, Google, DeepSeek
* Хороший поиск по сайтам
* Свой Deep Research – ходит по куче сайтов и делает небольшое исследование. Работает хуже, чем у openai, но лучше, чем у всех остальных
* Не нужен VPN
Оплатить русскими картами можно у посредников
Еще, кажется, это прикольный лайтовый подарок (без промо это 20к ₽) 🤔
Perplexity сделали очень вкусное промо, видимо, чтобы приучить больше пользователей к своим PRO функциям
В комплекте:
* Модели на выбор от OpenAI, Anthropic, xAI, Google, DeepSeek
* Хороший поиск по сайтам
* Свой Deep Research – ходит по куче сайтов и делает небольшое исследование. Работает хуже, чем у openai, но лучше, чем у всех остальных
* Не нужен VPN
Оплатить русскими картами можно у посредников
Еще, кажется, это прикольный лайтовый подарок (без промо это 20к ₽) 🤔
👍8❤1🔥1🤝1