Zenn
🐡

LLMS.txt: AI時代のWebサイト最適化ガイド

2025/02/20に公開
14

3行まとめ

  • 主要なLLMプラットフォームが対応し、効率的なサイト情報提供が可能になります。
  • NotebookLMなどのツールを使って、サイトの情報を効果的に活用できます。
  • 自分のサイト2つをLLMS.txtに対応し、NotebookLMにナレッジとして組み入れて遊んでみました。

なぜLLMS.txtか?

  • 2024年末から注目度が上昇
  • 日本国内での認知度が向上
  • 主要LLMプラットフォームが積極的に対応
  • Webサイトの新しい標準として確立しつつある
  • 自分が書いたblogのRAG用データとして使えそう

LLMS.txtとは

  • LLM向けの構造化されたWebサイト情報提供ファイル
  • 2024年9月にJeremy Howard氏が提案
  • Markdown形式による構造化と標準化
  • AIが効率的に解析可能な形式
  • 詳細仕様

従来のWebファイルとの違い

ファイル 目的 対象
robots.txt クローラーのアクセス制御 検索エンジン
sitemap.xml インデックス可能なページリスト 検索エンジン
LLMS.txt サイト情報の効率的な提供 AI(LLM)

LLMS.txtとrobots.txtの仕様の関係性

  • 仕様レベルでの関係性は無い。
  • robots.txtのほうが広く知られているのでllms.txtへの参照を追加する可能性はあると思う。
  • robots.txtはRFC 9309で仕様化されているが、LLMS.txtはRFCではない。

LLMS.txtの種類

  1. /llms.txt

    • サイト構造のサマリー
    • コンパクトな情報提供
  2. /llms-full.txt

    • 完全なドキュメント内容
    • 詳細な情報を含む

llms.txtの中身の例

拡張子はtxtですが中身はMarkdownです。

# プロジェクト名

> 概要説明

## ドキュメント

- [リンクタイトル](URL): 詳細説明

## 例

- [サンプル](URL)

## その他

- [オプショナルリンク](URL)

どこまでが仕様で、どこまでが自由記述なのか分かりづらいですが、Markdownで書かれた内容はすべて自由記述です。

導入のメリット予想

  • LLMによる効率的なサイト理解と情報抽出
  • 将来のAIモデル学習時の優先的なインデックス化
  • サービスの自動化・統合の促進
    • 例:LLMを介したサービス利用の自動化
    • APIやサービス機能の効率的な活用

事例I:Anthropic

# Anthropic

## Docs

