Jak sprawić, by witryna była gotowa na agenty
Opublikowano:
„Gotowość na agenty" oznacza trzy różne rzeczy dla trzech różnych rodzajów agentów AI — i nakładają się one na siebie. Oto dokładnie to, jak sprawiliśmy, że ten walidator jest gotowy na agenty, wraz z wdrożonym kodem, abyś mógł skopiować ten wzorzec.
Istnieją trzy niezależne warstwy. Możesz przyjąć każdą z nich osobno; razem obejmują crawlera odczytującego Twoją witrynę, agenta sterującego Twoim interfejsem w przeglądarce oraz innego agenta wywołującego Cię przez sieć.
Warstwa 1 — llms.txt: kontekst dla crawlerów
Punkt wyjścia. Zwykły plik tekstowy llms.txt w katalogu głównym informuje crawlera AI, czym jest Twoja witryna i które strony są ważne, w kolejności priorytetów. Jest odczytywany podczas pobierania — bez JavaScript, bez protokołu. Zacznij tutaj: jak go utworzyć.
Warstwa 2 — WebMCP: narzędzia dla agentów w przeglądarce
WebMCP pozwala stronie udostępniać wywoływalne narzędzia agentowi AI działającemu w przeglądarce, dzięki czemu agent wywołuje typizowaną akcję zamiast zgadywać przy formularzu. Istnieją dwa sposoby — wdrażamy oba.
Deklaratywny — oznacz prawdziwy formularz, a przeglądarka syntezuje z niego narzędzie:
<form toolname="open_llms_txt_report"
tooldescription="Validate a site's llms.txt and open its report.">
<input name="url" toolparamdescription="Domain or URL to validate">
</form>
Imperatywny — zarejestruj narzędzie w JavaScript, które bezpośrednio zwraca ustrukturyzowane dane:
navigator.modelContext?.registerTool({
name: "validate_llms_txt",
description: "Validate a website's llms.txt; returns a 0-100 score and findings.",
inputSchema: { type: "object", properties: { url: { type: "string" } }, required: ["url"] },
execute: (input) => fetch("/api/validate?url=" + encodeURIComponent(input.url))
.then(r => r.json())
.then(data => ({ content: [{ type: "text", text: JSON.stringify(data) }] }))
});
Zabezpiecz wywołanie imperatywne warunkiem if (navigator.modelContext), aby było ono neutralne tam, gdzie WebMCP jest nieobecny. Dziś jest to próba origin trial w Chrome, więc rzeczywisty zasięg jest niewielki — traktuj to jako sygnał na przyszłość, a nie ruch.
Warstwa 3 — A2A: wywoływalny agent dla innych agentów
Protokół Agent2Agent (A2A) pozwala innym agentom odkrywać i wywoływać Twoją usługę. Publikujesz kartę agenta i obsługujesz ją za pomocą punktu końcowego JSON-RPC:
// GET /.well-known/agent-card.json
{
"name": "llms.txt Validator",
"url": "https://llms-txt-validator.dev/a2a",
"skills": [{ "id": "validate_llms_txt", "name": "Validate llms.txt" }]
}
Pole url musi wskazywać na działający punkt końcowy obsługujący A2A — implementujemy synchroniczną metodę message/send, opakowując tę samą logikę walidacji jako umiejętność. Karta jest kontraktem, a nie metatagiem.
Jedna zasada: nie publikuj sygnału, którego nie możesz poprzeć
Kuszące jest wrzucenie pustej karty agenta lub fałszywych adnotacji formularza, aby zazielenić audyt. Nie rób tego. Agent, który pobiera Twoją kartę i wywołuje martwy punkt końcowy — lub wywołuje narzędzie, które nic nie robi — będzie Ci potem mniej ufał. Każdy sygnał tutaj powinien prowadzić do czegoś realnego. Dlatego właśnie ten walidator zgłasza sygnał WebMCP lub A2A jako „obecny" tylko wtedy, gdy stoi za nim działająca implementacja.
Jak zweryfikować każdą warstwę
- llms.txt — wklej swoją domenę do walidatora; dąż do wyniku 100/100 bez uszkodzonych linków.
- WebMCP — w Chrome 149+, włącz
chrome://flags/#enable-webmcp-testingi uruchom audyt Agentic Browsing w Lighthouse; Twoje narzędzia powinny być wymienione. - A2A — pobierz swój
/.well-known/agent-card.json, następnie wyślij żądanie POST z wywołaniemmessage/sendna jego adresurli potwierdź, że otrzymujesz z powrotem ukończone zadanie.