如何讓網站為 AI 代理做好準備
發佈:
「代理就緒」對三種不同類型的 AI 代理意味著三件不同的事——而且可以疊加使用。以下是我們如何讓這個驗證器達到代理就緒狀態的完整說明,包含我們實際部署的程式碼,供您直接套用這個模式。
共有三個獨立的層次。您可以單獨採用任意一個;三者合用則能涵蓋:爬取您網站的爬蟲、在瀏覽器中驅動 UI 的代理,以及透過網路呼叫您的另一個代理。
第一層 — llms.txt:為爬蟲提供上下文
這是基礎。放在根目錄的純文字 llms.txt 能告訴 AI 爬蟲您的網站是什麼,以及哪些頁面最重要,並依優先順序排列。它在擷取時讀取——不需要 JavaScript,也不需要任何協定。從這裡開始:如何建立 llms.txt。
第二層 — WebMCP:為瀏覽器內代理提供工具
WebMCP 讓頁面能向在瀏覽器中執行的 AI 代理公開可呼叫的工具,使代理能呼叫型別明確的動作,而非猜測您的表單。有兩種方式,我們兩種都採用。
宣告式——為真實表單加上標註,瀏覽器即會從中合成工具:
<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>
命令式——在 JavaScript 中註冊一個工具,直接回傳結構化資料:
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) }] }))
});
請將命令式呼叫包在 if (navigator.modelContext) 判斷後,讓它在不支援 WebMCP 的環境中無害地略過。這目前是 Chrome 的 Origin Trial,實際覆蓋範圍仍小——請將其視為前瞻性訊號,而非流量來源。
第三層 — A2A:供其他代理呼叫的代理端點
Agent2Agent(A2A)協定讓其他代理能探索並呼叫您的服務。您需要發布一個代理卡,並以 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" }]
}
url 必須指向一個能實際回應 A2A 的端點——我們實作了同步式 message/send 方法,將相同的驗證邏輯包裝成一個技能。代理卡是一份契約,不是 meta 標籤。
唯一的規則:不要發布您無法兌現的訊號
或許您會想放一個空的代理卡或偽造表單標註,讓審核變成綠燈。請不要這樣做。一個代理在擷取您的卡片並呼叫到失效端點、或呼叫了無實際作用的工具之後,往後對您的信任度只會降低。這裡的每個訊號都應該能對應到真實的東西。這正是為什麼這個驗證器只有在背後有可運作實作的情況下,才會將 WebMCP 或 A2A 訊號回報為「存在」。
如何驗證每一層
- llms.txt——將您的網域貼入驗證器;目標是 100/100 且沒有失效連結。
- WebMCP——在 Chrome 149+ 中啟用
chrome://flags/#enable-webmcp-testing,並執行 Lighthouse 的 Agentic Browsing 稽核;您的工具應顯示在清單中。 - A2A——擷取您的
/.well-known/agent-card.json,然後向其urlPOST 一個message/send呼叫,並確認您收到一個已完成的任務回應。