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