- [Get API Key](https://docs.anthropic.com/en/api/admin-api/apikeys/get-api-key)
- [List API Keys](https://docs.anthropic.com/en/api/admin-api/apikeys/list-api-keys)
- [Update API Keys](https://docs.anthropic.com/en/api/admin-api/apikeys/update-api-key)
- [Create Invite](https://docs.anthropic.com/en/api/admin-api/invites/create-invite)
- [Delete Invite](https://docs.anthropic.com/en/api/admin-api/invites/delete-invite)
- [Get Invite](https://docs.anthropic.com/en/api/admin-api/invites/get-invite)


省略

事例:Vercel

#---
title: Node.js HTTP Server
description: Learn how to use the AI SDK in a Node.js HTTP server
tags: ['api servers', 'streaming']
---

# Node.js HTTP Server

You can use the AI SDK in a Node.js HTTP server to generate text and stream it to the client.

## Examples
<snip>
<Note>
  The examples use the OpenAI `gpt-4o` model. Ensure that the OpenAI API key is
  set in the `OPENAI_API_KEY` environment variable.
</Note>

**Full example**: [github.com/vercel/ai/examples/node-http-server](https://github.com/vercel/ai/tree/main/examples/node-http-server)

### Data Stream

You can use the `pipeDataStreamToResponse` method to pipe the stream data to the server response.

省略
...

LLMS.txt対応サイトの一覧

LLMSに対応しているサイトのリストは以下で見られます。
https://llmstxt.site/
https://directory.llmstxt.cloud/

自社サービスをLLMS.txtに対応するアプローチ

  • LLMに単純にテキストファイルを作らせる
  • LLMに実装を作らせる
  • 仕様書を流用する
  • Wordpressならplugin

良さげな使い方

NotebookLMに突っ込んで、音声サマリーを作ったり、サマリーを作ったり、FAQを作ったりするのが良いとのことです。

早速試してみましょう。

個人開発しているサイト(郵便番号検索API)に導入

エンドポイントURLはこちらです。

https://postcode.teraren.com/llms.txt
https://postcode.teraren.com/llms-full.txt

Claude 3.5 Sonnetに書かせました。レポジトリのデータを元に作っているはずなのに結構間違った情報で作られたので人間が加筆修正しています。

それでもまだ足りていないですが、とりあえず主要なAPIは解説されているのでこれで良しとしてみます。

Clineでレポジトリを開いた状態で打ち込んだプロンプトは以下です。llms.txtが新しいのでClaude 3.5が知らなかったので仕様のURLを渡してます。

llms.txt作って。llms.txtの仕様は https://llmstxt.org/ です。

ソースコード抜粋

Ruby on Railsで実装しているので少しコードを追加するだけで実装できました。

一部抜粋しておきます。

@controller

+  def llms_txt
+    expires_in 1.day, public: true
+    response.content_type = 'text/markdown'
+    render template: 'home/llms', formats: [:text]
+  end
+
+  def llms_full_txt
+    expires_in 1.day, public: true
+    response.content_type = 'text/markdown'
+    render template: 'home/llms_full_txt', formats: [:text]
+  end

@routes

+  get '/llms.txt' => 'home#llms_txt', :format => false
+  get '/llms-full.txt' => 'home#llms_full_txt', :format => false

@view

+++ b/app/views/home/llms.text.erb
@@ -0,0 +1,85 @@
+# Japanese Postcode Search
+
+> A comprehensive Japanese postcode search service that provides detailed address information, including buildings and offices, with support for Japanese, kana, and romanized text.
+
+This service maintains a database of Japanese postcodes with associated address information at multiple levels (prefecture, city, 
...

NotebookLMに入れて使ってみる

短い方のドキュメントを1つ入れるだけです。

赤坂の郵便番号を調べる問い合わせ方法を聞いてみると、ちゃんと返ってきます。長ったらしいですけど。

API問い合わせのためのRubyクライアントライブラリを書かせてみました。良い感じに作ってくれました。

API問い合わせのためのgoクライアントライブラリを書かせてみました。エンティティの定義が空っぽですが作ってくれました。

WordPressで導入してみる

自社のコーポレートサイトとか、テックブログとか、SDKなどを公開する際に使えるかと思います。

プラグインをインストールして有効化するだけで完了。

こちらの個人ブログで有効化してみました。記事のタイトルの一覧と、記事のテキストがズラッと並びます。

❯ curl -s 'https://blog.teraren.com/llms.txt' | head -n 20
# Matsubo Tech Blog

> Ruby on Rails, Web Services, Software Development, Startups


## 固定ページ

- [History](https://blog.teraren.com/history-of-this-blog/): このブログのヒストリー 2003/5/2...
- [Author](https://blog.teraren.com/yuki-matsukura/): 概要 こんにちは!matsuboです。2...
- [Privacy policy](https://blog.teraren.com/privacy-policy/): 私たちについて 私たちのサイトアドレスは...
- [Copyright](https://blog.teraren.com/copyright/): https://blog. terare...
- [About Me](https://blog.teraren.com/about/): see: https://www. wa...

## 投稿

- [タブレット端末を壁掛けして情報端末として使うといろいろ捗る](https://blog.teraren.com/2024/08/27/tablet-on-the-wall/): 概要 半年ぐらい前から、壁にタブレット端...
- [Web魚拓: 「研究」と「勉強」の違い](https://blog.teraren.com/2024/08/27/diff-study-research/): 概要 過去に何度も参照している以下のペー...
- [寝室のライトを「とったらリモコン」に変更して快適子育て生活](https://blog.teraren.com/2024/08/15/downlight-remote-control/): 概要 リビングの調光スイッチを「とったら...
- [生成系AIサービスから自分のサイトをブロックする方法](https://blog.teraren.com/2024/08/02/block-llm-crawler/): サイトのトップに以下のrobots. t...

NotebookLMに入れて、LLMS.txtを元にしたサマリーを出力してみます。
レジュメにかけそうな紹介文を書いてくれてます。
(Googleのロケールが英語っぽいので英語出でてきちゃってます)

ブログの内容に関連した問い合わせをしてみます。
文章ではまとめてないけど拾ってきて理解してくれています。

会話形式のサマリーが作れます。

特に意味は無いけど、クオリティが高いです。Rebuildみたいな感じで2人が対話を聞いていくことで人間が学習できます。。
音声で人間が知識をインプットするときにはちょうど良さそう。

今回のサンプル音声

右下のところにある機能も面白いです。FAQの作成、時系列での整理などをショートカットで行えます。

LLMS.txtの考察

  • 戦略的なコンテンツ整備
    • 企業情報・サービス説明の構造化
    • 製品カタログ・技術文書の最適化
  • サービス連携の強化
    • LLMからのAPI呼び出しやサービス利用に使えそう
    • API・サービス機能の可視化
    • 他サービスに保管してあるデータを自社で運用しているRAGに入れるときのプロトコルとして使うとかも良いかもしれません
  • 将来への準備
    • AIエージェント時代への対応
    • デジタルプレゼンスの最適化
    • Search Engine OptimizationとともにLLM Optimizationの必要性が高まりそう
14
株式会社マインディア テックブログ

Discussion

ログインするとコメントできます