← BlogBlog

Podłączenie AI do danych firmy bez robienia im kopii

Większość poradników o tym, jak zrobić podłączenie AI do danych firmy, kończy się w tym samym miejscu: wyeksportuj, zaindeksuj, pytaj kopię. To sensowne, dopóki odpowiedź leży w dokumentach. Przestaje być sensowne, gdy odpowiedź leży w systemie, który zmienia się w trakcie dnia pracy, bo zanim ktokolwiek zapyta, kopia opisuje wersję firmy, której już nie ma. Alternatywą nie jest lepsza synchronizacja. Alternatywą jest nie dawać modelowi kopii w ogóle i pozwolić mu zapytać źródła w momencie pytania. O tej warstwie jest ten tekst: jak kroić narzędzia, gdzie mają siedzieć uprawnienia, co starzeje się w środku rozmowy i dlaczego odczyt i zapis rządzą się innymi zasadami.

Kopia danych z systemu zaczyna się starzeć od pierwszego dnia

Pod jednym hasłem chowają się dwa różne problemy. Jeśli twoja wiedza to dokumenty - umowy, instrukcje, zamknięte zgłoszenia - to praca polega na retrievalu, czyli na RAG dla firmy, i psuje się na swoje własne sposoby. Ten tekst jest o drugim problemie, tym, w którym odpowiedzi nie ma nigdzie zapisanej. Jest wartością, która siedzi teraz w systemie i po południu będzie inna.

Weź pytanie, które biuro obsługi dostaje dwadzieścia razy dziennie: gdzie jest zamówienie 41207? Nic w tej odpowiedzi nie jest dokumentem. To rekord w ERP, status pobrany od kuriera, może notatka dopisana do zgłoszenia dziesięć minut temu. Zsynchronizuj to nocą do bazy wektorowej, a zbudujesz maszynę, która pewnym głosem odpowiada na wczorajsze pytanie.

Drugi koszt widać później i akurat w Polsce widać go wyraźnie. Kopia to nowe miejsce, w którym żyją twoje dane, z własnymi uprawnieniami, własnym backupem i własną historią usuwania. RODO nazywa to wprost w zasadach z artykułu 5: dane mają być adekwatne i ograniczone do tego, co niezbędne, i przechowywane nie dłużej, niż to konieczne. Kopia całej bazy klientów w indeksie wektorowym jest trudna do obronienia w obu tych punktach, a wywołanie, które czyta jeden rekord w momencie pytania i nie zostawia go u siebie, jest łatwa. Zanim jednak dojdzie do tej rozmowy, warto sprawdzić, czy ten proces w ogóle warto automatyzować.

Podłączenie AI do danych firmy zaczyna się od warstwy narzędzi

Alternatywa jest stara i mało efektowna: daj modelowi zestaw funkcji, które wolno mu wywołać, i pozwól mu decydować, kiedy z nich korzysta. Model nie trzyma danych. Trzyma menu, w którym każda pozycja ma nazwę, opis i schemat argumentów. Przychodzi pytanie, model wybiera z menu i rozumuje na ustrukturyzowanym wyniku, który wrócił. MCP to dziś standard opisywania takiego menu, a jego centralnym obiektem jest narzędzie: funkcja opisana schematem JSON dla wejścia i opcjonalnie dla wyjścia.

Prowadzimy to tam, gdzie problem świeżości danych nie jest teoretyczny. Nasz głosowy inżynier wyścigowy odpowiada kierowcy na głos, w trakcie jazdy, w niecałe dwie sekundy, na telemetrii, która zmienia się bez przerwy. Nic nie jest wgrane z góry. Telemetria jest wystawiona przez FastMCP jako 19 ustrukturyzowanych narzędzi w sześciu kategoriach - surowe wartości telemetrii, informacje o sesji, tabela wyników, flagi, komendy pit-stopu i statystyki okrążeń - a agent czyta to, czego potrzebuje, w chwili pytania.

Kleju jest przy tym mniej, niż się wydaje. Klient MCP sam konwertuje schematy narzędzi na definicje function-calling OpenAI, więc nie ma ręcznego mapowania, które rozjedzie się przy pierwszej zmianie narzędzia. Dodajesz narzędzie po stronie serwera i agent potrafi go użyć.

