AI ERP SQL Server

Czy warto wdrożyć lokalne AI w małej firmie?
Koszty, sprzęt i realne zastosowania na przykładzie ERP

· 21 min czytania · PRO-Admin

AI w małej i średniej firmie bardzo szybko przestaje być eksperymentem. Sprzedaż, księgowość i zarząd zaczynają zadawać bardzo konkretne pytania.

SPRZEDAŻ

"Jaki był przychód w poprzednim miesiącu?"

KSIĘGOWOŚĆ

"Którzy kontrahenci mają największe przeterminowane należności?"

ZARZĄD

"Jak sprzedaż wygląda w porównaniu z zeszłym rokiem?"

I wtedy pojawia się pomysł:

Postawmy lokalny model AI, podłączmy go do ERP i niech odpowiada.

Brzmi prosto. W rzeczywistości model językowy jest prawdopodobnie najłatwiejszą częścią całego projektu. O tym, gdzie AI realnie pomaga w codziennej pracy IT, piszemy w artykule AI w administracji IT: 7 obszarów, które warto automatyzować. Tutaj skupiamy się na czymś węższym: asystencie, który odpowiada na pytania o dane z ERP. Znacznie trudniejsze niż uruchomienie modelu jest ustalenie:

Co w firmie oznacza "przychód"?
Które dokumenty należy uwzględnić?
Jak traktować korekty?
Jak rozliczać różne waluty?
Kto może zobaczyć należności klientów?
Z którego systemu pochodzi liczba?
Jak sprawdzić, czy odpowiedź jest poprawna?

Można kupić bardzo mocną kartę GPU i nadal otrzymywać błędne odpowiedzi. Bo większy model nie naprawi złej definicji danych.

Najpierw dane i pytania. Dopiero później GPU

Najczęstszy błąd wygląda tak:

ODWRÓCONA KOLEJNOŚĆ

kupujemy GPU

↓

stawiamy LLM

↓

podłączamy bazę ERP

↓

pytamy "jaki był przychód?"

LEPSZY PROCES

pytania biznesowe

↓

definicje metryk

↓

źródła danych

↓

kontrolowane zapytania

↓

test względem ERP

↓

dopiero LLM

W pierwszym wariancie dopiero po uruchomieniu wszystkiego pojawia się dyskusja:

Ale brutto czy netto? Z korektami? Według daty sprzedaży czy wystawienia? Faktury zaliczkowe też? A dokumenty anulowane?

Model językowy powinien pojawić się dopiero wtedy, kiedy firma potrafi już policzyć poprawny wynik bez niego.

Kiedy lokalne AI ma sens?

Nie istnieje jeden warunek typu "dane są wrażliwe, więc musi być on-prem". Lokalny model może mieć sens z kilku różnych powodów.

1. Chcemy ograniczyć wysyłanie danych poza firmę

Dotyczy to szczególnie:

ERP danych finansowych marż należności danych pracowników dokumentacji technicznej umów

Lokalny model pozwala utrzymać większą część procesu we własnym środowisku. Nie oznacza to automatycznie zgodności z RODO ani bezpieczeństwa. Nadal potrzebujemy:

Kontroli dostępu
Logów
Polityki retencji
Aktualizacji
Backupu konfiguracji
Monitoringu
Zarządzania użytkownikami

Szerzej o danych wysyłanych do modeli, shadow AI i kontroli dostępu piszemy w artykule AI w cyberbezpieczeństwie firmy.

2. Chcemy pracować bez zależności od zewnętrznego API

Może to mieć znaczenie:

  • › przy ograniczonym dostępie do Internetu,
  • › w środowiskach izolowanych,
  • › przy wymaganiach kontraktowych,
  • › przy krytycznych procesach wewnętrznych.

3. Chcemy mieć przewidywalną infrastrukturę i koszt

Przy dużej, regularnej liczbie zapytań własny serwer może być atrakcyjny. Ale nie zakładałbym tego z góry. Trzeba policzyć pełny koszt i porównać go z kosztem API:

GPU + serwer + energia + chłodzenie + storage + administracja + aktualizacje + monitoring + rozwój aplikacji

Ta sama logika dotyczy każdej decyzji infrastrukturalnej, co opisujemy w artykule chmura czy własny serwer.

4. Chcemy pełnej kontroli nad integracją

Lokalny model może być wygodny, gdy ma współpracować z:

