Обновить
256K+

Python *

Высокоуровневый язык программирования

564,29
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Создаём простого ИИ-агента с нуля. Часть 1

Время на прочтение3 мин
Охват и читатели12K

Часто можно услышать «ИИ-агент», но мало кто объясняет, что это такое, если разбирать на уровне кода. Спойлер: магии меньше, чем кажется — цикл, вызов моделей для истории сообщений. Соберём минимального агента на Python с нуля, чтобы увидеть механику своими глазами.

Читать далее

Слепая дегустация для кода

Время на прочтение6 мин
Охват и читатели12K

Привет, Хабр. Я Полина, продакт и главный редактор медиа-платформы «Своё Вино» от Россельхозбанка. Помните, не так давно мы говорили с вами о том, что общего у вина и ИТ? На платформе «Своё вино» мы с редакцией обычно говорим о терруарах, стилях и винтажах, но в этот раз попробуем применить ту же оптику к языкам программирования. Попробуем угадать язык по пяти строкам кода и заодно понять, по каким «ароматам» и «танинам» наш мозг так быстро их различает.

Дегустируйте код

Почему E2E-тесты флакают всё чаще и как с этим жить

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели11K

Почему, несмотря на накопленный опыт и современный инструментарий, число флаки‑тестов растёт год от года? Исследование BitRise 2025 года показало, что доля команд, которым приходится сталкиваться с флаки-тестами, выросла с 10% в 2022-м до 26% в 2025-м.

Нестабильные тесты сильно бьют по рабочим процессам: из опроса 1600 человек в 2023 году стало ясно, что флаки-тесты съедают 8% рабочего времени, почти столько же, сколько занимает наладка и поддержка тестовых сред. Но реальный вред флаков гораздо больше: они подрывают доверие к здоровым тестам и ставят под вопрос всю автоматизацию.

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

- Больше этапов в пайплайнах

- Более сложные рабочие процессы

- Больше сторонних зависимостей

Сложность среды, сторонние зависимости - всё это бьёт в первую очередь по E2E-тестам. Проблема в том, что компенсировать эти источники сложности может быть очень дорого. И именно об этом я хочу поговорить сегодня: насколько дорого обеспечить стабильность E2E-тестов?

Читать далее

Чтобы ваши тесты работали быстрее, нужен простой советский… xdist. Я измерил. Часть 2

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.2K

В первой части я ускорил большой интеграционный pytest-сьют с получаса до полутора минут за счёт инфраструктурных правок. Во второй проверяю следующий очевидный слой оптимизации — pytest-xdist.

Результат оказался не магическим, но полезным: -n auto дал ещё ×3.4 локально и около ×2.7 в CI. В статье показываю, почему xdist не заменяет дешёвый setup, а только домножает его; как разводить БД и Redis по воркерам; где упираются соединения Postgres; и почему память Docker VM и тюнинг Postgres не сдвинули потолок.

Читать далее

Сквозная аналитика B2C на коленке: Google Sheets, Python и Claude Code за две недели

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.3K

Сквозная аналитика для B2C: связать клик в рекламе с оплатой и посчитать ROMI. Ядро MVP (реклама + веб + биллинг в Google Sheets, дашборд в BI) собирается за две недели с Claude Code. А честные цифры - атрибуция, когорты, грабли API - занимают месяцы и требуют головы, не LLM.

Читать далее

WebScan v2.0: от идеи до pip install за одну неделю — путь, ошибки и бенчмарк

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.8K

Предыстория

1 день назад я опубликовал первую статью про WebScan из Песочницы Хабра. Честно — не ожидал ничего особенного. Думал придут 50 человек, может кто-то поставит звезду на GitHub.

Вышло иначе.

За первые сутки статью прочитали 548 человек. Потом пошли 10К охват, закреплённый пост на канале с 29К подписчиков, Google AI который начал рассказывать про WebScan всем кто спрашивал про bug bounty инструменты на Python. И 12 звёзд на GitHub от людей которых я не знаю.

Это была лучшая мотивация чтобы не останавливаться.

Честно о трудностях

Я подал заявку на Cyber Verification Program от Anthropic чтобы использовать Claude без блокировок для кибербезопасности. Отказали за час. Причина — случайно нажал No на вопросе про MFA. Одна кнопка, один отказ.

Coverage был 84% — я думал 87%, оказалось это была progress bar pytest а не реальная цифра.

Nuclei на Go оказался медленнее WebScan на Python. Я сам не верил пока не провёл бенчмарк.

Имя webscan на PyPI уже занято. Пришлось переименовать в webscan-security.

Всё это решалось — просто не всё шло по плану.

Что изменилось за неделю

v1.0 → v2.0 это не просто версия. Это другой инструмент.

Плагины: 7 → 19