I to agent, nie ty, decyduje o kolejności. „Czy wjeżdżać do serwisu na tym okrążeniu?” uruchamia get_current_pit_service_status, get_car_average_lap_time, get_leaderboard i get_my_car_damage_report w jednej pętli rozumowania, zanim padnie słowo odpowiedzi. Wersja biznesowa jest nudniejsza i identyczna. „Czy zdążymy wysłać zamówienie 41207 dzisiaj?” to stan magazynowy, potem godzina odbioru kuriera, potem blokada kredytowa klienta, w kolejności, której nikt wcześniej nie zapisał.

Jedno źródło danych, trzy uczciwe odpowiedzi
PodejściePasuje, gdyCo bierzesz na siebieGdzie boli
Kopiuj i indeksujOdpowiedź leży w dokumentach albo w danych referencyjnych, które zmieniają się rzadkoPipeline ingestii i obietnicę świeżości, która teraz należy do ciebieKażda odpowiedź dziedziczy wiek ostatniej synchronizacji, a kopia to drugie miejsce z danymi do zabezpieczenia
Wywołaj narzędzieWartość zmienia się w trakcie dnia, a pytanie wskazuje konkretny rekord: zamówienie, zgłoszenie, stan magazynowyJeden adapter i jeden schemat na pytanie plus opóźnienie przy każdej odpowiedziAgent jest dostępny dokładnie tak, jak system pod spodem
Nie wystawiaj wcaleNikt nie potrafi nazwać pytania, na które te dane odpowiadają, albo błędny odczyt kosztuje więcej, niż wart jest trafnyNic, i o to chodziLuka zostaje widoczna jako człowiek, który dalej sprawdza to ręcznie

Trzeci wiersz ratuje więcej projektów, niż na to wygląda. Agent, który nie umie odpowiedzieć na pytanie, jest irytujący i ludzie obchodzą go w jeden dzień. Agent, który odpowiada błędnie ze źródła, którego nikt nie objął zakresem, to zgłoszenie, nad którym ktoś spędzi tydzień. Jeśli ważysz gotowy konektor przeciwko napisaniu tej warstwy u siebie, obowiązują tu zwykłe progi: źródła towarowe się kupuje, te niosące twoją logikę biznesową się buduje.

Granica narzędzia to miejsce, w którym naprawdę żyją uprawnienia

Model nie wyegzekwuje kontroli dostępu. Nie wie, kto pyta - widzi tekst, a tekst łatwo przegadać. Każda reguła o tym, kto co może zobaczyć, siedzi w warstwie pod spodem, a granica narzędzia jest na to dobrym miejscem, bo jest wąska i jest kodem, który należy do ciebie.

Tożsamość rozstrzyga się po stronie serwera: narzędzie bierze wywołującego z twojej własnej sesji, sprawdza, co ta osoba ma prawo widzieć, i filtruje przed zwróceniem czegokolwiek. Kusząca droga na skróty jest zamknięta świadomie. Wytyczne bezpieczeństwa MCP mówią, że serwer nie może przyjmować tokenów, które nie zostały dla niego wystawione, więc przepuszczanie tokenu użytkownika przez agenta odpada. Zakresy trzyma się wąsko z tego samego powodu, dla którego ten dokument odradza zbiorcze scope'y w rodzaju *: jeden wyciekły szeroki token to wszystkie narzędzia naraz.

Izolacja procesów jest tu tania, więc warto ją wziąć. U inżyniera wyścigowego serwer MCP działa jako osobny proces po stdio, co daje czystą izolację i brak wyścigów na współdzielonej pamięci ze strumieniem na żywo. W firmie kształt jest ten sam: to, co trzyma dane dostępowe do bazy, nie rozmawia z dostawcą modelu.

I jeszcze jedno, które zaskakuje najczęściej: wyniki narzędzi to niezaufane wejście. To, co wraca z treści zgłoszenia czy opisu produktu od dostawcy, ląduje prosto w kontekście modelu, a jeśli ktoś wpisał tam instrukcje, model przeczyta je jako instrukcje. Specyfikacja każe klientom walidować wyniki, zanim trafią do modelu. Do twojego CRM-u wpisuje też klient.

