Обновить
512K+

Python *

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

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

Флоу — это не число слогов: как я учил языковую модель писать рэп в такт бита

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

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

Читать далее

Новости

7 паттернов микросервисной архитектуры на примере музыкального сервис

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

Представим, что мы разрабатываем сервис для прослушивания музыки — Пай.Музыку. В него уже заходит больше 100 тысяч пользователей в месяц, в команде работает 10+ инженеров, а недавно к музыке добавились подкасты и личный кабинет музыканта. Новые направления хочется часто обновлять и отдельно масштабировать (из-за разной нагрузки), основную логику — релизить пореже. Но пока всё живёт в одном монолите: общий релизный цикл тормозит команды, а изменения в одних и тех же файлах приводят к мерж-конфликтам.

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

На примере этой системы разберём семь паттернов микросервисной архитектуры, их ограничения и короткие примеры на Python.

В этой статье слова “сервис” и “микросервис” используются взаимозаменяемо.

Читать далее

«Лучше пять раз переспросить, чем один раз выдумать» — я посадил ИИ-ассистента отвечать коллегам в рабочем мессенджере

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

Всем привет! Меня зовут Александр, я руковожу направлением аналитики страховой вертикали в Банки.ру. Наша вертикаль живёт в отчётах и данных: продажи ОСАГО и КАСКО, ипотечное страхование, кроссы, пролонгация, воронки, кэшбэк и сверки с партнёрами.

И каждый день в рабочем мессенджере на меня прилетает поток одного и того же жанра: «где посмотреть КВ по ОСАГО за сентябрь?», «почему упало одобрение у страховой?», «сделай выгрузку по регионам», «это у нас баг или так и задумано?». КВ здесь комиссионное вознаграждение.

Постепенно аналитик превращается в справочное бюро. Ответы есть, но живут они в голове, в SQL-запросах и в вики, а вопросы приходят в личку и в каналы в любой момент, в том числе пока ты на встрече. Я решил посадить на эту очередь ИИ-ассистента. Условие одно и жёсткое: ассистент не выдумывает. В аналитике выдуманная цифра хуже отсутствия ответа, потому что по ней примут решение.

В статье рассказал, как бот устроен, какие правила не дают ему врать и как он им учится.

Читать далее

Квантование RWKV-7: что ломается в моделях разного размера

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

Я изучаю посттренировочное квантование семейства RWKV-7 (от 0.1B до 13.3B параметров) двумя пресетами: REDUCTION (сжатие около 2.1x, почти без потерь) и COMPRESSION (около 3.1x, 4 бита на проекции). Исходный вопрос работы: почему 4-битный пресет на модели 2.9B деградирует сильнее, чем на 1.5B (+4.04% против +2.85% по перплексии), хотя ожидается обратное.

Оказалось, что до 86% вклада всей группы o_proj на 2.9B приходится на одну матрицу: выходную проекцию нулевого блока. Её вход несёт «массивный канал» (98% энергии входа в восьми каналах из 2560). Хранение этой одной матрицы в bf16 (0.5% файла) снижает KL к эталону на 39% и возвращает 2.9B в монотонную линейку; перевод эмбеддинга с 5 на 6 бит добавляет ещё −22% KL за 1.1% файла. Три естественные локальные метрики ошибки не предсказывают вред от квантования матрицы; предсказывает ошибка, внесённая в остаточный поток и умноженная на усиление ниже по глубине. На этом основании я строю автоподбор битности по правилу «снятый вред на байт» (−16…−39% KL при приросте файла не более 0.5%) и переношу GPTQ на ту же сетку (−29…−43% KL при тех же байтах).

Вместе методы дают потерю по перплексии от +2.76% (0.1B) до +0.70% (13.3B) на файле размером 31.6–35.2% от bf16, монотонно убывающую с размером модели. Пресет REDUCTION с GPTQ даёт +0.46…+0.07% при 46–50% от bf16. При равном размере файла KL моего 6-битного файла с GPTQ в 2.0–3.3 раза ниже, чем у GGUF Q6_K с imatrix, и в 3.5–7.4 раза ниже, чем у MLX int6; 4-битный файл в 2.1 раза точнее Q4_K_M на 1.5B, а Q4_K_M на 2.9B ломается. Отдельно описываю утечку калибровочного корпуса в мой первый оценочный набор и измеренный масштаб её влияния, а также разброс GPTQ между численно эквивалентными реализациями (около ±1.5% KL).

Читать далее

Эмулятор Game Boy Color на MicroPython: Pokémon Crystal на конференц-бейдже с RP2350

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