ERP CRM dokumentacją bazą wiedzy wewnętrznym API

To szczególnie interesujące, gdy całość ma działać jako jeden firmowy system.

Kiedy nie zaczynałbym od lokalnego AI?

Jeżeli firma nie potrafi odpowiedzieć na pytanie:

Jakie pięć problemów ten system ma rozwiązać?

nie kupowałbym jeszcze GPU. Podobnie, jeśli:

Dane w ERP są niespójne
Nie ma ownera danych
Nikt nie potrafi zdefiniować podstawowych metryk
Nie ma zgody na konto tylko do odczytu
Oczekiwanie brzmi "AI ma odpowiadać na wszystko"
Nie ma nikogo, kto będzie system utrzymywał

W takim przypadku problemem nie jest brak LLM. Problemem jest brak przygotowanej warstwy danych.

Najważniejsza zasada: LLM nie jest źródłem liczb

Załóżmy, że użytkownik pyta: "Jaki był przychód w sierpniu?". Model nie powinien odpowiadać na podstawie:

wcześniejszej rozmowy danych zapisanych w kontekście własnego wnioskowania "prawdopodobnego" wyniku

Prawidłowy przebieg wygląda tak:

użytkownik: "Jaki był przychód w sierpniu?"

↓

LLM rozpoznaje intencję

↓

get_revenue()

↓

kontrolowane zapytanie SQL

↓

123 456,78 PLN

↓

LLM formułuje odpowiedź

Model może powiedzieć: "Przychód w sierpniu wyniósł 123 456,78 PLN." Ale 123 456,78 PLN musi pochodzić z narzędzia. Nie z modelu. To jedna z najważniejszych zasad całej architektury:

Jeżeli liczba nie pochodzi z autorytatywnego źródła, nie ma prawa pojawić się jako fakt w odpowiedzi.

Tool calling zamiast dowolnego SQL

Istnieją dwa bardzo różne modele integracji AI z bazą danych.

MODEL 1: AI GENERUJE SQL

użytkownik

↓

LLM

↓

SELECT ...

↓

ERP

MODEL 2: AI WYBIERA NARZĘDZIE

użytkownik

↓

LLM

↓

compare_revenue_periods(...)

↓

backend

↓

wcześniej przygotowany SQL

Pierwsze rozwiązanie wygląda efektownie podczas demonstracji. Użytkownik może zapytać prawie o wszystko. Problem w tym, że model musi samodzielnie znać schemat, dobierać JOIN-y, interpretować pola, rozumieć znaczenie dokumentów i wiedzieć, jak traktować korekty. W systemie ERP jest to bardzo ryzykowny model.

W drugim modelu podział odpowiedzialności jest jasny:

MODEL DECYDUJE

użytkownik chce porównać dwa okresy

MODEL NIE DECYDUJE

jak złączyć siedem tabel ERP, żeby policzyć sprzedaż

Ta druga decyzja została podjęta wcześniej przez człowieka, przetestowana i porównana z raportem systemu ERP. Dla większości wdrożeń biznesowych zacząłbym właśnie od tego modelu.

Przykład narzędzi

Na początku wcale nie potrzeba ich setek. Można zacząć od czterech:

get_revenue
compare_revenue_periods
get_top_customers
get_overdue_balances

Każde ma jasno określony kontrakt. Model wywołuje narzędzie z parametrami:

{
  "tool": "get_revenue",
  "parameters": {
    "date_from": "2026-08-01",
    "date_to": "2026-09-01"
  }
}

Backend wykonuje kontrolowane zapytanie. Model dostaje wynik i przygotowuje zdanie:

{
  "revenue_pln": 1234567.89,
  "date_from": "2026-08-01",
  "date_to": "2026-09-01"
}

Warstwa kanoniczna zamiast bezpośredniego "rozumienia ERP"

W Comarch ERP XL istnieje bogaty model danych i wiele zależności biznesowych. Nie chciałbym, żeby model językowy sam dochodził, które kolumny w CDN.* oznaczają dokładnie to, o co pyta użytkownik. Lepiej zbudować warstwę pośrednią:

ERP XL / CDN.*

↓

widoki raportowe

↓

ai_reporting.revenue · ai_reporting.customers · ai_reporting.receivables

↓

narzędzia backendu

LLM nie musi znać całej struktury ERP. Potrzebuje wiedzieć tylko, że istnieje narzędzie get_revenue. To znacznie prostszy i bezpieczniejszy kontrakt.

