Ответ на пост «"У нашего руководства нет почты". Как техподдержка мессенджера Max чинила звонки 51 день, а решение заняло 30 секунд (Полезный лайфхак)»1
К сожалению, вы неправильно общаетесь с ботами и с поддержкой.
1. В боте, скорее всего, счётчик ваших попыток позвать оператора. Чтобы перейти на оператора, может скорее сработать многократное "оператор!". Как только вы разбиваете цикл этих обращений, вы запускаете счётчик заново.
2. В тот момент, когда в диалоге выскочила плашка "Оцените нашу работу", это значит, что сессия с оператором завершена и оператор отсоединился. Всё, что бы вы потом ни отправили, попадёт в бота. Ваши первые логи никто не получил. Бот не смог распознать запрос, а до агента вы в этот раз не доходили. Так что никакого тикета действительно не было и быть не могло: обрабатывает логи и регистрирует тикет только человек (может быть, бот у них тоже умеет, но для начала он должен быть в контексте ожидания логов от вас).
«У нашего руководства нет почты». Как техподдержка мессенджера Max чинила звонки 51 день, а решение заняло 30 секунд (Полезный лайфхак)1
UPD:
Важное дополнение по гайду в статье:
Друзья, в комментариях справедливо подняли важный вопрос про звонки от курьеров.
Напоминаю: для работы мессенджера Max НЕОБЯЗАТЕЛЬНО включать полную блокировку незнакомых номеров, если вам часто звонят люди не из вашей телефонной книги.
Вы можете отключить тумблер "Блокировать вызовы с незнакомых номеров“ — тогда все курьеры до вас гарантированно дозвонятся с первого раза.
Наша главная цель в гайде — ВЫКЛЮЧИТЬ только один тумблер: "Блокировать вызовы со скрытых номеров“. Настраивайте систему гибко, под свои нужды. Всем отличной связи!
UPD 2:
Отлично понимаю, что в данном случае снятие блокировки со скрытых номеров — это скорее временный костыль и патч для того, чтобы восстановить входящие звонки в Max. Да, с точки зрения уязвимости это определенный компромисс для смартфона, но я надеюсь, что разработчики всё же когда-нибудь найдут нормальное решение этой проблемы и сделают обновление мессенджера.
А маме я объяснила, что брать трубку с вызовом от скрытого номера ни в коем случае нельзя. Вообще она и с незнакомых номеров тоже вызовы не принимает уже давно. Я стараюсь обучать ее правилам цифровой безопасности.
UPD 3:
Всем недовольным комментаторам: этот пост о том, что пользователи вынуждены самостоятельно искать решение проблем с мессенджером Max, так как поддержка и разрабы не в силах им помочь.
Почитайте пост другого пикабушника, в котором пользователь после «танцев с бубном» пришел к такому же выводу, что и я (ссылка на комментарий).
Работоспособность и устранение багов приложения целиком и полностью лежат на плечах разработчиков. Ни с одним другим мессенджером таких проблем не возникло ни разу.
Не очень понимаю, за что минусуют пользователей, которым этот гайд помог. Всем адекватным читателям — спасибо за поддержку!
Привет, Пикабу! Хочу поделиться историей о том, как одна маленькая галочка в настройках смартфона поставила в тупик целую армию разработчиков крупного мессенджера, а их техподдержка заставила ждать от них решения 51 день (и более!), хотя само устранение проблемы заняло ровно полминуты.
Акт 1. Улика-призрак и первый след
В середине апреля на телефоне моей мамы-пенсионерки (смартфон Poco) перестал работать мессенджер Max. Симптомы странные: исходящие звонки идут, а вот принять входящий аудио- или видеозвонок от контактов невозможно. При поступлении звонка мамин экран молчит, а после сброса в шторке появляется системное уведомление от встроенного Антиспама: «Заблокированный вызов».


Суть проблемы.
Делать нечего, 17 апреля в 20:21 пишем в официальную техподдержку. Кое-как пробившись через упрямого бота, в 20:42 мы наконец-то состыковались с живым оператором. Первые полчаса ушли на стандартную рутину: проверили громкость, всплывающие окна, режим «Не беспокоить» и разрешения на экране блокировки.