Стив Франсиа, автор Hugo и Cobra, после эмулятора NES запустил на конференц-бейдже GitHub Universe с RP2350 эмулятор Game Boy Color — на MicroPython с генератором кода Viper. Процессор SM83 с его восемью регистрами и 512 опкодами не влез в четыре быстрые локальные переменные Viper, и декодер пришлось строить на восьмеричной раскладке опкода. Ветвления по адресу заменила таблица из 16 страниц по 4 КБ, двухмегабайтные картриджи подгружаются по банку при первом обращении, а разгон до 300 МГц вешал общую шину QSPI. Плюс три бага из реальных игр: окно диалога в Oracle of Ages, «вывернутый» Линк в режиме двойной скорости и указатель стека, который Pokémon Crystal направляет прямо в ROM.

Читать далее

Я подсвечивал нейроны крохотного ИИ, чтобы понять, когда тот врет

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

В 2023 году адвокат из Нью-Йорка принес в суд записку со ссылками на прецеденты, которые ему «добросовестно» подобрал ChatGPT. Судья не нашел ни одного из этих дел. И не случайно: дел, на которые ссылался ИИ, не существовало вовсе. А через год Air Canada проиграла спор с пассажиром, которому чат-бот авиакомпании пообещал возврат денег по правилу, которое придумал ее же бот. Языковые модели ошибаются вполне уверенно, и по тексту ответа невозможно понять, путается ли модель искренне или привирает, прекрасно зная правильный ответ. Для людей эту задачу давно пытаются решать полиграфом, но он измеряет пульс и дыхание, то есть пытается замерить волнение, а с враньем оно связано очень косвенно.

Но у нейросети есть одно преимущество для исследователей: в отличие от человека, ее внутренности можно читать целиком. Буквально каждый нейрон. И все это без манжеты на руке и проводов на пальцах. Я решил проверить, получится ли собрать такой полиграф для языковой модели на домашней видеокарте. 

Первый же результат оказался интереснее, чем я рассчитывал изначально. Я попросил локальную модель соврать про цвет банана, и она уверенно ответила «Red», хотя на 25-м слое из 28 еще на 46% собиралась сказать «yellow». То есть правильный ответ у нее внутри был, а переписали его только последние слои. Но обо всем по порядку.

Читать далее

Почему softmax теряет градиенты — и как школьная алгебра 7-го класса помогает их сохранить

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

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

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

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

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

Читать далее

AI-менеджер для WB, Ozon и Маркета: отдали решения агенту и сразу его ограничили

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

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

Мы переделали менеджера в агента: модель сама выбирает инструменты и порядок. И сразу же его ограничили: 8 шагов и 150 секунд на ход, узкие инструменты, запись в кабинет — только после «да» владельца. Рассказываем, как это устроено, с кодом, и что дали агенту вместо сценариев.

Читать далее

PyLab — 2 года: как пользователи превращают пет-проект в продукт

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

28 октября моему пет-проекту PyLab, приложению для изучения Python и написания кода прямо на смартфоне, исполнилось два года. В прошлой статье я рассказывал, что умеет приложение, а сегодня расскажу о решениях: почему горячие правки обходятся дороже, чем кажется, чем окупился полный редизайн в версии 4, как одна идея пользователя стала любимой функцией и почему модерация в сторах превращает каждую ошибку в проблему на неделю.

Читать далее

Пишем свой масс-сканер и OSINT-комбайн на Python: от скрипта «в лоб» до асинхронности и SQLite

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

В процессе изучения сетевой безопасности и автоматизации OSINT на базе Linux передо мной встала задача — создать быстрый и отказоустойчивый инструмент для первоначального сбора данных и фиксации сетевых инцидентов. В данной статье я поделюсь каждым этапом разработки первых версий моего инструмента Web-Recon. Мы пройдем путь от простейшего скрипта, спотыкающегося о первые блокировки и ошибки 403, до создания асинхронного пула потоков на ThreadPoolExecutor и проектирования базы данных на SQLite3 с решением проблемы параллельной записи (database is locked).

Читать далее

Ипотека или аренда в Петербурге: я посчитал на Python и вот что вышло

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

Привет, Хабр! Я построил простую экономико‑математическую модель жилищного бюджета домохозяйства, подставил в неё данные по Санкт‑Петербургу на 2026 год и прогнал несколько сценариев. Код выложил на GitHub, а здесь — результаты, графики и все входные данные, чтобы можно было воспроизвести.

GitHub: https://github.com/CheesePunk/Housing-Budget-Model

Читать далее

Как я закрыл от ИИ-агента часть кода и проверил это кодом, а не промптом

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

