AIOKFAgentsllms.txtKnowledge Management

llms.txt vs AGENTS.md vs OKF:三種「給 AI 的 markdown」,其實在解不同問題

···閱讀約 6 分鐘

最近「給 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.txtAGENTS.md / CLAUDE.mdOKF
對誰外部 LLM(讀你公開網站)你 repo 裡工作的 coding agent需要知識的 agent
是什麼網站的精選地圖/索引行為指令與紀律結構化知識本身
範圍一個檔、站層級一個檔、repo 層級一個目錄的概念圖
內含重點頁面連結 + 簡述規矩、指向哪裡概念、關係、決策
何時被讀LLM 讀你網站時(若有讀取)agent 開始工作時agent 需要某項知識時
三種「給 AI 的 markdown」
示意圖:左邊網站外,/llms.txt 是給外部 LLM 的地圖,若有讀取才用得到;右邊 repo 內,coding agent 開工時載入 CLAUDE.md 或 AGENTS.md,再被指向 knowledge/ 這個 OKF bundle
本站的三層實際長這樣:llms.txt 對外,CLAUDE.md/AGENTS.md 和 knowledge/ 對內。2026-11-04 依本站 repo 與正式站 /llms.txt 整理,KeepOnFirst 自繪。

llms.txt:把網站整理給 LLM 看

llms.txt 是放在網站根目錄的一份 markdown 地圖(規格見 llmstxt.org)。它寫給外部 LLM 讀,目的是讓模型快速找到重點內容、正確引用。它目前是提案。到 2026 年 11 月,我查不到 ChatGPT、Perplexity、Claude 這幾家業者公開確認會使用它。它的對象是「外部的、讀你網站的模型」。

規格是 Jeremy Howard 在 2024 年 9 月 3 日提出的。唯一必要的部分是一個 H1,寫專案或網站名稱。後面依序放一段 blockquote 摘要、可選的說明,再用 H2 分區列連結。每個連結項目是 markdown 清單,必須有 [名稱](網址),冒號後的說明可有可無。名為「Optional」的區塊放次要連結,模型只需要短內容時可以跳過。

它不會對 coding agent 下指令,也不負責保存知識;它是一張對外的網站地圖。我替本站補了一份,內容直接從文章資料產生,所以新增文章時也會一起更新。

AGENTS.md / CLAUDE.md:是指令,不是知識

AGENTS.md(Codex、Cursor、Gemini CLI 等多種工具會讀)和 CLAUDE.md(給 Claude Code)是 coding agent 進到你 repo 時預設會載入的入口檔。它們講的是「怎麼做」:專案慣例、常用指令、規矩、以及該去哪裡找東西。它本身不放知識,它放的是行為與指向。

我就是用它們當入口,把 agent 指向自己的 OKF 知識庫:「動工前先讀 /knowledge 的相關節點」。少了這層,知識庫放在那裡也不會有人主動去讀。

AGENTS.md 的官方站 agents.md 把它定義成「引導 coding agent 的簡單開放格式」。它沒有必填欄位,就是一般的 markdown。monorepo 裡可以放好幾份,離正在改的檔案最近的那份優先,每個子專案都能有自己的規矩。

OKF:知識本身

OKF 則是那份被指向的、結構化、可走訪、可版本控制的知識——一個目錄的 typed markdown,概念之間用連結串成圖。它回答的是「知識該長什麼樣子」,不是「怎麼行為」,也不是「對外怎麼被找到」。

想深入 OKF:Google OKF 會取代 RAG 與向量資料庫嗎?

實例:本站這三個檔實際寫了什麼

以下是 2026 年 11 月 4 日本站的狀態。先看對外那份。正式站的 /llms.txt 開頭是 H1「# KeepOnFirst」。接著是兩行 blockquote,中文摘要一行、英文摘要一行。然後是 7 個 H2 區塊:Articles、Guides、Tools、Apps、Signals、About、Knowledge。Articles 底下列了 79 篇文章,每篇一行。

markdown
# KeepOnFirst
> (中文一行摘要)
> (英文一行摘要)

## Articles
- [文章標題](https://keeponfirst.com/article/<slug>): 摘要第一段的前幾句

## Guides
## Tools
## Apps
## Signals
## About
## Knowledge

這份檔沒有人手寫。build 腳本讀可被搜尋收錄的中文文章,一篇產生一行,標題、網址、摘要都從文章資料來。設成不收錄的頁面不會出現,遊戲頁也不放。

再看對內那兩份。本站的 CLAUDE.md 不到 10 行,主要講三件事。第一,去讀 AGENTS.md。第二,記憶在 /knowledge。第三,部署等於 push 到 main。AGENTS.md 多寫幾條必須先知道的規矩,例如 build 末段有兩道閘門,別繞過。兩份都很短,因為它們只負責指路。

markdown
重點:這個 repo 的持久記憶是 /knowledge 的 OKF bundle。
- 動工前先讀 knowledge/index.md 並走訪相關節點,不要憑空重猜架構。
- 改完後更新受影響的節點。

被指向的 knowledge/ 才是內容所在。index.md 的 frontmatter 只寫 okf_version。底下列了 24 個節點,分成幾組:架構、參考、資料管線、雷區、操作、寫作等。每個節點自己有 type、title、description。agent 改文章資料前讀〈文章資料模型〉,要上線前讀〈部署〉,不用一次讀完。這個目錄只在 repo 裡,不對外公開。

想自己寫一份:OKF bundle 怎麼寫,一個目錄、三條規則

改了什麼,就改哪一層

分層最實際的用處,是知道一件事該寫進哪個檔。下表是本站實際遇過的三種變動。

發生什麼事要改的地方原因
新增一篇文章不用手動改;llms.txt 下次 build 自動多一行它從文章資料產生
部署方式或必守規矩變了AGENTS.md/CLAUDE.md 加一句agent 每次開工都要先知道
踩到新雷:文章來源欄只有 label 和 url,沒有 noteknowledge/ 的對應節點只有改到那塊程式時才需要讀
三種變動各改哪一層(本站實例)

第三列如果寫進 AGENTS.md,每個任務都要多讀一段用不到的細節。寫進 llms.txt 更糟,那是給外部讀者的,內部雷區不該出現在那裡。

它們怎麼組起來(不是互相取代)

在我實際的 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」其實是三層,不是同一種東西。與其糾結要選哪一個,不如逐層檢查:這三層,我各自補齊了沒。