Стандартный набор проверки настроек.
Самое фантастическое, что 17 апреля я скинула оператору скриншот шторки, где висело уведомление безопасности: «Заблокировано 12 вызовов от Unknown number и других». Казалось бы – вот она, зацепка! Но когда мы кликали на это уведомление, встроенный журнал Антиспама открывался абсолютно чистым – там висели только мартовские блокировки от номера 900! Китайская прошивка умудрялась наглухо рубить входящие интернет-звонки Max, выводить плашку в шторку, но вообще не записывать эти вызовы в системный журнал!
И тут, надо отдать должное, в 21:11 оператор берет верный след! Он пишет: «Вижу, что вызовы блокируются встроенной функцией безопасности устройства. Рекомендую проверить настройки приложения "Телефон" и Антиспам».
Я высылаю ему скриншоты настроек нашего Антиспама. На них четко видно: тумблер «Блокировать вызовы с незнакомых номеров» – ВЫКЛЮЧЕН. Активен только тумблер «Блокировать вызовы со скрытых номеров». (В самом черном списке при этом покоилось 96 номеров, включая номер 900, который я когда-то заблокировала маме от греха подальше, чтобы Сбер не донимал её «выгодными кредитами»).



Настройки встроенного Антиспама.
Увидев, что блокировка незнакомых номеров отключена, оператор... полностью потерял верную нить и увёл диагностику в глухие дебри. Нас заставили проверять автозапуск, удалять и заново скачивать мессенджер, искать в системных настройках несуществующее меню «Заглушение вызовов» и бесконечно перезагружать телефон.




Оператор потерял верный след бага.
В 23:14, устав от этого трехчасового марафона, я провела финальный эксперимент и отправила оператору полученный результат: «Сразу после перезагрузки смартфона, без запуска Макса, исходящий звонок с телефона моей дочери идет, идут гудки, но на моем телефоне ноль реакции – только уведомление о пропущенном. А после запуска Макса на исходящем устройстве звонок у дочери мгновенно обрывается, а на моем возникает уведомление от Антиспама».
Поняв, что этот уровень ему не по зубам, оператор в 23:21 вежливо написал: «Я уточню информацию по вашему вопросу и вернусь». И вернулся через 3 часа (!). В 02:26 ночи 18 апреля, когда нормальные люди давно спят, он пишет в чат: «Для передачи информации разработчикам отправьте логи приложения». А в 05:26 утра система уже требовала: «Оцените ответ агента». Логи я утром отправила, после чего чат благополучно обнулился и скинул меня на стартового бота с дежурным вопросом: «Что у вас случилось?».



Оператор запрашивает логи в 02:26 ночи, а в 05:26 утра система закрывает обращение.
Акт 2. Битва с ботом и амнезия поддержки
Прошел месяц. Звонки по-прежнему не работали. Поняв, что разработчики Max не очень торопятся изучать мои апрельские логи, 16 мая в 18:56 я снова зашла в чат поддержки. Скопировала детальный лог апрельского эксперимента и добавила прямой вопрос: «Решили эту проблему со звонками, разработчики?».
Навстречу мне грудью встал бот и завёл свою шарманку: «Переформулируйте вопрос».
Я написала свой вопрос и тут бот выдал: «Возможно, проблема связана с настройками доступа к микрофону. Проверьте разрешения в системном приложении Безопасность-Антиспам». Только при чем здесь микрофон, если встроенный Антиспам блокирует сетевое соединение еще до вызова приложения?
Нажала «ответ не помог» и привела ему цитату их же ночного оператора от 17 апреля с инструкцией по сбору логов, добавив: «Вы решаете проблему или нет?». Бот упрямился. Я дважды написала «оператор!» – ноль реакции. Пишу «Вы бы хоть номер обращения зафиксировали 18 апреля. Как мне теперь пробиться через вашего бота?». Но робот был неумолим: он стоял на пути и требовал нажимать его кнопки.
Я повиновалась и стала нажимать предлагаемые кнопки с вариантами, но система зациклилась: на любой выбор проблемы бот снова предлагал почистить кэш, обновить приложение, а при слове «оператор» просто перезапускал этот круг ада с самого начала.
Тогда я схитрила. Методом перебора кнопок я нащупала тупиковую ветку, где бот сам предложил отправить логи. И вместо файлов я в третий раз продублировала ему описание бага со звонками. Железный идиот сдался и в 19:05 выдал заветное: «Я позову оператора». На прорыв обороны ушло 9 минут чистого времени. Но радовалась я рано, потому что дальше подключился живой человек с мышлением робота... В 19:07 на замену боту наконец-то пришел оператор и сразу написал: «Отправьте логи повторно».








