🏗️ Case Study · Budownictwo

AI, który czyta przetargi za Ciebie — wdrożenie w firmie budowlanej

Firma budowlana startująca w przetargach publicznych mierzyła się z brutalną matematyką: każda oferta to 8-20 godzin pracy działu ofertowego, a wygrywają może 1-2 z 10. Zbudowaliśmy system Claude Code + własny model trenowany na dokumentacji przetargowej, który automatycznie analizuje ogłoszenia i wstępnie wypełnia oferty. Pokazujemy jak.

📅 Październik 2025
⏱️ 11 min czytania
🏷️ Budownictwo · przetargi
⚙️ Claude Code · własny LLM
SIWZ
Auto-analiza
dokumentacji
Fine
Tuned model
na PL przetargach
Auto
Wstępne
wypełnianie ofert
⏱️
Drastyczna oszczędność
czasu zespołu

Sytuacja: dobra firma, słaba ekonomia ofertowania

Firma — średniej wielkości generalny wykonawca działający w segmencie budownictwa kubaturowego i infrastrukturalnego — chciała rozszerzyć działalność o większy udział w rynku zamówień publicznych. Strategia trafna: zamówienia publiczne to przewidywalny przepływ projektów, klarowne procedury płatności, mniejsza zmienność niż prywatny rynek deweloperski.

Problem: matematyka ofertowania w przetargach publicznych jest bezlitosna dla małych i średnich firm.

Wniosek finansowy: żeby wygrać 1 kontrakt, trzeba zainwestować 80-200 godzin pracy w 5-10 ofert. Jeśli kontrakt jest wart 500k-2M zł, to się opłaca. Jeśli mniejszy — biznes zaczyna zjadać własny ogon. A firmy, które chcą rosnąć, muszą startować w wielu przetargach jednocześnie, co rozciąga zespół do granic.

⚠️

To nie problem motywacji zespołu, to problem skali

Klient miał świetny dział ofertowania. Po prostu fizycznie nie da się wycisnąć więcej godzin z trzyosobowej ekipy. Bez automatyzacji albo rezygnujesz z części przetargów (= ucieczka okazji), albo skalujesz zespół (= drogie i powolne).

Wizja systemu

Zaprojektowaliśmy system w trzech warstwach, z których każda przejmuje konkretną część pracy zespołu:

1
FILTROWANIE — Co warto czytać?
5000 ogłoszeń → 50 relewantnych
2
ANALIZA — Co zawiera ten SIWZ?
300 stron → struktura wymagań
3
WYPEŁNIANIE — Wstępna oferta
8h pracy → 30 min weryfikacji

Każda z tych warstw to oddzielne wyzwanie techniczne. Pójdziemy po kolei.

Warstwa 1: Filtrowanie ogłoszeń

Na platformach ezamowienia.gov.pl i Biuletynie Zamówień Publicznych ukazuje się dziennie kilkaset nowych ogłoszeń. W skali tygodnia to kilka tysięcy postępowań, z których dla konkretnej firmy interesujące jest może 10-30. Manualne przeglądanie wszystkich nie ma sensu.

Co zbudowaliśmy

Crawler napisany w PHP (zgodny ze stackiem klienta), który codziennie o 6:00 rano:

  1. Pobiera nowe ogłoszenia z głównych platform przetargowych (ezamowienia.gov.pl, BZP, platforma e-Zamówienia, regionalne BIP-y)
  2. Pobiera załączniki (SIWZ, OPZ, formularze) — często w PDF, czasem ZIP
  3. Przepuszcza ogłoszenie przez Claude'a z konkretnym promptem profilującym (CPV firmy, typowe wartości, geografia działania)
  4. Każdemu ogłoszeniu przypisuje score 0-100 i krótkie uzasadnienie
  5. Top 20 ogłoszeń trafia do dashboardu zespołu ofertowego rano

Klucz tu nie leży w technologii (crawlowanie i klasyfikacja to dziś standard), tylko w profilu firmy podawanym Claude'owi. Spędziliśmy 2 dni z zarządem klienta na precyzyjnym opisaniu:

Wszystko to trafia do profilu, którym Claude porównuje każde ogłoszenie. System eliminuje ~98% ogłoszeń automatycznie, zostawiając zespołowi do oceny ludzkiej już tylko realnie interesujące postępowania.

💡

Pierwsze zaskoczenie klienta

System zaczął wskazywać też przetargi, których wcześniej zespół nie zauważał — bo były publikowane na regionalnych BIP-ach, nie na głównej platformie. Z każdego z nich powstała szansa biznesowa, której wcześniej fizycznie nie dało się wyłapać manualnie.

Warstwa 2: Analiza SIWZ — ekstrakcja wymagań

SIWZ to dokument, który ma swoją strukturę logiczną, ale niekoniecznie konsekwentnie stosowaną. Zamawiający różnie układają informacje, używają różnych nomenklatur, czasem kluczowe wymagania ukryte są w pkt 9.3.4.b.II załącznika nr 4. Ręczne wyłuskanie tego trwa godziny.

Dlaczego nie wystarczy "wrzuć PDF do ChatGPT"

To pierwsza rzecz, którą próbowaliśmy. Wynik: średnio sensowny. Claude (i GPT-4) świetnie streszcza dokumenty, ale gdy zadasz mu szczegółowe pytanie typu "jakie są wymagania dot. doświadczenia kierownika budowy" — czasami trafia, czasami pomija ważne niuanse zakopane w odległym fragmencie dokumentu, czasami "halucynuje" wymagania, których faktycznie tam nie ma.

W przetargu publicznym "prawie dobra odpowiedź" oznacza odrzucenie oferty. Musieliśmy zbudować coś dokładniejszego.

Rozwiązanie: hybryda Claude + własny fine-tuned model

Stack warstwy analizy SIWZ

Zebraliśmy dataset 4000+ historycznych SIWZ-ów z polskich przetargów budowlanych (publicznie dostępne na archiwach platform). Każdy z nich zaanotowaliśmy semi-automatycznie:

Na tym datasecie zrobiliśmy fine-tuning Llamy 3.1 8B (LoRA, 3 epoki, treningowo na własnej infrastrukturze — RTX 5090 wystarcza w zupełności). Powstał model wyspecjalizowany w jednym konkretnym zadaniu: ekstrakcja strukturalnych informacji z polskich dokumentów przetargowych.

Jak to działa razem

Claude Code orkiestruje cały proces — wie kiedy użyć którego narzędzia:

Workflow analizy SIWZ:

1. OCR + parsing PDF-a (zachowanie tabel)
2. Podział na sekcje logiczne
3. Każdy fragment → fine-tuned model
   → ekstrakcja strukturalnych pól
   (JSON: wymagania, terminy, kryteria, ...)
4. Konsolidacja pól → walidacja spójności
5. Claude robi finalną kontrolę jakości
   → sprawdza czy nic nie zostało pominięte
   → flaguje wątpliwe interpretacje do weryfikacji
6. Wynik: ustrukturyzowany "profil przetargu"
   gotowy do porównania z profilem firmy

Dlaczego nie sam Claude, dlaczego nie sam własny model:

Warstwa 3: Wstępne wypełnianie ofert

Trzecia warstwa to ta, która faktycznie oszczędza najwięcej czasu: system na podstawie wyekstrahowanych wymagań i istniejącej bazy danych firmy wstępnie wypełnia ofertę.

Co znajduje się w bazie danych firmy

Jak działa wypełnianie

Dla każdego przetargu zakwalifikowanego do dalszej obróbki system robi:

  1. Mapowanie wymagań → zasoby firmy. Wymaganie: "kierownik budowy z uprawnieniami konstrukcyjno-budowlanymi bez ograniczeń, doświadczenie min. 5 lat, w tym 1 projekt o wartości min. 1 mln zł". System sprawdza w bazie: który kierownik to spełnia? Czy mamy referencje na taki projekt? Generuje konkretną propozycję wraz z numerem uprawnień i numerem referencji.
  2. Identyfikacja luk. Czasem wymagania są takie, że firma ich nie spełnia. System to flaguje wcześnie — "nie startujemy, bo brak doświadczenia z X" lub "musimy zorganizować konsorcjum z firmą posiadającą uprawnienia Y".
  3. Generowanie tekstów ofertowych. Opis sposobu realizacji, opis doświadczenia, deklaracje formalne — wszystko wstępnie napisane na podstawie wzorów z poprzednich ofert i konkretnych danych z bazy firmy.
  4. Lista dokumentów do podpisu/skanowania. System wskazuje dokładnie które oryginalne dokumenty z bazy firmy (referencje, uprawnienia, zaświadczenia) trzeba załączyć — z linkiem do skanu.

