Lesson 05 · 規劃

按需加載的領域知識

「Don't put everything in the system prompt. Load on demand.」

⏱ 約 10 分鐘 · 📝 3 個可互動元件 · 🧑‍💻 基於 shareAI-lab · s05_skill_loading.py

"全塞 system prompt" 的坑

你有 20 個 skill,每個寫得挺詳細:pdf-processing(怎麼讀 PDF)、code-review(review 的 checklist)、git-workflow(常用 git 套路)…直覺做法:全部拼進 system prompt,讓模型隨時查閱。

結果:

  • 每次呼叫都燒掉 15-30K 輸入 token(即使問題根本用不上任何 skill)。
  • 模型注意力被稀釋-長 system prompt 裡提及的規則,服從度會下降。
  • 改一個 skill,所有歷史對話的快取全作廢。

s05 的做法是把它拆成兩層

兩層架構

Layer 1 · 便宜:system prompt 裡只放 skill 的名字和一句話描述(每個約 100 token)。 20 個 skill = 2K token,可接受。

# 系统提示里的 skill 清单
Skills available:
  - pdf: Process PDF files. Extract text, tables, metadata.
  - code-review: Systematic code review checklist.
  - git-workflow: Common git branching and rebase patterns.

Layer 2 · 按需:模型要用某個 skill 時,調 load_skill(name="pdf"),完整 skill body(可能 5-10K token)透過 tool_result 塞進上下文。沒用到的 skill 一個 token 都不載。

# tool_result 里返回完整 skill
<skill name="pdf">
  Step 1: Use pdfplumber for extraction...
  Step 2: Handle OCR fallback when needed...
  Step 3: Structure output as Markdown table...
</skill>

比較 token 成本

真實場景測一下。假設你有 20 個 skill,每個 body 平均 3000 token。使用者問一個問題(例如「改一下登入介面的 bug」)-這個問題大概用不上任何 skill。

SKILL.md 的格式

skill 文件用 YAML frontmatter + 正文:

---
name: pdf
description: Process PDF files. Extract text, tables, metadata.
tags: document,parsing
---

Step 1: Use pdfplumber for extraction. Handle multi-column layouts...
Step 2: For scanned PDFs, fall back to OCR via tesseract...

frontmatter 給 Layer 1 用(name/description/tags),正文給 Layer 2 用。這種寫法靈感來自靜態部落格(Jekyll、Hugo),熟悉的人一看就懂。

Interactive

Widget 1 · Token Economy · 兩種架構對比

左邊:全塞 system prompt。右邊:兩層架構。看 20 次對話後的累積 token。

全塞 system prompt
System prompt: 60000 tokens
(20 × 3000 token 的 skill 全塞入)
× 对话次数: 1

总计: 60000 tokens
两层架构
System prompt: 2000 tokens
(20 个描述 × ~100 token 每个)
+ 按需加载的 skill body: 0 tokens
(每 5 次对话触发一次)

总计: 2000 tokens
1
省 0%
Interactive

Widget 2 · Frontmatter Parser · 擷取 skill 元數據

輸入一個 SKILL.md,用 s05 裡的 YAML frontmatter 解析邏輯看 Layer 1 和 Layer 2 分別拿到什麼。

SKILL.md(可编辑)
Layer 1 · system prompt 里塞这个

          
Layer 2 · load_skill 时的 tool_result

          
Interactive

Widget 3 · Discoverability · skill 描述寫好,模型才找得到

Layer 1 的描述就是模型挑 skill 的依據。給你 3 組對比,選寫得更好的那個——有些寫法會讓模型永遠找不到這個 skill。

答对 0 / 3