Доменные знания — загружать по требованию
«Don't put everything in the system prompt. Load on demand.»
Подводные камни подхода «всё в 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) — кто с ними знаком, сразу всё поймёт.