Konto tylko do odczytu to dopiero początek

Osobne konto dla aplikacji jest bardzo dobrym pomysłem. Nie dawałbym mu jednak SELECT na całej bazie tylko dlatego, że to "tylko SELECT". Microsoft w dokumentacji SQL Server zaleca zasadę najmniejszych uprawnień i pozwala nadawać dostęp na poziomie pojedynczych obiektów albo konkretnego schematu. Lepszy układ:

GRANT SELECT ON SCHEMA::ai_reporting TO ai_reader;

gdzie ai_reporting zawiera wyłącznie kontrolowane widoki potrzebne aplikacji. To daje dodatkowe granice:

LLM nie widzi całego ERP
backend nie ma uprawnień do całego ERP
ai_reader widzi tylko warstwę raportową

Ta sama zasada, którą stosujemy wobec administratorów i kont technicznych. Dlaczego modelowi nie przekazuje się credentiali, opisujemy w artykule 10 rzeczy, których administrator IT nie powinien oddawać AI bez kontroli.

SELECT-only również może zrobić problem

To często pomijany temat. Zapytanie nie musi niczego modyfikować, żeby zaszkodzić wydajności. Może:

Skanować ogromne tabele
Wykonywać ciężkie JOIN-y
Zużywać CPU
Zużywać pamięć
Generować duży ruch I/O
Czekać na blokady

Dlatego warto stosować również:

command timeout limit liczby wyników ograniczony zestaw zapytań monitoring czasu wykonania circuit breaker po stronie aplikacji

SQL Server obsługuje timeout wykonywania ustawiany po stronie klienta. Po jego przekroczeniu aplikacja może anulować zapytanie. W większych środowiskach można również rozważyć osobny workload raportowy lub mechanizmy ograniczające zużycie zasobów. Jak wolne zapytania wpływają na cały ERP, pokazujemy w artykule dlaczego SQL Server zwalnia.

Najlepszy wariant, jeśli architektura na to pozwala:

ERP produkcyjne › replika / warstwa raportowa › AI

Wtedy zapytania analityczne nie konkurują bezpośrednio z użytkownikami ERP. Nie zawsze jest to jednak możliwe lub ekonomicznie uzasadnione w małej firmie.

Przykład bezpieczniejszego narzędzia

Jeżeli stosujemy katalog gotowych funkcji, kod może wyglądać bardzo prosto:

def get_revenue(cursor, date_from, date_to):
    sql = """
        SELECT
            SUM(revenue_pln) AS revenue_pln
        FROM ai_reporting.revenue
        WHERE doc_date >= ?
          AND doc_date < ?
    """

    cursor.execute(sql, (date_from, date_to))
    row = cursor.fetchone()

    return {
        "revenue_pln": row[0],
        "date_from": date_from.isoformat(),
        "date_to": date_to.isoformat(),
    }

Najważniejsza rzecz: SQL nie pochodzi od modelu. Model wybrał get_revenue, a backend ma już gotową i przetestowaną implementację. Parametry przekazujemy osobno.

Nie budujemy zapytania w ten sposób:

sql = f"""
SELECT ...
WHERE date = '{user_input}'
"""

Czy parser SQL jest potrzebny?

Może być dodatkową warstwą zabezpieczenia. Ale jeżeli stosujemy wyłącznie gotowe narzędzia z wcześniej przygotowanym SQL, jego rola jest znacznie mniejsza. Nie budowałbym bezpieczeństwa w taki sposób:

LLM generuje dowolny SQL › parser mówi "wygląda jak SELECT" › produkcja

Parser nie rozumie wszystkich konsekwencji biznesowych zapytania. Znacznie mocniejsze zabezpieczenia to:

  1. 1 brak dowolnego SQL z modelu
  2. 2 kontrolowane funkcje
  3. 3 parametryzacja
  4. 4 ograniczone konto SQL
  5. 5 dedykowane widoki
  6. 6 timeout
  7. 7 audit

Parser może być ósmą warstwą. Nie pierwszą.

Jak powinna wyglądać architektura?

Dla lokalnego asystenta ERP rozsądna architektura może wyglądać tak:

UŻYTKOWNIK
    |
    v
WEB / FRONTEND
    |
    v
BACKEND
FastAPI / inna aplikacja
    |
    +----------------------+
    |                      |
    v                      v
