Урок 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 (чеклист ревью), git-workflow (типичные git-паттерны)… Интуитивный подход: всё склеить в system prompt, чтобы модель обращалась к ним в любой момент.

Результат:

  • Каждый вызов сжигает 15–30K входных токенов (даже если вопрос не требует ни одного skill).
  • Внимание модели размывается — соблюдение правил из длинного system prompt ухудшается.
  • Изменение одного skill инвалидирует весь кеш всех историй диалогов.

Решение s05 — разбить на два уровня.

Двухуровневая архитектура

Уровень 1 · дёшево: в system prompt — только название skill и однострочное описание (около 100 токенов на skill). 20 skill = 2K токенов — терпимо.

# Список skill в system prompt
Skills available:
  - pdf: Process PDF files. Extract text, tables, metadata.
  - code-review: Systematic code review checklist.
  - git-workflow: Common git branching and rebase patterns.

Уровень 2 · по требованию: когда нужен конкретный skill, модель вызывает load_skill(name="pdf"), и полное тело skill (5–10K токенов) попадает в контекст через tool_result. Неиспользованные skill не загружаются вообще.

# Полный skill возвращается в tool_result
<skill name="pdf">
  Step 1: Use pdfplumber for extraction...
  Step 2: Handle OCR fallback when needed...
  Step 3: Structure output as Markdown table...
</skill>

Сравнение стоимости в токенах

Проверим на реальном сценарии. Допустим, у вас 20 skill со средним телом 3000 токенов. Пользователь задаёт вопрос (например, «исправь баг в эндпоинте логина») — этот вопрос, скорее всего, не требует ни одного 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 используется уровнем 1 (name/description/tags), тело — уровнем 2. Этот подход навеян статическими генераторами сайтов (Jekyll, Hugo) — кто с ними знаком, сразу всё поймёт.

Интерактив

Виджет 1 · Token Economy · сравнение двух архитектур

Слева: всё в system prompt. Справа: двухуровневая архитектура. Посмотрите на суммарный расход токенов за 20 диалогов.

Всё в system prompt
System prompt: 60000 токенов
(20 skill × 3000 токенов — всё загружено)
× количество диалогов: 1

Итого: 60000 токенов
Двухуровневая архитектура
System prompt: 2000 токенов
(20 описаний × ~100 токенов)
+ загруженные тела skill: 0 токенов
(загрузка каждые 5 диалогов)

Итого: 2000 токенов
1
Экономия: 0%
Интерактив

Виджет 2 · Frontmatter Parser · извлечение метаданных skill

Введите SKILL.md и посмотрите, что получают уровень 1 и уровень 2 согласно логике парсинга из s05.

SKILL.md (редактируемо)
Уровень 1 · попадает в system prompt

          
Уровень 2 · tool_result при load_skill

          
Интерактив

Виджет 3 · Discoverability · хорошее описание = модель найдёт skill

Описание уровня 1 — это то, по чему модель выбирает skill. Три пары вариантов: выберите лучший. Некоторые формулировки сделают skill невидимым.

Правильно: 0 / 3