Добавились: XSS, Blind SQLi, Path Traversal, Open Redirect, SSRF, GraphQL интроспекция, SSL/TLS анализ, Tech Fingerprint, Subdomain Enumeration через DNS и crt.sh, CVE lookup через NVD API (350,000+ уязвимостей в реальном времени), Secrets detection (AWS, OpenAI, Anthropic, GitHub ключи в исходниках).

Crawler

WebScan теперь сам обходит цель — парсит ссылки, формы, JavaScript эндпоинты. Раньше сканировал только то что ему давали. Теперь сам находит что сканировать.

Читать далее

Окупается ли мультиагентность и можно ли автоматически выбрать паттерн под задачу?

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели11K

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

Это была бы скучная заметка в духе «МАС не нужен, расходимся». Но нашлось исключение. Чем труднее задача для модели, тем больше у команды появляется шанс на выигрыш. Так что вопросов у меня два. Влияет ли вообще топология системы на результат? И если влияет, можно ли автоматически выбирать подходящий паттерн под конкретную задачу? Ответ на второй вопрос пока отрицательный, и самое любопытное здесь именно почему.

Примеры я показываю на мультиагентном фреймворке FEDOT.MAS, а весь код экспериментов с паттернами, прогонами и графиками лежит в репозитории. Я меряю инструмент, который сам и пишу. Но и выводы выйдут в основном не в пользу мультиагентности, так что это скорее самокритика, чем реклама.

Читать далее

Десктопный аналитик криптовалют: как устроена мультифакторная система сигналов на TA-Lib

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели13K

Когда я начал торговать криптой, меня раздражало одно: большинство аналитических инструментов выдают «BUY» или «SELL» без объяснений. Три индикатора сказали покупать - вот тебе сигнал. Никаких весов, никакого контекста, никакой логики за цифрой.

Я решил сделать иначе. Программа, о которой пойдёт речь — это десктопное приложение для Windows, которое запускается двойным кликом, подключается к открытому API Binance и выдаёт взвешенный Score по шести категориям индикаторов, бэктест на последних 100 барах, уровни поддержки/сопротивления по фракталам и ATR-метрики риска. В статье расскажу, как всё это устроено изнутри — с формулами и кодом.

Читать далее

Три задачи discovery при работе с PostgreSQL master/replica — и как их решить

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели15K

Когда у приложения появляется несколько хостов PostgreSQL, начинается головная боль: нужно динамически находить мастера после failover, выбирать реплику с нужным отставанием и гарантировать что пользователь не увидит устаревшие данные после своей же записи. DNS кешируется минутами, libpq не знает про lag, HAProxy не слышал про LSN. Разбираем как устроены существующие решения и как закрыть все три задачи через лёгкий HTTP сервис — pg-status.

Читать далее

Размер позиции под микроскопом: Монте-Карло, где честно меняется ровно одна переменная

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.3K

Дисклеймер о конфликте интересов.

Я делаю бесплатные калькуляторы риск-менеджмента для крипто-трейдинга. Чтобы это не выглядело как реклама в каждом абзаце, ссылка на проект в статье ровно одна — в самом конце. Всё остальное здесь — код, математика и числа, которые вы можете воспроизвести у себя за минуту.

И сразу к делу — с вопроса, на который у большинства есть «очевидный», но неверный ответ.

Читать далее

Как я написал свой клиент Miracast для шаринга экрана под Linux в 2026 году и погряз в войне за проприетарные байты

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели31K

Как превратить крик души в работающую утилиту и попасть в официальную ArchWiki? Мне 17 лет, и мне просто надоело тянуть HDMI-кабель от ноутбука к телевизору через всю комнату. В этой статье я расскажу, как написал свой стример экрана FluxCast на Python, с какими багами Smart TV пришлось столкнуться и как устроен «слепой» дебаг проприетарного железа по логам пользователей со всего мира.

Читать далее

Открытый CLI-инструмент для bug bounty на чистом Python — архитектура и разбор плагинов

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели12K

WebScan — асинхронный CLI-сканер безопасности на чистом Python. За неделю вырос до 15 плагинов: XSS, SQL инъекции, CORS, Path Traversal, SSRF, утечки API ключей и многое другое. Safe Mode, proxy, SOCKS5, пять форматов отчётов включая SARIF.

В статье разбираю архитектуру и сравниваю с Nikto.

Читать далее

Сжать четыре токена в один вектор: запускаем автоэнкодер CALM на доменных данных (и на одном CPU)

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели9.3K

