Prawie każda firma, z którą rozmawiam, ma już politykę korzystania z AI. I prawie żadna nie ma narzędzia, które by ją egzekwowało. Polityka istnieje jako dokument: zakazy umowne, podpisy, segregator. Tymczasem programiści pracują z agentami kodującymi, analitycy wklejają arkusze do modeli językowych, a handlowcy „tylko poprawiają maila”. Według raportu LayerX z końca 2025 roku dane do narzędzi generatywnej AI wkleja około 18% pracowników, a w blisko 40% wgrywanych plików są dane osobowe lub dane kart płatniczych.
Klasyczny DLP tego ruchu nie widzi w użyteczny sposób: zapytanie do API modelu to POST po HTTPS, nieodróżnialny od tysiąca innych. A dopisanie do łańcucha „inspekcji w chmurze” zawiera sprzeczność, którą wystarczy powiedzieć na głos: żeby ustalić, czy dane wolno było wysłać do jednego zewnętrznego dostawcy, wysyłamy je do drugiego. Dochodzi kolejny podmiot przetwarzający, kolejna umowa powierzenia i kolejne miejsce, w którym treść żyje poza firmą.
Zostaje jedno miejsce, gdzie kontrola ma sens: urządzenie końcowe, zanim cokolwiek opuści maszynę. I tu zwykle pada argument, który tę drogę zamykał: przecież to oznacza model uruchamiany na każdym promptcie, na laptopie, na zawsze. Kto to udźwignie?
Odpowiedź od dwóch lat stoi na biurkach i przez większość dnia nic nie robi.
Najtańszy pracownik inferencji już siedzi w laptopie
Współczesne „AI PC” mają obok CPU i zintegrowanego GPU trzeci układ: NPU, akcelerator sieci neuronowych. W praktyce biurowej jego użycie jest incydentalne – rozmycie tła na wideokonferencji, czasem poprawa obrazu. Resztę dnia najnowocześniejszy kawałek krzemu w komputerze spędza bezczynnie.
Postanowiliśmy zmierzyć, czy ten bezczynny układ udźwignie stałą pracę strażnika prywatności. Nie na deklaracjach producenta, tylko na własnym obciążeniu. Do pomiaru posłużył nasz otwartoźródłowy proof-of-concept Sentin-NPU (Apache 2.0), uruchomiony na maszynie, która ma wszystkie trzy układy naraz: Intel Core Ultra 7 258V, czyli Lunar Lake, pod Linuksem. To architektura, w której NPU, zintegrowane GPU i CPU siedzą na jednym kawałku krzemu, a pamięć wjeżdża do tego samego pakietu – dla pomiaru to układ idealny, bo wszystkie trzy urządzenia dzielą jedną maszynę, jeden budżet cieplny i jeden zestaw sterowników.
Silnikiem inferencji jest OpenVINO i to wybór z konkretnego powodu: ten sam skompilowany model ładuje się na CPU, GPU albo NPU zmianą jednej nazwy urządzenia. Porównanie jest przez to uczciwe (jeden model, jedna maszyna, zmienia się tylko układ), a wdrożenie dostaje polisę: tam, gdzie NPU nie ma albo odmówi współpracy, ta sama paczka działa na CPU. Model NER skwantyzowany do INT8, energia mierzona licznikami RAPL, spoczynek odjęty, mediana z pięciu powtórzeń po odrzuconej rozgrzewce. Pełna metodyka i wszystkie tabele: docs/benchmarks.md.
Energia na jedną inferencję, trzy poziomy obciążenia:
| Urządzenie | saturacja | 10 żądań/s | 1 żądanie/s |
|---|---|---|---|
| NPU (AI Boost) | 46,81 mJ | 78,21 mJ | poniżej progu szumu |
| iGPU (Arc 140V) | 49,51 mJ | 160,08 mJ | 815,77 mJ |
| CPU | 554,60 mJ | 724,14 mJ | 1 267,08 mJ |
Trzy rzeczy z tej tabeli, w kolejności ważności.
Kolumna saturacji kłamie o tym produkcie. Przy pełnym obciążeniu NPU i iGPU zbiegają się do około 5% – kto zmierzy tylko tak (a tak mierzy się domyślnie), uzna oba akceleratory za wymienne. Bramka prywatności nigdy nie pracuje w saturacji; pracuje w tle, zrywami. Przy dziesięciu żądaniach na sekundę, czyli obciążeniu, jakie realnie widzi bramka przed kilkoma agentami, NPU jest już dwukrotnie tańsze od iGPU i dziewięciokrotnie od CPU. Wniosek uogólnia się poza ten projekt: inferencję działającą w tle trzeba mierzyć przy własnym profilu obciążenia, inaczej wybierze się złe urządzenie z dobrych powodów.
Przy tempie pracy jednej osoby strażnik znika. Przy jednym żądaniu na sekundę własny pobór NPU (0,17 W) schodzi poniżej progu szumu pomiaru całej platformy (0,35 W) – nasz harness uczciwie oznacza ten wiersz jako „poniżej szumu” zamiast drukować liczbę udającą pomiar. W praktyce: nawet przy podtrzymanych 10 żądaniach na sekundę NPU dokłada 0,78 W ponad spoczynek, mniej niż podświetlenie ekranu. Bateria tego nie widzi.
NPU nie wygrywa prędkością i trzeba to powiedzieć wprost. iGPU jest szybsze: 2,7 ms wobec 5,9 ms na inferencję (CPU: 23,6 ms). Cały potok inspekcji dokłada na NPU +3,85 ms p95 – niezauważalne na tle sekund, które i tak zabiera odpowiedź modelu. NPU wybiera się nie dla prędkości, tylko dlatego, że wykonuje tę samą pracę za ułamek energii i zostawia GPU użytkownikowi. Jakość też niczego nie oddaje: na polskim zbiorze testowym NPU wykrywa te same encje co CPU (F1 88,00 wobec 87,75, różnica 1-3 encji na ~750). Jedyny realny koszt to pierwsza kompilacja modelu (około 2 s), ale sterownik buforuje wynik i każdy kolejny start to kilkadziesiąt milisekund.
Tyle w temacie „kto to udźwignie”. Udźwignie układ, który dziś nie robi nic, kosztem energetycznym na granicy mierzalności.

