AiVeteran: как си вдигнах собствен AI на срв2 - и как за малко не го загубих
Четири локални модела, един счупен sqlite файл и един урок за това какво всъщност значи "халюцинация"
Срв2, известен вкъщи като Ветеранът, стоеше и въртеше инференс, когато го помоля. Работеше. Само че беше инструмент, който стои буден и чака заповед, не нещо, с което живееш.
Днес реших да го променя. Сложих му уеб интерфейс, собствено лого и собствено име: AiVeteran. Всеки модел вътре получи име според това какво прави, а не според това какъв тензор е.
Отдолу следва какво излезе. Включително частите, в които стана ясно, че локалният модел не е това, което очаквах.
Глутницата вътре
Един универсален модел на 8B параметъра върши всичко посредствено. Затова разделих задачите: код, разговор, снимки, и едно малко за дребните заявки, при които зареждането на 8B е чист разход на RAM и ток.
Имената са по роля, а не по хиперпараметри, защото след седмица никой не помни коя квантизация на кой файл беше. "Пусни Ковача" се помни. "Пусни qwen2.5-coder-7b-instruct-q4_K_M" не се помни.
Четири локални модела:
- Ковача (Qwen2.5-Coder 7B, 7.6B параметъра) - за код
- Хрътката (Llama3.1 8B) - бърза, разговорна, най-често използваната
- Окото (Qwen2.5-VL 7B, 8.3B) - гледа снимки
- qwen2.5:3b - малкото, за задачи, при които 8B е излишен разход
Плюс GPT-5.5 през API ключ, за когато локалните не стигат. А те не стигат по-често, отколкото ми се иска.
Първият истински тест: мостът на Витиня
Реших да питам нещо, което знам. Живея на четвърт час от него.
Първият отговор беше уверен и напълно измислен: мостът бил построен с дарения на чешко списание. Нито дума истина. Класическа халюцинация - моделът не знае, но не знае и че не знае, затова сглобява нещо правдоподобно от нищо.
Този разговор го изгубих по-късно, когато счупих базата. Остана обаче следващият опит, който е почти толкова показателен:
"На Тони Ангелчовски съответните данни са достъпни, но заради липса на информация в моята база данни не мога да подадем точния отговор."
Погледнете внимателно. Моделът не измисля мост, но пък измисля мен - излиза, че аз съм източникът, който трябва да питаш. И граматиката вече се разпада. Хубавото е, че поне признава, че не знае. Лошото е, че признанието е увито в глупост.
Оправянето: SearXNG плюс едно правило
Две неща свършиха работа.
Първо, собствен SearXNG - безплатен, self-hosted, без телеметрия към никого. Ветеранът вече търси в мрежата сам, без да минава през чужд API.
Второ, системен промпт с едно-единствено твърдо правило: ако не знаеш, кажи го директно. Не гадай, не сглобявай, не звучи уверено за нищо.
Резултатът с включен Web Search изглежда така:
Два реални източника от Wikipedia и честен отговор: "не може да се потвърди точната година".
Изглежда като победа. Не е.
Къде всъщност е проблемът
Погледнете кои са двата източника. bg.wikipedia.org/wiki/Витиня и bg.wikipedia.org/wiki/Бебреш_(виадукт). Тоест точните две страници. Отговорът е бил буквално в контекста на модела.
Виадуктът "Бебреш" на магистрала "Хемус" е завършен през 1985 година. Строен е в интервала 1977-1986 г. Проектиран от екип на "Мостстрой". 720 метра дължина, 12 отвора по 60 метра, най-високата опора около 120 метра. Дълго време най-високият мост на Балканите. Всичко това го пише на страницата, която моделът сам издърпа.
И въпреки това: "не може да се потвърди точната година".
RAG оправя достъпа до фактите. Не оправя четенето им.
Това е разликата между 8B и нещо сериозно. Малкият модел се научава да търси сравнително лесно - това е инфраструктура. Да прочете три абзаца и да извади от тях едно число е разсъждение, а разсъждението не се добавя с конфигурационен файл.
Системният промпт не направи модела по-умен. Направи го по-скромен. Това е печалба, но да не се лъжем каква точно.
Втората халюцинация, която търсенето не хвана
Питах Окото за Kali Linux. Ето какво излезе, с включено търсене и с "Retrieved 1 source" отгоре:
"Кали Линукс е операционна система, която се използва за нелегални цели като хакерство и анализ на мрежи."
Kali е дистрибуция за одит на сигурност, пентест и форензика. Използва се от хора, на които това им е професията, обикновено с подписан договор в чекмеджето. Wireshark е анализатор на пакети, не "инструмент за хакерство" - всеки мрежов администратор го пуска. Nmap също. А WPS изобщо не е инструмент, а протокол, при това известен най-вече с това колко е счупен.
Тук е важното: това не е сгрешен факт, а сгрешена рамка. И се случи при включено търсене. Тоест web search не е предпазител. Той дава на модела повече текст, не повече преценка. Ако моделът е решил, че темата мирише на нещо нелегално, ще я оцвети така независимо какво е прочел.
А кой си ти изобщо
Любимият ми момент от целия ден. Отварям нов чат, пиша "здравей":
"Здрасти! Аз съм Тони Анджелковски - АИ асистентът му."
Едновременно съм аз и не съм аз, и фамилията е сбъркана. След това се поправя само наполовина, а българският му тръгва на юг: "Що искате да знаете", "Ето некои интересни факти за тоновете". Кои тонове, за какви тонове става дума - така и не разбрах.
Llama 3.1 8B на български е приблизително това. Разбира те, отговаря бързо, и на всеки няколко изречения ти напомня, че българският за нея е трети език, научен от сравнително малко текст. За чат става. За текст, който ще излезе с моето име отдолу, не.
Кризата
По средата на настройката реших да преместя sqlite файла по SSH. Докато интерфейсът работеше.
Database disk image is malformed.
Собствена грешка, изцяло. Възстанових я така:
Code:
sqlite3 broken.db ".recover" | sqlite3 recovered.db
Всички настройки оцеляха. Изгубих няколко чата, между които и оригиналната халюцинация за чешкото списание. Общо взето евтино минах.
Урокът не е "правете backup". Всички го знаят. Урокът е, че го правиш не защото си параноик, а защото веднъж вече не си бил.
Какво остана накрая
- Собствен интерфейс на срв2, четири локални модела и GPT-5.5 за тежкото
- SearXNG, self-hosted, без чужд API за търсенето
- Системен промпт с правило "не знаеш - кажи го", включително на GPT-5.5, с директен тон и без корпоративни клишета
- Трезво очакване докъде стига 8B модел на български
- Backup преди всяко местене на база, без изключения
Глутницата е седем машини общо, и сега AiVeteran отгоре на всичко това.
Не защото е перфектен. Видяхте, че не е. А защото е мой, стои у дома, не праща нищо навън и знам всяко негово кътче - включително местата, на които лъже.
Ключови думи: AiVeteran, self-hosted AI, локални модели, Ollama, Llama 3.1, Qwen2.5, Qwen2.5-Coder, Qwen2.5-VL, SearXNG, RAG, халюцинации, системен промпт, sqlite recover, Debian 12, домашен сървър, виадукт Бебреш
Източници: bg.wikipedia.org - Бебреш (виадукт); bg.wikipedia.org - Витиня; socbg.com - строителство на виадукта 1977-1986; собствени тестове на срв2, 18.08.2026
toni@dtgarage:~$ whoami
Тони Ангелчовски | Ексклузивно за DTGaraGe
toni@dtgarage:~$ cat LICENSE
Копирането и препубликуването без разрешение не е позволено.
toni@dtgarage:~$ ./support.sh
Подкрепи DTGaraGe и независимото техническо съдържание
toni@dtgarage:~$ █
Тони Ангелчовски | Ексклузивно за DTGaraGe
toni@dtgarage:~$ cat LICENSE
toni@dtgarage:~$ ./support.sh
toni@dtgarage:~$ █
Last edited: