你是否也有過這樣的經驗:每次請求程式代理人進行修改時,都得一再重做同樣的調查,心裡總會想「這個修正到底會影響到哪裡」呢?

不少人應該都已經把公司內部的規格書或設計文件放進向量資料庫,讓代理人去搜尋了。
雖然文件內容本身通常都能正確查到,但每次提出相同問題時,都得從向量搜尋的結果重新組裝答案,所以每問一次,措辭就會微妙地變動,搜尋成本也會一點一滴累積起來——你是否也對這種感受很有共鳴呢?

作為解決這個問題的一種思路,有一個叫做「LLM Wiki」的方法。
本文將先回顧傳統搜尋型工具的限制,再整理「LLM Wiki」的概念,最後介紹如何實際執行一個名為 OpenWiki、具有類似「LLM Wiki」機制的函式庫。
內容為截至 2026 年 7 月 28 日的資訊。OpenWiki 是公開不久、更新速度很快的工具,因此命令與版本請以官方儲存庫的最新內容為準。
要讓程式碼庫被程式代理人理解,大致可分成兩種做法。
一種是在 CLAUDE.md 或 AGENTS.md 這類代理人指示檔中寫好規則。
另一種則是使用 Bedrock Knowledge Bases 或 GitNexus 這類服務/函式庫,把程式碼與文件知識化,再以搜尋工具的形式交給代理人。
這兩種方式都很方便,但各自也都有問題。

CLAUDE.md 這類文件如果不自行更新,就會逐漸過時。實作變了,但文件沒跟著變,結果不知不覺把錯誤資訊提供給代理人,這種情況就會發生。
Anthropic 的官方部落格中,列出了那些能讓程式碼庫被代理人有效理解的公司所共有的運作模式,例如:
CLAUDE.md 依資料夾分層,並保持簡潔此外,隨著 AI 模型持續更新,過去為了補足限制而寫下的舊指示,反而可能拖新模型的後腿。因此,文章也提到需要每 3~6 個月定期檢視一次。
說到底,維持指示檔的新鮮度,或是維護搜尋工具本身,最後都會成為組織層級的運作成本。
原本像 Wikipedia 這樣的 Wiki,就是有人先把資訊調查、整理好,再彙整成頁面,讓下一個想知道同樣內容的人只要讀那一頁就好。
「LLM Wiki」則是把撰寫與維護這些頁面的角色,從人類交給代理人,也就是一種由代理人維運的 Wiki。

