llms.txt vs AGENTS.md vs OKF:三種「給 AI 的 markdown」,其實在解不同問題
最近「給 AI 用的 markdown」冒出一堆:llms.txt、AGENTS.md、CLAUDE.md、OKF……我在自己的網站和 repo 裡剛好三種都用過,結果最常被問的是同一句:「是不是有了其中一個,另外幾個就不用了?」
這問題有點像我上一篇問的「OKF 是不是取代 RAG」。會混淆,是因為把不在同一層的東西擺在一起比;只要先看它們對誰說話,差別就清楚了。
llms.txt 給外部 LLM 讀網站,AGENTS.md/CLAUDE.md 指引在 repo 裡工作的 agent,OKF 則保存 agent 要用的結構化知識。三個是三層,不必三選一。
同一個框架,上一篇:OKF vs RAG vs 向量資料庫先看它們在對誰說話
把它們放回正確的位置,只要問三個問題:對誰說話、內容是什麼、什麼時候被讀。
| llms.txt | AGENTS.md / CLAUDE.md | OKF | |
|---|---|---|---|
| 對誰 | 外部 LLM(讀你公開網站) | 你 repo 裡工作的 coding agent | 需要知識的 agent |
| 是什麼 | 網站的精選地圖/索引 | 行為指令與紀律 | 結構化知識本身 |
| 範圍 | 一個檔、站層級 | 一個檔、repo 層級 | 一個目錄的概念圖 |
| 內含 | 重點頁面連結 + 簡述 | 規矩、指向哪裡 | 概念、關係、決策 |
| 何時被讀 | LLM 抓你網站時 | agent 開始工作時 | agent 需要某項知識時 |
llms.txt:把網站整理給 LLM 看
llms.txt 是放在網站根目錄的一份 markdown 地圖(規格見 llmstxt.org),讓 ChatGPT、Perplexity、Claude 這類會讀你公開網站的 LLM,快速找到你的重點內容、正確引用,而不是亂爬一通。它的對象是「外部的、讀你網站的模型」。
它不會對 coding agent 下指令,也不負責保存知識;它是一張對外的網站地圖。我替本站補了一份,內容直接從文章資料產生,所以新增文章時也會一起更新。
AGENTS.md / CLAUDE.md:是指令,不是知識
AGENTS.md(給 Codex)和 CLAUDE.md(給 Claude Code)是 coding agent 進到你 repo 時預設會載入的入口檔。它們講的是「怎麼做」:專案慣例、常用指令、規矩、以及該去哪裡找東西。它本身不放知識,它放的是行為與指向。
我就是用它們當入口,把 agent 指向自己的 OKF 知識庫:「動工前先讀 /knowledge 的相關節點」。少了這層,知識庫放在那裡也不會有人主動去讀。
OKF:知識本身
OKF 則是那份被指向的、結構化、可走訪、可版本控制的知識——一個目錄的 typed markdown,概念之間用連結串成圖。它回答的是「知識該長什麼樣子」,不是「怎麼行為」,也不是「對外怎麼被找到」。
想深入 OKF:Google OKF 會取代 RAG 與向量資料庫嗎?它們怎麼組起來(不是互相取代)
在我實際的 setup 裡,三者同時存在、各做各的:AGENTS.md/CLAUDE.md 是入口指令,把 agent 指向 OKF bundle;llms.txt 走另一條路,對外,給讀我網站的 LLM。前兩者對內、對開發 agent,llms.txt 對外,沒有誰取代誰。
實測這套怎麼運作:把 repo 做成 OKF bundle 給 agent 當記憶所以你需要哪個?
按需求對號入座:有公開網站想被 LLM 正確讀到、正確引用 → 補 llms.txt。有 coding agent 在你 repo 裡工作 → 寫 AGENTS.md/CLAUDE.md。有一批 agent 會反覆用到的結構化知識 → 做成 OKF。答案常常是「都要」,但別把其中一個當成另一個用。
所以「給 AI 的 markdown」其實是三層,不是同一種東西。與其糾結要選哪一個,不如逐層檢查:這三層,我各自補齊了沒。