Artykuł 7 z serii Anatomia Agenta AI ← Co może pójść nie tak — bezpieczeństwo agentów dla builderów
Do tej pory w tej serii budowaliśmy agenty. Teraz zmieniamy perspektywę — budujesz stronę która agenty obsługuje.
Każdy agent który wykonuje zadanie dla użytkownika w pewnym momencie trafia na strony internetowe. Szuka informacji, porównuje produkty, sprawdza dostępność. I napotyka ten sam problem: strona jest zaprojektowana dla człowieka — oczu które skanują layout, mózgu który wyciąga znaczenie z estetyki i kontekstu.
Agent nie ma oczu. Parsuje HTML, próbuje wywnioskować strukturę, szuka odpowiedzi w morzu tagów. Dla agenta typowa strona to jak szukanie konkretnego zdania w podręczniku bez spisu treści i bez indeksu.
NLWeb to odpowiedź na ten problem. Nie z perspektywy agenta — z perspektywy właściciela strony który chce żeby jego treść była dostępna agentom bez zgadywania.
Co NLWeb robi i jak działa
NLWeb to otwarty standard Microsoftu (ogłoszony na Build 2025 przez R.V. Guha — tego samego który stworzył RSS i stał za Schema.org). Idea jest prosta: każda strona wystawia endpoint /ask gdzie agent może zadać pytanie w języku naturalnym i dostać ustrukturyzowaną odpowiedź.
Bez NLWeb:
Agent → otwiera stronę → scrape HTML → przetwarza tagi →
szuka odpowiedzi → interpretuje kontekst → może znaleźć
Z NLWeb:
Agent → GET /ask?q=jakie+produkty+masz+dla+firm →
{"products": [...], "context": "..."} → gotowe
Dwa endpointy:
/ask — dla pytań w języku naturalnym. Agent pyta, strona odpowiada JSON-em bazując na danych Schema.org. Dla ludzi, dla agentów, dla wszystkiego co umie wysłać HTTP request.
/mcp — ten sam endpoint jako serwer MCP. Microsoft powiedział wprost: każda implementacja NLWeb jest jednocześnie serwerem MCP. Agenty które używają protokołu MCP mogą połączyć się bezpośrednio i wywołać narzędzia.
Fundament technicznie to dane strukturalne Schema.org. NLWeb nie buduje własnego indeksu — bierze to co strona już ma (Product, Article, Organization, FAQ) i wystawia to jako konwersacyjny interfejs. To jest powód dla którego właściwe dane strukturalne to prerequisit, nie opcja.
Trzy ścieżki implementacji
Ścieżka 1: WordPress + Yoast (najprostsza)
Jeśli masz WordPress z Yoastem — jesteś bliżej niż myślisz. Yoast ogłosił współpracę z Microsoftem i integracja NLWeb wchodzi w kolejnych aktualizacjach pluginu.
Co musisz mieć żeby ścieżka Yoast działała:
Yoast SEO w aktualnej wersji — sprawdź w Pluginy → Zainstalowane. Yoast 24.x i wyżej ma NLWeb w planach roadmapy, szczegóły w changelog każdej wersji.
Poprawne Schema.org — Yoast generuje je automatycznie, ale warto sprawdzić. Wejdź na dowolną stronę produktu lub artykuł i sprawdź source HTML pod kątem <script type="application/ld+json">. Powinien zawierać @type: "Product" albo @type: "Article" z wypełnionymi polami.
Weryfikacja — po aktualizacji Yoasta wejdź na twojastrona.pl/ask?q=test. Jeśli dostaniesz JSON odpowiedź — endpoint działa.
Ścieżka 2: Biblioteka nlweb.dev (dla developerów)
Microsoft udostępnił bibliotekę Python która implementuje cały stack NLWeb. Możesz uruchomić ją przy dowolnej stronie — WordPress, Headless, statycznej, custom.
git clone https://github.com/microsoft/NLWeb
cd NLWeb
pip install -r requirements.txt
Biblioteka oczekuje danych Schema.org jako wejścia — możesz podać URL sitemapy, plik JSON-LD, albo własną bazę danych. Uruchamia serwer który wystawia /ask i /mcp.
Dla WordPressa który ma poprawne Schema.org — podajesz sitemap.xml i biblioteka sama pobiera i indeksuje dane. Całość działa lokalnie lub na własnym serwerze.
Konfiguracja modelu AI: biblioteka obsługuje OpenAI API, Azure OpenAI, Anthropic i lokalne modele przez Ollama. System prompt i logika odpowiedzi jest konfigurowalna.
Ścieżka 3: Własny endpoint /ask
Najprostsza implementacja koncepcyjnie — endpoint który bierze query param q, odpytuje własną bazę wiedzy (RAG na llms-full.txt albo Schema.org) i zwraca JSON.
W WordPress jako custom REST API endpoint:
add_action('rest_api_init', function() {
register_rest_route('nlweb/v1', '/ask', [
'methods' => 'GET',
'callback' => 'handle_nlweb_ask',
'permission_callback' => '__return_true',
]);
});
function handle_nlweb_ask(WP_REST_Request $request) {
$query = $request->get_param('q');
// Tu logika odpytywania bazy wiedzy
// Może być: RAG na llms-full.txt, Schema.org query,
// lub wywołanie zewnętrznego API
$response = query_knowledge_base($query);
return rest_ensure_response([
'query' => $query,
'answer' => $response,
'source' => home_url(),
]);
}
URL będzie wtedy: twojastrona.pl/wp-json/nlweb/v1/ask?q=pytanie
Dla zgodności z NLWeb standard endpoint powinien też odpowiadać na twojastrona.pl/ask — możesz to zrobić przez redirect w .htaccess lub Nginx config.
Testowanie — pięć komend curl
Masz endpoint. Sprawdzasz czy działa. Pięć testów które powinieneś przejść przed wdrożeniem.
Test 1: Podstawowe pytanie
curl "https://twojastrona.pl/ask?q=co+sprzedajecie"
Oczekiwany wynik: JSON z listą produktów lub usług, nie HTML, nie błąd 404.
Test 2: Pytanie o konkretny produkt
curl "https://twojastrona.pl/ask?q=ile+kosztuje+[nazwa+produktu]"
Oczekiwany wynik: JSON z ceną, dostępnością, linkiem.
Test 3: Pytanie poza zakresem
curl "https://twojastrona.pl/ask?q=jaka+jest+pogoda+w+warszawie"
Oczekiwany wynik: odpowiedź że to pytanie wykracza poza zakres strony — nie błąd serwera, nie halucynacja.
Test 4: Pusty query
curl "https://twojastrona.pl/ask?q="
Oczekiwany wynik: sensowna odpowiedź lub błąd z komunikatem — nie crash.
Test 5: Agent User-Agent
curl -H "User-Agent: Googlebot-AI/1.0" \
"https://twojastrona.pl/ask?q=produkty"
Sprawdza czy endpoint odpowiada poprawnie na żądania z agent-like User-Agent — niektóre implementacje filtrują ruch inaczej dla agentów.
Schema.org jako prerequisit
NLWeb jest tak dobry jak dane strukturalne które ma pod spodem.
Endpoint /ask odpowiadający na „jakie masz produkty dla firm poniżej 50 pracowników” może dać świetną odpowiedź — jeśli ma dane Schema.org z polem audience i description dla każdego produktu. Może dać pustą lub błędną odpowiedź — jeśli Schema.org jest niepełne.
Minimum które powinieneś mieć zanim wdrożysz NLWeb:
Dla sklepu:
{
"@type": "Product",
"name": "Nazwa produktu",
"description": "Opis który odpowiada na pytania klientów",
"offers": {
"price": "299",
"priceCurrency": "PLN",
"availability": "https://schema.org/InStock"
}
}
Dla serwisu usługowego:
{
"@type": "Service",
"name": "Nazwa usługi",
"description": "Co obejmuje, dla kogo, ile kosztuje",
"provider": {
"@type": "Organization",
"name": "Nazwa firmy"
}
}
Dla bloga/serwisu contentowego:
{
"@type": "Article",
"headline": "Tytuł",
"author": {"@type": "Person", "name": "Autor"},
"datePublished": "2026-01-15",
"description": "O czym jest artykuł — to trafi do odpowiedzi agenta"
}
Weryfikacja Schema.org: schema.org/docs/gs.html i Google Rich Results Test. Jeśli Google rich snippets działają — NLWeb ma solidną bazę.
Dlaczego to ma znaczenie dla widoczności w AI
Artykuł 2 serii (RAG vs Agent vs Agentic RAG) wyjaśniał że agenty coraz częściej odpytują zasoby bezpośrednio zamiast przez wyszukiwarki. Strona która ma /ask endpoint jest dla agenta zasobem pierwszorzędnym — nie wynikiem wyszukiwania do sparsowania, ale interfejsem który aktywnie odpowiada.
Dla GEO (Generative Engine Optimization) to jest fundamentalna zmiana:
Tradycyjne SEO: zoptymalizuj stronę żeby Google ją zindeksował i pokazał wysoko.
NLWeb: udostępnij stronę bezpośrednio dla agentów żeby mogli pytać bez pośrednika.
Strona bez NLWeb może wciąż być cytowana przez AI Overviews — przez tradycyjny indeks Google. Strona z NLWeb jest cytowana i odpytywana bezpośrednio — to jest wyższy poziom uczestnictwa w ekosystemie agentowym.
W następnym artykule serii: masz agenta, wiesz jak go zabezpieczyć, Twoja strona odpowiada agentom — ile to kosztuje w produkcji i jak to optymalizować? Token cost, model routing i obserwabilność agenta.
Pojęcia ze słownika: NLWeb · Dane strukturalne · MCP · Agent-readiness · llms.txt · GEO