Взяли автоэнкодер из свежей работы CALM (Continuous Autoregressive Language Models), который учится упаковывать чанк из K=4 токенов в один непрерывный вектор и разворачивать обратно, и обучили его не на 15 миллиардах токенов Pile на 8 GPU, как в оригинале, а на 18 тысячах коротких строк с требованиями из IT-вакансий - на обычной машине без видеокарты. По дороге выгребли три классических грабли (flash-attn без CUDA, deepspeed, который не импортируется под NumPy 2.x, и тихий OOM на 33 ГБ логитов). Ниже - подробный разбор архитектуры, конфигов и честные результаты round-trip-реконструкции.

Читать далее

Ближайшие события

Как я построил guardrails, которые не дали моему AI-агенту пойти вразнос

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели10K

На третий день в проде мой support-агент на LangGraph и GPT-4o слил email одного клиента в переписку с другим. Причина банальна: модель вставила сырой контекст из базы прямо в ответ, и ничто в пайплайне это не проверяло. Фреймворки для агентов дают оркестрацию, вызов инструментов и память — но не безопасность. В этой статье разбираю стек из четырёх guardrails (валидация входа, валидация выхода, circuit breaker по расходам и проверка вызова инструментов), который умещается в ~200 строк Python и добавляет менее 40 мс latency. С рабочим кодом, схемой пайплайна и честным разбором того, что эти guardrails ловят, а что — нет.

Читать далее

Я научил небольшой Transformer генерировать цифры одной нитью

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

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

Я провел простой эксперимент и превратил цифры MNIST в последовательности переходов между 256 гвоздями и обучил небольшой Transformer продолжать путь нити. В результате модель выдаёт не PNG, а JSON-траекторию, которую можно отрисовать в любом разрешении - или потенциально передать физической string-art установке.

Код выложил на GitHub

Читать далее

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели14K

Миллион асинхронных задач на Rust спокойно живёт в нескольких сотнях мегабайт. Сто тысяч корутин на Python нередко упираются в память раньше. Дело не в том, что “Rust быстрый, а Python медленный” - дело в том, ГДЕ физически лежит состояние приостановленной задачи.

Разбираю, во что превращается ваш async fn после компиляции: стейт-машина на стеке против объекта в куче. Сравниваю модели Rust (Tokio), Python (asyncio), C# и JavaScript - кто аллоцирует на каждый await, а кто нет, и почему это видно на счётчике RAM при 100k задач.

Внутри: что генерирует компилятор, куда уезжает состояние между await, stackful против stackless, и что с этим делать сегодня.

Читать далее

Telegram Bot API 10.1: Революция форматирования

Время на прочтение6 мин
Охват и читатели12K

Всем привет!

Telegram меня наконец-то услышал! Ну ладно, не только меня, а может, и не слышал вовсе, но недавний апдейт клиента и вчерашнее обновление Telegram Bot API 10.1 попали прямо в меня.

Дуров и команда ввели Rich Messages — полноценную альтернативу обычным сообщениям, в которых можно конструировать сложную структуру контента с помощью Rich Markdown или HTML-разметки. Кроме того, теперь появилась возможность явно использовать бота в роли полноценного модератора (гварда) на стыке с Mini Apps. Но обо всём по порядку.

Если вам интересны подобные материалы и разработка в целом, подписывайтесь на Telegram-канал «Код на салфетке».

Читать далее

Не давайте ИИ-агенту прямой доступ к базе. Как я проектировал безопасный контур действий на FastAPI и PostgreSQL

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.9K

Последнее время я всё чаще встречаю одну и ту же мысль: бизнес никогда не даст ИИ‑агенту доступ к базе клиентов, заявкам, платежам, CRM или внутренним документам. На первый взгляд звучит логично. Если агент ошибётся, перепутает контекст или выполнит не то действие, ущерб может быть вполне реальным. Но мне кажется, что здесь часто путают две разные вещи.

Давать агенту прямой доступ к базе действительно нельзя. А вот давать ему возможность работать через ограниченный, проверяемый и журналируемый контур действий вполне можно. Примерно так же мы не даём пользователю прямой доступ к PostgreSQL, но разрешаем ему нажимать кнопки в интерфейсе, которые вызывают заранее описанную бизнес‑логику.

В этой статье я хочу как раз таки разобрать, как может выглядеть такой контур на практике: без магии, без «агент всё сам решит», без сырого SQL от модели и без веры в то, что хороший prompt заменяет нормальную архитектуру.

Читать далее

Радиоактивный распад урана-238

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели9.4K

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

Читать далее

Shrinking: как property-тест сводит мусорный контрпример к минимуму

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.7K

Property‑тесты умеют находить ошибки на самых неожиданных входных данных. Но настоящая магия начинается после падения теста: вместо списка из сотен случайных значений Hypothesis часто показывает один короткий и предельно понятный контрпример.

Разбираемся, как работает shrinking, почему ручные shrinker'ы плохо масштабируются и за счёт чего Hypothesis умеет минимизировать ошибки практически автоматически.

Читать далее