Jedno narzędzie na jedno pytanie, które ktoś naprawdę zadaje

Są tu dwie awarie i idą w przeciwne strony. Za grubo to ta popularna: jedno narzędzie run_query, które przyjmuje SQL. Wygląda elegancko na demie i oddaje modelowi całą bazę oraz pełny skan tabeli za każdym razem, gdy źle strzeli. Tracisz przy tym możliwość powiedzenia, kto co może wywołać, bo do wywołania jest tylko jedna rzecz.

Za drobno jest cichsze. Czterdzieści narzędzi zwracających po jednym polu oznacza, że agent zużywa tury na składanie czegoś, co jedno zapytanie załatwiłoby od razu. Trudniejszy staje się też sam wybór: im więcej niemal identycznych nazw w menu, tym częściej model sięga po niewłaściwą.

Rozmiar, który się broni, to jedno narzędzie na jedno pytanie, które człowiek faktycznie zadaje. Spójrz na nazwy z inżyniera wyścigowego: get_current_pit_service_status, get_car_average_lap_time, get_my_car_damage_report. Każda jest pytaniem, nie tabelą. Przeniesione do firmy czytają się jako get_order_status(order_id), get_open_tickets_for_customer(customer_id), get_stock(sku, magazyn). Dziewiętnaście takich pokryło całą dziedzinę przy dwusekundowym budżecie odpowiedzi.

To podejście ratuje też najczęstsze polskie pytanie: co, jeśli nasz ERP nie ma API. Praca integracyjna wtedy nie znika, tylko się kurczy. Piszesz jeden adapter na jedno pytanie - odczyt z widoku raportowego, procedura składowana, nocny eksport - zamiast pełnej dwukierunkowej integracji, której nikt nie wyceni poniżej kwartału. Wdrażasz te dwa pytania, które są ważne w tym miesiącu, i zostawiasz resztę systemu w spokoju.

Tu też idzie twój budżet czasu, bo każde wywołanie to podróż do systemu plus kolejna tura modelu, a agent sam decyduje, ile ich zrobi. Inżynier wyścigowy mieści się w dwóch sekundach, bo niezależne wywołania idą równolegle, narzędzia zwracają pola potrzebne do pytania zamiast całych rekordów, a drogie agregaty czyta się gotowe z SQLite. Jeśli system po drugiej stronie odpowiada w cztery sekundy, żadna architektura tego nie naprawi, a każda ponowna próba to kolejna tura na rachunku za utrzymanie.

Świeże dane starzeją się w środku rozmowy

Tę awarię znajdowaliśmy najdłużej, bo nigdy nie widać jej przy pierwszym pytaniu. Dopiero przy drugim.

Naturalny projekt trzyma w rozmowie całą wymianę, razem z wywołaniami narzędzi i ich wynikami, tak jak chatbot trzyma transkrypt. U inżyniera wyścigowego to zatruwało kolejną odpowiedź. Czas okrążenia zebrany 30 sekund wcześniej jest już błędny, ale w kontekście jest po prostu tekstem, nie do odróżnienia od wartości odczytanej sekundę temu. Nieaktualne dane niesione dalej są gorsze niż brak danych, bo brak danych przynajmniej wymusza świeży odczyt.

Rozwiązaniem jest sliding window. Utrwalane jest tylko pytanie i finalna odpowiedź tekstowa, MAX_HISTORY = 4, a każde pośrednie wywołanie narzędzia uruchamia się na świeżo w każdej turze i jest potem odrzucane, z promptem systemowym przypiętym na początku. Płacisz za powtórzone wywołanie i dostajesz odpowiedź prawdziwą w chwili, gdy pada.

Podstaw status zamówienia sprzed 30 sekund albo etap w CRM, który zmienił się w trakcie pisania dopytania. Wszystko, co może się zmienić między dwoma pytaniami, pobiera się w momencie pytania i nigdy nie pamięta z wcześniejszej tury. Jeśli twój agent odpowiada na drugie pytanie szybciej niż na pierwsze, sprawdź, czy cokolwiek doczytał.

Historia, której faktycznie chcesz, żyje poza modelem. Worker odpytuje symulator co 100 ms i zapisuje ukończone okrążenia wszystkich 64 aut do SQLite, więc agent dopytuje o historię, zamiast ją ze sobą nosić. Ten sam ruch w firmie: mały job utrzymuje agregat aktualnym, a agent odpytuje go jak każde inne narzędzie.