概念本身很簡單,
就是不是在被提問時才生成資訊,而是在資料匯入時就先把資訊準備好。
RAG 是每次提問都從原始資料重新組裝答案;而 LLM Wiki 則是在一開始先讀一次來源,並把結果保留成 Markdown 頁面。
只要來源變了,更新那一頁就好。
整體架構有三層:
CLAUDE.md 或 AGENTS.md,用來指示模型 Wiki 的結構與應做的工作)
2026 年 4 月,Andrej Karpathy 在 GitHub Gist 上寫下了這個方法,並將其命名為「LLM Wiki」。
之後,Cognition 的「DeepWiki」、LangChain 的「OpenWiki」等具相似機制的工具也接連出現。
| 工具 | 開發商 | 特點 |
|---|---|---|
| DeepWiki | Cognition | 面向公開 GitHub 儲存庫,只要把 URL 中的 github.com 換成 deepwiki.com 就能產生 |
| AutoWiki | Factory | 整合進 CI/CD,程式碼更新時自動重新生成 |
| OpenWiki | LangChain | OSS,不只程式碼,還能匯入 Gmail / Notion / X 等資料;具備「Personal Brain」功能 |
| GBrain | Garry Tan | 只在 Git 儲存庫內的 Markdown 中完成的簡易版本 |
文中也有清楚寫出限制,據說當來源數量超過 100 筆時,就需要與搜尋工具搭配使用。
接下來,我實際把 OpenWiki 對準本機儲存庫跑一次看看。
OpenWiki 是 LangChain 在 2026 年 7 月 1 日公開的 OSS CLI。
GitHub 儲存庫建立於 2026 年 6 月 22 日,撰文當下的最新版本是 v0.2.4,星號數已超過 13,000,成長速度相當驚人。
它有兩種模式:針對程式碼庫的 Code mode,以及匯總 Gmail、Notion、X 等個人資料的 Personal mode;這次的目的在於理解專案程式碼,所以我使用 Code mode。
npm install -g openwiki
# or
pnpm add -g openwiki
安裝完成後,進入要初始化 openwiki 的專案,執行以下指令進行初始化:
openwiki --init
我的情況是,之前已經對另一個專案初始化過一次,所以當我在另一個專案再次執行時,系統記住了前一次的設定,並顯示出如下介面:
% openwiki --init
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ OpenWiki first-run setup │
│ Configure the model, wiki scope, and sources. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Detected from your command
✓ Run mode Code
✓ Wiki scope openwiki/
Set up
❯ Provider AWS Bedrock
✓ AWS credentials legacy Bedrock keys (take precedence)
✓ Region us-east-1
✓ Model us.anthropic.claude-sonnet-5
✓ LangSmith configured
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Prompt │
│ Choose a model provider. │
│ OpenAI (openai) default │
│ OpenAI (ChatGPT login) (openai-chatgpt) │
│ Anthropic (anthropic) │
│ GitHub Copilot (copilot) │
│ Gemini (AI Studio) (gemini) │
│ Gemini Enterprise (Vertex AI) (gemini-enterprise) │
│ OpenRouter (openrouter) │
│ OpenAI-compatible (openai-compatible) │
│ > AWS Bedrock (bedrock) │
│ Fireworks (fireworks) │
│ Baseten (baseten) │
│ Nebius Token Factory (nebius) │
│ NVIDIA NIM (nvidia) │
│ Use up/down arrows, then press Enter. │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
先說個注意事項:這次我是用 Bedrock 來初始化,但目前若使用 Bedrock,API 金鑰或 SSO 的存取金鑰無法使用。
請建立 IAM 使用者,並授予下列權限,或直接授予 AmazonBedrockFullAccess,之後使用發行出來的存取金鑰。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeModel",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:*::foundation-model/*",
"arn:aws:bedrock:{{<region>}}:{{<account-id>}}:inference-profile/*"
]
}
]
}
使用 Bedrock 時,除了 IAM 使用者的存取金鑰之外,還必須輸入要使用哪個區域、哪個模型。
另外也會出現是否將追蹤資料送到 LangSmith 的選項,不過它可以免費使用,所以建議先開啟。
你需要的是 LangSmith 的 API 金鑰,因此請到 Settings 裡的「API Keys」建立後貼上。

接著會詢問要用什麼提示詞來初始化 Wiki,不過一開始維持預設設定即可。
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Prompt │
│ Customize what this wiki should understand. │
│ Mode: Code │
│ Edit the brief below. Keep what is useful, delete what is not. │
│ │
│ Edit wiki brief │
│ ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ > A code wiki for this local repository. Prioritize a concise quickstart, architecture overview, │ │
│ │ source map, key workflows, domain concepts, operations/runbook notes, testing guidance, and │ │
│ │ integration points. Inspect git history to understand reasoning behind code changes and the │ │
│ │ progression of the repository. Keep pages grounded in the repository structure and recent code │ │
│ │ changes. Prefer practical navigation for engineers over generic summaries. │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ Press Enter to continue. │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
esc to go back
到這裡,初始化用的選項就都結束了。
接下來會出現設定選項,選擇 Run OpenWiki now 進行初始化即可。
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Prompt │
│ Setup is complete. │
│ > Run OpenWiki now │
│ Open chat │
│ Run now writes the initial openwiki/ directory. Open chat skips the initial run. │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
esc to go back
之後就會開始初始化。
如果已經串接 LangSmith,也可以在儀表板上確認追蹤資訊。
這次使用的模型是 Sonnet 5,光是初始化就花了大約 1.5 美元。