Через месяц оператор просит отправить логи повторно.
На мой резонный вопрос, почему за месяц никто даже не притронулся к прошлым файлам, агент талдычил: «Вы создали новое обращение, нужны актуальные логи, сроков решения нет, и вообще вы общаетесь с другим агентом!». Потрясающе. То есть, они сами слили мой апрельский тикет в архив, месяц ничего не делали, а теперь я же оказалась виновата в создании «нового обращения»! Плюнув на их раздолбайство и внутреннюю бюрократию, я выслала логи от 16 мая. Оператор сердечно пообещал, что «разработчики решат всё как можно скорее», и тут же покинул чат.






"Вы создали новое обращение. Сроков решения нет".
Акт 3. Финал: «Прошедшее забыто, грядущее закрыто» – Великий Мастер Угвэй из чата поддержки
Прошло еще 14 дней. На календаре 29 мая. Звонки, естественно, так и лежат пластом. Я снова пишу в чат: «Прошло 14 дней с повторного обращения. Есть наработки? Сколько ждать? Люди дозвониться мне не могут!».
Ко мне вышел очередной любитель бесполезных отписок:
– Ваш вопрос еще в работе. Сроков решения нет.
– Предоставьте мне официальный адрес электронной почты вашего руководства. – требую я.
– Такой почты попросту нет, – беззастенчиво врёт агент.
– Мне, как и миллионам других людей, навязали мессенджер Max. Вы не можете решить проблему в течение 43 дней. Вы считаете это качественной услугой связи?
– Понимаю ваши эмоции, однако... не 43 дня, а 13 дней, – заявляет поддержка.
– Мое обращение зафиксировано 17 апреля! Сегодня 29 мая!
– 16 мая. Не 17 апреля, – отрезал оператор.
Тут я не выдержала и скинула ему в чат два скриншота: первый – от 17 апреля со стартом переписки, второй – от 18 апреля с отправленными логами в 8 часов утра. Думаете, он извинился? Как бы не так!
– Смотрите, задачу разработчикам создали 16 мая. Соответственно, и вопрос в работе с 16 мая. Мне неизвестно то, что было ранее, – пишет мне агент поддержки.
– А 18 апреля я в пустоту отправила логи? Потрудитесь ознакомиться со скриншотами!
И тут оператор включает Мастера Угвэя из «Кунг-фу Панда» и выдает фразу, которую нужно высечь в граните:
– Не имеет значения, что было до. Повторюсь, вопрос передали 16 мая. Ждем решения специалистов.
– Для вас что вообще имеет значение? – спрашиваю я.
– Ваш вопрос находится в работе.
– Всё, другие слова у вас закончились?
– Когда проблема будет решена, мы вам сообщим, – пишет мне этот просветлённый ИТ-гуру и присылает… смайлик-обнимашку. Занавес.