RBAC / AUDIT          LLM / OLLAMA
                           |
                           v
                    wybór narzędzia
                           |
                           v
                  KATALOG NARZĘDZI
                           |
                           v
                       AI_READER
                           |
                           v
                  WARSTWA RAPORTOWA
                           |
                           v
                        ERP XL

Model nie otrzymuje connection stringa.

Model nie wykonuje SQL.

Model nie ma credentiali MSSQL.

Backend udostępnia mu określony katalog funkcji. Nic więcej.

Co właściwie robi LLM?

W takim systemie jego zadania są stosunkowo proste.

  1. 1 Rozpoznaje intencję. Użytkownik pisze "Porównaj sprzedaż sierpnia z lipcem.", model wybiera compare_revenue_periods.
  2. 2 Wyciąga parametry. Zamienia język naturalny na strukturę, którą rozumie backend.
  3. 3 Formułuje odpowiedź. Na podstawie tego, co zwróciło narzędzie.

PARAMETRY

{
  "period_a": "2026-07",
  "period_b": "2026-08"
}

WYNIK NARZĘDZIA

{
  "july": 918000,
  "august": 1043000,
  "change_percent": 13.62
}

ODPOWIEDŹ LLM

"Sprzedaż w sierpniu wyniosła 1,043 mln zł i była o 13,62% wyższa niż w lipcu."

Model nie wykonał księgowości. Model wykonał interfejs językowy do wcześniej zdefiniowanej księgowości. To bardzo ważna różnica.

Co jeśli narzędzie nie odpowie?

Załóżmy, że zapytanie kończy się błędem MSSQL timeout.

PRAWIDŁOWA ODPOWIEDŹ

"Nie udało się pobrać danych z ERP. Spróbuj ponownie później."

NIE

"Przychód wyniósł prawdopodobnie około 1,1 mln zł."

To kolejna fundamentalna zasada:

brak wyniku z narzędzia = brak liczby w odpowiedzi

To samo dotyczy awarii samego serwera z modelem. Asystent ERP to kolejna usługa, która powinna mieć monitoring, alerty i procedurę postępowania. Jak podejść do incydentu z pomocą AI, opisujemy w artykule AI podczas awarii: pierwsze 30 minut incydentu.

Audit

Dla każdego zapytania warto móc odtworzyć:

Kto
Kiedy
O co zapytał
Jakie narzędzie wywołano
Jakie parametry przekazano
Ile trwało zapytanie
Czy zakończyło się powodzeniem

Nie oznacza to koniecznie przechowywania wszystkich danych zwróconych przez ERP. Audit również powinien respektować zasadę minimalizacji danych. Przykładowo:

{
  "user": "user123",
  "tool": "get_revenue",
  "parameters": {
    "period": "2026-08"
  },
  "duration_ms": 142,
  "status": "success"
}

To często wystarczy do analizy działania systemu. Takie logi dobrze jest trzymać w tym samym miejscu co resztę telemetrii, o czym piszemy w artykule AI w analizie logów Linux.

Lokalny model, API czy rozwiązanie hybrydowe?

Nie traktowałbym tego jako wyboru tylko "chmura vs on-prem". W praktyce istnieją co najmniej trzy warianty.

Model Dane Zalety Wady
API dostawcy wysyłane do zatwierdzonej usługi szybki start, mocne modele, brak GPU koszt API, zależność od dostawcy, governance danych
Lokalny LLM przetwarzanie w firmie kontrola, brak zależności od Internetu, możliwość pełnej izolacji sprzęt, energia, utrzymanie
Hybrydowy SQL i narzędzia lokalnie, do modelu trafia minimalny wynik ograniczenie zakresu danych przy dostępie do mocnego modelu nadal wymaga oceny tego, co opuszcza firmę

Wariant hybrydowy jest szczególnie interesujący. ERP nigdy nie opuszcza firmy. Zapytanie wykonywane jest lokalnie. Model zewnętrzny może ewentualnie dostać tylko:

{
  "metric": "revenue",
  "period": "2026-08",
  "value": 1043000,
  "currency": "PLN"
}

i jedynie przygotować odpowiedź. Czy nawet taka liczba może być poufna? Oczywiście. Dlatego nadal potrzebna jest decyzja organizacji. Ale zakres danych jest nieporównywalnie mniejszy niż przy przesłaniu fragmentu bazy ERP.

