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

@nikolay_sheyko
Download Telegram
Что такое structured output, почему это база и как это использовать (ч.3)

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

ч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 модели и в) не учитывают скидку на запуск в ночное время

Есть чему поучиться при выборе публичных цифр при этом сохраняя полную честность
7🔥6👍3
Когда расставаться?

Чет мне видимо стремно было рассказывать, про то, как я "закончил партнерство" пару недель назад, раз я это столько откладывал.

Предыстория

* В ноябре я решаю потестить HR рынок в РФ с продуктом по автоматизации технических собесов (у меня есть нечестное конкурентное преимущество – я работал в американской компании, которая продавала такое бигтеху – Мете, Уберу, т.д.)
* Я залетаю на парочку звонков с прожаркой идей, после одного из мне пишет парень: мол, я работал в крупнейшем в СНГ HR агенстве, давай созвонимся
* За неделю делаем 4 созвона, он погружается в контекст, договариваемся работать вместе – он закрывает продажи, я техническую и продуктовую часть.

Напряжение

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

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

Послезнание

Сейчас очевидно, что чувствовал, что это не то – еще в середине декабря, просто у меня не было "валидных данных", чтобы обосновать (и себе и ему), почему хочу закончить.

Ну, накопил данных за пару месяцев. Ок. Стоит оно этих двух месяцев? Нет.
Хочу ли я быстрее расставаться с людьми, даже если это будет выглядеть "не красиво" или "не обоснованно". Да. Ок ли это? Хз, кажется, мне пофиг.

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

Интересно, у кого-то есть противоположный опыт?
🍾9👍86
Доступ к AI без VPN за 700 рублей в год

Perplexity сделали очень вкусное промо, видимо, чтобы приучить больше пользователей к своим PRO функциям

В комплекте:
* Модели на выбор от OpenAI, Anthropic, xAI, Google, DeepSeek
* Хороший поиск по сайтам
* Свой Deep Research – ходит по куче сайтов и делает небольшое исследование. Работает хуже, чем у openai, но лучше, чем у всех остальных
* Не нужен VPN

Оплатить русскими картами можно у посредников

Еще, кажется, это прикольный лайтовый подарок (без промо это 20к ₽) 🤔
👍81🔥1🤝1
Хайлайты с OpenSourceWeek от deepseek, как обещал

#технический_четверг (не совсем)

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

Но есть парочка штук, которые оказались просто любопытными:

1️⃣ DeepGEMM

Ребята написали очень быстрое перемножение матриц с JIT-компиляцией (!). Ускорение вплоть до x2.7 – это очень круто. Я когда-то ускорял гугловую имплементацию под частные кейсы, и там даже 15-20% – было вау.

Базовый функционал всего 300 строк, можно читать как методичку

2️⃣ 3FS

Своя распределенная файловая система. Своя файловая система, Карл!!! В комплекте очень дешевый KVCache на SSD, а не в DRAM. Китайцы умеют делать сложно, чтобы делать дешево 🤷‍♂️
5👍2🔥2
Как выбрать посты для таргетированного промо

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

Константин, привет! Очень понравилась концентрация пользы в твоем канале, хочу сделать его промо у себя.

Если хочешь, можем сделать взаимный пиар, но если нет – ничего страшного, я все равно твой пропиарю


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

1. Закидываю в GPT сначала дамп его канала за последние пару месяцев, прошу описать, что в нем уникального и какая аудитория.
2. Закидываю дамп своего канала с idшками всех сообщений и прошу выбрать релевантные
3. Говорю "Вау!"

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

1. Настройка Cursor Rules и TDD – как починить вайбкодинг + наглядный шоукейс стрим на 10 минут (я посмотрел почти весь)
2. Самому сделать AI аватара из 18 (!) фоток
3. Как дать Cursor Agent выход в браузер
4. Нагло перепосченная мной инфа про Perplexity на год ради DeepResearch (про него кстати, отдельно напишу, последние три дня использую его постоянно)
111🔥5🆒2👍1
Уже коротко писал про Enterprise RAG Challenge от @llm_under_hood.

Сегодня подробнее описал свой опыт, разобрал две архитектуры, сформулировал выводы и добавил немного сторителлинга:

https://vas3k.club/post/27773/

P.s. Комменты от других участников – в комплекте
🔥132👍2🏆1
Андрей Карпаты (мировая AI-суперзвезда) делится как нужно учиться:

На YouTube/TikTok и других платформах много видео, создающих видимость обучения, но если присмотреться, это на самом деле просто развлечение. Это очень удобно для всех участников: зрители наслаждаются просмотром, думая, что учатся (но на самом деле они просто развлекаются).

Обучение не должно быть веселым. Основное ощущение должно быть усилием. Оно должно напоминать не «10-минутную тренировку на всё тело» от местного блогера, а скорее серьезное занятие в спортзале. Вам нужен умственный эквивалент пота.

Полезно четко определять свой настрой заранее и строго бинарно. Если вы потребляете контент: вы хотите развлечься или научиться? Если вы создаете контент: вы хотите развлечь или научить? В каждом случае ваш путь будет разным. Попытки совместить оба варианта ведут в никуда.

Для тех, кто действительно хочет учиться. Если вы не изучаете что-то узкое и специфическое, закройте вкладки с быстрыми блогами и видео. Закройте вкладки с заголовками вроде "Выучите X за 10 минут". Не "перекусывайте", а съешьте "полноценный обед" — учебники, статьи, научные работы, руководства, глубинные материалы. Выделите 4 часа подряд. Не просто читайте — делайте заметки, перефразируйте, анализируйте, манипулируйте информацией, учитесь.

Как стать экспертом в чем-то:
1. Итеративно выполняйте конкретные проекты и осваивайте материал вглубь, изучая его по мере необходимости (не пытайтесь изучать всё подряд "снизу-вверх").
2. Преподавайте или пересказывайте всё, что изучили, своими словами.
3. Сравнивайте себя только с прошлой версией себя, а не с другими.


———

Он на 100% следует своему совету и делает топовый бесплатный образовательный контент:
* Глубокое погружение в LLM
* Как он сам использует LLMки
👍18🔥62🤝1
Ок, делюсь, как учусь я.

Никак, я туплю в ютуб, пока мозги не вытекут

Ладно, на самом деле я понял, что у меня аж три режима обучения:

1. Пассивный: лекционный – видосы на полтора-два часа или длинные статьи
2. Активный режим "копателя" 🫨 (с небольшим лайфхаком)
3. Супер-активный режим экспериментов (а тут будет скрытый оффер)

Сейчас раскрою чуть подробнее

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

Я не знаю, чего я не знаю (с) Стэтхэм


1. Слушаю лекцию, в идеале с кем-то

2. Ставлю на паузу после каждого большого блока (20-30 минут), обсуждем основные моменты (либо записываю, если один), а главное, пытаемся понять, а что не понятно (в паре сильно проще).

3. В конце собираю в один конспект (необязательно, чтобы он был супер структурированный, задача просто создать "крючки" для мозга)

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

Почему я так в универе не делал, а? 🧐 Столько времени на лекциях впустую


Копатель
– раньше работало только если есть шарящий друг/коллега, которого можно докапывать вопросами от общего к частному.

1. Сначала прошу объяснить что-то в общих чертах

2. Потом выбираю места, которые интересны или не понятны и закапываюсь вопросами в них.

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

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

Как? Вместо того, чтобы писать новый вопрос в конца, я редактирую тот, с которого начинал предудущую ветку, как бы "подменяя" её новой.

Иначе контекст раздувается, и GPT отвечает фигню.


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

Только не понятно, а где и как искать эти практические задачи 🤷‍♂️

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

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

Еще часть задач приходит вот из этого поста, где я предлагаю бесплатно решать чужие проблемы:)

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

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


Другие примеры, где я учусь на экспериментах: ведение канала, преподавание в универе, участие в переговорных чемпионатах, 4-месяца автостопа в Африке.

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

———

Заметил, что у меня режим "копателя" уже отъел большую часть лекционного. Любопытно, как это у других людей и как будет сейчас будет меняться образование
14🔥8👌3
Я обычно не пишу "срочные новости" про новые фичи, потому что их и так все каналы постят. Но конкретно про эту фичу ни у кого почему-то не вижу, хотя у меня вся лента в "обновлениях от OpenAI"

Я уже радовался, когда они разрешили нативно сохранять и отсматривать все запросы. Но теперь они завезли полноценное Observability для сложных систем! Это такая моя персональная боль была. И уверен, не только моя.

(на скрине отдельно выделил поле, где показывает из каких "веток" был выбор)
7🔥4🤝1
Поломанные привычки

Среди подписчиков много кто живет на большой скорости. И сформированные привычки – каркас такой жизни.

Так вышло, что я успеваю пожить за год в 4-5 разных местах и на фоне этого заметил одну любопытную штуку, которую можно применять и без переездов:

Когда меняю локацию, приходится прям усиленно поддерживать привычную рутину. И не всегда получается. Например, когда прилетел в Чианг Май (Тай), я сломал себе режим сна и тренировок :(

Зато сильно проще формировать новые (и что еще важнее – ломать старые, которые мешают). Начал принимать ледяной душ по утрам, хотя до этого откладывал несколько месяцев (или лет?). И перестал стрематься писать про этот канал везде, где можно.

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

Как я могу это применить без постоянных переездов? (обращаюсь сам к себе)

1. Меняй внешний контекст другими способами. Сделай перестановку в комнате, попробуй поработать в другом месте, да даже смени шмотки или имя. Ладно, че это я зачеркнул то, реально же работает – на английском я теперь представляюсь Нико и мне так стало сильно прикольнее чем дефолтный Ник или полное Nikolay

2. Пользуйся изменениями, которые и так подкидывает жизнь. Сменил работу – настрой уже ноут, чтобы пользоваться vim'ом хоткеями, которые давно откладывал. Расстался с партнером – ну теперь то точно пора в спортзал 🙃. Ну или хотя бы проходи по вечерам тот давно оплаченный курс, на который вечно "нет времени". Попал в новую команду – попробуй в этот раз не избегать конфликтов. Да даже купив новый телефон можно попытаться настроить все "по-нормальному" (если это не айфон).

Короче, эти стрессовые переходные периоды – на самом деле классные шансы для давно назревших изменений. Если их не проебывать:)

———

Ну и хочется не забывать возвращать себя в те контексты, где когда-то что-то хорошо работало. Вдруг оно все еще там?
19👍4👌1
Поймал себя на мысли: "Блин, я уже неделю ничего не писал, а там еще и много новых подписчиков. Надо ворваться с каким-то крутым постом"

Ага. С тех пор прошло еще 4 дня.

Еще и это тупое ощущение, что это обязательно должно быть "что-то профессиональное" и очень умное.

С чего я так вообще решил?

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

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

Чтобы снова начать писать то, что и как мне интересно, а не то, что мне кажется, от меня кто-то ждет.
18👍8🔥2
А теперь что мне интересно.

Интересно, почему весь интернет хайпит на том, что LLMки научились не только понимать картинки, но и генерировать, и при этом я не вижу сравнений Google и OpenAI, которые выкатили эту фичу с разрывом в неделю.

Исправляю 🙃

Нагенерил разных экспериментов, которые было интересно поделать. Последние две фотки даже вполне бизнесовые кейсы

Что я заметил:

1. OpenAI работает сильно дольше. Мощнее модель и качество у них лучше. А Google требует на порядок больше танцев с промптами, зато за 10 секунд все готово

2. OpenAI хорошо удерживает "модель мира" – видно на задачке с одеждой. Их модель прям понимает, что за шмотки. Google просто генерирует что-то отдаленно похожее

3. При этом OpenAI постоянно меняет мелкие детали 🥴. Видно по измененным чертам лица, лошади, фону

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

Лайфхак – чтобы "отцепить" от входного изображения, можно просить сделать с нуля, а не переделать.
* create anime character > turn person into anime
* generate high resolution picture with character > upscale picture


tl;dr
Если хотим оставить большую часть изображения как есть → Google + детальные промпты
Если хотим поменять положение объектов или сгенерить с нуля → OpenAI

Ну и комбинировать, конечно.

Вы знаете кому отправить этот пост:)
👍18🔥141
Всё. Я, похоже, наигрался.

Последние пару лет я прыгал между идеями, проектами, пивотами. Строил, тестировал, выкидывал. Писал посты, общался с пользователями, слушал фидбэк, снова всё менял.

Заебался.

Вчера утром сел, подумал — я же просто хочу тихо сидеть, писать бэкенд, получать зарплату и не париться.

Без лендингов. Без маркетинга. Без «а кому это вообще надо».

Открыл hh, нашёл вакансию.
«Яндекс. Бэкенд. Go/Python. Удалёнка.»
Отправил резюме. Через час уже созвонились. Зачлись мои предыдущие собесы с ними. В понедельник выхожу на онбординг.



А вообще, с 1 апреля, конечно.
😁42😈7🤯6🤣43💩3🔥2🌚2