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.

bash
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:

php
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

bash
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

bash
curl "https://twojastrona.pl/ask?q=ile+kosztuje+[nazwa+produktu]"

Oczekiwany wynik: JSON z ceną, dostępnością, linkiem.

Test 3: Pytanie poza zakresem

bash
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

bash
curl "https://twojastrona.pl/ask?q="

Oczekiwany wynik: sensowna odpowiedź lub błąd z komunikatem — nie crash.

Test 5: Agent User-Agent

bash
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:

json
{
  "@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:

json
{
  "@type": "Service",
  "name": "Nazwa usługi",
  "description": "Co obejmuje, dla kogo, ile kosztuje",
  "provider": {
    "@type": "Organization",
    "name": "Nazwa firmy"
  }
}

Dla bloga/serwisu contentowego:

json
{
  "@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

Spis treści

Google Antigravity 2.0 — opis narzędzia

Google Antigravity 2.0 — opis narzędzia

Platforma Google do orkiestrowania wielu agentów AI — ogłoszona na Google I/O 19 maja 2026. Antigravity 1.0 (listopad 2025) był IDE konkurującym z Cursor. Antigravity 2.0 wyszedł z tej kategorii — to nie jest narzędzie do pisania kodu z pomocą AI, to platforma do...