Odczyt może być autonomiczny. Zapis nie powinien.

Najmocniejsza reguła, jaką wynosimy z produkcji, jest asymetrią, a nie polityką. Pozwól agentowi czytać wszystko, na co pozwalają mu jego uprawnienia, kiedy tylko uzna, że musi. Nie pozwalaj mu pisać na tych samych warunkach.

U inżyniera wyścigowego odczyt jest autonomiczny, a komendy pit-stopu wysokiego ryzyka już nie: agent może zarekomendować i przygotować zjazd, ale kierowca zatwierdza, zanim cokolwiek trafi do auta. Asystent AI rektora, którego zbudowaliśmy dla uczelni, dzieli się tak samo. Sam przygotowuje, przypomina i raportuje, a przydziały zatwierdza człowiek, przy czym każde działanie jest logowane.

Protokół stoi na tym samym stanowisku. Specyfikacja narzędzi MCP mówi, że w pętli powinien zawsze być człowiek z możliwością odrzucenia wywołania narzędzia, a host musi uzyskać wyraźną zgodę przed jego uruchomieniem. Po stronie regulacyjnej idzie to tak samo: artykuł 14 AI Act wymaga przy systemach wysokiego ryzyka, żeby nadzorujący człowiek mógł zignorować albo cofnąć wynik systemu i zatrzymać go przyciskiem stop. Jeśli twój agent zapisuje do systemu dotykającego klientów albo pracowników, i tak będziesz musiał pokazać ten przycisk. Kiedy dokładnie stanie się to wymogiem, a nie dobrą praktyką, rozpisaliśmy w kalendarzu obowiązków AI Act.

Bramkę zrób strukturalną, nie słowną. Rozdziel narzędzia do odczytu od narzędzi do zapisu po stronie serwera, te drugie schowaj za zakresem wymagającym akceptacji, a każdy zapis loguj z pełnym ładunkiem i tożsamością osoby, która go zatwierdziła. Zdanie w promptcie systemowym o tym, żeby zawsze pytać przed zapisem, nie jest systemem uprawnień. Jest sugestią i trzyma się do tej jednej rozmowy, w której się nie utrzyma.

Checklista, którą przejdziesz bez nas

Nie potrzeba do tego frameworka ani dostawcy. Jeśli masz już agenta rozmawiającego z systemem na żywo albo jesteś tydzień od wycelowania go w ERP, poniższe kontrole robi się w jedno popołudnie, a każda odpowiada jednej awarii opisanej wyżej.

Siedem kontroli, zanim agent dotknie systemu produkcyjnego
KontrolaJak ją zrobićCo wyłapuje
Najpierw nazwij pytaniaWypisz dziesięć pytań, które ludzie faktycznie zadają, ich słowami. Każde, które przetrwa, staje się jednym narzędziem; reszta nie staje się niczym.Rozrost narzędzi i ogólne narzędzia do zapytań, których nikt nie zaudytuje
Domyślnie tylko odczytW pierwszym wydaniu wypuść wszystkie narzędzia jako read-only. Narzędzie zapisujące dodaj dopiero, gdy ktoś nazwie rekord i osobę akceptującą.Ciche zapisy do rekordów produkcyjnych
Tożsamość rozstrzygana na serwerzeWywołaj narzędzie jako użytkownik, który nie powinien widzieć danego rekordu, i sprawdź, że nic nie wraca. To nie model ma tego pilnować.Reguły dostępu mieszkające w promptcie
Małe odpowiedziPrzeczytaj, co narzędzie zwraca. Jeśli oddaje cały rekord, gdy pytanie dotyczy trzech pól, przytnij je.Zapychanie kontekstu i wolne odpowiedzi
Reguła świeżościZadaj pod rząd dwa pytania, między którymi wartość się zmienia. Sprawdź, czy druga odpowiedź doczytała źródło, zamiast cytować pierwszą.Nieaktualne dane niesione dalej w rozmowie
Niezaufana treśćWpisz wrogą instrukcję do rekordu, który agent przeczyta - treść zgłoszenia, notatka handlowca - i sprawdź, czy zmienia mu to zachowanie.Prompt injection wchodzący przez twoje własne dane
Latencja w najgorszej godzinieZmierz najwolniejszy system w łańcuchu w jego najgorszej godzinie, a nie we wtorek o dziewiątej rano.Agenta szybkiego na demie i bezużytecznego na koniec miesiąca