Czy lokalny model automatycznie rozwiązuje problem RODO?

Nie. Lokalność ogranicza jeden rodzaj ryzyka: przekazywanie danych zewnętrznemu dostawcy. Nadal pozostają:

Uprawnienia użytkowników
Kontrola dostępu
Dane w promptach
Historia rozmów
Logi aplikacji
Retencja
Backup
Zabezpieczenie serwera
Dostęp administratorów

Lokalny system może również źle zarządzać danymi osobowymi. Tylko robi to na naszym serwerze.

Jaki sprzęt jest potrzebny?

Tutaj nie podawałbym jednej konfiguracji jako "minimalnej". Wymagania zależą od:

modelu liczby parametrów kwantyzacji długości kontekstu liczby jednoczesnych użytkowników oczekiwanej szybkości
CPU-only

Do PoC i prostych zastosowań można zacząć bez GPU: mały model, kwantyzacja Q4/Q5, 16-32 GB RAM, nowoczesny CPU. Da się na tym sprawdzić klasyfikację intencji, tool calling, sposób budowania odpowiedzi i integrację aplikacji. Nie oczekiwałbym jednak komfortu porównywalnego z dużymi usługami chmurowymi.

GPU 12-16 GB

Sensowny punkt startowy dla mniejszych i części średnich modeli skwantyzowanych. Pamięć zajmuje jednak nie tylko sam model: dochodzi kontekst, cache, narzut runtime i równoległe sesje. Model, który "mieści się" na karcie, nie zawsze będzie komfortowy w realnej aplikacji.

GPU 24 GB

Znacznie większy margines na modele klasy około 14B w kwantyzacji, dłuższy kontekst, wyższą jakość kwantyzacji i równoległe zapytania. Nie oznacza to automatycznie, że właśnie taki sprzęt trzeba kupić.

Najpierw test. Potem zakup.

Ollama czy vLLM?

Dla małego wdrożenia Ollama jest wygodnym sposobem na szybkie uruchomienie lokalnego modelu i wystawienie API. W większym środowisku, gdzie liczy się większa liczba jednoczesnych zapytań, throughput i zarządzanie serwowaniem modelu, można rozważyć również inne rozwiązania, na przykład vLLM.

Aplikacja powinna traktować model jako wymienny endpoint. Nie budować się wokół jednej konkretnej nazwy modelu. Przykład konfiguracji:

LLM_BASE_URL=http://llm01.internal:11434
LLM_MODEL=<model>

Zmiana modelu nie powinna wymagać przepisywania integracji z ERP.

Nie kupuj GPU przed benchmarkiem

To jedna z najprostszych metod oszczędzenia pieniędzy. Najpierw przygotuj:

  1. 1 20-50 rzeczywistych pytań użytkowników
  2. 2 oczekiwane narzędzie dla każdego pytania
  3. 3 oczekiwane parametry
  4. 4 oczekiwany format odpowiedzi

Następnie przetestuj kilka modeli. Mierz:

Poprawność wyboru narzędzia
Poprawność parametrów
Jakość polskiego
Czas odpowiedzi
Zużycie RAM/VRAM
Zachowanie przy błędzie narzędzia

Dopiero wtedy wiadomo, czy potrzebujesz modelu 8B, 14B czy większego, oraz jakiego sprzętu.

Model większy nie zawsze znaczy lepszy projekt

Jeżeli zadanie LLM wygląda tak:

wybierz jedno z 12 narzędzi + wyciągnij datę + sformułuj odpowiedź po polsku

niekoniecznie potrzebujemy największego modelu, jaki da się uruchomić. Mniejszy model może być szybszy, tańszy, łatwiejszy w utrzymaniu i całkowicie wystarczający. Największy wzrost jakości projektu często da lepsze narzędzie i lepsza definicja danych, a nie większy LLM.

Co naprawdę składa się na TCO?

Karta GPU jest najbardziej widocznym kosztem. Nie zawsze największym.

Sprzęt

GPU, RAM, CPU, storage, zasilacz, obudowa lub serwer.

Energia

Model nie działa za darmo. Serwer GPU pracujący całą dobę to realna pozycja w rachunku.

Administracja

Ktoś musi utrzymywać system operacyjny, Docker, runtime modelu, aktualizacje, certyfikaty i monitoring.

Aplikacja

Backend, uwierzytelnianie, RBAC, audit i obsługa błędów.

