AIエージェントにMarkdownを効率的に届ける:Acceptヘッダー活用術
Serve Markdown to AI Agents with Accept Headers
Serve Markdown to AI Agents with Accept Headers
AIエージェント向けにコンテンツを配信する際、Acceptヘッダーを活用してMarkdown形式をスマートに制御する方法について解説します。これにより、APIやWebサーバー側でAIにとって最適なフォーマットを自動的に判断させることが可能です。
これがメインストリームになってくれれば、広告やJS、不要なデータに悩まされずにページを閲覧できるから期待してる。
AI抜きにしても、これは便利な機能になりそう。
主要な4大AIチャットボットがこのヘッダーでリクエストを送るようになると明言したらやるつもり。それまでは、採用されるあてもないただの面白いアイデアに過ぎないよ。それに、主要4社がわざわざこんな方法でウェブサイトを読み込むとは思えないな。何年も経っても普及率が0.01%程度なら、リスクが大きすぎるからね。
やあ……データへのアクセスを楽にしたいAI企業さん、こんにちは。
シンプルでセマンティックなHTMLじゃダメなの?ボットや検索エンジン(これもボットだけど)向けに最適化されて何十年も使われてきたものなのに、なぜ今Markdownで提供する必要があるんだ?それに、HTMLにはnavタグみたいにボットやAIにとって役立つ要素がたくさんあるけど、Markdown版だと削除されちゃう可能性があるよね。
正気じゃない気がする。まともな人間がLLMに生のHTMLを食わせようとするかな??HTMLはマークアップ言語であって、ユーザーエージェントがユーザーにとって意味のある形で(視覚的、あるいは支援技術を通じて)提示するものだ。LLMという「ユーザー」が増えたからといってその本質は変わらない。LLMのユーザーエージェントやハーネス側が、HTMLをMarkdownに変換してネイティブに理解できる形にして提示すべきなんだよ。npmからHTMLをMarkdownにするパッケージを引っ張ってくるのが面倒か無能か知らないけど、そんな理由でウェブ全体を書き換えるなんてありえない。もしサイト側が勝手にやるならそれはそれでいいし、個人的にはCSSやJSを飛ばして直接Markdownを(それも綺麗にフォーマットされたものを)読めるなら大歓迎だけど。自分たちのハーネスが無駄にトークンを消費しているのを、ウェブサイト制作者のせいにするのは筋違いだよ。
ロイ・フィールディング(Roy Fielding)のこの意見に同意だね。
リクエストのたびにヘッダーフィールドを大量に送って、サーバーにユーザーのあらゆる好みのバリエーションを伝えるのは設計として悪手だよ。特に、そのリクエスト先のターゲットリソースに適用できる可能性が極めて低い場合はね。これは1993年から94年の短い期間、どの画像フォーマットが全てのUAで使えるか分からず、クライアント側で調整するCSSもJavaScriptもなかった時代から続くひどい設計だよ。
……プロアクティブなネゴシエーションがキャッシュに与える悪影響は、リアクティブなネゴシエーションでサイトごとに1往復増えることよりずっとひどい。そもそもクライアント側で調整できるフォーマットなら、そんな往復すら必要ないんだ。
キャッシュへの影響についてはサイモン・ウィリソン(Simon Willison)がこう書いている。
……例えば、受け入れ可能なContent-Typeヘッダーに応じてJSONやHTMLを出し分けるような、Acceptヘッダーを使ったコンテンツネゴシエーションをするアプリをCloudflare CDNの裏側で動かすことはできない。そんなことをすれば、CloudflareがHTMLクライアントにキャッシュされたJSONを返したり、その逆が起きたりする可能性があるからね。
補足:これ以前別のコメントにリンク付きで投稿したんだけど、今コピーしにくいから後で追記する。
全てはCloudflare次第だよ。もし彼らが同じホスト名でGeminiをサポートしてくれれば、どこでもそれを提供するし、text/plainやtext/htmlをどこでもサポートしてくれればそうする。でも彼らはコンテンツエンコーディングごとのキャッシュには対応してないから、彼らの仕組みに合わせて動くようにしているだけ。彼らは私にとってあまりにも便利すぎるからね。
いや、やるつもりはないよ。私が公開しているのは人間向けであって、ボット向けじゃないから。
最悪のシナリオとしては、これが悪用されて、LLMにゴミのような回答(あるいはもっとひどいもの)を学習させるために使われることだろうな。