Abstract
DJ — ИИ-диджей для Маргинал радио. Не плейлист-бот, а ведущий: подбирает треки, комментирует, рассказывает контекст. Работает на локальном vLLM с Gemma 4, голос через Piper TTS. Две персоны — ИИбан (советский диктор) и TOVARISH (лаконичный). 7 навыков: от годовщин альбомов до веб-поиска.
Чем отличается
Обычное ИИ-радио — random playlist + TTS объявления. «Сейчас играет X». Скучно через 10 минут.
DJ-режим — LLM сама выбирает треки (не случайный pool, а picker agent), генерит скрипты к каждому, комментирует с учётом контекста. «Ровно 10 лет назад вышел этот альбом — давайте вспомним.» Или: «А вот вам deep cut из 2019-го, редко кручу, но сегодня время подходящее.» Кураторский подход, не алгоритмический.
Как работает
Поток: Navidrome (библиотека) → DJ agent (LLM + 7 skills + tool calling) → vLLM inference → Piper TTS синтез → Liquidsoap crossfade → Icecast → эфир.
7 навыков (skills) — ИИбан не просто объявляет, а ведёт эфир: album-anniversary (годовщины), curatory (факты), library-deep-cut (редкие треки), news (краткие новости), now-playing-dig (разбор текущего трека), weather, web-search. Навыки — это skills в смысле Hermes: процедурная память агента.
Персоны
Две souls. ИИбан — размеренный, торжественный, советский диктор. TOVARISH — глубокий голос, рубит фразы. Та же модель, разные souls — разные ведущие. Промпты на английском, выход на русском (WRITE SCRIPTS IN RUSSIAN).
Практика
DJ засыпает когда нет слушателей — играет fallback playlist, не тратит токены. Когда кто-то подключается — просыпается, начинает вести. noRepeatWindow — не повторяет треки 100 позиций. pickerAgent — LLM выбирает, а не random. 5-минутный timeout на pick — если LLM тупит, fallback на pool.
Abliterated Gemma 4 иногда выдаёт битый JSON — 5-15% fallback rate. Эфир не прерывается: pool picker подхватывает, слушатель не замечает.
Связанные