Dane

Często najdroższa część: zrozumieć ERP, uzgodnić definicje, przygotować widoki, zweryfikować wyniki.

Testy

Każde narzędzie musi zostać porównane z rzeczywistym raportem ERP.

Host z modelem to kolejny serwer, który trzeba regularnie przeglądać. Warto dopisać go do comiesięcznej checklisty utrzymania IT razem z resztą infrastruktury.

Czy trzeba backupować modele?

Nie zawsze. Jeżeli używamy publicznie dostępnego modelu, często wystarczy mieć:

  • › przypiętą wersję i identyfikator modelu,
  • › konfigurację,
  • › procedurę ponownego pobrania.

Inaczej wygląda sytuacja, jeżeli model jest fine-tunowany, własny, używany w środowisku air-gapped albo niedostępny publicznie. Wtedy artefakty modelu rzeczywiście stają się elementem strategii backupu. To dobry przykład kosztu, którego nie warto automatycznie doliczać do każdego wdrożenia. Znacznie ważniejszy pozostaje backup samego ERP, o czym piszemy w artykule backup systemu ERP.

Rozsądna ścieżka projektu

  1. 0 Etap 0. Pytania biznesowe. Zbieramy na przykład: jaki był przychód, jak sprzedaż zmieniła się m/m, kto kupuje najwięcej, którzy klienci mają największe zaległości.
  2. 1 Etap 1. Definicje. Ustalamy, co dokładnie oznaczają: przychód, sprzedaż, należność, przeterminowanie, klient aktywny.
  3. 2 Etap 2. Warstwa danych. Budujemy kontrolowane widoki, zapytania i modele kanoniczne.
  4. 3 Etap 3. Test bez AI. Uruchamiamy get_revenue() i porównujemy wynik z raportem ERP. Dopóki liczby się nie zgadzają, model językowy jest zbędny.
  5. 4 Etap 4. Backend. Dodajemy API, uwierzytelnianie, RBAC, audit i obsługę timeoutów.
  6. 5 Etap 5. LLM. Model rozpoznaje intencję, wybiera narzędzie, przekazuje parametry i formułuje wynik.
  7. 6 Etap 6. Interfejs. Dopiero teraz powstaje wygodny czat.

TAK

dane, test, dopiero czat

NIE

najpierw czat, potem zastanawiamy się, dlaczego źle liczy sprzedaż

Jak testować taki system?

Nie pytaniem "czy odpowiedź wygląda dobrze?". Potrzebujemy testów. Przykładowy zestaw:

Pytanie Narzędzie Oczekiwany wynik
Jaki był przychód w sierpniu? get_revenue zgodny z ERP
Porównaj lipiec z sierpniem compare_revenue_periods zgodne kwoty i delta
Top 10 klientów get_top_customers zgodna kolejność
Największe zaległości get_overdue_balances zgodne saldo

Osobno testujemy dwie warstwy:

LLM

Czy wybrał właściwe narzędzie?

WARSTWA DANYCH

Czy narzędzie zwróciło właściwą liczbę?

To bardzo ułatwia diagnostykę.

Co jeśli model wybierze złe narzędzie?

Na przykład użytkownik pyta "Ile klienci są nam winni?", a model wybiera get_revenue. To błąd LLM. Nie błąd ERP. Dzięki rozdzieleniu warstw dokładnie wiemy, gdzie szukać problemu. To kolejny argument przeciwko rozwiązaniu "LLM generuje wszystko od początku do końca".

Jak rozszerzać system później?

Dopiero po stabilizacji pierwszych narzędzi można dodawać kolejne. Na przykład:

get_margin get_sales_by_product get_sales_by_country get_customer_history get_inventory_value

Każde przechodzi tę samą drogę:

definicja › SQL › test względem ERP › tool › LLM

W ten sposób system rośnie powoli, ale przewidywalnie.

A co z dowolnymi pytaniami do danych?

Prędzej czy później użytkownik zapyta:

"Pokaż mi sprzedaż produktów z kategorii X klientom z regionu Y w ostatnich 17 miesiącach, bez korekt i z podziałem na handlowców."

Nie da się przygotować wcześniej każdego możliwego narzędzia. To moment, w którym można rozważyć bardziej dynamiczną analitykę. Ale nie zaczynałbym od niej. Jeżeli firma chce wdrożyć text-to-SQL, lepszym miejscem jest replika, hurtownia, baza raportowa albo sandbox analityczny, a nie produkcyjna baza ERP. Do tego:

read-only allowlista obiektów limity query timeout limit wyników audit walidacja zapytania

To jest etap późniejszy. Nie MVP.

Najczęstsze błędy

1

"Podłączmy model bezpośrednio do bazy"

Efektowne demo. Słaby model bezpieczeństwa.

2

"SELECT-only wystarczy"

Nie. Trzeba jeszcze kontrolować zakres danych, koszt zapytania, czas wykonania i obiekty dostępne dla aplikacji.

3

"Model zna schemat ERP"

Zna być może nazwy podobnych tabel. Nie zna definicji biznesowej obowiązującej w konkretnej firmie.

4

"Kupmy największy GPU"

Najpierw benchmark.

5

"Lokalne = bezpieczne"

Nie. Lokalne = dane mogą pozostać lokalnie. Bezpieczeństwo trzeba dopiero zbudować.

6

"Chmura = dane lecą gdzieś bez kontroli"

Też zbyt proste. Istnieją rozwiązania enterprise z określonymi warunkami przetwarzania, retencji i bezpieczeństwa. Trzeba ocenić konkretną usługę.

7

"Jeżeli backend padnie, model jakoś odpowie"

Nie. W przypadku danych biznesowych lepiej odpowiedzieć "brak danych" niż wymyślić liczbę.

Kiedy lokalne AI nie ma ekonomicznego sensu?

TRUDNO UZASADNIĆ SERWER GPU

  • › dwóch użytkowników
  • › dziesięć pytań miesięcznie
  • › dane możliwe do bezpiecznego przetworzenia w zatwierdzonym API

LOKALNY MODEL STAJE SIĘ CIEKAWY

  • › użytkowników jest wielu
  • › pytania są częste
  • › dane są mocno wrażliwe
  • › integracja z wieloma systemami
  • › potrzebna praca lokalna

Nie rozstrzyga tego moda. Rozstrzyga TCO i wymagania.

Jak podchodzimy do takiego projektu w PRO-Admin?

Nie zaczynamy od wyboru modelu. Najpierw odpowiadamy na sześć pytań:

  1. 1 Jakie pytania ma obsługiwać system?
  2. 2 Skąd pochodzi poprawna odpowiedź?
  3. 3 Kto może ją zobaczyć?
  4. 4 Jak zweryfikujemy wynik?
  5. 5 Czy dane mogą trafić poza firmę?
  6. 6 Jakie obciążenie system ma obsłużyć?

Dopiero później dobieramy architekturę, model, CPU lub GPU, sposób uruchomienia i integrację. Rola człowieka się tu nie kończy: ktoś musi zatwierdzać definicje, pilnować testów i odpowiadać za wynik, o czym szerzej w artykule czy AI zastąpi administratora systemów.

W projekcie opartym o Comarch ERP XL szczególnie ważne jest oddzielenie trzech warstw:

WARSTWA 1

surowy schemat ERP

WARSTWA 2

warstwa danych biznesowych

WARSTWA 3

język naturalny

Model powinien być ostatnią warstwą. Nie pierwszą.

FAQ - lokalne AI w firmie

Czy lokalne AI wymaga GPU?

Nie zawsze. Mały model można uruchomić na CPU, szczególnie na etapie testowym. GPU znacząco poprawia jednak komfort pracy i przepustowość przy większych modelach oraz wielu użytkownikach.

Ile RAM potrzeba do lokalnego LLM?

Zależy od konkretnego modelu, kwantyzacji i długości kontekstu. Do małego PoC 16-32 GB RAM może być wystarczające, ale nie istnieje jedna wartość odpowiednia dla wszystkich modeli.

Ile VRAM potrzeba?

Również zależy od modelu i kwantyzacji. Karty z 12-16 GB VRAM pozwalają uruchamiać wiele mniejszych modeli skwantyzowanych, a 24 GB daje znacznie większy margines dla modeli średniej wielkości, kontekstu i równoległych użytkowników.

Czy Ollama nadaje się do firmy?

Może być bardzo dobrym rozwiązaniem do małych i średnich wdrożeń oraz PoC. W środowiskach wymagających większej przepustowości można rozważyć również inne serwery inference, na przykład vLLM.

Czy LLM powinien mieć dostęp do bazy Comarch ERP XL?