Polityka AI jako monitoring lokalny
Skoro budżet się zgadza, zostaje architektura. Sentin-NPU działa jako lokalne reverse proxy mówiące API dostawców: agentowi czy narzędziu zmienia się base_url na lokalny port i nic więcej.
agent → 127.0.0.1:4141/anthropic/v1/messages → inspekcja → api.anthropic.com
↓
zdarzenie SIEM (same metadane)
Detekcja jest dwuwarstwowa i to rozdzielenie niesie całą filozofię narzędzia:
Warstwa deterministyczna ma prawo blokować. PESEL ma wbudowaną datę i cyfrę kontrolną, IBAN przechodzi mod-97, karta płatnicza ma sumę Luhna i prefiks wydawcy. Takie trafienie jest weryfikowalne arytmetycznie, fałszywy alarm praktycznie niemożliwy, więc twarde „nie” jest uczciwe. Zmierzona przepustowość tej warstwy: setki MB/s na zwykłej prozie, zero fałszywych trafień na 1 MB tekstu bez danych.
Warstwa NER tylko doradza albo maskuje. Nazwiska, adresy, organizacje – to, czego żadna suma kontrolna nie udowodni – może zostać podmienione na [OSOBA] czy [PESEL] albo zgłoszone użytkownikowi. Nigdy zablokowane. Ten podział jest wymuszony w systemie typów, nie w konfiguracji: detektor bez dowodu arytmetycznego nie ma technicznej możliwości wydania werdyktu „block”, nawet jeśli operator się pomyli w configu.
Dlaczego to takie ważne? Bo narzędzie kontrolne, które zatrzymuje pracę fałszywymi alarmami, kończy wyłączone – a narzędzie, które czyta i przechowuje korespondencję pracowników, kończy u prawnika. Stąd druga zasada: audyt bez treści. Zdarzenie do SIEM niesie typ danych, host docelowy, decyzję, skrót całego payloadu i urządzenie, które wykonało inferencję. Treści nie ma, bo w schemacie zdarzenia nie istnieje pole, które mogłoby ją pomieścić – łatwo to sprawdzić w docs/events.md. Monitoring jest przez to proporcjonalny i minimalizujący z konstrukcji, a nie z deklaracji.
I to jest moment, w którym polityka AI przestaje być papierem. Użytkownik dostaje ochronę przed nieświadomym wysłaniem – pracuje dalej, tylko wrażliwe fragmenty wychodzą zamaskowane. SOC dostaje telemetrię: kto próbował, jaki typ danych, dokąd, jaka decyzja – czyli dokładnie ten materiał, którego brakuje, gdy trzeba szybko ocenić, czy zdarzenie jest incydentem i co właściwie wyszło z sieci. A organizacja dostaje dowód, że polityka jest wykonywana technicznie, nie tylko podpisywana. Zakazy z segregatora zamieniają się w mechanizm kontrolny, który da się pokazać audytorowi.
Czego nie obiecujemy
Uczciwość wymaga listy ograniczeń. To proof-of-concept, nie produkt. Model NER jest pisany pod polski (po angielsku wyraźnie słabszy; warstwa sum kontrolnych działa w każdym języku). Maskowane są żądania, odpowiedzi są audytowane, ale nie przepisywane. Ochrona sekretów firmowych – nazw projektów, wiedzy produktowej – to mapa drogowa, dziś strażnik zna się na identyfikatorach i tożsamościach. Maskowanie potrafi obniżyć jakość odpowiedzi modelu; ten kompromis zostawiamy świadomie użytkownikowi. Wszystkie liczby pochodzą z jednej maszyny i jednej wersji sterowników.
Sprawdź na własnym sprzęcie
Wszystko powyżej wychodzi z jednego polecenia na paczce wydania – bez Rusta, Pythona i instalowania OpenVINO:
bash
./run.sh --power
Skrypt skompiluje i uruchomi prawdziwy model na każdym urządzeniu, które maszyna udostępnia, zmierzy energię i zbierze wyniki do jednego archiwum. Kod, pomiary i metodyka: github.com/GrzegorzOle/Sentin-NPU.