"У нашего руководства нет почты. Не имеет значения, что было до"
Полезный лайфхак: Спасаем звонки за 30 секунд
Знаю, в комментариях обязательно найдутся люди, которые спросят: «Раз ты такая умная, чего сразу в настройки Антиспама не залезла?» Отвечаю: обычная сотовая связь на телефоне работала безупречно. Не проходили звонки только в Max. Более того, при нажатии на шторку утилита Антиспам рапортовала, что в логах блокировки пусто (висели только заблокированные входящие от 900). Столкнувшись с таким впервые, я, конечно, пошла в чат поддержки.
Но, поняв, что помощи от ИТ-гиганта не дождаться, я включила логику и нашла причину сама. Мессенджер был вообще ни при чем. Дело оказалось во встроенной системе безопасности смартфонов (чаще всего это проявляется на Xiaomi, Poco и Redmi).
Поскольку звонки в мессенджерах идут через интернет-протоколы (VoIP), утилита «Антиспам» не может определить стандартный номер и распознает входящий интернет-вызов как «Unknown number» (скрытый/неизвестный номер), блокируя его в фоновом режиме еще до того, как у вас зазвучит рингтон!
Как это устранить легко и быстро:
Заходите в общие Настройки телефона.
В самой верхней строке поиска вводите слово «Антиспам» или «Блокировка» или "Безопасность".
Система сама подсветит вам скрытый пункт меню встроенной утилиты безопасности. Кликаем туда.
Находим вкладку или шестеренку «Блокировка вызовов».
Находим тумблер «Блокировать вызовы со скрытых номеров» и ВЫКЛЮЧАЕМ ЕГО.
Важное примечание по безопасности:
Тумблер «Блокировать вызовы с незнакомых номеров» (когда номер на экране виден, но его нет в вашей телефонной книге) можно смело оставить ВКЛЮЧЕННЫМ! Не бойтесь наплыва мошенников. В 99% случаев спамеры и жулики звонят с обычных, видимых, но просто незнакомых вам номеров (используя подмену Caller ID). Со скрытых номеров (Unknown) они практически никогда не работают. Поэтому, отключив только блокировку «скрытых», вы освободите мессенджер Max, но сохраните локальный щит от телефонных мошенников на вашем смартфоне.



Настройки приложения "Безопасность - Антиспам"
Как только системный Антиспам перестал душить неопределенные интернет-сессии, мессенджер Max мгновенно ожил, и маме сразу пошли все звонки от контактов!
Итог: Разработчики и техподдержка до сих пор молчат, а проблема была решена выключением одной галочки в настройках Android. Надеюсь, этот мой опыт сбережет ваши нервы.
P.S.: тем, кто читал мой первый пост "«Ваше заявление – это фрод». Как Билайн удержал 3683 рубля из кармана пенсионера и запугивал его Службой безопасности" хочу сообщить – прошло 10 дней после обращения в госведомства, и в пятницу, 5 июня, маме поступили две СМС от Билайн с текстом «Ваше обращение зарегистрировано, ожидайте решения в течение 14 рабочих дней».


