15. References 上下文資料引用

References 是「把大量參考資料組織給 Claude,按需讀」的一整套機制——核心目標是避免上下文爆掉,讓 Claude 看到的內容剛好夠用。 我們今天精簡 PAM CLAUDE.md(650 行 + 5 個 rules)就是用了這個原則。


15.1 為什麼需要 Reference 機制

Claude 的 context window 大但不無限:

情境:你問 Claude「PAM 通知功能要怎麼擴充?」

❌ 把所有東西塞 context:
  CLAUDE.md(670 行)
  + Models.cs(2000 行)
  + 所有 Controller(10000 行)
  + 所有 Service(5000 行)
  + Docs/(30 份文件)
  → 17,000+ 行 → 撐爆 context window
  → 即使沒爆,注意力也分散

✅ Reference 模式:
  CLAUDE.md(650 行,含「通知系統 → 詳見 NOTIFICATION.md」)
  + 按需讀 Docs/dev/NOTIFICATION.md
  → 800-1000 行 → 焦點集中

→ Reference 是「目錄 + 按需讀全文」的設計策略。


15.2 三大 Reference 機制

機制何時觸發寫法適用
A. @filename 對話引用你打 @xx 時即刻載入@Docs/dev/PROTECTION.md一次性、即時、你決定
B. Skill references/ 子資料夾Skill 啟動時 Claude 自動評估要不要讀skills/X/references/*.mdSkill 內常用文件
C. CLAUDE.md → Docs/ 文字 refClaude 看到 ref 行,按需主動 Read📖 詳見 [Docs/dev/X.md]系統文檔大綱

→ 三者並存互補,不衝突。


15.3 機制 A:@filename 對話引用

寫法

對話中打:

@Controllers/HrController.cs
@Docs/dev/PROTECTION.md
@~/Notes/meeting-2026-04-25.md

→ Claude 在當前訊息完整載入該檔案內容,作為討論基礎。

適用情境

情境範例
一次性 review 某檔案「@HrController.cs 找出所有 SQL 注入風險」
對比兩份文件「@old-spec.md 跟 @new-spec.md 哪裡不同」
即興討論最新文件「@meeting-notes.md 這份會議我有什麼 action item」

跟 Read tool 的差異

@filenameClaude 主動 Read
觸發你打字Claude 判斷該讀
訊息可見顯示 @xxx內部 tool call
適合你「點名」要 Claude 看的檔案Claude 自主探索

限制

  • 只能用於 Claude Code(Cowork 對話內也支援)
  • 大檔案會佔大量 context(用前要評估)
  • 整檔載入,不能只取片段(要片段請用 Read with offset/limit)

15.4 機制 B:Skill references/ 子資料夾

結構

skills/
├── wiki-ingest/
│   ├── SKILL.md                 ← 主規範(必讀)
│   └── references/              ← 子資料(按需讀)
│       ├── frontmatter-spec.md
│       ├── link-format.md
│       └── examples.md
├── wiki-compile/
│   ├── SKILL.md
│   └── references/
│       ├── chapter-detection.md
│       └── map-generation.md

設計哲學

內容類型該放哪
觸發條件 + 步驟總覽SKILL.md(永遠讀)
細節規範 / 邊界 casereferences/X.md(按需讀)
範例 / 範本references/examples.md
故障排除references/troubleshooting.md

→ SKILL.md 保持精簡(< 100 行),細節分散在 references/。

Claude 怎麼決定要讀

當 Skill 觸發時,Claude 看到 SKILL.md 提到:

## 詳細規格
 
frontmatter 規格 → 見 `references/frontmatter-spec.md`
連結格式 → 見 `references/link-format.md`
完整範例 → 見 `references/examples.md`

→ Claude 評估當前任務需要哪些,逐一 Read。

範例:今天打包的 plugin

karpathy-wiki-pattern.plugin 的 4 個 skill 都用了這個結構:

wiki-ingest/
├── SKILL.md          ← 觸發 + 6 步驟
└── references/
    └── (具體規範)

wiki-compile/
├── SKILL.md          ← 觸發 + 流程
└── references/
    └── (細節)

15.5 機制 C:CLAUDE.md → Docs/ 文字 ref

寫法(PAM 實例)

## 強制面談流程
 
候選人(乙丙等)→ HR確認面談名單 → 自動產PDF → ...
 
📖 完整規格(含 PDF 套表欄位、gen_import 匯出規則):[Docs/dev/INTERVIEW.md](Docs/dev/INTERVIEW.md)

Claude 行為

讀到「📖 完整規格:[Docs/dev/INTERVIEW.md]」後:

  1. 不會自動 Read — 等你的任務確實需要才讀
  2. 你問「面談 PDF 缺一欄」→ Claude 才 Read INTERVIEW.md
  3. 你問「修改面談流程的某個 SQL」→ 不必 Read INTERVIEW.md,直接動 code

→ ref 等於「你能找到完整資料的地址」,但不強制每次讀。

寫好 ref 的 3 個原則

  1. 動詞清楚:「📖 完整規格」/「📋 API 對照」/「🔧 故障排除」——讓 Claude 一眼判斷該不該讀
  2. 括號加情境:「(含 PDF 套表欄位、gen_import 匯出規則)」——告訴 Claude 這份文件涵蓋什麼
  3. 路徑可點:用 markdown link 格式 [文字](path) 比純路徑好讀

PAM CLAUDE.md 內已有的 ref(節錄)

| 文件 | 內容 | 何時讀取 |
|------|------|---------|
| API_REFERENCE.md | 160+ API 端點完整清單 | 新增/修改 API 時 |
| DATABASE.md | 29 DbSet 資料表清單 | 查詢資料表結構時 |
| NOTIFICATION.md | 催繳通知系統、範本變數 | 修改通知功能時 |
| EXCEL_IMPORT.md | Excel 匯入規格 + 104 整合 | 修改匯入功能時 |
| ...(共 14 份)

→ 一個整潔的 reference 索引表,比塞 14 份內容到 CLAUDE.md 好太多。


15.6 三機制何時用哪個?

你打字明確指定 1 個檔案
  → 機制 A(@filename)

任務在 skill 範圍內,需要該 skill 的細節文件
  → 機制 B(skill references/)

跨多個任務都會被引用的系統文檔
  → 機制 C(CLAUDE.md → Docs/ ref)

實際上通常並用

場景用到的機制
修 PAM 面談 bugC 找路徑 → A 載入 INTERVIEW.md → 動 code
寫新 skillB 在新 skill 加 references/
想看歷史 commitA 直接 @CHANGELOG.md
全新模組規劃C 在 CLAUDE.md 新增 ref 行

15.7 跟 Rules / Skills / CLAUDE.md 的差異

              Claude 上下文層次

CLAUDE.md     ← 永遠讀(系統概覽 + 業務規則 + ref 索引)
   │
   ├─→ Rules  ← 條件式啟用(紅線、禁忌)
   │
   ├─→ Skills ← 任務式啟用(操作 SOP)
   │     │
   │     └─→ references/  ← skill 內細節(按需讀)
   │
   ├─→ @filename ← 你即時點名載入
   │
   └─→ Docs/  ← 透過 ref 讓 Claude 按需 Read

4 者本質差異

何時生效內容類型
CLAUDE.md永遠系統性、business rules
Rules條件(glob/desc)紅線、禁忌、規範
Skills任務描述匹配操作步驟、SOP
References你或 Claude 主動讀細節、規格、範例

不衝突,互補設計


15.8 避免上下文爆掉的策略

策略 1:分層 ref,不重複

CLAUDE.md:
  「面談流程概覽 → 詳見 INTERVIEW.md」(10 行)

INTERVIEW.md:
  「PDF 套表詳細欄位 → 詳見 INTERVIEW_PDF_FIELDS.md」(200 行)

INTERVIEW_PDF_FIELDS.md:
  「(最細節 600 行)」

→ Claude 只讀到當前任務需要的層級,不過度展開。

策略 2:強類型 ref(讓 Claude 判斷準)

❌ 不夠好:

更多資訊:[X.md](X.md)

✅ 強類型:

📖 完整規格(含資料庫 schema + API endpoint):[X.md](X.md)
🔧 故障排除(常見錯誤 + log 解讀):[Y.md](Y.md)
📋 API 對照表(160+ endpoints):[Z.md](Z.md)

→ Claude 看標籤就知道要不要讀。

策略 3:references/ 內檔案命名講重點

details.md / notes.md — 看不出什麼內容 ✅ frontmatter-spec.md / link-format.md / error-cases.md — 自帶語意

→ Claude 從檔名就能判斷該讀哪個。

策略 4:定期 audit ref 健康度

問自己:

  • 哪些 ref 超過 6 個月沒被讀?→ 可能可以合併或刪
  • 哪些 ref 經常被讀全文?→ 可能該移回 CLAUDE.md
  • 哪些 ref 名稱不清楚?→ 改名

15.9 PAM 已有的 Reference 結構

ExamSystem/
├── CLAUDE.md(650 行)
│   ├── 規則總覽 → .claude/rules/*.md(5 個 rule)
│   ├── 強制面談流程 → 📖 Docs/dev/INTERVIEW.md
│   ├── 主管交接 → 📖 Docs/dev/REVIEWER_TRANSFER.md
│   ├── 公告系統 → 📖 Docs/dev/ANNOUNCEMENT.md
│   ├── 標語系統 → 📖 Docs/dev/TAGLINE.md
│   ├── 今日要事 → 📖 Docs/dev/TODAY_PAGE.md
│   ├── 人員管理保護 → 📖 Docs/dev/PROTECTION.md
│   ├── 超額說明歷程 → 📖 Docs/dev/OVERRIDE_LOG.md
│   ├── 考核結案報表 → 📖 Docs/dev/EXAM_REPORT.md
│   └── ...(共 14 份 Docs/dev ref)
├── .claude/rules/
│   └── (5 個 rule,每個 < 15 行)
└── Docs/dev/
    ├── API_REFERENCE.md
    ├── DATABASE.md
    ├── PAGES.md
    ├── DEPLOY.md
    ├── NOTIFICATION.md
    ├── EXCEL_IMPORT.md
    ├── CHANGELOG.md
    ├── EXAM_REPORT.md
    ├── REVIEWER_TRANSFER.md
    ├── TODAY_PAGE.md
    ├── PROTECTION.md
    ├── OVERRIDE_LOG.md
    ├── INTERVIEW.md
    ├── ANNOUNCEMENT.md
    ├── TAGLINE.md
    ├── COORDINATOR.md
    ├── 104_WRITEBACK_FLOW.md
    └── EXAM_FORM_PDF.md

設計

  • CLAUDE.md = 系統概覽 + ref 索引(永遠讀)
  • rules = 紅線(按 glob 觸發)
  • Docs/dev = 細節規格(按 ref 在需要時 Read)

→ 任何任務 Claude 看到的 context 都剛好夠用。


15.10 為新模組設計 Reference 的工作流

當你開始一個新模組(假設「績效面談 v2」)時:

Step 1:在 CLAUDE.md 加大綱段

## 績效面談 v2
 
升級面談流程,加入線上簽核 + DocuSign 整合 + 自動催繳。
 
📖 完整規格:[Docs/dev/INTERVIEW_V2.md](Docs/dev/INTERVIEW_V2.md)

Step 2:寫詳細 spec 到 Docs/dev/INTERVIEW_V2.md

# 績效面談 v2 規格
 
## 流程
...
## 資料結構
...
## API
...
## 邊界 case
...

Step 3:如果有跨檔案紅線,加 rule

# .claude/rules/06-interview-v2.md
---
glob: "Services/InterviewV2*|Controllers/InterviewV2*"
---
 
- 簽核流程不可繞過 DocuSign callback
- 催繳排程必須冪等(避免重複寄)

Step 4:如果有反覆使用的範本,放到 references/

skills/interview-followup/
├── SKILL.md
└── references/
    ├── docusign-callback.md
    └── reminder-template.md

CLAUDE.md 只多 5 行 ref,但 Claude 在做 v2 任務時能拿到完整 60 頁規格。


15.11 何時該用 Reference 機制

  • ❌ 規則只有 10 行 → 直接寫 CLAUDE.md,不必 ref 出去
  • ❌ 一次性訊息(如「這次只動前端」)→ inline 對話即可
  • ❌ 一年改一次的東西 → 內嵌即可,ref 反而增加維護成本
  • ❌ 互不相關的多份文件並列 → 不要硬連,分開存就好

Reference 是「分層管理」,不是「為了 ref 而 ref」。


15.12 常見錯誤

❌ 錯誤影響✅ 正確
ref 路徑不對Claude 找不到,回頭問你用相對路徑 + 確認檔案存在
ref 沒寫情境Claude 不知道何時讀加「📖 含 X / Y / Z 內容」說明
檔案太大塞滿 references/失去精簡效果一個 reference 應 < 200 行
@filename 載超大檔一次吃光 context用 Read with offset/limit
Docs/ 用過時內容誤導 Claude定期 audit + 加 last-updated

15.13 Vincent 應用建議

短期(已做)

  • ✅ PAM CLAUDE.md 14 個 Docs/dev ref(系統文檔)
  • ✅ .claude/rules/ 5 個 rule(紅線)
  • ✅ 4 個 skill 各自 references/(plugin 內)

中期

  • 🟡 為 PAM 14 份 Docs/dev/ 寫一致的「📖 含 X / Y / Z」標準格式
  • 🟡 audit 哪些 ref 半年沒被觸動 → 評估合併

長期

  • ⏸ 把 PAM Docs/dev/ 整套打包成 plugin 的 references/
  • ⏸ 跨專案共用的 ref(年代集團 IT 通用規範)

進階主題


← 上一章:14-Rules 規則目錄 | 回到 README