aiedit — настольный редактор кода на Python (PySide6 и PyQt6), в котором ИИ-модели работают со всем проектом, но не видят закрытые части. Закрыть можно не только файл, но и отдельные строки. Проверку делает код редактора, а не просьба в промпте: закрытое просто не попадает в запрос к модели. Код открыт под лицензией MIT. Честно сразу: по качеству кода он пока уступает Claude Code на той же модели, ниже разбираю почему.

Читать далее

Как голосовой робот принимает заявки на ремонт и передаёт их мастеру в Битрикс24

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

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

Стек проекта: Python 3.10+, FastAPI, Pydantic, SQLite, HTTPX, Битрикс24, Яндекс Геокодер, голосовой робот и SMS API от МТС Exolve.

Читать далее

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

Как я подключил рабочие чаты Telegram к ИИ-ассистенту через MCP

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

В рабочих чатах Telegram рядом живут сообщения о релизах, вопросы подрядчиков, согласования и короткие «посмотри, пожалуйста». Чтобы понять, что требует внимания, приходится открывать несколько чатов и восстанавливать контекст из отдельных реплик.

Я сделал TelegramMCP — открытый сервер, который подключает личный аккаунт Telegram к ИИ-приложению с поддержкой MCP. Ассистент получает инструменты для чтения папок и чатов, поиска бесед и отправки текстовых сообщений. Уже поверх этих инструментов его можно попросить собрать главное из выбранной переписки или подготовить ответ.

В статье расскажу, как устроено подключение через TDLib, зачем понадобилась поддержка папок, как запустить проект и какие проблемы ещё остаются.

Читать далее

Редактор писал «Сохранено» и ничего не сохранял: TipTap поверх чужого HTML

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

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

Как минимум два месяца этот редактор показывал «Сохранено» и не сохранял ни символа. Сама ошибка глупая, на неё хватит одного абзаца. Хуже, что очевидное исправление уничтожило бы статьи. По дороге к правильному нашлись ещё три ловушки. Санитайзер nh3 тратит почти минуту на 320 КБ разметки. Одно правило HTML5 превращает 99 КБ входа в 56 МБ выхода. А SELECT … FOR UPDATE в SQLAlchemy берёт блокировку и при этом отдаёт старые данные.

Читать далее

Десять запросов и 25 месяцев Wordstat: когда в России на самом деле ищут мерч и корпоративные подарки

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

Я работаю в производстве печати и вышивки на одежде, и каждую осень у нас повторяется один и тот же спор: когда начинать готовиться к новогоднему сезону. Одни говорят, что заказы на подарки приходят в декабре, другие уверены, что всё решается в октябре. Спорить на ощущениях надоело, поэтому я собрал помесячную частоту запросов из Wordstat и посчитал, что там на самом деле происходит.

Ниже данные, код и результаты, а в конце отдельный раздел о том, где этот метод меня обманывал.

Читать далее

AI-менеджер для WB, Ozon и Маркета: почему мы начали с регулярок, а не с агента

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

Мы делаем AI-менеджера для селлеров на Wildberries, Ozon и Яндекс Маркете — сотрудника, у которого в руках цены, остатки и рекламные бюджеты. И сознательно не дали нейросети свободы: что можно сделать, решает закрытый список операций и регулярки, модель только выбирает из разрешённого, а любые деньги уходят в кабинет площадки только по кнопке владельца.

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

Читать далее

database is locked. Что на самом деле блокирует SQLite в Telegram-боте и как я это чиню

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

SQLite в небольшом боте выбирают за то, что не нужен отдельный сервер. А потом в логах раз в пару дней появляется sqlite3.OperationalError: database is locked, и непонятно, кто и что держит. Показываю на воспроизводимых примерах три причины, которые я встречал в заказах: забытый commit из-за неявных транзакций модуля sqlite3, транзакцию «прочитал, потом записал», которая падает мгновенно даже с timeout, и синхронный драйвер внутри asyncio. В конце обёртка на aiosqlite с WAL, busy_timeout и BEGIN IMMEDIATE, которую я теперь ставлю в каждый такой проект. Код проверен на Python 3.14 и SQLite 3.50.

Читать далее

Галлюцинации недели: Взломать можно было всех и сразу, от WordPress до Яндекс Станции

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

Всю эту волну в Твиттере прозвали Black October. У индийского удостоверяющего центра ключи можно было восстановить прямо из сертификатов, LiteLLM меньше чем на два часа выехал на PyPI с похитителем учёток, а Railway после инцидента отозвала все API-токены.

Читать далее

58 рекламных роликов, которые я не снимал, а закоммитил

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

Мой главный актёр не умеет повторять дубль. Попросил его сказать фразу — он сначала зевнул, потом ушёл к краю экрана и только потом сказал. Поправил текст реплики — «тот же самый» дубль уже не снять, будет другой путь и другая поза.

Читать далее
1
23 ...