Ответ от Билайна поступил через 10 дней после обращения в госведомства
P.P.S.: Кстати, на этой же неделе мамин телефон атаковала орда спамеров (не в Max). В чате поддержки мне агрессивно пытались продать платную услугу защиты, уверяя, что других вариантов нет. Но после короткого, жесткого допроса и кодовой фразы боту система сдалась. Живой оператор достал из секретных архивов абсолютно бесплатную опцию для защиты от спам-звонков! О том, как устроен этот скрытый цифровой щит операторов и как заставить их подключить его вам бесплатно, я подробно расскажу в следующем посте. Подписывайтесь, чтобы не пропустить!
Как я написал консольную «ОС» на C++17 со своим Driver SDK после 27 версий на батниках
Привет, Пикабу!
Хочу рассказать историю одного эксперимента, который зашёл слишком далеко. Около двух лет назад я ради фана начал делать маленькую консольную операционную систему под названием ARSLANIUS.
Первые 27 версий были написаны на чистых батниках (.cmd). Это как-то работало, но было дико медленно, хрупко, а расширять систему стало настоящим адом. Поэтому я взял и переписал всё с нуля на native C++17 (x64).
И вот что получилось в текущей ARSLANIUS 28:
Полная портативность: Один доверху забитый .exe файл. Работает из любой папки, не требует установки.
Фичи эмуляции ОС: Свой загрузчик (Boot Manager) с Safe Mode, реестр конфигурации (REG.cfg), система пользователей с ACL (5 уровней привилегий + команда sudo) и фоновые службы (SysPulse, NetMonitor).
Среда восстановления: Свой Recovery Environment, в котором есть Startup Repair, создание бэкапов системы и 19 кастомных видов BSOD (синих экранов смерти).
Свой Driver SDK: Самая пушка. Любой желающий может написать свой драйвер под мою систему! Это обычная C++ DLL, скомпилированная в формат .asd. Она закидывается в папку Drivers и при следующем запуске регистрирует новые команды в консоли без пересборки самого ядра.
Интерактивный квест при первом запуске (OOBE):
Чтобы вы понимали уровень проработки: когда пользователь запускает софт первый раз, система выдает реальный BSOD 0x00000001a CONFIG_ROOT_NOT_FOUND. Из него юзер переходит в Recovery Environment, запускает Startup Repair (который реально генерирует структуру папок и конфигов), система перезагружается и вылетает окно OOBE (первой настройки).
И да, в этот момент из динамиков начинает играть легендарная музыка установки Windows XP (title.wma), которую я перегнал в .wav и зашил прямо внутрь .exe через файлы ресурсов ради портативности! Звуки входа и выхода из XP при логине пользователей тоже на месте.
Почему C++17 и как это собрано:
Мне хватило std::filesystem. Всё остальное — сырые указатели, ручное управление памятью и WinAPI. Никаких тяжелых сторонних библиотек.
Ключевой момент — я компилирую проект с флагом /MT (статическая линковка рантайма). Исполняемый файл из-за музыки весит побольше, зато зависимости равны нулю. ARSLANIUS без проблем запустится даже на чистой Windows 7, где никогда не было Visual C++ Redistributable.
И напоследок:
Мне 11 лет. Родился 22.09.2014. Первую версию на батниках начал писать в 9 лет, сейчас перешёл на плюсы. Я пишу это не ради хвастовства, а чтобы показать, что консольный софт можно пилить ради хардкорного фана в любом возрасте.
Для особо одаренных, у кого сразу возникнут вопросы: Батя сейчас в армии и код писать физически не может. Из родственников есть ещё 17-летняя сестра, но она с компом строго на «Вы», так что проект полностью мой. Для тех, кому нужен мануал — в Бут-меню просто жмите цифру 6, там встроенная дока.
Код полностью открыт, документация API на английском готова.
Ссылка на GitHub: https://github.com/Armsoup/ARSLANIUS_C-Plus_Plus
(Все ссылки на Telegram-чат для обсуждения и копию репозитория лежат в README).
Драйверы приветствуются! Задавайте любые вопросы про архитектуру, WinAPI, линкер или то, как я мучился с переходом от Batch — на всё отвечу в комментариях!
Небольшая сводка по тому, что успел сделать с Nova за несколько дней
На самом деле планировал "чуть-чуть допилить вебку", а в итоге несколько дней ушёл в переписывание интерфейса и борьбу с очень тупыми багами 💀
Главное изменение - теперь у Nova полноценный веб-интерфейс
Раньше GUI был на PySide6. Работал нормально, но со временем начал раздражать:
сложно обновлять
неудобно масштабировать
куча возни с окнами и layout'ами
некоторые вещи делать просто больно
В итоге решил попробовать веб-интерфейс на Flask + HTML/JS.
И честно - пока ощущения намного лучше.
Теперь Nova запускается через обычный run_web.bat и открывается в браузере как локальный сайт.
Сделал:
анимированный фон
нормальный чат
вкладки
логи
настройки
управление серверами
Сейчас есть 7 вкладок:
Чат
Память
Отношения
Персонаж
Серверы
Подключения
Настройки
И наконец-то всё выглядит как единая система, а не набор окон из разных эпох Windows.
Управление серверами прямо из UI
Раньше llama-server приходилось запускать отдельно руками.
Теперь можно прямо из интерфейса:
запускать сервер
останавливать
рестартить
смотреть логи в реальном времени
Плюс добавил:
бэкапы
восстановление бэкапов
настройку портов
флаг --jinja для нормальных chat template
Раньше порты были тупо захардкожены в 8080/8081. Теперь можно менять нормально.
Самый annoying баг дня - Gemma 4 молчала
Долго не мог понять, почему Gemma 4 иногда просто возвращает пустой ответ.
Оказалось, reasoning-модели не любят маленький num_predict.
У меня стояло 256.
Gemma хотела 2048+.
То есть модель буквально думала слишком долго и не успевала дойти до ответа 💀
Теперь это исправлено.
Ещё из фиксов
Поймал очень смешной баг:
во вкладке отношений Infinity в JSON ломал весь интерфейс.
Потому что JS такой:
"Infinity? А что это вообще такое?"
В итоге заменил всё это на null.
Ещё:
панели UI перестали накладываться друг на друга
поправил пути для base_dir
добавил os.chdir в web_app.py
исправил orch_prompt_format для phi-3-mini
llama_client.py тоже сильно переделал
Добавил умные стоп-токены под разные семейства моделей.
Потому что у:
Gemma
Llama 3
Phi
Qwen
все форматы диалогов разные, и раньше некоторые модели начинали:
повторять пользователя
ломать формат
писать мусор
не останавливать генерацию
Теперь под каждую семью свои stop tokens и шаблоны.
Плюс наконец-то разделил промпт нормально:
system
user
А не запихивал всё в одно сообщение как раньше.
Казалось бы мелочь, но ответы реально стали стабильнее.
Из небольших, но приятных вещей
Добавил:
таблицу стадий отношений
прогресс до следующей стадии
автоматическое сканирование .gguf моделей в папке models/
Теперь не нужно вручную прописывать модель - просто кидаешь gguf в папку, и Nova её видит.
Мелочь, а приятно.
И чем дальше, тем сильнее понимаю, что большая часть разработки - это не "сделать новую крутую функцию", а:
чинить странные баги
бороться с несовместимостью моделей
переписывать то, что вчера казалось нормальной архитектурой
Но зато проект наконец начинает ощущаться как что-то цельное, а не Frankenstein build из 15 разных технологий.
ПС беседа в тг для ваших вопросов (https://t.me/+Z0mNbDAkgbY2ZjUy)
Nova v0.2: выкинули Ollama, собрали портативку и наконец починили память(ренейм с Astra)
Короче, за последние пару дней проект реально сильно двинулся. Если в прошлом посте я показывал набор скриптов вокруг Ollama, то сейчас это уже нормальная портативная прога, которую можно распаковать и запустить. Без танцев с бубном, без установки Python, без поднятия серверов. Просто скачал, запустил bat-файл, поговорил.
Что случилось с Ollama
Ollama был удобен на этапе прототипа, но стал реально бесить. Лишний сетевой слой, дублирование управления моделями, невозможность нормально контролировать VRAM. Короче, выкинули нафиг и перешли на прямой вызов через llama-cpp-python.
Теперь llama_client.py сам грузит .gguf файлы, сам решает сколько слоёв кинуть на GPU, и самое главное, сам выгружает модели по таймауту. Основная модель висит в памяти 10 минут, оркестратор 5 минут. Закрыл чат, ушёл по делам, через 10 минут видеопамять свободна, можешь игру запускать.
По VRAM ещё пара фишек. Квантованный KV-кэш (cache_type_k/v: q8_0) экономит полтора-два гига почти без потери качества. И выключили use_mmap, потому что на Windows это вызывало дикие фризы когда система начинала свопить на SSD.
А ещё наконец-то починили баг с заезженной пластинкой. Помните, модель могла выдать "О, ну что?" три раза подряд? Это было потому что repeat_penalty не передавался нормально. Теперь передаём repeat_penalty: 1.25 + frequency_penalty: 0.2 + presence_penalty: 0.2, и модель больше не зацикливается.
Память: от "забывает через 2 реплики" к "помнит, но не спамит"
Это была главная боль. Nova либо вообще ничего не помнила, либо вставляла факты в каждый ответ:
— Как дела?
— Помню, тебя зовут Никита, ты любишь synthwave и гранатовый чай. Как дела?
Что сделали:
Time decay в scoring памяти. Написал функцию time_decay_penalty, которая штрафует факты, упомянутые меньше 5 минут назад. Факт, который только что был в промпте, получает штраф 95% к relevance. Через 5 минут штраф обнуляется и факт снова доступен. В итоге Nova не повторяется, но и не забывает, просто использует другие факты из базы.
Динамические правила приветствия. В prompt_builder.py теперь анализируется conversation_meta.json. Если это первая реплика в сессии, можно поздороваться. Если активный диалог (меньше 5 минут с последней реплики), жёсткий запрет на "Привет!". Пауза 5-60 минут, продолжай естественно без приветствий. Долгое отсутствие (больше часа), можно сказать "с возвращением".
Оркестратор на маленькой LLM. Вынес извлечение фактов из try_save_memory в отдельный модуль orchestrator.py. Работает по двухуровневой схеме. Сначала регулярки (быстро, бесплатно, ловит 80% случаев типа "меня зовут...", "я люблю...", "а ещё..."). Если регулярки не сработали, тогда LLM с temperature: 0.0 для максимальной точности. Плюс пост-валидация: если в извлечённом факте нет ни одного слова из сообщения пользователя, отбрасываем как галлюцинацию.
Включили memory_v2 для casual-режима. Раньше в обычном small talk память вообще не подгружалась. Теперь подгружается, но лимитом в 2-3 факта + работает time_decay. Диалоги стали живее.
Портативная сборка: распаковал и запустил
Это была самая нудная часть, но самая важная. Хотел, чтобы тестерам не нужно было ставить Python, возиться с pip install, поднимать Ollama-сервер, гуглить какие CUDA-библиотеки нужны.
Что в архиве (1.2 ГБ без моделей):
install_llama_auto.bat это отдельная песня. Скрипт проверяет наличие CUDA через nvidia-smi, и в зависимости от результата ставит либо GPU-сборку llama-cpp-python, либо CPU-версию. Пользователю не нужно выбирать, всё происходит автоматически.
С python310._pth пришлось повозиться. В embedded Python по умолчанию закомментирована строка import site, из-за чего PYTHONPATH из bat-файла игнорируется. Раскомментировал, добавил ../site-packages, и всё заработало. Плюс в начало ui_main.py вставил sys.path-хак, который гарантированно добавляет корень проекта в пути поиска модулей, независимо от того как запущен скрипт.
Косметика и ребрендинг
Переименовал проект из Astra в Nova. Во всех файлах, UI, консоли, README. Astra была нормальным рабочим названием, но Nova лучше ложится на фиолетово-космическую тему интерфейса и звучит свежее.
Попутно починил кучу мелочей. Мемные диалоги подтверждения теперь тоже говорят "Nova" вместо "Astra". Аватар-заглушка с буквой "A" поменялся на "N". Кнопки run_ui.bat и install_deps.bat переименованы в run_nova.bat. Заголовок окна теперь ✦ Nova — Control Panel.
Что в планах на v0.3
Мастер первого запуска. Сейчас пользователь должен вручную править identity.txt и personality.txt. Хочется сделать диалоговый визард. "Как зовут твоего персонажа?", "Какой у него характер?", "Выбери голос".
OpenAI-совместимый API. Не все хотят возиться с .gguf файлами. Добавлю поддержку любого OpenAI-совместимого эндпоинта (OpenRouter, Together, локальные vLLM-серверы). Архитектура уже готова, нужен только новый backend-адаптер.
Векторный индекс для памяти. Текущая memory_v2 работает на текстовом скоринге (importance + time_decay + лексическое совпадение). Это работает до 200-300 фактов, потом начинает тормозить и терять релевантность. План: SQLite + эмбеддинги (sentence-transformers) для семантического поиска. Это задел на месяцы общения.
Что получилось в итоге
Nova v0.2 это уже не набор скриптов вокруг чат-бота, а самостоятельное приложение. Полностью локальное (никаких облаков, полная приватность). Портативное (1.1 ГБ + модели). С управлением VRAM (автовыгрузка по таймауту). С живой памятью (не спамит, не забывает, не повторяется). С эмоциональным ядром (настроение, отношения, стадии). С инициативой (пишет первой, если долго молчишь). С голосом (Faster-Whisper + Piper, опционально).
По-прежнему ищу тестеров
Особенно интересен фидбек от людей с разными GPU (от GTX 1060 до RTX 4090) и разными моделями (не только русскоязычные, хочу проверить как Nova работает с Llama 3, Mistral, Gemma).
Что нужно для теста:
Скачать архив (ссылка будет по запросу )
Запустить install_llama_auto.bat
Положить любую .gguf модель в папку models/
Запустить run_nova.bat
Поговорить , попробовать разные сценарии
Что очень поможет:
Скриншоты странного поведения
Логи из консоли (особенно [MEMORY ANALYZER RESULT] и [SESSION ANALYZER])
Описание сценария: спросил то-то, ожидал то-то, получил то-то
Спасибо что дочитали. Если тема локальных ИИ-компаньонов заходит, буду продолжать вести дневник разработки. В следующем посте скорее всего разберу эмоциональное ядро подробнее. Как считается relationship_depth, какие триггеры меняют настроение и почему Nova может обидеться.
Обновку на Гитхаб не залил пока что
Авито: Алгоритм - вымогатель
Выставил на Авито смартфон, но посколько отъезжал, то снял объяление. Когда вернулся, то решил его перевыставить, а с меня стали требовать деньги. Как оказалось, алгоритм учета бесплатных объявлений в Авито таким образом вымогает деньги.
Раньше на Авито сразу писали будет ли объявление выставленно платно или бесплатно, но года 3-4 назад эту подсказку убрали. Вероятно, какой-то Продакт-менеджер придумал как поднять метрику публикуемых объявлений, а то что пользователям вовсе не в кайф заполнять бесконечные анкеты чтобы в конце увидить "теперь плати", это уже не его зона ответственности. Счетчика бесплатный объявлений на Авито просто нет.
Но, можно спросить у чат-бота,
иногда он даже отвечает.
Так вот, много лет назад я действительно продавал Siemens только это был не А31, а настольный euroset. А31 у меня никогда не было и продавать я его никак не мог. Таким образом, алгоритм Авито увидел, что у меня когда-то был выставлен товар в категории телефоны и просто накрутил платное размещение.
Прикол еще в том, что никакого активного объявления в категории Телефоны у меня нет. В категории Архив - неактивных объявлений, я нашел старое объявление с Siemens и взамен него выставил свой смартфон.
Получается, что в Авито неработающий алгоритм, который учитывает бесплатное размещение объявлений, т.к. он учитывает даже старые и неопубликованные объявления, как активные.
История сервиса «Авито» началась в 2007 году в Москве. Компанию основали шведские предприниматели Йонас Нордландер и Филип Энгельберт, взяв за основу модель американского Craigslist. Naspers прекратил участие в операциях в России в мае 2022 года. Подразделение южноафриканского холдинга — Prosus — приняло решение выйти из бизнеса и начало поиск покупателя на российский сервис объявлений Avito. В октябре 2022 года владельцем «Авито» стала Kismet Capital Group Ивана Таврина.
Т.е. Авито это кандовая IT-ая компания, которая и понятия не имеет, что такое продуктовая разработка. Вероятно, этот алгоритм был написан еще на заре запуска, а затем на него просто забили и ответствернного нет. То что алгоритм уже устарел и работает со сбоями в Авито явно не в курсе.
Баголепов
Пересматриваю "Убойную силу". По сюжету криминальный кандитат в депутаты взорвал себя в машине. Но заряд по ошибке оказался слишком мощный и загремел кандидат в больничку
В приемном покое.
Медсестра: как фамилиия пострадавшего?
Помощник кандидата: Боголепов. Через О.
Медсестра смотрит на него и в глазах читается мысль: да знаю я, урод, проверочное слово- "БОГ"
Ну да, в 2000 году такого слова как БАГ в русском языке ещё не было.
БАГОЛЕПОВ.










