Lesson 05 · 計画

必要なときだけ読み込むドメイン知識

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

⏱ 約 10 分 · 📝 3 つのインタラクティブ要素 · 🧑‍💻 出典 shareAI-lab · s05_skill_loading.py

「全部 system prompt に詰め込む」の落とし穴

skill が20個ある。それぞれ内容が充実している:pdf-processing(PDF の読み方)、code-review(review のチェックリスト)、git-workflow(よく使う git のパターン)……直感的なアプローチ:全部 system prompt に連結して、モデルがいつでも参照できるようにする。

結果:

  • 毎回の呼び出しで15〜30K の入力 token を消費する(問いがどの skill も使わない内容でも)。
  • モデルの注意力が希薄化する——長い system prompt に書かれたルールへの従順さは低下する。
  • 一つの skill を修正するたびに、過去の会話のキャッシュがすべて無効化される。

s05 のアプローチは2層に分割することだ。

2層アーキテクチャ

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 本文(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 コストの比較

実際のシナリオで確認しよう。skill が20個あり、各本文の平均は3000 token とする。ユーザーが何かを質問したとき(例:「ログインエンドポイントのバグを直して」)——この質問はおそらくどの 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 · 2つのアーキテクチャの比較

左側:全部 system prompt に詰め込む。右側:2層アーキテクチャ。20回の会話後の累積 token を確認しよう。

全部 system prompt に詰め込む
System prompt: 60000 tokens
(20 × 3000 token の skill をすべて挿入)
× 会話回数: 1

合計: 60000 tokens
2層アーキテクチャ
System prompt: 2000 tokens
(20個の説明 × 約100 token 各)
+ オンデマンドで読み込んだ skill 本文: 0 tokens
5 回に1回の割合で発火)

合計: 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