Nie dawałbym modelowi bezpośrednich credentiali do bazy. Bezpieczniejszy model zakłada backend posiadający kontrolowane narzędzia korzystające z dedykowanego konta SQL.

Czy samo konto SELECT-only wystarczy?

Nie. Warto dodatkowo ograniczyć zakres obiektów, stosować timeout, limit wyników i audit. Microsoft rekomenduje zasadę najmniejszych uprawnień i umożliwia nadawanie SELECT nawet na konkretnych obiektach lub schemacie.

Czy LLM może generować SQL?

Technicznie tak. W pierwszym etapie systemu biznesowego bezpieczniej jest korzystać z wcześniej przygotowanych funkcji i sparametryzowanych zapytań. Text-to-SQL można rozważyć później w odizolowanej warstwie analitycznej.

Czy lokalne AI rozwiązuje problem RODO?

Nie. Ogranicza potrzebę przesyłania danych do zewnętrznego modelu, ale nadal trzeba kontrolować dostęp, retencję, logi, backup i sposób przetwarzania danych.

Czy model musi znać schemat ERP?

Nie, jeżeli korzystamy z tool calling. Może znać opis narzędzi i ich parametrów bez znajomości całego schematu produkcyjnej bazy.

Czy warto najpierw kupić GPU?

Nie. Najpierw przygotowałbym zestaw rzeczywistych pytań i benchmark kilku modeli. Dopiero wynik testów powinien zdecydować o zakupie sprzętu.

Podsumowanie

Lokalny LLM może mieć bardzo dużo sensu w małej i średniej firmie. Ale nie dlatego, że "AI musi być u nas na serwerze". Sens pojawia się wtedy, gdy rozwiązanie:

Odpowiada na konkretny problem
Ma jasno określone źródła danych
Chroni wrażliwe informacje
Daje się zweryfikować
Ma akceptowalny TCO

W przypadku ERP najważniejsza architektura wygląda tak:

TAK

ERP

↓

kontrolowana warstwa raportowa

↓

narzędzia biznesowe

↓

backend + RBAC + audit

↓

LLM

↓

język naturalny

NIE

ERP

↓

LLM z connection stringiem

↓

"zaufaj mi"

Najważniejszym elementem takiego systemu nie jest więc GPU. Nie jest nim nawet model. Jest nim zasada:

Każdy fakt biznesowy musi mieć kontrolowane źródło.

Jeżeli pytamy o przychód, model nie może go wymyślić. Jeżeli pytamy o saldo klienta, odpowiedź musi pochodzić z danych. Jeżeli ERP nie odpowiada, AI również nie zna odpowiedzi.

To właśnie odróżnia użyteczny firmowy system AI od bardzo przekonującego chatbota.

Chcesz sprawdzić, czy lokalne AI ma sens w Twojej firmie?

W PRO-Admin możemy pomóc zaprojektować i uruchomić warstwę techniczną takiego rozwiązania:

› lokalny LLM i Ollama
› serwer CPU/GPU
› Docker i FastAPI
› integracja z MSSQL
› RBAC i kontrola dostępu do danych
› monitoring i backup
› bezpieczna architektura pomiędzy AI a ERP

Nie zaczynamy od pytania "jaką kartę graficzną kupić?". Zaczynamy od: jakie pytanie biznesowe ma zostać rozwiązane i skąd ma pochodzić poprawna odpowiedź? Dopiero później dobieramy sprzęt.

Kontakt

Porozmawiajmy o Twoim IT

Odpiszemy najszybciej jak to możliwe. Bezpłatna konsultacja i wycena.

Obsługujemy firmy w Szczecinie, Stargardzie i okolicach oraz realizujemy usługi zdalnie na terenie całej Polski.

Dane kontaktowe

+48 91 885 43 40
biuro@pro-admin.pl
ul. Lutniana 39/3, 71-425 Szczecin

Godziny kontaktu

Pn–Pt 8:00–17:00
Sob–Ndz Zamknięte
Monitoring & alerty 24/7

Dziękujemy za kontakt!

Wiadomość została wysłana. Odpiszemy najszybciej jak to możliwe.

Ta strona używa narzędzi Microsoft Clarity (mapy cieplne, nagrania sesji) oraz Google Analytics (statystyki ruchu) do anonimowej analizy odwiedzin. Nie korzystamy z reklam ani profilowania.