![Artykuł 2 z serii "Agenci AI — od konceptu do produkcji" ← RAG, Agent AI, Agentic RAG — czym się różnią Poprzedni artykuł tej serii skończył się na rozróżnieniu: RAG odpowiada na pytanie, agent realizuje cel. Ale to rodzi pytanie które każdy kto buduje agenta zadaje sobie prędzej czy później: jak właściwie agent decyduje co zrobić dalej? Między "dostałem zadanie" a "zadanie wykonane" jest czarna skrzynka. Dla chatbota ta czarna skrzynka jest prosta — jeden prompt, jedna odpowiedź. Dla agenta to sekwencja decyzji, wywołań narzędzi i ocen wyniku która może trwać sekundy albo godziny. Żeby budować agentów świadomie — a nie przez próby i błędy — trzeba zrozumieć co jest w środku tej czarnej skrzynki. Pętla która napędza każdego agenta Zacznijmy od analogii. Wyobraź sobie że dostajesz zadanie: "Zarezerwuj mi hotel w Krakowie na weekend 14-15 czerwca, do 400 zł za noc, blisko centrum." Jak to robisz? Nie jednym ruchem. Najpierw szukasz opcji. Sprawdzasz ceny. Czytasz opinie. Może jedno miejsce ma dobry rating ale jest za drogie — odrzucasz. Drugie pasuje, ale patrzysz jeszcze na lokalizację. Potwierdzasz. Rezerwujesz. To jest pętla: obserwujesz → planujesz → działasz → oceniasz wynik → wracasz do początku. Agent AI działa identycznie. Każde wieloetapowe zadanie jest realizowane przez powtarzający się cykl czterech kroków — i ten cykl ma swoją nazwę: agent loop. Cztery kroki pętli Percepcja — agent patrzy na stan: co jest w oknie kontekstu, jakie były wyniki poprzednich akcji, co zwróciło ostatnie narzędzie, jaki jest cel. Planowanie — na podstawie tego co widzi, agent decyduje co zrobić dalej. To jest moment decyzji: czy cel jest osiągnięty? Jeśli nie — jaka akcja przybliży mnie do celu? Jakie narzędzie wywołać? Akcja — agent wykonuje to co zaplanował. Wywołuje narzędzie MCP, odpytuje bazę danych, robi request HTTP, pisze plik. Ocena — agent patrzy na wynik akcji. Czy to działało? Co teraz wiem więcej? Co jest następnym krokiem? Czy napotkałem błąd który wymaga innej strategii? I z powrotem do percepcji. Pętla kręci się dopóki agent nie osiągnie celu, nie napotka przeszkody której nie może pokonać, albo — i to jest ważne — nie przekroczy limitu iteracji. Limit iteracji jest krytyczny Agent bez limitu może kręcić się w pętli nieskończenie. Narzędzie zwraca błąd, agent próbuje jeszcze raz, i jeszcze raz, i jeszcze raz. Minuty zamieniają się w godziny. Tokeny i koszty rosną. Każdy agent produkcyjny musi mieć limit kroków po którym zatrzymuje się i raportuje do człowieka: "doszedłem do limitu X iteracji, oto co udało mi się ustalić, oto gdzie utknąłem." To jest pierwsza zasada którą ignoruje większość ludzi budujących swojego pierwszego agenta. ReAct — jak agent myśli zanim działa Teraz wiemy że agent kręci się w pętli. Ale co dokładnie dzieje się w kroku "planowanie"? Jak agent decyduje co zrobić? W 2022 roku badacze z Princeton i Google zaproponowali wzorzec który zmienił sposób budowania agentów: ReAct (Reasoning + Acting). Pomysł jest prosty do bólu: zanim agent wykona akcję, niech najpierw "powie na głos" co myśli. Generuje explicite reasoning — widoczny łańcuch myślenia — a potem na jego podstawie podejmuje decyzję o akcji. Wygląda to tak: Thought: Użytkownik chce hotelu w Krakowie na 14-15 czerwca do 400 zł. Powinienem najpierw sprawdzić dostępność. Action: search_hotels(city="Kraków", checkin="2026-06-14", checkout="2026-06-15", max_price=400) Observation: [3 wyniki: Hotel A — 380 zł, Hotel B — 350 zł, Hotel C — 420 zł] Thought: Hotel C jest za drogi. Hotel A i B mieszczą się w budżecie. Sprawdzam odległość od centrum. Action: get_location(hotel_id="hotel_A") Observation: 800m od Rynku Głównego Thought: 800m to blisko centrum. Hotel A kosztuje 380 zł i jest blisko. Rezerwuję. Action: book_hotel(hotel_id="hotel_A", dates=["2026-06-14"]) Trzy zalety ReAct które robią różnicę w praktyce: Debugging jest możliwy. Widzisz dokładnie skąd pochodzi każda decyzja agenta. Jeśli coś poszło nie tak — możesz śledzić rozumowanie krok po kroku i znaleźć moment gdzie agent zboczył z kursu. Narzędzia są wywoływane trafniej. Agent który "przemyśli" co wywołać zanim to zrobi, robi mniej błędnych wywołań niż agent który po prostu reaguje na ostatni wynik. Agent może się korygować. Reasoning jest widoczny — i agent może sam zauważyć że jego poprzedni krok był błędny, zanim podejmie kolejny. Chain-of-Thought — "myślmy krok po kroku" ReAct to wzorzec na poziomie architektury agenta. Chain-of-thought (CoT) to technika na poziomie promptowania modelu. Idea: zamiast prosić model o bezpośrednią odpowiedź, zachęć go żeby najpierw pokazał swoje obliczenia. Jak matematyk który nie podaje samego wyniku, ale zapisuje wszystkie kroki. Najprostszy możliwy CoT to dosłownie jedno zdanie dodane do promptu: "Myślmy krok po kroku." Brzmi banalnie. Ale działa — szczególnie przy zadaniach wieloetapowych, matematycznych i logicznych. Bardziej zaawansowany CoT to few-shot: dostarczasz modelowi przykłady pytanie + rozumowanie + odpowiedź, i model uczy się wzorca. Dla agentów operujących w specyficznej domenie — powiedzmy agent analizujący umowy prawne — few-shot CoT z przykładami z tej domeny jest jednym z najskuteczniejszych sposobów poprawy jakości. Extended thinking — CoT wbudowany w model Claude 3.7+ i kilka innych modeli poszło dalej: extended thinking jest wbudowane bezpośrednio w model, bez potrzeby specjalnego promptowania. Model generuje wewnętrzny długi łańcuch myślenia przed odpowiedzią — niewidoczny dla użytkownika (lub opcjonalnie widoczny). Efekt: znacząco lepsza jakość przy złożonych, wieloetapowych zadaniach — za cenę wyższej latencji i więcej tokenów. Dla agentów wykonujących skomplikowane analizy gdzie czas odpowiedzi jest mniej ważny niż poprawność — extended thinking jest naturalnym wyborem. Przykład który łączy wszystko: agent rezerwujący hotel Wróćmy do zadania: "Zarezerwuj hotel w Krakowie na 14-15 czerwca." Chatbot dostałby to pytanie i wygenerował listę hoteli z opisem. Odpowiedź tekstowa. Nic nie zarezerwował. Agent z agent loop, ReAct i dostępem do narzędzi wykonuje to zadanie od początku do końca: Iteracja 1: Percepcja → cel jasny, narzędzia dostępne. Planowanie → wywołaj search_hotels. Akcja → [wywołanie]. Ocena → 3 wyniki, Hotel C za drogi. Iteracja 2: Percepcja → mam 2 kandydatów. Planowanie → sprawdź lokalizację. Akcja → [wywołanie]. Ocena → Hotel A blisko centrum, Hotel B dalej. Iteracja 3: Percepcja → Hotel A: 380 zł, 800m od centrum. Spełnia wszystkie kryteria. Planowanie → rezerwuj. Akcja → [wywołanie book_hotel]. Ocena → rezerwacja potwierdzona, numer #KRK2026-0891. Wynik: "Zarezerwowałem Hotel A na 14-15 czerwca, 380 zł, 800m od Rynku Głównego. Numer rezerwacji: #KRK2026-0891." Trzy iteracje pętli. Trzy wywołania narzędzi. Jedno wykonane zadanie. Co to zmienia dla kogoś kto buduje agenta Zrozumienie agent loop, ReAct i CoT nie jest teorią akademicką — bezpośrednio wpływa na to jak projektujesz agenta. Agent loop mówi ci: musisz zdefiniować kryterium sukcesu (jak agent wie że skończył?), ustawić limit iteracji (co gdy agent utknął?), i zdecydować gdzie wstawić human-in-the-loop (które akcje wymagają potwierdzenia człowieka przed wykonaniem?). ReAct mówi ci: daj modelowi miejsce na reasoning zanim podejmie akcję. Nie optymalizuj prompta do minimum — reasoning kosztuje tokeny, ale zmniejsza błędy narzędziowe i ułatwia debugging gdy coś pójdzie nie tak. CoT mówi ci: przy złożonych zadaniach "myślmy krok po kroku" to nie magia — to zmiana trybu pracy modelu. Dla zadań domenowych few-shot CoT z przykładami z Twojej domeny jest wart inwestycji. W następnym artykule: agent myśli i działa — ale co pamięta? Jak działa pamięć agenta między krokami, między sesjami i między zadaniami — i dlaczego zły design pamięci jest jednym z najczęstszych błędów przy budowaniu agentów produkcyjnych. Pojęcia ze słownika: Agent loop · Chain-of-thought · Reasoning model · Tool use · Human-in-the-loop · Agent AI](https://webflux.pl/wp-content/uploads/2026/06/agent_mysli.webp)

