Basal na przetargach: 2452 ogłoszenia za 0,72 dolara
Wzięliśmy jeden tydzień Biuletynu Zamówień Publicznych, od 21 do 27 września: 2452 ogłoszenia o zamówieniu. Przepuściliśmy je przez trzy modele basal‑1.5 (mini, 4.5B i max), Bielika 11B jako zwykły model językowy i filtr słów kluczowych. Basal częściej wskazywał właściwą branżę i na pojedyncze zapytanie odpowiadał kilka razy szybciej. Rzadziej niż Bielik wyłapywał jednak ogłoszenia dla firm IT, a progi pewności z pliku kalibracji trzeba ustawić na nowo.

Basala sprawdzamy w roli radaru przetargów, czyli zadania, do którego zwykle służy filtr słów kluczowych: firma informatyczna albo budowlana chce codziennie dostawać tylko przetargi, w których ma szansę, i nie przegapić żadnego ważnego.
Test: tydzień ogłoszeń i klucz z kodów CPV
Model dostaje tytuł i opis zamówienia, a z tekstu usuwamy kody CPV. Te kody to urzędowa klasyfikacja przedmiotu zamówienia, którą nadaje sam zamawiający, i z nich powstaje klucz odpowiedzi. Główny kod wyznacza jedną z dziesięciu branż. Ogłoszenie jest dla firmy budowlanej, jeśli którykolwiek jego kod zaczyna się od 45, a dla informatycznej, jeśli od 302, 48 albo 72. Niczego nie oznaczaliśmy ręcznie, a pytania i plik testowy zamroziliśmy przed pierwszym uruchomieniem modeli.
Każde ogłoszenie to jedno zapytanie z dwoma pytaniami do tego samego tekstu. Oto jedno z nich w układzie przykładów ze strony Basala.
- Przykładowe wejście: ogłoszenie 2026/BZP 00453634/01 z 24 września, dostawa macierzy dyskowych, przełączników Fibre Channel i routera.
- Pytania do modelu: „Do której branży należy to zamówienie?” (typ
choice) i „Dla jakich firm jest to zamówienie?” (typmulti). - Zdefiniowane odpowiedzi: dziesięć branż i dwa rodzaje firm, każda opcja z opisem. Klucze są ukryte (
option_keys: hide), więc model czyta tylko polskie opisy. - Co robi aplikacja: ogłoszenie z pewnością powyżej progu od razu trafia do skrzynki właściwej firmy, resztę przegląda człowiek.
JSON
{
"state": "Nazwa zamówienia: Jednorazowa dostawa infrastruktury sieciowej i pamięci masowej z podziałem na 2 części\nOpis: Część 1: Dostawa macierzy dyskowych i przełączników Fibre Channel wraz z licencjami i wdrożeniem\nCzęść 2: Dostawa przełącznika sieciowego / routera",
"questions": {
"industry": {
"type": "choice",
"instructions": "Do której branży należy to zamówienie?",
"criteria": {
"construction": "Roboty budowlane: budowa, remont, przebudowa obiektów, dróg, sieci i instalacji",
"engineering": "Projektowanie i usługi inżynieryjne: dokumentacja projektowa, nadzór inwestorski, geodezja",
"medical": "Medycyna: sprzęt i wyroby medyczne, leki, usługi zdrowotne",
"vehicles": "Pojazdy i transport: samochody, autobusy, części, usługi przewozowe",
"it": "IT: sprzęt komputerowy, oprogramowanie, usługi informatyczne",
"food": "Żywność i gastronomia: artykuły spożywcze, catering, usługi hotelowe i restauracyjne",
"energy": "Paliwa i energia: paliwa, energia elektryczna, gaz, opał",
"waste": "Odpady, sprzątanie i zieleń: odbiór odpadów, utrzymanie czystości, tereny zielone",
"furniture": "Meble i wyposażenie: meble, wyposażenie wnętrz, sprzęt gospodarstwa domowego",
"other": "Inne: zamówienie nie pasuje do żadnej z pozostałych grup"
},
"option_keys": "hide"
},
"relevance": {
"type": "multi",
"instructions": "Dla jakich firm jest to zamówienie?",
"criteria": {
"it": "Firma informatyczna: oprogramowanie, usługi IT, sprzęt komputerowy",
"construction": "Firma budowlana: roboty budowlane, remonty, instalacje budowlane"
},
"option_keys": "hide",
"threshold": 0.5,
"min": 0,
"max": 2
}
}
}POST /v1/systemone. W tej postaci wysłaliśmy je do serwera basal v1.5.0.JSON
{
"answers": {
"industry": {
"type": "choice",
"choice": "it",
"confidence": 0.991
},
"relevance": {
"type": "multi",
"selected": ["it"],
"probabilities": {
"it": 0.823,
"construction": 0.0005
}
}
}
}model i usage, pełnego rozkładu branż oraz threshold i set_confidence przy multi. Pole selected odtworzyliśmy z prawdopodobieństw według reguły silnika, pozostałe wartości pochodzą z naszego pomiaru, zaokrąglone.Max wskazał IT z pewnością 0,991, powyżej progu z pliku kalibracji (0,947), więc aplikacja przekazałaby ogłoszenie dalej bez człowieka. Mini, 4.5B i Bielik też wskazały IT. Filtr słów kluczowych odłożył je do „innych”, bo w tytule nie ma żadnego słowa z jego listy.
Branża: każdy Basal przed Bielikiem
Wszystkie trzy modele Basala wyprzedziły Bielika 11B, z którego dostrojono maxa, nawet mini z 3,2 GB do pobrania. Przedziały ufności 95% się nie pokrywają: od 77,8 do 80,9% dla maxa, od 71,5 do 75,0% dla Bielika.
Część pomyłek to kwestia interpretacji: wiele ogłoszeń ma kody z kilku branż, a pytanie pozwala wybrać jedną. Jeśli za trafienie uznać dowolną branżę z kodów ogłoszenia, max ma 84,9%, a Bielik 78,8%.
Czas i koszt
Każdy model dostał najpierw 200 ogłoszeń po jednym, co mierzy czas odpowiedzi, a potem cały tydzień po 16 zapytań naraz, co mierzy przepustowość. Bielik musi wygenerować odpowiedź w JSON‑ie, a Basal tylko odczytuje prawdopodobieństwa opcji, dlatego na pojedyncze zapytanie jest kilka razy szybszy.
Przy 16 zapytaniach naraz Bielik odrabia straty: vLLM łączy jego zapytania w paczki i przerabia 9,5 ogłoszenia na sekundę, prawie dwa razy więcej niż max (5,1) i prawie tyle co 4.5B (10,4). Mini: 28,5. Przy stawce 0,583 USD za godzinę tysiąc ogłoszeń kosztuje od 0,6 centa na mini do 3,1 centa na maxie, więc tydzień BZP to mniej niż osiem centów na każdym modelu. Cały pomiar, z instalacją, pobraniem czterech modeli i kompilacją, kosztował nas 0,72 USD.
Dla kogo jest ogłoszenie: budownictwo łatwe, IT trudne
Od drugiego pytania zależy, co trafi do skrzynki firmy. Ogłoszeń z kodem budowlanym było w tym tygodniu 932, z kodem IT tylko 128.
- Budownictwo. Max znalazł 94% takich ogłoszeń, a 96% jego wskazań było trafnych. Bielik znalazł 98,5%, ale trafnych było tylko 82% wskazań, czyli 206 zbędnych ogłoszeń w tygodniu. Filtr słów kluczowych: 80% znalezionych i 77% trafnych wskazań.
- IT. Bielik znalazł 88% ogłoszeń, ale tylko 54% jego wskazań było trafnych. Mini znalazł 59% przy 82% trafnych wskazań, max 50% przy 81%, filtr słów kluczowych 62% przy 79%. Bielik dostał pytanie „Czy to zamówienie może zrealizować firma informatyczna…?”, a Basal szablon silnika „Czy dotyczy: …?”.
- Model 4.5B w pytaniu o IT prawie zawsze odpowiadał „nie” i znalazł 8 ogłoszeń ze 128, choć w pytaniu o branżę wskazał IT dla 80% z nich.
Przy rzadkiej etykiecie samo pytanie tak albo nie z progiem 0,5 nie wystarcza. Gdy sygnałem IT była odpowiedź na pytanie o branżę, każdy z trzech modeli Basala znajdował od 78 do 80% ogłoszeń IT przy 66 do 73% trafnych wskazań. Można też dobrać próg osobno dla każdej etykiety, na własnych danych.
Próg pewności trzeba dopasować do swoich danych
Każdy model Basala ma plik kalibracji z progiem pewności dobranym na danych autora tak, by wśród decyzji powyżej progu było najwyżej 1% błędów. Na naszym pytaniu o branżę te same progi przyjęły 31% ogłoszeń przy 3,3% błędów dla 4.5B, 58% przy 5,0% dla maxa i 44% przy 8,1% dla mini. Nawet jeśli za trafienie uznać każdą branżę z kodów ogłoszenia, błędów jest od 2,1 do 5,7%. README silnika mówi to wprost: na własnych danych próg trzeba dopasować na kilkuset oznaczonych zapytaniach.
Radar przetargów na Basalu, krok po kroku
- 01Weź kilkaset ogłoszeń spoza tygodnia, na którym będziesz testować; klucz odpowiedzi dadzą kody CPV. Na nich dopasuj próg pewności, a wszystko poniżej progu kieruj do człowieka.
- 02Zacznij od basal‑1.5‑mini: 29 ms na ogłoszenie i w branży lepszy od Bielika 11B. Max dodaje 3,8 punktu, ale odpowiada prawie pięć razy wolniej.
- 03Kieruj ogłoszenia pytaniem
choicez opisanymi opcjami. Etykietę zmultisprawdź na swoich danych, zanim zaczniesz jej ufać.
Źródła
- 01Biuletyn Zamówień Publicznych, ogłoszenia o zamówieniunotices opublikowano 21 września 2026 to 27 września 2026
- 02Rozporządzenie Komisji (WE) nr 213/2008 w sprawie Wspólnego Słownika Zamówień (CPV)opublikowano 15 marca 2008
- 03basal.si5.pl, Zastosowania: 18 scenariuszy z zapytaniem i odpowiedzią JSONpage stan na 6 października 2026
- 04rkinas/basal, silnik v1.5.0 i READMEtag of 4 października 2026
- 05Hugging Face, Remek/basal‑1.5‑miniwersja z 3 października 2026
- 06Hugging Face, Remek/basal‑1.5‑4.5Bwersja z 3 października 2026
- 07Hugging Face, Remek/basal‑1.5‑maxwersja z 3 października 2026
- 08Hugging Face, speakleash/Bielik‑PL‑11B‑v3.0‑Instructwersja z 14 kwietnia 2026
- 09vLLM v0.30.0, informacja o wydaniuopublikowano 22 września 2026