Przejdź to, zanim dotknie tego ktokolwiek spoza zespołu. Większość tego, co psuje się w tej warstwie, psuje się po cichu: odpowiedź przychodzi, dobrze się czyta i była prawdziwa pół godziny temu. (Robimy tę robotę w większość tygodni, jeśli to coś zmienia - checklista broni się sama, kto by jej nie przechodził.)

Jeśli chcesz drugą parę oczu na to, które z twoich systemów należą za warstwę narzędzi, a które powinny zostać dokładnie tam, gdzie są, krótki audyt jest spokojnym sposobem, żeby ją dostać.

FAQ

Czy do podłączenia AI do danych firmy potrzebny jest MCP?

Zwykłe function calling wystarczy, gdy kilka narzędzi żyje wewnątrz jednej aplikacji i jeden zespół trzyma oba końce. MCP zaczyna się opłacać, gdy te same narzędzia mają być osiągalne z więcej niż jednego agenta albo klienta, albo gdy zespół od danych to nie ten sam zespół co od agenta, bo wtedy schemat powinien leżeć przy systemie, a nie w aplikacji. Zasady projektowe z tego tekstu obowiązują tak czy inaczej.

Czy agent AI może mieć dostęp do bazy produkcyjnej?

Nie bezpośrednio i o to właśnie chodzi w warstwie narzędzi. Zamiast połączenia do bazy agent dostaje skończony zestaw nazwanych funkcji, z których każda odpowiada na jedno pytanie, działa pod tożsamością rozstrzyganą po twojej stronie i zwraca tylko pola potrzebne do tej odpowiedzi. Agent nie pisze SQL, więc nie sięgnie do tabeli, której nikt nie objął zakresem, a pojedyncze narzędzie możesz odebrać, nie odbierając wszystkiego.

Nasz ERP nie ma API. Da się do niego podłączyć AI?

Zwykle tak, tylko praca integracyjna nie znika, a się kurczy. Piszesz jeden adapter na jedno pytanie: odczyt z widoku raportowego, procedura składowana, nocny eksport, czasem plik wystawiany przez producenta. Zaletą pocięcia tego na narzędzia jest to, że wdrażasz dwa pytania ważne w tym miesiącu i zostawiasz resztę systemu nietkniętą, zamiast zaczynać od pełnej dwukierunkowej integracji.

Czy podłączenie AI do danych osobowych jest zgodne z RODO?

Samo podłączenie nie przesądza sprawy, przesądza to, czy tworzysz kopię. Odczyt w momencie pytania, ograniczony do pól potrzebnych do odpowiedzi i nietrzymany po odpowiedzi, jest znacznie bliżej zasady minimalizacji z artykułu 5 RODO niż kopia bazy klientów zsynchronizowana do indeksu wektorowego, którą trzeba osobno zabezpieczyć, backupować i usuwać. Do tego dochodzi rejestr: loguj, kto pytał, jakie narzędzie zostało wywołane i co zwróciło.

Ile narzędzi powinien mieć jeden agent?

Tyle, ile jest odrębnych pytań zadawanych przez ludzi, czyli zwykle mniej, niż wychodzi z pierwszych warsztatów. Nasz agent na telemetrii na żywo ma 19 narzędzi w sześciu kategoriach i to pokrywa całą dziedzinę przy dwusekundowym budżecie odpowiedzi. Jeśli twoja lista przekracza trzydzieści, część z nich to pola, a nie pytania, i warto je scalić; jeśli ma poniżej pięciu, sprawdź, czy nie zrobiłeś jednego mglistego narzędzia do wszystkiego.

Historia zmian
  • 24 lipca 2026Publikacja.
Bezpłatny audyt procesów

Zobacz, jak wyglądałoby to w Twoich procesach.

Skontaktuj się

30 minut · wskazujemy 3 najlepsze obszary do automatyzacji · bez zobowiązań