Fedkin is thinking (@fedkin_thinking) — Telegram-канал | Telegram Dialogs
Все каналы
Fedkin is thinking

Fedkin is thinking

@fedkin_thinking

7.7K подписчиков технологии 💬 Комментарии открыты

Сотрудничество: @qsqnk

Последние публикации

Fedkin is thinking
12.07.2026 18:23 · 👁 2.6K
Как чуть меньше страдать от нейрослопа Или небольшой полезный тех, который ты можешь сделать за пару дней Давеча я писал, что агенты без должного контекста о системе склонны к локально оптимальным решениям. Это часто приводят к: • нарушению направления зависимостей в коде • смешиванию доменной логики и инфраструктурной • странному неймингу и расположению классов Хорошая новость — многое из этого можно ловить детерминированными тестами Есть прекрасные инструменты, как например ArchUnit для Java (если знаете похожие инструменты для других языков, пишите в комменты), которые позволяют писать декларативные тесты на архитектуру приложения: Домен не должен зависеть от инфры: noClasses() .that().resideInAPackage("..domain..") .should().dependOnClassesThat() .resideInAPackage("..infrastructure.."); In-порты называются ...UseCase classes() .that().resideInAPackage("..port.in..") .should().haveSimpleNameEndingWith("UseCase"); Все порты должны быть интерфейсами: classes() .that().resideInAnyPackage("..port.in..", "..port.out..") .should().beInterfaces(); Потратив пару дней на обдумывание и написание таких правил в паре с агентом, можно заметно увеличить качество летящих в тебя пулреквестов, потому что они будут корректны как минимум по структуре. По ходу движения список правил может дополняться Как уже многие писали, разработка с агентами не привносит каких-то кардинально новых принципов, а только усиливает значимость старых добрых бест-практисов p.s.: зачем эти детерминированные проверки, если я могу дать агенту правила в виде текста: • промпты не дают гарантий • не проверяют уже написанный код
Fedkin is thinking
04.07.2026 15:04 · 👁 4.8K
Несколько избитая тема, но мне кажется очень красивой идея, которая стоит за structured output в современных ллмках Задача — пользователь передает json-схему, нужно сгенерировать ответ строго по переданной схеме 1. Наивный вариант Подложить схему в контекст: ... Return a JSON object that strictly matches the following schema: { "type": "object", "properties": { "status": { "enum": ["SUCCESS", "FAILED"] } }, "required": ["status"], "additionalProperties": false } Будет ли работать? Да, в большинстве случаев. Но без каких либо гарантий, что схема в итоге будет корректная 2. Добавляется constrained decoding LLM генерирует ответ токен за токеном, на каждом шаге строя распределение вероятностей: "{" = 0.75 "status" = 0.20 ":" = 0.04 "answer" = 0.01 А дальше в процесс вмешивается constrained decoding Из json-схемы строится контекстно-свободная грамматика (CFG), которая позволяет понять, какие продолжения ответа в текущий момент всё еще могут привести к валидному результату Например, для схемы выше грамматика могла бы выглядеть как-то так: root ::= "{" ws "\"status\"" ws ":" ws status ws "}" status ::= "\"SUCCESS\"" | "\"FAILED\"" И, согласно грамматике, инференс-движок накладывает маску на распределение вероятностей следующего токена "{" = 0.75 "status" = 0.20 ":" = 0.04 "answer" = 0.01 Превращается в "{" = 0.75 "status" = 0 ":" = 0 "answer" = 0 Сгенерили { — "status" = 0.6 ":" = 0.3 "answer" = 0.1 Превращается в "status" = 0.6 ":" = 0 "answer" = 0 Сгенерили {"status" ... и так далее — С относительно небольшим оверхедом это позволяет генерить ответ, строго соответствующий схеме
Fedkin is thinking
04.07.2026 13:10 · 👁 4.1K
Если ты слишком хорошо решаешь проблемы — возможно, ты решаешь не те Пост по мотивам одного из худших полугодий на работе:) Когда всё вокруг горит, мы начинаем преувеличивать значимость каждой конкретной проблемы. Каждая проблема кажется той самой, что нужно решить прямо сейчас. Естественная реакция на такое — сделать хоть что-то, что продвинет ситуацию вперед • Команды не договорились — синхронизировать • Сроки едут — заовертаймить • Где-то возник затык — лично прийти разблокировать ... Это дает ощущение движения и контроля — ты же что-то делаешь, постоянно кому-то помогаешь, с каждым разом все лучше и быстрее решаешь проблемы. Становишься эдаким эффективным пожарным. Результат у этого всегда один — выгорание и демотивация Что делать — вы и без меня знаете: остановиться и позадавать себе вопросов • А почему проблема дошла до меня? • Почему глобально система допускает возникновение таких проблем? • Что сделать, чтобы починить корневую причину таких проблем? В условиях горящих сроков и давления такое бывает сделать правда сложно, но нужно сделать волевое усилие и "zoom-out"-нуться Поэтому если ты N-ый раз решаешь одну и ту же проблему, подумай, ту ли проблему ты решаешь
Fedkin is thinking
07.06.2026 12:29 · 👁 6.8K
Очень грубо инженеров можно классифицировать на два типа: 1. Те, кто работает с техническими проблемами проактивно: • Увидел плавное повышение cpu usage на БД => раздебажил из-за чего, добавил нужных индексов, предотвратил инцидент • Увидел, что новая функциональность в модуль добавляется очень странным образом => инициировал и довел до конца рефакторинг, благодаря этому крупный проект сошелся в срок • Сделал удобные алерты, что позволило видеть проблему раньше пользователей и предотвращать инциденты 2. Те, кто работает с техническими проблемами реактивно: • TTM фичей вырос в два раза, постоянные баги => только тогда начинаем рефакторинг • Количество инцидентов стало совсем неприемлемым => только тогда инициируем проект по стабилизации (да, не существует чистых типов 1 и 2, это всегда спектр, и всегда нужно уметь работать в обоих режимах) Но в чем неприятный парадокс — признание за технический вклад в основном получают люди, работающие во втором режиме Почему так происходит? Потому что для наблюдателей есть прозрачная логическая цепочка: что-то сломалось, конкретный человек это починил, он молодец Если же чинить проблемы проактивно, то со стороны может показаться, мол ничего особенного, все так и должно работать — фичи делаются быстро, система работает стабильно Поэтому очень важно для всех опрозрачивать эту логическую цепочку: "что бы произошло, если бы мы не сделали эту техническую доработку". Да, это сложно. Но оно того стоит Хороший руководитель безумно ценит людей, которые самостоятельно предупреждают проблемы. И задача руководителя — помочь опрозрачить такой вклад сотрудника для остальных
Fedkin is thinking
30.05.2026 14:11 · 👁 7K
Разработка фичей без достаточной экспертизы в системе зачастую превращается в набор "локально-оптимальных" решений: здесь добавили ифчик, здесь протянули новую зависимость, здесь скопипастили похожий код, здесь обошли существующую точку расширения Каждое такое решение обычно выглядит норм в моменте — оно закрывает задачу, проходит тесты, не выглядит совсем плохо на ревью Проблема начинается, когда такие решения последовательно наслаиваются друг на друга. Это приводит к architecture drift: фактическая архитектура системы постепенно отклоняется от той, которая была задумана С агентской разработкой принципы те же — если у агента нет достаточного контекста о системе, он будет стараться делать минимальные локальные изменения, которые приведут к решению задачи. Только с агентами это все происходит быстрее Главная проблема в том, что самая полезная архитектурная экспертиза обычно живет не в документации, а в головах людей, которые годами работали с системой. Они держат огромный набор фактов о том, почему сделано так, как это развивать, как точно делать не надо и т.д. И честно говоря, я пока не видел чтобы такая экспертиза была в достаточной степени оцифрована — всегда остается много вещей, которые живут только в чьей-то голове. В таком сетапе агенты всегда будут медленно тянуть архитектуру куда-то в сторону (зачастую не самую хорошую) А как вы боретесь с этим явлением?
Fedkin is thinking
12.05.2026 15:02 · 👁 7.9K
Как сделать карьерный рост чуть приятнее Чем выше роль, тем меньше работа про сами задачи и тем больше — про людей. Всегда кто-то что-то требует, кто-то не согласен, кто-то аккуратно тянет одеяло на себя. Кто-то заходит в разговор так, что выходишь после него с ощущением, будто из тебя высосали всю энергию Но, на самом деле, в таких сложных разговорах у разных людей одни и те же паттерны — тебя уводят от сути разговора, тебя пытаются ставить в оправдывающуюся позицию, разговор о предмете обсуждения подменяется разговором о личности и так далее Нормально это осознать помог курс от ребят из SSL, который я проходил аж в 2024 (и до сих пор считаю одним из лучших вложений) Один из тренеров курса — Миша Ромашов, который параллельно преподает переговоры в ВШЭ и лидит одно из направлений в Сбере. Миша ведет свой тг канал, где рассказывает интересные кейсы из практики: • Про эмоции • Про чужую картину мира • Про конфликты без права сепарации Если у вас в работе много сложных коммуникаций — рекомендую
Fedkin is thinking
11.05.2026 12:45 · 👁 6.3K
Хочешь долгого выполнения задач — нагрузи всех подзавязку В теории массового обслуживания есть очень простая и удобная модель M/M/1: Есть бесконечный поток задач, один узел обслуживания и очередь перед ним поток задач -> очередь -> узел обслуживания Где: • поток задач описывается Пуассоновским процессом • время обслуживания описывается экспоненциальным распределением Интересно вот что: если взять • λ — скорость прихода задач • μ — скорость обработки • ρ = λ / μ — утилизация • W — среднее время в системе То получается, что • W = 1 / (μ - λ) (proof) И если переписать через утилизацию: • W = 1 / μ(1 - ρ) То есть среднее время нахождения задачи в системе растет гиперболически относительно утилизации. Возьмем простой пример: μ = 1 задача / день И по формуле выше получаем такое среднее время нахождения задачи в системе W: 50% utilization -> 2 дня 80% utilization -> 5 дней 90% utilization -> 10 дней 95% utilization -> 20 дней 99% utilization -> 100 дней Такое происходит из-за того, что задачи поступают в систему неравномерно. Поэтому если обработчик загружен под 100%, то любая неравномерность приводит к скоплению очереди, и как следствие, взрыву времени ожидания Например, при переходе 95% -> 99% утилизация выросла всего на 4п.п., при этом среднее время ожидания скакнуло с 20 дней до 100 дней На произвольные распределения этот эффект обобщается формулой Кингмана — Какой из этого можно сделать практичный вывод? Не хочешь внезапных задержек — оставляй исполнителям задач некоторый запас капасити Например, разработчик загружен на 100%, он сидит, работает себе, а потом ему прилетают 3 пулреквеста на ревью. И 3 задачи встанут, потому что у разработчика нет капасити на то, чтобы их поревьюить. Ну и в такой ситуации обычно начинают браться в работу новые задачи, начинает раздуваться WIP, и проявляться прочие спецэффекты, описанные в этом посте
Fedkin is thinking
02.05.2026 12:34 · 👁 6K
Хотел написать пост не про эйай но получилось как обычно Обзор на книжечку Agentic design patterns, которая оказалась скачана на телефон во время 8ми часового полета Несмотря на многословность и не очень прикрытую рекламу гугловых инструментов (книга от инженера из гугла), она дает хорошее понимание, как из ллмки - функции, которая просто предсказывает следующий токен, набором инженерных решений получаются крутые инструменты типа claude code Рассказываются основные паттерны, которые устоялись за последние пару лет разработки агентских систем Базовые: • prompt chaining — пайплайн из вызова ллмок, где результаты передаются по цепочке • rouing — ллмка решает, куда дальше идти в воркфлоу • parallelization — кусочки, которые можно распаралеллить, параллелим. Например, сбор данных из разных систем • reflection — первая ллмка отвечает, вторая оценивает ответ, дает фидбек первой, первая корректирует ответ • planning — вместо "реши сложную задачу" сначала просим ллмку сформулировать план. Далее выполняем набор более простых задачек • reasoning techniques — chain-of-thoughts, tree-of-thoughts, ReAct и несколько других Как достучаться до внешнего мира: • tool use — обычный тул колинг: ллмке даются спеки тулов, а она отвечает, что и с какими аргументами нужно вызвать для продолжения работы • mcp — простой небольшой рассказ что это, что такое mcp client, mcp server • rag — ретривим релевантную информацию из базы знаний перед ответом Память: • memory management — про short term memory (на уровне одного чата) и long term memory (глобальная память) • learning and adaptations — прикольная глава про то, как сделать так, чтобы агент автономно (или полуавтономно) обучался и не повторял тех же ошибок Как не допустить говна: • exception handling and recovery — просто глава-напоминание о том, что внешние системы могут лежать/агент можно не справляться с задачей, и это надо как-то уметь обрабатывать • human in the loop — зовем человека, когда делаем рисковое действие • guardrails — ллмке как на вход, так и на выход поступает примерно что угодно, поэтому хорошо бы добавлять явные проверки/валидации, что запрос/ответ приемлем Системы из нескольких агентов: • multi-agent — есть несколько агентов, заточенных под свои узкие области, которые друг другу дают задачи. Зачастую есть отдельный агент-оркестратор • A2A — гугловый протокол взаимодействия между агентами в распределенных системах Всякое разное около самих агентов: • evaluation and monitoring — какие есть способы мониторить агентов и их качество Примеров оч много (даже слишком), поэтому читается легко 7/10
Fedkin is thinking
11.04.2026 11:01 · 👁 6.6K
yet another random thought Внезапное место, где хорошо раскрылись принципы функционального программирования — LLM агенты Агенты в большинстве своем устроены так: • LLM — функция без сайд эффектов (string -> string) • Все сайд-эффекты инкапсулированы в тулах • LLM сама ничего не вызывает. А просто возвращает агенту, какие тулы нужно вызвать А это и есть реализация паттерна • functional core (LLM) • imperative shell (Агент) И в целом никто не запрещает перенять эти принципы для продакшн кода. Чистая бизнес логика — это супер-простое юнит тестирование и простота поддержки
Fedkin is thinking
05.04.2026 07:50 · 👁 7.6K
Про Стратоплан и менеджмент (итог) Я уже как ~месяц назад закончил обучение в Стратоплане на руководителя отдела https://stratoplan-school.com/head/ Обучение весьма удачно совпало с новой зоной ответственностью на работе, поэтому многое удалось попробовать на практике. Если меня попросить топ выводов/мыслей, в которых убедился на собственном опыте, я бы ответил так: • Не хочешь внезапных разочарований (в т.ч. от себя) — явно проговаривай ожидания • Регулярное обеспечение прозрачности таки действительно рождает доверие (как и наоборот) • Эффективность каждого конкретного человека по отдельности ≠ эффективность команды • Если проблемы со всеми людьми одновременно, то скорее всего проблемы не с людьми) — Еще на первом занятии упоминалось, что задача рук-ля отдела — строить систему, и в целом курс действительно направлен на то, чтобы абстрагироваться от решения локальных проблем, и решать их на уровне всей системы Поэтому я думаю, обучение точно будет полезно: • тимлидам, у которых начала разрастаться команда, и "уследить за всеми" уже стало как-то нереально • M2 руководителям, которые не понимают, что происходит Если у вас только-только появилась команда, то скорее всего будет полезнее тимлидское обучение Подробности про обучение писал в постах • раз • два • три • четыре • пять Если интересно пообщаться лично и поспрашивать подробности, можно писать в личку, всем отвечу!
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.