初始化完成後,主要會有三個變化。
1. 代理人說明檔(CLAUDE.md 或 AGENTS.md)中,新增了使用 OpenWiki 時的注意事項。有趣的是,這個專案同時也有使用 GitNexus,因此 GitNexus 相關內容也被結構化了,讓代理人比較不容易迷路。
CLAUDE.md
<!-- OPENWIKI:START -->
## OpenWiki
This repository uses OpenWiki for recurring code documentation. Start with `openwiki/quickstart.md`, then follow its links to architecture, workflows, domain concepts, operations, integrations, testing guidance, and source maps.
The scheduled OpenWiki GitHub Actions workflow refreshes the repository wiki. Do not hand-edit generated OpenWiki pages unless explicitly asked; prefer updating source code/docs and letting OpenWiki regenerate.
<!-- OPENWIKI:END -->
<!-- GitNexus:START -->
...GitNexusの説明
<!-- GitNexus:END -->
2. 建立了 GitHub Actions 工作流程,會依照程式碼庫的變更更新 Wiki。
3. 建立了 openwiki/ 目錄,Wiki 頁面本體會輸出到那裡。
實際在本機專案初始化後,內容大致會是這樣的結構:
index.md — 整體入口點INSTRUCTIONS.md — 要 Wiki 撰寫哪些內容的簡述quickstart.md — 快速入門頁面architecture/ — 架構總覽與主要工作流程domain/ — 領域知識operations/ — 維運與開發指南像 architecture/、domain/、operations/ 這類分類目錄內,也都會有自己的 index.md。這可以視為該章節的目錄,整理了底下各頁面的連結與簡短說明。
各個頁面(例如 quickstart.md)都會以 YAML frontmatter 附上 type、title、description、tags,因此也很適合機器處理。
quickstart.md
---
type: Quickstart
title: {project_name}快速入門
description: 說明
tags: [quickstart, overview, amplify, bedrock]
---
# {project_name}快速入門
## 這是什麼
......
另外,.last-update.json 會記錄最後更新時間、執行的命令、當時的 git HEAD,以及所使用的模型,方便追蹤 Wiki 是根據哪個時間點的程式碼撰寫而成。
.last-update.json
{
"updatedAt": "2026-07-28T01:30:33.244Z",
"command": "update",
"gitHead": "xxxx",
"model": "us.anthropic.claude-sonnet-5"
}
若要讓 Wiki 保持在最新狀態,可使用下列指令更新,不過會產生成本,請多加注意。
openwiki --update
前面介紹的是針對儲存庫程式碼的 Code mode,而 OpenWiki 還有另一個 Personal mode,可匯入個人資料並整理到 ~/.openwiki/wiki。
支援的連接器包括 Gmail、Notion、X、Web Search(透過 Tavily)、Hacker News,以及本機 Git 儲存庫;而且也可以註冊多個相同類型的連接器並並行運作。
openwiki personal --init
openwiki ingest all
初始化使用 openwiki personal --init,更新則使用 openwiki personal --update。需要 OAuth 的連接器(例如 Gmail、Notion、X 等)則必須事先用 openwiki auth <provider> 完成認證。
若要一次匯入所有連接器,就執行 openwiki ingest all;若只要特定連接器,則像 openwiki ingest web-search 這樣指定名稱執行即可。
其內部處理流程是,先只完成帶有認證資訊的網路呼叫並保存原始資料,之後再由合成用代理人讀取這些資料、重寫 Wiki 頁面,採取兩段式處理。
把需要憑證的處理與 LLM 運行的處理分開,雖然不起眼,但這樣的設計讓人很安心。
.openwikiignore 排除不想讓它讀取的路徑在儲存庫根目錄放置 .openwikiignore,就可以用與 .gitignore 相同的寫法(註解、空行、* 與 ** 的 glob、目錄指定、以及用 ! 排除)來指定不希望 Wiki 讀取的路徑。
.openwikiignore
secrets/
*.log
!logs/keep.log
指定的路徑會在檔案系統探索階段就被排除,生成的頁面中也不會出現。
不過這不算是完整的機密保護機制;文件也明確寫到,模型仍可能從測試、README、提交訊息、既有 Wiki 等其他線索,推測出被排除區域的存在並寫進頁面。
OpenWiki 預設會傳送匿名使用遙測。可蒐集的內容包括指令(init/update)與成功/失敗結果、失敗時的大致錯誤類型,以及 init 時的模式、供應商、設定的連接器名稱等;不會包含檔案內容、儲存庫名稱、認證資訊、提示詞、模型輸出、錯誤訊息全文等。
如果在意的話,可以用環境變數 OPENWIKI_TELEMETRY_DISABLED=1(或業界標準的 DO_NOT_TRACK=1)來停用。
執行時加上 --telemetry-file=<path>,也可以把實際送出的內容直接輸出到檔案中確認。
實際使用後,最讓我覺得合理的不是工具本身有多方便,而是「LLM Wiki」這個概念本身。它和每次提問都要從原始資料重新組裝答案的 RAG 不同,而是在匯入資料的當下先付一次成本。對於人類來說很快就會過時的 Wiki 維護工作,也可以交給不嫌麻煩的代理人來做,這才是核心。
先拿手邊的小型儲存庫試試看,是最快的方法。意外地,很快就能跑起來。