Co zostaje człowiekowi

Specjalista ds. zamówień otwiera "wstępną ofertę" wygenerowaną przez system i:

Z 8-20 godzin pracy → 1-3 godzin weryfikacji i decyzji wartościowych. Reszta to było zbieranie informacji i przepisywanie — czyli dokładnie to, co AI robi szybko i niezawodnie.

Najważniejszy efekt: firma startuje w więcej przetargów

Nie chodzi tylko o oszczędność czasu na jednej ofercie. Chodzi o to, że firma może startować w 30-50 przetargach miesięcznie zamiast w 5-10. To 5x większa powierzchnia ekspozycji rynkowej — przy tym samym zespole. Wzrost przychodów wynika z większej liczby wygranych w absolutnych liczbach, mimo tego samego win rate.

Architektura całego systemu

Pełen stack wdrożenia

Model jest trenowany i hostowany lokalnie. Żaden fragment SIWZ ani dokumentu firmy nie wychodzi poza serwer klienta. Claude Code jako warstwa orkiestracji jest jedynym komponentem zewnętrznym — i jemu też podawane są tylko ustrukturyzowane podsumowania, nie surowe dokumenty.

Czego się nauczyliśmy

Lekcja 1: Polskie dokumenty wymagają polskich modeli

Ogólne LLM-y (Claude, GPT) świetnie rozumieją polski w warstwie konwersacji. Ale gdy mówimy o wyciąganiu strukturalnych danych z dokumentów prawno-technicznych, terminologia branżowa (budowlana, zamówień publicznych) sprawia, że model wyspecjalizowany w polskich SIWZ-ach jest znacząco dokładniejszy niż ogólny model. Fine-tuning na własnych danych branżowych to nie luksus, to konieczność dla niektórych zastosowań.

Lekcja 2: Hybryda > monolit

Najlepsze wyniki dostajemy łącząc różne komponenty AI dla różnych zadań. Claude jako "mózg" orkiestrujący proces. Własny model jako precyzyjny ekstraktor. RAG dla wyszukiwania w bazie firmy. Klasyczna logika biznesowa (PHP) dla deterministycznych reguł (np. "jeśli wymaga się ubezpieczenia 5M zł, a my mamy 3M zł, nie startujemy"). Nie próbuj zrobić wszystkiego jednym modelem.

Lekcja 3: Procesy zewnętrzne (przetargi) zmieniają się rzadko — to ogromny plus

Struktura polskich SIWZ-ów, wymagań KSC dotyczących informatyzacji, kategorii CPV — to wszystko zmienia się raz na lata. Model trenowany dziś będzie działał świetnie za 3 lata. To bardzo komfortowy biznesowo obszar do automatyzacji AI — w przeciwieństwie np. do reagowania na trendy konsumenckie, gdzie model się starzeje w miesiącach.

Lekcja 4: Pierwszy przetarg wygrany dzięki systemowi to moment "wow"

Klient pamięta dokładnie pierwszą wygraną, w której system zidentyfikował ogłoszenie z regionalnego BIP-u, wstępnie wypełnił ofertę, a specjalista po godzinie weryfikacji złożył. Wygrali. To był moment, w którym wszyscy w firmie zrozumieli co właśnie się stało.

Co dalej

Najbliższe rozwinięcia, nad którymi pracujemy z klientem:

Startujesz w przetargach publicznych?

Jeśli Twoja firma uczestniczy w postępowaniach przetargowych — w budownictwie, IT, usługach, dostawach — możemy zbudować podobny system. Pierwsza konsultacja 60 minut, bezpłatna, bez zobowiązań.

Umów konsultację →